Index: /trunk/src/VBox/Devices/Audio/DevHDA.cpp
===================================================================
--- /trunk/src/VBox/Devices/Audio/DevHDA.cpp	(revision 70250)
+++ /trunk/src/VBox/Devices/Audio/DevHDA.cpp	(revision 70251)
@@ -1072,11 +1072,14 @@
 {
     const uint64_t u64WalClkCur       = ASMAtomicReadU64(&pThis->u64WalClk);
-    const uint64_t u64FrontAbsWalClk  = hdaStreamPeriodGetAbsElapsedWalClk(&hdaGetStreamFromSink(pThis, &pThis->SinkFront)->State.Period);
+    const uint64_t u64FrontAbsWalClk  = pThis->SinkFront.pStream
+                                      ? hdaStreamPeriodGetAbsElapsedWalClk(&pThis->SinkFront.pStream->State.Period) : 0;
 #ifdef VBOX_WITH_AUDIO_HDA_51_SURROUND
 # error "Implement me!"
 #endif
-    const uint64_t u64LineInAbsWalClk = hdaStreamPeriodGetAbsElapsedWalClk(&hdaGetStreamFromSink(pThis, &pThis->SinkLineIn)->State.Period);
+    const uint64_t u64LineInAbsWalClk = pThis->SinkLineIn.pStream
+                                      ? hdaStreamPeriodGetAbsElapsedWalClk(&pThis->SinkLineIn.pStream->State.Period) : 0;
 #ifdef VBOX_WITH_HDA_MIC_IN
-    const uint64_t u64MicInAbsWalClk  = hdaStreamPeriodGetAbsElapsedWalClk(&hdaGetStreamFromSink(pThis, &pThis->SinkMicIn)->State.Period);
+    const uint64_t u64MicInAbsWalClk  = pThis->SinkMicIn.pStream
+                                      ? hdaStreamPeriodGetAbsElapsedWalClk(&pThis->SinkMicIn.pStream->State.Period) : 0;
 #endif
 
@@ -2612,6 +2615,5 @@
             hdaStreamLock(pStream);
 
-            pSink->uSD        = uSD;
-            pSink->uChannel   = uChannel;
+            pSink->pStream    = pStream;
             pStream->pMixSink = pSink;
 
@@ -2887,15 +2889,20 @@
      * Stop any audio currently playing and/or recording.
      */
+    pThis->SinkFront.pStream = NULL;
     if (pThis->SinkFront.pMixSink)
         AudioMixerSinkReset(pThis->SinkFront.pMixSink);
 # ifdef VBOX_WITH_AUDIO_HDA_MIC_IN
+    pThis->SinkMicIn.pStream = NULL;
     if (pThis->SinkMicIn.pMixSink)
         AudioMixerSinkReset(pThis->SinkMicIn.pMixSink);
 # endif
+    pThis->SinkLineIn.pStream = NULL;
     if (pThis->SinkLineIn.pMixSink)
         AudioMixerSinkReset(pThis->SinkLineIn.pMixSink);
 # ifdef VBOX_WITH_AUDIO_HDA_51_SURROUND
+    pThis->SinkCenterLFE = NULL;
     if (pThis->SinkCenterLFE.pMixSink)
         AudioMixerSinkReset(pThis->SinkCenterLFE.pMixSink);
+    pThis->SinkRear.pStream = NULL;
     if (pThis->SinkRear.pMixSink)
         AudioMixerSinkReset(pThis->SinkRear.pMixSink);
@@ -2911,5 +2918,5 @@
     }
 
-       /*
+    /*
      * Set some sensible defaults for which HDA sinks
      * are connected to which stream number.
Index: /trunk/src/VBox/Devices/Audio/DevHDA.h
===================================================================
--- /trunk/src/VBox/Devices/Audio/DevHDA.h	(revision 70250)
+++ /trunk/src/VBox/Devices/Audio/DevHDA.h	(revision 70251)
@@ -56,9 +56,5 @@
 typedef struct HDAMIXERSINK
 {
-    /** SDn ID this sink is assigned to. 0 if not assigned. */
-    uint8_t                uSD;
-    /** Channel ID of SDn ID. Only valid if SDn ID is valid. */
-    uint8_t                uChannel;
-    uint8_t                Padding[3];
+	R3PTRTYPE(PHDASTREAM)  pStream;
     /** Pointer to the actual audio mixer sink. */
     R3PTRTYPE(PAUDMIXSINK) pMixSink;
Index: /trunk/src/VBox/Devices/Audio/DevHDACommon.cpp
===================================================================
--- /trunk/src/VBox/Devices/Audio/DevHDACommon.cpp	(revision 70250)
+++ /trunk/src/VBox/Devices/Audio/DevHDACommon.cpp	(revision 70251)
@@ -280,5 +280,5 @@
 
     /** @todo Do something with the channel mapping here? */
-    return hdaGetStreamFromSD(pThis, pSink->uSD);
+    return pSink->pStream;
 }
 
