diff --git a/modules/audio_remote_submix/audio_hw.cpp b/modules/audio_remote_submix/audio_hw.cpp
index e826ac3..8c0c097 100644
--- a/modules/audio_remote_submix/audio_hw.cpp
+++ b/modules/audio_remote_submix/audio_hw.cpp
@@ -418,8 +418,8 @@
             config->format);
         const NBAIO_Format offers[1] = {format};
         size_t numCounterOffers = 0;
-        // Create a MonoPipe with optional blocking set to false.
-        MonoPipe* sink = new MonoPipe(buffer_size_frames, format, false /*writeCanBlock*/);
+        // Create a MonoPipe with optional blocking set to true.
+        MonoPipe* sink = new MonoPipe(buffer_size_frames, format, true /*writeCanBlock*/);
         // Negotiation between the source and sink cannot fail as the device open operation
         // creates both ends of the pipe using the same audio format.
         ssize_t index = sink->negotiate(offers, 1, NULL, numCounterOffers);
@@ -714,8 +714,30 @@
 
 static int out_set_parameters(struct audio_stream *stream, const char *kvpairs)
 {
-    (void)stream;
+    int exiting = -1;
+    AudioParameter parms = AudioParameter(String8(kvpairs));
     SUBMIX_ALOGV("out_set_parameters() kvpairs='%s'", kvpairs);
+
+    // FIXME this is using hard-coded strings but in the future, this functionality will be
+    //       converted to use audio HAL extensions required to support tunneling
+    if ((parms.getInt(String8("exiting"), exiting) == NO_ERROR) && (exiting > 0)) {
+        struct submix_audio_device * const rsxadev =
+                audio_stream_get_submix_stream_out(stream)->dev;
+        pthread_mutex_lock(&rsxadev->lock);
+        { // using the sink
+            sp<MonoPipe> sink =
+                    rsxadev->routes[audio_stream_get_submix_stream_out(stream)->route_handle]
+                                    .rsxSink;
+            if (sink == NULL) {
+                pthread_mutex_unlock(&rsxadev->lock);
+                return 0;
+            }
+
+            ALOGD("out_set_parameters(): shutting down MonoPipe sink");
+            sink->shutdown(true);
+        } // done using the sink
+        pthread_mutex_unlock(&rsxadev->lock);
+    }
     return 0;
 }
 
@@ -783,12 +805,12 @@
         return 0;
     }
 
-    // If the write to the sink would block, flush enough frames
+    // If the write to the sink would block when no input stream is present, flush enough frames
     // from the pipe to make space to write the most recent data.
     {
         const size_t availableToWrite = sink->availableToWrite();
         sp<MonoPipeReader> source = rsxadev->routes[out->route_handle].rsxSource;
-        if (availableToWrite < frames) {
+        if (rsxadev->routes[out->route_handle].input == NULL && availableToWrite < frames) {
             static uint8_t flush_buffer[64];
             const size_t flushBufferSizeFrames = sizeof(flush_buffer) / frame_size;
             size_t frames_to_flush_from_source = frames - availableToWrite;
@@ -821,11 +843,6 @@
 
             written_frames = 0;
             return 0;
-        } else if (written_frames == -EIO) {
-            // receiving -EIO means that the underlying FIFO has shut itself down
-            // due to reader/writer indices corruption. This state is irreversible,
-            // so shut down the monopipe. It will be destroyed on the next call to 'write.'
-            sink->shutdown(true);
         } else {
             // write() returned UNDERRUN or WOULD_BLOCK, retry
             ALOGE("out_write() write to pipe returned unexpected %zd", written_frames);
diff --git a/modules/audio_remote_submix/tests/remote_submix_tests.cpp b/modules/audio_remote_submix/tests/remote_submix_tests.cpp
index 36650e7..2c01c92 100644
--- a/modules/audio_remote_submix/tests/remote_submix_tests.cpp
+++ b/modules/audio_remote_submix/tests/remote_submix_tests.cpp
@@ -198,16 +198,17 @@
 }
 
 // Verifies that when input is opened but not reading, writing into an output stream does not block.
-TEST_F(RemoteSubmixTest, OutputDoesNotBlockWhenInputStuck) {
-    const char* address = "1";
-    audio_stream_out_t* streamOut;
-    OpenOutputStream(address, true /*mono*/, 48000, &streamOut);
-    audio_stream_in_t* streamIn;
-    OpenInputStream(address, true /*mono*/, 48000, &streamIn);
-    WriteSomethingIntoStream(streamOut, 1024, 16);
-    mDev->close_input_stream(mDev, streamIn);
-    mDev->close_output_stream(mDev, streamOut);
-}
+// !!! Currently does not finish because requires setting a parameter from another thread !!!
+// TEST_F(RemoteSubmixTest, OutputDoesNotBlockWhenInputStuck) {
+//     const char* address = "1";
+//     audio_stream_out_t* streamOut;
+//     OpenOutputStream(address, true /*mono*/, 48000, &streamOut);
+//     audio_stream_in_t* streamIn;
+//     OpenInputStream(address, true /*mono*/, 48000, &streamIn);
+//     WriteSomethingIntoStream(streamOut, 1024, 16);
+//     mDev->close_input_stream(mDev, streamIn);
+//     mDev->close_output_stream(mDev, streamOut);
+// }
 
 TEST_F(RemoteSubmixTest, OutputAndInput) {
     const char* address = "1";
