Index: /trunk/src/VBox/Main/src-server/USBProxyService.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/USBProxyService.cpp	(revision 60550)
+++ /trunk/src/VBox/Main/src-server/USBProxyService.cpp	(revision 60551)
@@ -155,5 +155,5 @@
          ++it)
     {
-        USBProxyBackend *pUsbProxyBackend = *it;
+        ComObjPtr<USBProxyBackend> pUsbProxyBackend = *it;
         void *pvId = pUsbProxyBackend->insertFilter(aFilter);
 
@@ -172,5 +172,5 @@
          ++it)
     {
-        USBProxyBackend *pUsbProxyBackend = it->first;
+        ComObjPtr<USBProxyBackend> pUsbProxyBackend = it->first;
         pUsbProxyBackend->removeFilter(it->second);
     }
@@ -236,5 +236,9 @@
         {
             mBackends.erase(it);
-            UsbProxyBackend->uninit();
+
+            /*
+             * The proxy backend uninit method will be called when the pointer goes
+             * out of scope.
+             */
 
             alock.release();
Index: /trunk/src/VBox/Main/src-server/generic/USBProxyBackendUsbIp.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/generic/USBProxyBackendUsbIp.cpp	(revision 60550)
+++ /trunk/src/VBox/Main/src-server/generic/USBProxyBackendUsbIp.cpp	(revision 60551)
@@ -380,4 +380,8 @@
         rc = RTPipeClose(m->hWakeupPipeW);
         AssertRC(rc);
+
+        m->hPollSet = NIL_RTPOLLSET;
+        m->hWakeupPipeR = NIL_RTPIPE;
+        m->hWakeupPipeW = NIL_RTPIPE;
     }
 
@@ -385,5 +389,8 @@
         RTStrFree(m->pszHost);
     if (m->hMtxDevices != NIL_RTSEMFASTMUTEX)
+    {
         RTSemFastMutexDestroy(m->hMtxDevices);
+        m->hMtxDevices = NIL_RTSEMFASTMUTEX;
+    }
 
     delete m;
@@ -455,5 +462,6 @@
 
     /* Query a new device list upon entering. */
-    if (m->enmRecvState == kUsbIpRecvState_None)
+    if (   RT_SUCCESS(rc)
+        && m->enmRecvState == kUsbIpRecvState_None)
     {
         rc = startListExportedDevicesReq();
@@ -695,4 +703,6 @@
             m->hSocket = NIL_RTSOCKET;
         }
+        else
+            LogRel(("USB/IP: Connected to host \"%s\"\n", m->pszHost));
     }
 
@@ -907,6 +917,12 @@
         pNew->enmState           = USBDEVICESTATE_USED_BY_HOST_CAPTURABLE;
         pNew->u64SerialHash      = 0;
-        pNew->bBus               = (uint8_t)pDev->u32BusNum;
-        pNew->bPort              = (uint8_t)pDev->u32DevNum;
+        /** @todo: The following is not correct but is required to to get USB testing working
+         * because only the port can be part of a filter (adding the required attributes for the bus
+         * breaks API and ABI compatibility).
+         * Filtering by port number is required for USB testing to connect to the correct device
+         * in case there are multiple ones.
+         */
+        pNew->bBus               = (uint8_t)pDev->u32DevNum;
+        pNew->bPort              = (uint8_t)pDev->u32BusNum;
 
         switch (pDev->u32Speed)
