Index: /trunk/src/VBox/Devices/Audio/AudioMixer.cpp
===================================================================
--- /trunk/src/VBox/Devices/Audio/AudioMixer.cpp	(revision 73565)
+++ /trunk/src/VBox/Devices/Audio/AudioMixer.cpp	(revision 73566)
@@ -1390,15 +1390,37 @@
     AssertMsg(pSink->enmDir == AUDMIXSINKDIR_INPUT, ("Specified sink is not an input sink\n"));
 
-    if (pStream) /* Can be NULL if un-setting. */
-    {
-        AssertPtr(pStream->pStream);
-        AssertMsg(pStream->pStream->enmDir == PDMAUDIODIR_IN, ("Specified stream is not an input stream\n"));
-    }
-
-    pSink->In.pStreamRecSource = pStream;
-
-    LogFunc(("[%s] Recording source is now '%s'\n",
-             pSink->pszName, pSink->In.pStreamRecSource ? pSink->In.pStreamRecSource->pszName : "<None>"));
-    return VINF_SUCCESS;
+    int rc;
+
+    if (pSink->In.pStreamRecSource) /* Disable old recording source, if any set. */
+    {
+        const PPDMIAUDIOCONNECTOR pConn = pSink->In.pStreamRecSource->pConn;
+        AssertPtr(pConn);
+        rc = pConn->pfnEnable(pConn, PDMAUDIODIR_IN, false /* Disable */);
+    }
+    else
+        rc = VINF_SUCCESS;
+
+    if (RT_SUCCESS(rc))
+    {
+        if (pStream) /* Can be NULL if un-setting. */
+        {
+            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 */);
+        }
+    }
+
+    LogFunc(("[%s] Recording source is now '%s', rc=%Rrc\n",
+             pSink->pszName, pSink->In.pStreamRecSource ? pSink->In.pStreamRecSource->pszName : "<None>", rc));
+
+    return rc;
 }
 
