diff --git a/system/dev/audio/intel-hda/dsp/intel-audio-dsp.cpp b/system/dev/audio/intel-hda/dsp/intel-audio-dsp.cpp
index 3add636..1f9d8a1 100644
--- a/system/dev/audio/intel-hda/dsp/intel-audio-dsp.cpp
+++ b/system/dev/audio/intel-hda/dsp/intel-audio-dsp.cpp
@@ -352,36 +352,6 @@
     return 0;
 }
 
-zx_status_t IntelAudioDsp::CreateAndStartStreams() {
-    zx_status_t res = ZX_OK;
-
-    // Create and publish the streams we will use.
-    static struct {
-        uint32_t stream_id;
-        bool is_input;
-    } STREAMS[] = {
-        // Speakers
-        {
-            .stream_id = 1,
-            .is_input = false,
-        },
-    };
-
-    for (size_t i = 0; i < countof(STREAMS); ++i) {
-        const auto& stream_def = STREAMS[i];
-        auto stream = fbl::AdoptRef(new IntelDspStream(stream_def.stream_id, stream_def.is_input));
-
-        res = ActivateStream(stream);
-        if (res != ZX_OK) {
-            LOG(ERROR, "Failed to activate %s stream id #%u (res %d)!",
-                       stream_def.is_input ? "input" : "output", stream_def.stream_id, res);
-            return res;
-        }
-    }
-
-    return ZX_OK;
-}
-
 zx_status_t IntelAudioDsp::Boot() {
     zx_status_t st = ZX_OK;
 
diff --git a/system/dev/audio/intel-hda/dsp/intel-audio-dsp.h b/system/dev/audio/intel-hda/dsp/intel-audio-dsp.h
index 546a3f5..727b802 100644
--- a/system/dev/audio/intel-hda/dsp/intel-audio-dsp.h
+++ b/system/dev/audio/intel-hda/dsp/intel-audio-dsp.h
@@ -27,6 +27,7 @@
 #include "debug-logging.h"
 #include "intel-dsp-ipc.h"
 #include "intel-dsp-stream.h"
+#include "intel-dsp-topology.h"
 
 namespace audio {
 namespace intel_hda {
@@ -53,8 +54,8 @@
         mailbox_in_.Read(data, size);
     }
 
-    zx_status_t StartPipelines();
-    zx_status_t PausePipelines();
+    zx_status_t StartPipeline(const DspPipeline& pipeline);
+    zx_status_t PausePipeline(const DspPipeline& pipeline);
 
     zx_status_t DriverBind(zx_device_t* hda_dev) __WARN_UNUSED_RESULT;
     void        DeviceShutdown();
diff --git a/system/dev/audio/intel-hda/dsp/intel-dsp-stream.cpp b/system/dev/audio/intel-hda/dsp/intel-dsp-stream.cpp
index 4a74620..e779ded 100644
--- a/system/dev/audio/intel-hda/dsp/intel-dsp-stream.cpp
+++ b/system/dev/audio/intel-hda/dsp/intel-dsp-stream.cpp
@@ -15,8 +15,8 @@
 namespace audio {
 namespace intel_hda {
 
-IntelDspStream::IntelDspStream(uint32_t id, bool is_input)
-    : IntelHDAStreamBase(id, is_input) {
+IntelDspStream::IntelDspStream(uint32_t id, bool is_input, const DspPipeline& pipeline)
+    : IntelHDAStreamBase(id, is_input), pipeline_(pipeline) {
     snprintf(log_prefix_, sizeof(log_prefix_), "IHDA DSP %cStream #%u", is_input ? 'I' : 'O', id);
 }
 
@@ -184,7 +184,7 @@
     case AUDIO_RB_CMD_START:
     {
         auto dsp = fbl::RefPtr<IntelAudioDsp>::Downcast(parent_codec());
-        zx_status_t st = dsp->StartPipelines();
+        zx_status_t st = dsp->StartPipeline(pipeline_);
         if (st != ZX_OK) {
             audio_proto::RingBufStartResp resp = { };
             resp.hdr = req.hdr;
@@ -248,7 +248,7 @@
     case AUDIO_RB_CMD_STOP:
     {
         auto dsp = fbl::RefPtr<IntelAudioDsp>::Downcast(parent_codec());
-        zx_status_t st = dsp->PausePipelines();
+        zx_status_t st = dsp->PausePipeline(pipeline_);
         if (st != ZX_OK) {
             audio_proto::RingBufStopResp resp = { };
             resp.hdr = req.hdr;
diff --git a/system/dev/audio/intel-hda/dsp/intel-dsp-stream.h b/system/dev/audio/intel-hda/dsp/intel-dsp-stream.h
index e48c21b..ff4cedb 100644
--- a/system/dev/audio/intel-hda/dsp/intel-dsp-stream.h
+++ b/system/dev/audio/intel-hda/dsp/intel-dsp-stream.h
@@ -8,6 +8,7 @@
 
 #include <intel-hda/codec-utils/stream-base.h>
 
+#include "intel-dsp-topology.h"
 #include "debug-logging.h"
 
 namespace audio {
@@ -17,7 +18,7 @@
 
 class IntelDspStream : public codecs::IntelHDAStreamBase {
 public:
-    IntelDspStream(uint32_t id, bool is_input);
+    IntelDspStream(uint32_t id, bool is_input, const DspPipeline& pipeline);
 
     // Overloaded
     zx_status_t ProcessSetStreamFmt(const ihda_proto::SetStreamFmtResp& resp,
@@ -66,6 +67,8 @@
     // Log prefix storage
     char log_prefix_[LOG_PREFIX_STORAGE] = { 0 };
 
+    const DspPipeline pipeline_;
+
     fbl::RefPtr<dispatcher::Channel> rb_channel_ __TA_GUARDED(obj_lock());
     fbl::RefPtr<dispatcher::Channel> client_rb_channel_ __TA_GUARDED(obj_lock());
 };
diff --git a/system/dev/audio/intel-hda/dsp/intel-dsp-topology.cpp b/system/dev/audio/intel-hda/dsp/intel-dsp-topology.cpp
index 32726cc..004818f 100644
--- a/system/dev/audio/intel-hda/dsp/intel-dsp-topology.cpp
+++ b/system/dev/audio/intel-hda/dsp/intel-dsp-topology.cpp
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 #include "intel-audio-dsp.h"
-#include <pretty/hexdump.h>
+#include "intel-dsp-topology.h"
 
 namespace audio {
 namespace intel_hda {
@@ -493,32 +493,70 @@
     return ZX_OK;
 }
 
-zx_status_t IntelAudioDsp::StartPipelines() {
-    zx_status_t st = RunPipeline(PIPELINE1_ID);
+zx_status_t IntelAudioDsp::StartPipeline(const DspPipeline& pipeline) {
+    // Sink first and then source
+    zx_status_t st = RunPipeline(pipeline.pl_sink);
     if (st != ZX_OK) {
         return st;
     }
-    return RunPipeline(PIPELINE0_ID);
+    return RunPipeline(pipeline.pl_source);
     // TODO Error recovery
 }
 
-zx_status_t IntelAudioDsp::PausePipelines() {
-    zx_status_t st = ipc_.SetPipelineState(PIPELINE0_ID, PipelineState::PAUSED, true);
+zx_status_t IntelAudioDsp::PausePipeline(const DspPipeline& pipeline) {
+    zx_status_t st = ipc_.SetPipelineState(pipeline.pl_source, PipelineState::PAUSED, true);
     if (st != ZX_OK) {
         return st;
     }
-    st = ipc_.SetPipelineState(PIPELINE1_ID, PipelineState::PAUSED, true);
+    st = ipc_.SetPipelineState(pipeline.pl_sink, PipelineState::PAUSED, true);
     if (st != ZX_OK) {
         return st;
     }
     // Reset DSP DMA
-    st = ipc_.SetPipelineState(PIPELINE0_ID, PipelineState::RESET, true);
+    st = ipc_.SetPipelineState(pipeline.pl_source, PipelineState::RESET, true);
     if (st != ZX_OK) {
         return st;
     }
-    return ipc_.SetPipelineState(PIPELINE1_ID, PipelineState::RESET, true);
+    return ipc_.SetPipelineState(pipeline.pl_sink, PipelineState::RESET, true);
     // TODO Error recovery
 }
 
+zx_status_t IntelAudioDsp::CreateAndStartStreams() {
+    zx_status_t res = ZX_OK;
+
+    // Create and publish the streams we will use.
+    static struct {
+        uint32_t stream_id;
+        bool is_input;
+        struct DspPipeline pipeline;
+    } STREAMS[] = {
+        // Speakers
+        {
+            .stream_id = 1,
+            .is_input = false,
+            .pipeline = {
+                .pl_source = PIPELINE0_ID,
+                .pl_sink = PIPELINE1_ID,
+            },
+        },
+    };
+
+    for (const auto& stream_def : STREAMS) {
+        auto stream = fbl::AdoptRef(new IntelDspStream(stream_def.stream_id,
+                                                       stream_def.is_input,
+                                                       stream_def.pipeline));
+
+        res = ActivateStream(stream);
+        if (res != ZX_OK) {
+            LOG(ERROR, "Failed to activate %s stream id #%u (res %d)!",
+                       stream_def.is_input ? "input" : "output", stream_def.stream_id, res);
+            return res;
+        }
+    }
+
+    return ZX_OK;
+}
+
+
 }  // namespace intel_hda
 }  // namespace audio
diff --git a/system/dev/audio/intel-hda/dsp/intel-dsp-topology.h b/system/dev/audio/intel-hda/dsp/intel-dsp-topology.h
new file mode 100644
index 0000000..0e3c84f
--- /dev/null
+++ b/system/dev/audio/intel-hda/dsp/intel-dsp-topology.h
@@ -0,0 +1,17 @@
+// Copyright 2018 The Fuchsia Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#pragma once
+
+namespace audio {
+namespace intel_hda {
+
+// Represents a pipeline backing an audio stream.
+struct DspPipeline {
+    uint8_t pl_source;
+    uint8_t pl_sink;
+};
+
+}  // namespace intel_hda
+}  // namespace audio
