Index: /trunk/src/VBox/VMM/VMMAll/APICAll.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/APICAll.cpp	(revision 60739)
+++ /trunk/src/VBox/VMM/VMMAll/APICAll.cpp	(revision 60740)
@@ -2315,5 +2315,4 @@
         && pXApicPage->svr.u.fApicSoftwareEnable)
     {
-        APICUpdatePendingInterrupts(pVCpu);
         int const irrv = apicGetLastSetBit(&pXApicPage->irr, -1);
         if (RT_LIKELY(irrv >= 0))
Index: /trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp	(revision 60739)
+++ /trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp	(revision 60740)
@@ -30,4 +30,7 @@
 #include <VBox/vmm/tm.h>
 #include <VBox/vmm/gim.h>
+#ifdef VBOX_WITH_NEW_APIC
+# include <VBox/vmm/apic.h>
+#endif
 #include "HMInternal.h"
 #include <VBox/vmm/vm.h>
@@ -2660,4 +2663,9 @@
     else if (VMCPU_FF_IS_PENDING(pVCpu, (VMCPU_FF_INTERRUPT_APIC | VMCPU_FF_INTERRUPT_PIC)))
     {
+
+#ifdef VBOX_WITH_NEW_APIC
+        if (VMCPU_FF_IS_PENDING(pVCpu, VMCPU_FF_INTERRUPT_APIC))
+            APICUpdatePendingInterrupts(pVCpu);
+#endif
         /*
          * Check if the guest can receive external interrupts (PIC/APIC). Once we do PDMGetInterrupt() we -must- deliver
Index: /trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp	(revision 60739)
+++ /trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp	(revision 60740)
@@ -34,4 +34,7 @@
 #ifdef VBOX_WITH_REM
 # include <VBox/vmm/rem.h>
+#endif
+#ifdef VBOX_WITH_NEW_APIC
+# include <VBox/vmm/apic.h>
 #endif
 #include "HMInternal.h"
@@ -7437,4 +7440,8 @@
              && !pVCpu->hm.s.fSingleInstruction)
     {
+#ifdef VBOX_WITH_NEW_APIC
+        if (VMCPU_FF_IS_PENDING(pVCpu, VMCPU_FF_INTERRUPT_APIC))
+            APICUpdatePendingInterrupts(pVCpu);
+#endif
         Assert(!DBGFIsStepping(pVCpu));
         int rc = hmR0VmxSaveGuestRflags(pVCpu, pMixedCtx);
Index: /trunk/src/VBox/VMM/VMMR3/EM.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR3/EM.cpp	(revision 60739)
+++ /trunk/src/VBox/VMM/VMMR3/EM.cpp	(revision 60740)
@@ -49,4 +49,7 @@
 #ifdef VBOX_WITH_REM
 # include <VBox/vmm/rem.h>
+#endif
+#ifdef VBOX_WITH_NEW_APIC
+# include <VBox/vmm/apic.h>
 #endif
 #include <VBox/vmm/tm.h>
@@ -1934,4 +1937,8 @@
             if (VMCPU_FF_IS_PENDING(pVCpu, VMCPU_FF_INTERRUPT_APIC | VMCPU_FF_INTERRUPT_PIC))
             {
+#ifdef VBOX_WITH_NEW_APIC
+                if (VMCPU_FF_IS_PENDING(pVCpu, VMCPU_FF_INTERRUPT_APIC))
+                    APICUpdatePendingInterrupts(pVCpu);
+#endif
                 /* Note: it's important to make sure the return code from TRPMR3InjectEvent isn't ignored! */
                 /** @todo this really isn't nice, should properly handle this */
Index: /trunk/src/VBox/VMM/VMMRC/TRPMRCHandlers.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMRC/TRPMRCHandlers.cpp	(revision 60739)
+++ /trunk/src/VBox/VMM/VMMRC/TRPMRCHandlers.cpp	(revision 60740)
@@ -28,4 +28,7 @@
 #include <VBox/vmm/em.h>
 #include <VBox/vmm/gim.h>
+#ifdef VBOX_WITH_NEW_APIC
+# include <VBox/vmm/apic.h>
+#endif
 #include <VBox/vmm/csam.h>
 #include <VBox/vmm/patm.h>
@@ -255,4 +258,9 @@
            )
         {
+#ifdef VBOX_WITH_NEW_APIC
+            /* The EFLAGS are checked in TRPMForwardTrap() below. */
+            if (VMCPU_FF_IS_PENDING(pVCpu, VMCPU_FF_INTERRUPT_APIC))
+                APICUpdatePendingInterrupts(pVCpu);
+#endif
             uint8_t u8Interrupt;
             rc = PDMGetInterrupt(pVCpu, &u8Interrupt);
Index: /trunk/src/recompiler/Makefile.kmk
===================================================================
--- /trunk/src/recompiler/Makefile.kmk	(revision 60739)
+++ /trunk/src/recompiler/Makefile.kmk	(revision 60740)
@@ -70,4 +70,7 @@
 ifdef IEM_VERIFICATION_MODE
  VBoxRemPrimary_DEFS          += IEM_VERIFICATION_MODE
+endif
+ifdef VBOX_WITH_NEW_APIC
+ VBoxRemPrimary_DEFS          += VBOX_WITH_NEW_APIC
 endif
 ifdef VBOX_WITH_RAW_MODE
Index: /trunk/src/recompiler/VBoxRecompiler.c
===================================================================
--- /trunk/src/recompiler/VBoxRecompiler.c	(revision 60739)
+++ /trunk/src/recompiler/VBoxRecompiler.c	(revision 60740)
@@ -50,4 +50,7 @@
 #include <VBox/vmm/dbgf.h>
 #include <VBox/dbg.h>
+#ifdef VBOX_WITH_NEW_APIC
+# include <VBox/vmm/apic.h>
+#endif
 #include <VBox/vmm/hm.h>
 #include <VBox/vmm/patm.h>
@@ -2517,5 +2520,11 @@
     if (    pVM->rem.s.u32PendingInterrupt != REM_NO_PENDING_IRQ
         ||  VMCPU_FF_IS_PENDING(pVCpu, VMCPU_FF_INTERRUPT_APIC | VMCPU_FF_INTERRUPT_PIC))
+    {
+#ifdef VBOX_WITH_NEW_APIC
+        if (VMCPU_FF_IS_PENDING(pVCpu, VMCPU_FF_INTERRUPT_APIC))
+            APICUpdatePendingInterrupts(pVCpu);
+#endif
         pVM->rem.s.Env.interrupt_request |= CPU_INTERRUPT_HARD;
+    }
 
     /*
