Index: /trunk/src/VBox/Additions/WINNT/Graphics/Display/dd.c
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Display/dd.c	(revision 24043)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Display/dd.c	(revision 24044)
@@ -1187,10 +1187,7 @@
 
         if(lpSurfaceLocal->ddsCaps.dwCaps & DDSCAPS_VISIBLE
-                || (
-                        lpSurfaceLocal->ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE
-                        || (
-                                !!(lpSurfaceLocal->ddsCaps.dwCaps & DDSCAPS_OVERLAY)
-                                && pDesc->bVisible
-                           )
+                || lpSurfaceLocal->ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE
+                || (    !!(lpSurfaceLocal->ddsCaps.dwCaps & DDSCAPS_OVERLAY)
+                     && pDesc->bVisible
                    )
           )
@@ -1584,4 +1581,7 @@
         pBody->TargGuestSurfInfo = (uint64_t)pTargDesc;
         pBody->CurrGuestSurfInfo = (uint64_t)pCurrDesc;
+
+        pTargDesc->bVisible = pCurrDesc->bVisible;
+        pCurrDesc->bVisible = false;
 
 //        pBody->u.in.flags = vboxVHWAFromDDFLIPs(lpFlip->dwFlags);
Index: /trunk/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.cpp
===================================================================
--- /trunk/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.cpp	(revision 24043)
+++ /trunk/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.cpp	(revision 24044)
@@ -1056,4 +1056,5 @@
             if (pIns->hostHeap.cRefs)
             {
+                Assert(0);
                 /* It is possible to change the heap only if there is no pending allocations. */
                 rc = VERR_ACCESS_DENIED;
Index: /trunk/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.cpp	(revision 24043)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.cpp	(revision 24044)
@@ -3124,4 +3124,27 @@
 {
     VBoxVHWASurfaceBase *pSurf = handle2Surface(pCmd->u.in.hSurf);
+#ifdef DEBUG_misha
+    /* for performance reasons we should receive unlock for visible surfaces only
+     * other surfaces receive unlock only once becoming visible, e.g. on DdFlip
+     * Ensure this is so*/
+    if(pSurf != mDisplay.getPrimary())
+    {
+        const OverlayList & overlays = mDisplay.overlays();
+        bool bFound = false;
+
+        for (OverlayList::const_iterator it = overlays.begin();
+             it != overlays.end(); ++ it)
+        {
+            VBoxVHWASurfList * pSurfList = *it;
+            if(pSurfList->current() == pSurf)
+            {
+                bFound = true;
+                break;
+            }
+        }
+
+        Assert(bFound);
+    }
+#endif
     VBOXQGLLOG_ENTER(("pSurf (0x%x)\n",pSurf));
     if(pCmd->u.in.xUpdatedMemValid)
Index: /trunk/src/VBox/HostDrivers/VBoxNetFlt/win/VBoxNetFltPt-win.c
===================================================================
--- /trunk/src/VBox/HostDrivers/VBoxNetFlt/win/VBoxNetFltPt-win.c	(revision 24043)
+++ /trunk/src/VBox/HostDrivers/VBoxNetFlt/win/VBoxNetFltPt-win.c	(revision 24044)
@@ -1620,4 +1620,7 @@
             if (pPacket != NULL)
             {
+#ifndef VBOX_LOOPBACK_USEFLAGS
+                PNDIS_PACKET pLb = NULL;
+#endif
                 do
                 {
@@ -1633,6 +1636,4 @@
 
                     VBOXNETFLT_LBVERIFY(pNetFlt, pPacket);
-#else
-                    PNDIS_PACKET pLb = NULL;
 #endif
                     if(bNetFltActive)
@@ -1669,5 +1670,5 @@
 
 #ifndef VBOX_LOOPBACK_USEFLAGS
-                    Assert(pLb && !vboxNetFltWinLbIsFromIntNet(pLb));
+                    Assert(!pLb || !vboxNetFltWinLbIsFromIntNet(pLb));
 #endif
                     Status = vboxNetFltWinRecvPassThru(pAdapt, pPacket);
