Index: src/backend/bacon-video-widget-xine.c
===================================================================
--- src/backend/bacon-video-widget-xine.c	(revision 5813)
+++ src/backend/bacon-video-widget-xine.c	(working copy)
@@ -72,6 +72,7 @@
 	SIGNAL_TICK,
 	GOT_METADATA,
 	BUFFERING,
+	SEEK_ERROR
 	LAST_SIGNAL
 };
 
@@ -426,6 +427,15 @@
 				NULL, NULL,
 				g_cclosure_marshal_VOID__INT,
 				G_TYPE_NONE, 1, G_TYPE_INT);
+
+	bvw_signals[SIGNAL_SEEK_ERROR] =
+		g_signal_new ("seek-error",
+				G_TYPE_FROM_CLASS (object_class),
+				G_SIGNAL_RUN_LAST,
+				0,
+				bvw_boolean_handled_accumulator, NULL,
+				baconvideowidget_marshal_BOOLEAN__STRING,
+				G_TYPE_BOOLEAN, 1, G_TYPE_STRING);
 }
 
 static void
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)
@@ -99,6 +99,7 @@
   SIGNAL_GOT_METADATA,
   SIGNAL_BUFFERING,
   SIGNAL_MISSING_PLUGINS,
+  SIGNAL_SEEK_ERROR,
   LAST_SIGNAL
 };
 
@@ -1116,6 +1117,15 @@
                   bvw_boolean_handled_accumulator, NULL,
                   baconvideowidget_marshal_BOOLEAN__BOXED_BOXED_BOOLEAN,
                   G_TYPE_BOOLEAN, 3, G_TYPE_STRV, G_TYPE_STRV, G_TYPE_BOOLEAN);
+
+  bvw_signals[SIGNAL_SEEK_ERROR] =
+    g_signal_new ("seek-error",
+                  G_TYPE_FROM_CLASS (object_class),
+                  G_SIGNAL_RUN_LAST,
+                  0,
+                  bvw_boolean_handled_accumulator, NULL,
+                  baconvideowidget_marshal_BOOLEAN__STRING,
+                  G_TYPE_BOOLEAN, 1, G_TYPE_STRING);
 }
 
 static void
@@ -1297,6 +1307,38 @@
   }
 }
 
+/* returns TRUE if the error has been handled and should be ignored */
+static gboolean
+bvw_check_seek_error (BaconVideoWidget * bvw, GstMessage * err_msg)
+{
+  gboolean handled = FALSE;
+  GError *err = NULL;
+
+  gst_message_parse_error (err_msg, &err, NULL);
+
+  /* Catch seek errors (such as those generated by GstSoupHttpSrc for YouTube
+   * videos) here and emit a signal to tell the UI about them. */
+  if (is_error (err, RESOURCE, READ)) {
+    g_signal_emit (bvw, bvw_signals[SIGNAL_SEEK_ERROR], 0, err->message, &handled);
+    GST_DEBUG ("seek-error signal was %shandled", (handled) ? "" : "not ");
+
+    /* Ensure such errors don't happen again with this stream */
+    bvw->priv->seekable = FALSE;
+    g_object_notify (G_OBJECT (bvw), "seekable");
+
+    if (handled) {
+      /* If it was handled, 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);
+  return handled;
+}
+
 /* returns TRUE if the error/signal has been handled and should be ignored */
 static gboolean
 bvw_emit_missing_plugins_signal (BaconVideoWidget * bvw, gboolean prerolled)
@@ -1408,7 +1450,8 @@
     case GST_MESSAGE_ERROR: {
       bvw_error_msg (bvw, message);
 
-      if (!bvw_check_missing_plugins_error (bvw, message)) {
+      if (!bvw_check_missing_plugins_error (bvw, message) &&
+          !bvw_check_seek_error (bvw, message)) {
         GError *error;
 
         error = bvw_error_from_gst_error (bvw, message);
Index: src/backend/baconvideowidget-marshal.list
===================================================================
--- src/backend/baconvideowidget-marshal.list	(revision 5813)
+++ src/backend/baconvideowidget-marshal.list	(working copy)
@@ -1,3 +1,4 @@
 VOID:INT64,INT64,DOUBLE,BOOLEAN
 VOID:STRING,BOOLEAN,BOOLEAN
 BOOLEAN:BOXED,BOXED,BOOLEAN
+BOOLEAN:STRING
Index: src/totem.c
===================================================================
--- src/totem.c	(revision 5813)
+++ src/totem.c	(working copy)
@@ -1745,6 +1745,14 @@
 	}
 }
 
+static gboolean
+on_seek_error_event (BaconVideoWidget *bvw, char *message, Totem *totem)
+{
+	reset_seek_status (totem);
+	totem_action_error (_("Stream doesn't support seeking"), message, totem);
+	return TRUE;
+}
+
 static void
 on_buffering_event (BaconVideoWidget *bvw, int percentage, Totem *totem)
 {
@@ -3351,6 +3359,10 @@
 			"error",
 			G_CALLBACK (on_error_event),
 			totem);
+	g_signal_connect (G_OBJECT (totem->bvw),
+			"seek-error",
+			G_CALLBACK (on_seek_error_event),
+			totem);
 
 	container = GTK_CONTAINER (gtk_builder_get_object (totem->xml, "tmw_bvw_box"));
 	gtk_container_add (container,
