--- a/gst/playback/gstplaysink.c
+++ b/gst/playback/gstplaysink.c
@@ -3396,8 +3396,22 @@ gst_play_sink_do_reconfigure (GstPlaySink * playsink)
 
         gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (playsink->text_pad),
             playsink->text_sinkpad_stream_synchronizer);
-        gst_pad_link_full (playsink->text_srcpad_stream_synchronizer,
-            playsink->textchain->textsinkpad, GST_PAD_LINK_CHECK_NOTHING);
+        if (gst_pad_link_full (playsink->text_srcpad_stream_synchronizer,
+                playsink->textchain->textsinkpad,
+                GST_PAD_LINK_CHECK_CAPS) != GST_PAD_LINK_OK) {
+          GST_DEBUG_OBJECT (playsink, "removing text chain");
+          add_chain (GST_PLAY_CHAIN (playsink->textchain), FALSE);
+          activate_chain (GST_PLAY_CHAIN (playsink->textchain), FALSE);
+          gst_element_release_request_pad (GST_ELEMENT_CAST
+              (playsink->stream_synchronizer),
+              playsink->text_sinkpad_stream_synchronizer);
+          gst_object_unref (playsink->text_sinkpad_stream_synchronizer);
+          playsink->text_sinkpad_stream_synchronizer = NULL;
+          gst_object_unref (playsink->text_srcpad_stream_synchronizer);
+          playsink->text_srcpad_stream_synchronizer = NULL;
+          gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (playsink->text_pad),
+              NULL);
+        }
       }
 
       if (need_vis || need_video) {
