diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
index e7c6d5e..693ad91 100644
--- a/src/modules/bluetooth/module-bluetooth-device.c
+++ b/src/modules/bluetooth/module-bluetooth-device.c
@@ -835,13 +835,10 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
 
                 case PA_SINK_SUSPENDED:
                     pa_assert(PA_SINK_IS_OPENED(u->sink->thread_info.state));
-
-                    /* Stop the device if the source is suspended as well */
-                    if (!u->source || u->source->state == PA_SOURCE_SUSPENDED)
-                        /* We deliberately ignore whether stopping
-                         * actually worked. Since the stream_fd is
-                         * closed it doesn't really matter */
-                        stop_stream_fd(u);
+                    /* don't do stop_stream_fd which sends BT_STOP_STREAM.
+                     * Many connected headsets will disconnect on request BT_STOP_STREAM.
+                     * So that the sink/source get unloaded
+                     */
 
                     break;
 
@@ -850,10 +847,6 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
                     if (u->sink->thread_info.state != PA_SINK_SUSPENDED)
                         break;
 
-                    /* Resume the device if the source was suspended as well */
-                    if (!u->source || u->source->state == PA_SOURCE_SUSPENDED)
-                        if (start_stream_fd(u) < 0)
-                            failed = TRUE;
                     break;
 
                 case PA_SINK_UNLINKED:
@@ -907,10 +900,11 @@ static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t off
 
                 case PA_SOURCE_SUSPENDED:
                     pa_assert(PA_SOURCE_IS_OPENED(u->source->thread_info.state));
-
-                    /* Stop the device if the sink is suspended as well */
-                    if (!u->sink || u->sink->state == PA_SINK_SUSPENDED)
-                        stop_stream_fd(u);
+                    
+                    /* don't do stop_stream_fd which sends BT_STOP_STREAM.
+                     * Many connected headsets will disconnect on request BT_STOP_STREAM.
+                     * So that the sink/source get unloaded
+                     */
 
                     if (u->read_smoother)
                         pa_smoother_pause(u->read_smoother, pa_rtclock_now());
@@ -921,11 +915,6 @@ static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t off
                     if (u->source->thread_info.state != PA_SOURCE_SUSPENDED)
                         break;
 
-                    /* Resume the device if the sink was suspended as well */
-                    if (!u->sink || u->sink->thread_info.state == PA_SINK_SUSPENDED)
-                        if (start_stream_fd(u) < 0)
-                            failed = TRUE;
-
                     /* We don't resume the smoother here. Instead we
                      * wait until the first packet arrives */
                     break;
