diff --git a/gst/rtsp-server/rtsp-client.c b/gst/rtsp-server/rtsp-client.c
index 8744e2c..45b1210 100644
--- a/gst/rtsp-server/rtsp-client.c
+++ b/gst/rtsp-server/rtsp-client.c
@@ -1522,6 +1522,9 @@ handle_setup_request (GstRTSPClient * client, GstRTSPContext * ctx)
   /* set in the session media transport */
   trans = gst_rtsp_session_media_set_transport (sessmedia, stream, ct);
 
+  gst_rtsp_stream_set_tcp (stream,
+      (ct->lower_transport == GST_RTSP_LOWER_TRANS_TCP));
+
   /* configure the url used to set this transport, this we will use when
    * generating the response for the PLAY request */
   gst_rtsp_stream_transport_set_url (trans, uri);
diff --git a/gst/rtsp-server/rtsp-media.c b/gst/rtsp-server/rtsp-media.c
index f5ed9ab..01630de 100644
--- a/gst/rtsp-server/rtsp-media.c
+++ b/gst/rtsp-server/rtsp-media.c
@@ -1457,6 +1457,12 @@ stream_update_blocked (GstRTSPStream * stream, GstRTSPMedia * media)
 }
 
 static void
+stream_check_transport (GstRTSPStream * stream, gpointer dummy)
+{
+  gst_rtsp_stream_check_transport (stream);
+}
+
+static void
 media_streams_set_blocked (GstRTSPMedia * media, gboolean blocked)
 {
   GstRTSPMediaPrivate *priv = media->priv;
@@ -2579,6 +2585,7 @@ gst_rtsp_media_suspend (GstRTSPMedia * media)
 done:
   g_rec_mutex_unlock (&priv->state_lock);
 
+  g_ptr_array_foreach (priv->streams, (GFunc) stream_check_transport, NULL);
   return TRUE;
 
   /* ERRORS */
diff --git a/gst/rtsp-server/rtsp-stream.c b/gst/rtsp-server/rtsp-stream.c
index 680dbdc..09b5505 100644
--- a/gst/rtsp-server/rtsp-stream.c
+++ b/gst/rtsp-server/rtsp-stream.c
@@ -125,6 +125,8 @@ struct _GstRTSPStreamPrivate
   /* stream blocking */
   gulong blocked_id;
   gboolean blocking;
+
+  gboolean is_tcp;
 };
 
 #define DEFAULT_CONTROL         NULL
@@ -2288,6 +2290,46 @@ gst_rtsp_stream_transport_filter (GstRTSPStream * stream,
   return result;
 }
 
+void
+gst_rtsp_stream_set_tcp (GstRTSPStream * stream, gboolean tcp)
+{
+  stream->priv->is_tcp = tcp;
+}
+
+static GstPadProbeReturn
+pad_drop (GstPad * pad, GstPadProbeInfo * info, gpointer user_data)
+{
+  return GST_PAD_PROBE_DROP;
+}
+
+void
+gst_rtsp_stream_check_transport (GstRTSPStream * stream)
+{
+  GstRTSPStreamPrivate *priv;
+
+  priv = stream->priv;
+
+  if (!priv->is_tcp) {
+    GstPad *pad;
+
+    if (priv->appqueue[0] != NULL) {
+      pad = gst_element_get_static_pad (priv->appqueue[0], "sink");
+      gst_pad_add_probe (pad,
+            GST_PAD_PROBE_TYPE_BLOCK | GST_PAD_PROBE_TYPE_BUFFER |
+            GST_PAD_PROBE_TYPE_BUFFER_LIST, pad_drop, NULL, NULL);
+      gst_object_unref (pad);
+    }
+
+    if (priv->appqueue[1] != NULL) {
+      pad = gst_element_get_static_pad (priv->appqueue[1], "sink");
+      gst_pad_add_probe (pad,
+            GST_PAD_PROBE_TYPE_BLOCK | GST_PAD_PROBE_TYPE_BUFFER |
+            GST_PAD_PROBE_TYPE_BUFFER_LIST, pad_drop, NULL, NULL);
+      gst_object_unref (pad);
+    }
+  }
+}
+
 static GstPadProbeReturn
 pad_blocking (GstPad * pad, GstPadProbeInfo * info, gpointer user_data)
 {
diff --git a/gst/rtsp-server/rtsp-stream.h b/gst/rtsp-server/rtsp-stream.h
index 0e465b2..71169b6 100644
--- a/gst/rtsp-server/rtsp-stream.h
+++ b/gst/rtsp-server/rtsp-stream.h
@@ -107,6 +107,9 @@ gboolean          gst_rtsp_stream_join_bin         (GstRTSPStream *stream,
 gboolean          gst_rtsp_stream_leave_bin        (GstRTSPStream *stream,
                                                     GstBin *bin, GstElement *rtpbin);
 
+void              gst_rtsp_stream_set_tcp (GstRTSPStream * stream, gboolean tcp);
+void              gst_rtsp_stream_check_transport (GstRTSPStream * stream);
+
 gboolean          gst_rtsp_stream_set_blocked      (GstRTSPStream * stream,
                                                     gboolean blocked);
 gboolean          gst_rtsp_stream_is_blocking      (GstRTSPStream * stream);
