Index: /trunk/src/VBox/HostDrivers/VBoxUSB/win/cmn/VBoxDrvTool.cpp
===================================================================
--- /trunk/src/VBox/HostDrivers/VBoxUSB/win/cmn/VBoxDrvTool.cpp	(revision 55080)
+++ /trunk/src/VBox/HostDrivers/VBoxUSB/win/cmn/VBoxDrvTool.cpp	(revision 55081)
@@ -188,11 +188,19 @@
     Interval.QuadPart = -(int64_t) 2 /* ms */ * 10000;
     uint32_t cRefs;
-
-    while ((cRefs = ASMAtomicReadU32(&pRef->cRefs)) != u32Val)
+    size_t loops = 0; 
+    KTIMER kTimer;
+    NTSTATUS status = STATUS_SUCCESS;
+
+    KeInitializeTimer(&kTimer);
+    
+    while ((cRefs = ASMAtomicReadU32(&pRef->cRefs)) > u32Val && loops < 256)
     {
         Assert(cRefs >= u32Val);
         Assert(cRefs < UINT32_MAX/2);
 
-        KeDelayExecutionThread(KernelMode, FALSE, &Interval);
+        KeSetTimer(&kTimer, Interval, NULL);
+        status = KeWaitForSingleObject(&kTimer, Executive, KernelMode, false, NULL);
+        Assert(NT_SUCCESS(status));
+        loops++;
     }
 }
Index: /trunk/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbDev.h
===================================================================
--- /trunk/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbDev.h	(revision 55080)
+++ /trunk/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbDev.h	(revision 55081)
@@ -190,15 +190,3 @@
 }
 
-static DECLHIDDEN(VOID) vboxUsbDdiStateWaitOtherCompleted(PVBOXUSBDEV_EXT pDevExt)
-{
-    /* Earlier we assumed that 1 request will be pending while we service
-       Device Power IRP which was leading to host hang when USB is connected
-       to VM.
-       With debugging found that at the point when host goes to sleep
-       state and USB is connected to VM,  two Power IRP requests are pending :
-       One for SYSTEM and other for DEVICE.
-    */
-    VBoxDrvToolRefWaitEqual(&pDevExt->DdiState.Ref, 3);
-}
-
 #endif /* #ifndef ___VBoxUsbDev_h___ */
Index: /trunk/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbPnP.cpp
===================================================================
--- /trunk/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbPnP.cpp	(revision 55080)
+++ /trunk/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbPnP.cpp	(revision 55081)
@@ -70,19 +70,13 @@
     ENMVBOXUSB_PNPSTATE enmState = vboxUsbPnPStateGet(pDevExt);
     NTSTATUS Status = STATUS_SUCCESS;
-    if (enmState == ENMVBOXUSB_PNPSTATE_STOP_PENDING)
-    {
-        IoCopyCurrentIrpStackLocationToNext(pIrp);
-        Status = VBoxDrvToolIoPostSync(pDevExt->pLowerDO, pIrp);
-        if (NT_SUCCESS(Status))
-        {
-            vboxUsbPnPStateRestore(pDevExt);
-        }
-    }
-    else
-    {
-        Assert(0);
-        Assert(enmState == ENMVBOXUSB_PNPSTATE_STARTED);
-    }
-
+   
+    IoCopyCurrentIrpStackLocationToNext(pIrp);
+    Status = VBoxDrvToolIoPostSync(pDevExt->pLowerDO, pIrp);
+    if (NT_SUCCESS(Status) && enmState == ENMVBOXUSB_PNPSTATE_STOP_PENDING)
+    {
+        vboxUsbPnPStateRestore(pDevExt);
+    }
+   
+    Status = STATUS_SUCCESS;
     VBoxDrvToolIoComplete(pIrp, Status, 0);
     vboxUsbDdiStateRelease(pDevExt);
@@ -144,19 +138,15 @@
     ENMVBOXUSB_PNPSTATE enmState = vboxUsbPnPStateGet(pDevExt);
     NTSTATUS Status = STATUS_SUCCESS;
-    if (enmState == ENMVBOXUSB_PNPSTATE_REMOVE_PENDING)
-    {
-        IoCopyCurrentIrpStackLocationToNext(pIrp);
-        Status = VBoxDrvToolIoPostSync(pDevExt->pLowerDO, pIrp);
-        if (NT_SUCCESS(Status))
-        {
-            vboxUsbPnPStateRestore(pDevExt);
-        }
-    }
-    else
-    {
-        Assert(0);
-        Assert(enmState == ENMVBOXUSB_PNPSTATE_STARTED);
-    }
-
+    IoCopyCurrentIrpStackLocationToNext(pIrp);
+    
+    Status = VBoxDrvToolIoPostSync(pDevExt->pLowerDO, pIrp);
+
+    if (NT_SUCCESS(Status) &&
+        enmState == ENMVBOXUSB_PNPSTATE_REMOVE_PENDING)
+    {
+        vboxUsbPnPStateRestore(pDevExt);
+    }
+    
+    Status = STATUS_SUCCESS;
     VBoxDrvToolIoComplete(pIrp, Status, 0);
     vboxUsbDdiStateRelease(pDevExt);
Index: /trunk/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbPwr.cpp
===================================================================
--- /trunk/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbPwr.cpp	(revision 55080)
+++ /trunk/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbPwr.cpp	(revision 55081)
@@ -210,6 +210,4 @@
     PIRP pIrp = pCtx->pIrp;
 
-    vboxUsbDdiStateWaitOtherCompleted(pDevExt);
-
     vboxUsbPwrIoPostDev(pDevExt, pIrp);
 
