Index: src/backend/bacon-video-widget-gst-0.10.c
===================================================================
--- src/backend/bacon-video-widget-gst-0.10.c	(revision 5813)
+++ src/backend/bacon-video-widget-gst-0.10.c	(working copy)
@@ -1379,6 +1379,29 @@
 }
 
 static void
+bvw_check_seek_error (BaconVideoWidget * bvw, GstMessage * err_msg)
+{
+  GError *err = NULL;
+
+  gst_message_parse_error (err_msg, &err, NULL);
+
+  /* Catch seek errors (such as those generated by GstSoupHttpSrc for YouTube videos) */
+  if (is_error (err, RESOURCE, READ)) {
+    /* Ensure such errors don't happen again with this stream */
+    bvw->priv->seekable = FALSE;
+    g_object_notify (G_OBJECT (bvw), "seekable");
+
+    /* Stop playback to make sure we're not processing any
+     * other error messages that might also be on the bus */
+    bacon_video_widget_stop (bvw);
+  } else {
+    GST_DEBUG ("not an error code we are looking for, doing nothing");
+  }
+
+  g_error_free (err);
+}
+
+static void
 bvw_bus_message_cb (GstBus * bus, GstMessage * message, gpointer data)
 {
   BaconVideoWidget *bvw = (BaconVideoWidget *) data;
@@ -1407,6 +1430,7 @@
   switch (msg_type) {
     case GST_MESSAGE_ERROR: {
       bvw_error_msg (bvw, message);
+      bvw_check_seek_error (bvw, message);
 
       if (!bvw_check_missing_plugins_error (bvw, message)) {
         GError *error;
