Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManage.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManage.cpp	(revision 7981)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManage.cpp	(revision 7982)
@@ -326,4 +326,5 @@
                  "                            [-acpi on|off]\n"
                  "                            [-ioapic on|off]\n"
+                 "                            [-pae on|off]\n"
                  "                            [-hwvirtex on|off|default]\n"
                  "                            [-monitorcount <number>]\n"
@@ -919,4 +920,11 @@
     else
         RTPrintf("IOAPIC:          %s\n", ioapicEnabled ? "on" : "off");
+
+    BOOL PAEEnabled;
+    machine->COMGETTER(PAEEnabled)(&PAEEnabled);
+    if (details == VMINFO_MACHINEREADABLE)
+        RTPrintf("pae=\"%s\"\n", PAEEnabled ? "on" : "off");
+    else
+        RTPrintf("PAE: %s\n", PAEEnabled ? "on" : "off");
 
     LONG64 timeOffset;
@@ -3714,4 +3722,5 @@
     char *acpi = NULL;
     char *hwvirtex = NULL;
+    char *pae = NULL;
     char *ioapic = NULL;
     int monitorcount = -1;
@@ -3850,4 +3859,13 @@
             hwvirtex = argv[i];
         }
+        else if (strcmp(argv[i], "-pae") == 0)
+        {
+            if (argc <= i + 1)
+            {
+                return errorArgument("Missing argument to '%s'", argv[i]);
+            }
+            i++;
+            pae = argv[i];
+        }
         else if (strcmp(argv[i], "-monitorcount") == 0)
         {
@@ -4533,4 +4551,21 @@
             {
                 errorArgument("Invalid -hwvirtex argument '%s'", hwvirtex);
+                rc = E_FAIL;
+                break;
+            }
+        }
+        if (pae)
+        {
+            if (strcmp(pae, "on") == 0)
+            {
+                CHECK_ERROR(machine, COMSETTER(PAEEnabled)(true));
+            }
+            else if (strcmp(pae, "off") == 0)
+            {
+                CHECK_ERROR(machine, COMSETTER(PAEEnabled)(false));
+            }
+            else
+            {
+                errorArgument("Invalid -pae argument '%s'", ioapic);
                 rc = E_FAIL;
                 break;
Index: /trunk/src/VBox/Main/ConsoleImpl2.cpp
===================================================================
--- /trunk/src/VBox/Main/ConsoleImpl2.cpp	(revision 7981)
+++ /trunk/src/VBox/Main/ConsoleImpl2.cpp	(revision 7982)
@@ -167,4 +167,9 @@
     }
 #endif
+
+    /* Physical Address Extension (PAE) */
+    BOOL fEnablePAE = false;
+    hrc = pMachine->COMGETTER(PAEEnabled)(&fEnablePAE);                             H();
+    rc = CFGMR3InsertInteger(pRoot, "EnablePAE", fEnablePAE);                       RC_CHECK();
 
     BOOL fIOAPIC;
Index: /trunk/src/VBox/Main/MachineDebuggerImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/MachineDebuggerImpl.cpp	(revision 7981)
+++ /trunk/src/VBox/Main/MachineDebuggerImpl.cpp	(revision 7982)
@@ -510,4 +510,29 @@
 
 /**
+ * Returns the current PAE flag.
+ *
+ * @returns COM status code
+ * @param   enabled address of result variable
+ */
+STDMETHODIMP MachineDebugger::COMGETTER(PAEEnabled)(BOOL *enabled)
+{
+    if (!enabled)
+        return E_POINTER;
+
+    AutoLock lock(this);
+    CHECK_READY();
+
+    Console::SafeVMPtrQuiet pVM (mParent);
+    if (pVM.isOk())
+    {
+        uint64_t cr4 = CPUMGetGuestCR4(pVM.raw());
+        *enabled = !!(cr4 & X86_CR4_PAE);
+    }
+    else
+        *enabled = false;
+    return S_OK;
+}
+
+/**
  * Returns the current virtual time rate.
  *
Index: /trunk/src/VBox/Main/MachineImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/MachineImpl.cpp	(revision 7981)
+++ /trunk/src/VBox/Main/MachineImpl.cpp	(revision 7982)
@@ -173,4 +173,5 @@
     mMonitorCount = 1;
     mHWVirtExEnabled = TSBool_False;
+    mPAEEnabled = false;
 
     /* default boot order: floppy - DVD - HDD */
@@ -199,4 +200,5 @@
         mMonitorCount != that.mMonitorCount ||
         mHWVirtExEnabled != that.mHWVirtExEnabled ||
+        mPAEEnabled != that.mPAEEnabled ||
         mClipboardMode != that.mClipboardMode)
         return false;
@@ -1112,4 +1114,37 @@
     mHWData.backup();
     mHWData->mHWVirtExEnabled = enable;
+
+    return S_OK;
+}
+
+STDMETHODIMP Machine::COMGETTER(PAEEnabled)(BOOL *enabled)
+{
+    if (!enabled)
+        return E_POINTER;
+
+    AutoCaller autoCaller (this);
+    CheckComRCReturnRC (autoCaller.rc());
+
+    AutoReaderLock alock (this);
+
+    *enabled = mHWData->mPAEEnabled;
+
+    return S_OK;
+}
+
+STDMETHODIMP Machine::COMSETTER(PAEEnabled)(BOOL enable)
+{
+    AutoCaller autoCaller (this);
+    CheckComRCReturnRC (autoCaller.rc());
+
+    AutoLock alock (this);
+
+    HRESULT rc = checkStateDependency (MutableStateDep);
+    CheckComRCReturnRC (rc);
+
+    /** @todo check validity! */
+
+    mHWData.backup();
+    mHWData->mPAEEnabled = enable;
 
     return S_OK;
@@ -4245,4 +4280,5 @@
         /* default value in case the node is not there */
         mHWData->mHWVirtExEnabled = TSBool_Default;
+        mHWData->mPAEEnabled      = false;
 
         Key cpuNode = aNode.findKey ("CPU");
@@ -4260,4 +4296,6 @@
                     mHWData->mHWVirtExEnabled = TSBool_Default;
             }
+            /* PAE (optional, default is false) */
+            mHWData->mPAEEnabled = cpuNode.value <BOOL> ("PAE");
         }
     }
@@ -5615,6 +5653,10 @@
             case TSBool_Default:
                 value = "default";
-        }
-        hwVirtExNode.setStringValue ("enabled", value);
+                break;
+        }
+        cpuNode.setStringValue ("enabled", value);
+
+        /* PAE (optional, default is false) */
+        cpuNode.setValue <BOOL> ("PAE", mHWData->mPAEEnabled);
     }
 
Index: /trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 7981)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 7982)
@@ -2484,5 +2484,5 @@
   <interface
      name="IMachine" extends="$unknown"
-     uuid="4f6b4977-95fd-40b1-8391-fc165c040635"
+     uuid="f95c0793-7737-49a1-85d9-6da81097173b"
      wsmap="managed"
      >
@@ -2707,4 +2707,12 @@
     </attribute>
 
+    <attribute name="PAEEnabled" type="boolean" default="false">
+      <desc>
+        This setting determines whether VirtualBox will expose the Physical Address
+        Extension (PAE) feature of the host CPU to the guest. Note that in case PAE 
+        is not available, it will not be reported.
+      </desc>
+    </attribute>
+
     <attribute name="snapshotFolder" type="wstring">
       <desc>
@@ -8558,4 +8566,11 @@
       </desc>
     </attribute>
+    
+    <attribute name="PAEEnabled" type="boolean" readonly="yes">
+      <desc>
+        Flag indicating whether the VM is currently making use of the Physical
+        Address Extension CPU feature.
+      </desc>
+    </attribute>
 
     <attribute name="virtualTimeRate" type="unsigned long">
Index: /trunk/src/VBox/Main/include/MachineDebuggerImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/MachineDebuggerImpl.h	(revision 7981)
+++ /trunk/src/VBox/Main/include/MachineDebuggerImpl.h	(revision 7982)
@@ -63,4 +63,5 @@
     STDMETHOD(COMSETTER(LogEnabled))(BOOL enable);
     STDMETHOD(COMGETTER(HWVirtExEnabled))(BOOL *enabled);
+    STDMETHOD(COMGETTER(PAEEnabled))(BOOL *enabled);
     STDMETHOD(COMGETTER(VirtualTimeRate))(ULONG *pct);
     STDMETHOD(COMSETTER(VirtualTimeRate))(ULONG pct);
Index: /trunk/src/VBox/Main/include/MachineImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/MachineImpl.h	(revision 7981)
+++ /trunk/src/VBox/Main/include/MachineImpl.h	(revision 7982)
@@ -231,4 +231,5 @@
         ULONG          mMonitorCount;
         TSBool_T       mHWVirtExEnabled;
+        BOOL           mPAEEnabled;
 
         DeviceType_T   mBootOrder [SchemaDefs::MaxBootPosition];
@@ -459,4 +460,6 @@
     STDMETHOD(COMGETTER(HWVirtExEnabled))(TSBool_T *enabled);
     STDMETHOD(COMSETTER(HWVirtExEnabled))(TSBool_T enabled);
+    STDMETHOD(COMGETTER(PAEEnabled))(BOOL *enabled);
+    STDMETHOD(COMSETTER(PAEEnabled))(BOOL enabled);
     STDMETHOD(COMGETTER(SnapshotFolder))(BSTR *aSavedStateFolder);
     STDMETHOD(COMSETTER(SnapshotFolder))(INPTR BSTR aSavedStateFolder);
Index: /trunk/src/VBox/VMM/CPUM.cpp
===================================================================
--- /trunk/src/VBox/VMM/CPUM.cpp	(revision 7981)
+++ /trunk/src/VBox/VMM/CPUM.cpp	(revision 7982)
@@ -407,12 +407,8 @@
 
     /* Check if PAE was explicitely enabled by the user. */
-    PCFGMNODE pNode = CFGMR3GetChildF(CFGMR3GetRoot(pVM), "CPUM/CPUID");
-    if (pNode)
-    {
-        bool fEnable;
-        int rc = CFGMR3QueryBool(pNode, "EnablePAE", &fEnable);
-        if (VBOX_SUCCESS(rc) && fEnable)
-            CPUMSetGuestCpuIdFeature(pVM, CPUMCPUIDFEATURE_PAE);
-    }
+    bool fEnable = false;
+    int rc = CFGMR3QueryBool(CFGMR3GetRoot(pVM), "EnablePAE", &fEnable);
+    if (VBOX_SUCCESS(rc) && fEnable)
+        CPUMSetGuestCpuIdFeature(pVM, CPUMCPUIDFEATURE_PAE);
 
     /*
