Index: /trunk/include/VBox/vmm/pdmaudioifs.h
===================================================================
--- /trunk/include/VBox/vmm/pdmaudioifs.h	(revision 82578)
+++ /trunk/include/VBox/vmm/pdmaudioifs.h	(revision 82579)
@@ -1668,4 +1668,5 @@
      *
      * @returns VBox status code.
+     * @retval  VERR_AUDIO_STREAM_NOT_READY if stream is not ready for required operation (yet).
      * @param   pInterface          Pointer to the interface structure containing the called function pointer.
      * @param   pStream             Pointer to audio stream.
Index: /trunk/src/VBox/Devices/Audio/AudioMixer.cpp
===================================================================
--- /trunk/src/VBox/Devices/Audio/AudioMixer.cpp	(revision 82578)
+++ /trunk/src/VBox/Devices/Audio/AudioMixer.cpp	(revision 82579)
@@ -523,4 +523,6 @@
     {
         rc = audioMixerStreamCtlInternal(pStream, PDMAUDIOSTREAMCMD_ENABLE, AUDMIXSTRMCTL_F_NONE);
+        if (rc == VERR_AUDIO_STREAM_NOT_READY)
+            rc = VINF_SUCCESS; /* Not fatal here, stream can become available at some later point in time. */
     }
 
@@ -576,5 +578,14 @@
         return VERR_NO_MEMORY;
 
-    pMixStream->pszName = RTStrDup(pCfg->szName);
+    PDMAUDIOBACKENDCFG BackendCfg;
+    int rc = pConn->pfnGetConfig(pConn, &BackendCfg);
+    if (RT_FAILURE(rc))
+    {
+        RTMemFree(pMixStream);
+        return rc;
+    }
+
+    /* Assign the backend's name to the mixer stream's name for easier identification in the (release) log. */
+    pMixStream->pszName = RTStrAPrintf2("[%s] %s", pCfg->szName, BackendCfg.szName);
     if (!pMixStream->pszName)
     {
@@ -583,5 +594,5 @@
     }
 
-    int rc = RTCritSectEnter(&pSink->CritSect);
+    rc = RTCritSectEnter(&pSink->CritSect);
     if (RT_FAILURE(rc))
         return rc;
@@ -1480,5 +1491,5 @@
     int rc;
 
-    if (pSink->In.pStreamRecSource) /* Disable old recording source, if any set. */
+    if (pSink->In.pStreamRecSource) /* First, disable old recording source, if any set. */
     {
         const PPDMIAUDIOCONNECTOR pConn = pSink->In.pStreamRecSource->pConn;
@@ -1495,13 +1506,16 @@
             AssertPtr(pStream->pStream);
             AssertMsg(pStream->pStream->enmDir == PDMAUDIODIR_IN, ("Specified stream is not an input stream\n"));
-        }
-
-        pSink->In.pStreamRecSource = pStream;
-
-        if (pSink->In.pStreamRecSource)
-        {
-            const PPDMIAUDIOCONNECTOR pConn = pSink->In.pStreamRecSource->pConn;
-            AssertPtr(pConn);
-            rc = pConn->pfnEnable(pConn, PDMAUDIODIR_IN, true /* Enable */);
+            AssertPtr(pStream->pConn);
+            rc = pStream->pConn->pfnEnable(pStream->pConn, PDMAUDIODIR_IN, true /* Enable */);
+            if (RT_SUCCESS(rc))
+            {
+                pSink->In.pStreamRecSource = pStream;
+            }
+            else if (pSink->In.pStreamRecSource->pConn) /* Stay with the current recording source (if any) and re-enable it. */
+            {
+                const PPDMIAUDIOCONNECTOR pConn = pSink->In.pStreamRecSource->pConn;
+                AssertPtr(pConn);
+                rc = pConn->pfnEnable(pConn, PDMAUDIODIR_IN, true /* Enable */);
+            }
         }
     }
@@ -1515,7 +1529,9 @@
                 pSink->pszName, pSink->In.pStreamRecSource ? pSink->In.pStreamRecSource->pszName : "<None>"));
     }
-    else
+    else if (rc != VERR_AUDIO_STREAM_NOT_READY)
+    {
         LogRel(("Mixer: Setting recording source of sink '%s' to '%s' failed with %Rrc\n",
                 pSink->pszName, pSink->In.pStreamRecSource ? pSink->In.pStreamRecSource->pszName : "<None>", rc));
+    }
 
     return rc;
Index: /trunk/src/VBox/Devices/Audio/DrvAudio.cpp
===================================================================
--- /trunk/src/VBox/Devices/Audio/DrvAudio.cpp	(revision 82578)
+++ /trunk/src/VBox/Devices/Audio/DrvAudio.cpp	(revision 82579)
@@ -514,6 +514,9 @@
     {
         if (   rc != VERR_NOT_IMPLEMENTED
-            && rc != VERR_NOT_SUPPORTED)
+            && rc != VERR_NOT_SUPPORTED
+            && rc != VERR_AUDIO_STREAM_NOT_READY)
+        {
             LogRel(("Audio: %s stream '%s' failed with %Rrc\n", DrvAudioHlpStreamCmdToStr(enmStreamCmd), pStream->szName, rc));
+        }
 
         LogFunc(("[%s] %s failed with %Rrc\n", pStream->szName, DrvAudioHlpStreamCmdToStr(enmStreamCmd), rc));
@@ -2664,6 +2667,13 @@
                                                     fEnable ? PDMAUDIOSTREAMCMD_ENABLE : PDMAUDIOSTREAMCMD_DISABLE);
             if (RT_FAILURE(rc2))
-                LogRel(("Audio: Failed to %s %s stream '%s', rc=%Rrc\n",
-                        fEnable ? "enable" : "disable", enmDir == PDMAUDIODIR_IN ? "input" : "output", pStream->szName, rc2));
+            {
+                if (rc2 == VERR_AUDIO_STREAM_NOT_READY)
+                {
+                    LogRel(("Audio: Stream '%s' not available\n", pStream->szName));
+                }
+                else
+                    LogRel(("Audio: Failed to %s %s stream '%s', rc=%Rrc\n",
+                            fEnable ? "enable" : "disable", enmDir == PDMAUDIODIR_IN ? "input" : "output", pStream->szName, rc2));
+            }
 
             if (RT_SUCCESS(rc))
@@ -3207,6 +3217,7 @@
     LogFlowFunc(("[%s] cRefs=%RU32\n", pStream->szName, pStream->cRefs));
 
-    if (pStream->cRefs > 1)
-        return VERR_WRONG_ORDER;
+    AssertMsgReturn(pStream->cRefs <= 1,
+                    ("Stream '%s' still has %RU32 references held when uninitializing\n", pStream->szName, pStream->cRefs),
+                    VERR_WRONG_ORDER);
 
     int rc = drvAudioStreamControlInternal(pThis, pStream, PDMAUDIOSTREAMCMD_DISABLE);
Index: /trunk/src/VBox/Main/src-client/DrvAudioVRDE.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/DrvAudioVRDE.cpp	(revision 82578)
+++ /trunk/src/VBox/Main/src-client/DrvAudioVRDE.cpp	(revision 82579)
@@ -161,5 +161,8 @@
 
     if (!pDrv->pConsoleVRDPServer)
-        return VINF_SUCCESS;
+    {
+        LogRel(("Audio: VRDP console not ready yet\n"));
+        return VERR_AUDIO_STREAM_NOT_READY;
+    }
 
     int rc;
@@ -176,6 +179,6 @@
             if (rc == VERR_NOT_SUPPORTED)
             {
-                LogRel2(("Audio: No VRDE client connected, so no input recording available\n"));
-                rc = VINF_SUCCESS;
+                LogRel(("Audio: No VRDE client connected, so no input recording available\n"));
+                rc = VERR_AUDIO_STREAM_NOT_READY;
             }
 
