Index: /trunk/src/VBox/Devices/Audio/DevSB16.cpp
===================================================================
--- /trunk/src/VBox/Devices/Audio/DevSB16.cpp	(revision 61333)
+++ /trunk/src/VBox/Devices/Audio/DevSB16.cpp	(revision 61334)
@@ -2064,4 +2064,6 @@
         if (pDrv->Out.pStream)
         {
+            pDrv->pConnector->pfnStreamRelease(pDrv->pConnector, pDrv->Out.pStream);
+
             int rc3 = pDrv->pConnector->pfnStreamDestroy(pDrv->pConnector, pDrv->Out.pStream);
             AssertRC(rc3);
@@ -2071,4 +2073,7 @@
 
         int rc2 = pDrv->pConnector->pfnStreamCreate(pDrv->pConnector, &CfgHost, pCfg, &pDrv->Out.pStream);
+        if (RT_SUCCESS(rc2))
+            pDrv->pConnector->pfnStreamAddRef(pDrv->pConnector, pDrv->Out.pStream);
+
         LogFlowFunc(("LUN#%RU8: Created output \"%s\", rc=%Rrc\n", pDrv->uLUN, pCfg->szName, rc2));
 
@@ -2090,4 +2095,6 @@
         if (pDrv->Out.pStream)
         {
+            pDrv->pConnector->pfnStreamRelease(pDrv->pConnector, pDrv->Out.pStream);
+
             pDrv->pConnector->pfnStreamDestroy(pDrv->pConnector, pDrv->Out.pStream);
             pDrv->Out.pStream = NULL;
Index: /trunk/src/VBox/Devices/Audio/DrvAudio.cpp
===================================================================
--- /trunk/src/VBox/Devices/Audio/DrvAudio.cpp	(revision 61333)
+++ /trunk/src/VBox/Devices/Audio/DrvAudio.cpp	(revision 61334)
@@ -154,5 +154,4 @@
                                ? pStream
                                : pStream->pPair;
-    AssertPtr(pStreamHst);
     return pStreamHst;
 }
@@ -339,5 +338,4 @@
         return VINF_SUCCESS;
 
-    AssertPtr(pThis->pHostDrvAudio);
     AssertMsg(pHstStream->enmCtx == PDMAUDIOSTREAMCTX_HOST,
               ("Stream '%s' is not a host stream and therefore has no backend\n", pHstStream->szName));
@@ -355,5 +353,6 @@
             if (!(pHstStream->fStatus & PDMAUDIOSTRMSTS_FLAG_ENABLED))
             {
-                rc = pThis->pHostDrvAudio->pfnStreamControl(pThis->pHostDrvAudio, pHstStream, PDMAUDIOSTREAMCMD_ENABLE);
+                if (pThis->pHostDrvAudio)
+                    rc = pThis->pHostDrvAudio->pfnStreamControl(pThis->pHostDrvAudio, pHstStream, PDMAUDIOSTREAMCMD_ENABLE);
                 if (RT_SUCCESS(rc))
                     pHstStream->fStatus |= PDMAUDIOSTRMSTS_FLAG_ENABLED;
@@ -380,5 +379,6 @@
             if (pHstStream->fStatus & PDMAUDIOSTRMSTS_FLAG_ENABLED)
             {
-                rc = pThis->pHostDrvAudio->pfnStreamControl(pThis->pHostDrvAudio, pHstStream, PDMAUDIOSTREAMCMD_DISABLE);
+                if (pThis->pHostDrvAudio)
+                    rc = pThis->pHostDrvAudio->pfnStreamControl(pThis->pHostDrvAudio, pHstStream, PDMAUDIOSTREAMCMD_DISABLE);
                 if (RT_SUCCESS(rc))
                 {
@@ -405,5 +405,6 @@
             if (!(pHstStream->fStatus & PDMAUDIOSTRMSTS_FLAG_PAUSED))
             {
-                rc = pThis->pHostDrvAudio->pfnStreamControl(pThis->pHostDrvAudio, pHstStream, PDMAUDIOSTREAMCMD_PAUSE);
+                if (pThis->pHostDrvAudio)
+                    rc = pThis->pHostDrvAudio->pfnStreamControl(pThis->pHostDrvAudio, pHstStream, PDMAUDIOSTREAMCMD_PAUSE);
                 if (RT_SUCCESS(rc))
                     pHstStream->fStatus |= PDMAUDIOSTRMSTS_FLAG_PAUSED;
@@ -416,5 +417,6 @@
             if (pHstStream->fStatus & PDMAUDIOSTRMSTS_FLAG_PAUSED)
             {
-                rc = pThis->pHostDrvAudio->pfnStreamControl(pThis->pHostDrvAudio, pHstStream, PDMAUDIOSTREAMCMD_RESUME);
+                if (pThis->pHostDrvAudio)
+                    rc = pThis->pHostDrvAudio->pfnStreamControl(pThis->pHostDrvAudio, pHstStream, PDMAUDIOSTREAMCMD_RESUME);
                 if (RT_SUCCESS(rc))
                     pHstStream->fStatus &= ~PDMAUDIOSTRMSTS_FLAG_PAUSED;
@@ -1917,6 +1919,8 @@
     LogFlowFunc(("%s: cRefs=%RU32\n", pStream->szName, pStream->cRefs));
 
+    /* Try to find out which stream is which -- both streams could be destroyed (NULL)
+     * already, so do some additional checking here. */
     PPDMAUDIOSTREAM pHstStream = drvAudioGetHostStream(pStream);
-    PPDMAUDIOSTREAM pGstStream = pHstStream->pPair;
+    PPDMAUDIOSTREAM pGstStream = pHstStream ? pHstStream->pPair : pStream;
 
     if (   (   pHstStream
@@ -1929,10 +1933,16 @@
     }
 
-    int rc = drvAudioStreamControlInternal(pThis, pGstStream, PDMAUDIOSTREAMCMD_DISABLE);
-    if (   RT_SUCCESS(rc)
-        && pThis->pHostDrvAudio)
-    {
+    int rc = VINF_SUCCESS;
+
+    if (pGstStream)
+    {
+        AssertMsg(pGstStream->enmCtx == PDMAUDIOSTREAMCTX_GUEST,
+                  ("Stream '%s' is not a guest stream\n", pGstStream->szName));
+
+        rc = drvAudioStreamControlInternal(pThis, pGstStream, PDMAUDIOSTREAMCMD_DISABLE);
+    }
+
+    if (RT_SUCCESS(rc))
         rc = drvAudioStreamControlInternalBackend(pThis, pHstStream, PDMAUDIOSTREAMCMD_DISABLE);
-    }
 
     if (RT_SUCCESS(rc))
