diff --git a/gst/hls/gsthlsdemux.c b/gst/hls/gsthlsdemux.c
index d840ae0..b7d4270 100644
--- a/gst/hls/gsthlsdemux.c
+++ b/gst/hls/gsthlsdemux.c
@@ -307,7 +307,12 @@ gst_hls_demux_change_state (GstElement * element, GstStateChange transition)
 
   switch (transition) {
     case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+      demux->cancelled = TRUE;
+      g_mutex_lock (demux->fetcher_lock);
+      gst_hls_demux_stop_fetcher_locked (demux, TRUE);
+      g_mutex_unlock (demux->fetcher_lock);
       gst_hls_demux_stop_update (demux);
+      gst_task_pause (demux->task);
       break;
     case GST_STATE_CHANGE_PAUSED_TO_READY:
       demux->cancelled = TRUE;
