diff -Nru gst-plugins-base-0.10.32.orig/gst/subparse/gstsubparse.c gst-plugins-base-0.10.32/gst/subparse/gstsubparse.c
--- gst-plugins-base-0.10.32.orig/gst/subparse/gstsubparse.c	2010-10-13 18:43:09.000000000 +0200
+++ gst-plugins-base-0.10.32/gst/subparse/gstsubparse.c	2012-01-17 17:42:34.304728234 +0100
@@ -758,14 +758,7 @@
 static gboolean
 subrip_remove_unhandled_tag (gchar * start, gchar * stop)
 {
-  gchar *tag, saved;
-
-  tag = start + strlen ("&lt;");
-  if (*tag == '/')
-    ++tag;
-
-  if (g_ascii_tolower (*tag) < 'a' || g_ascii_tolower (*tag) > 'z')
-    return FALSE;
+  gchar saved;
 
   saved = *stop;
   *stop = '\0';
@@ -780,11 +773,19 @@
 static void
 subrip_remove_unhandled_tags (gchar * txt)
 {
-  gchar *pos, *gt;
+  gchar *pos, *gt, *tag;
 
   for (pos = txt; pos != NULL && *pos != '\0'; ++pos) {
     if (strncmp (pos, "&lt;", 4) == 0 && (gt = strstr (pos + 4, "&gt;"))) {
-      if (subrip_remove_unhandled_tag (pos, gt + strlen ("&gt;")))
+      tag = pos + 4;
+      if (*tag == '/')
+        ++tag;
+      if (g_ascii_tolower (*tag) >= 'a' && g_ascii_tolower (*tag) <= 'z') {
+        subrip_remove_unhandled_tag (pos, gt + strlen ("&gt;"));
+        --pos;
+      }
+    } else if (strncmp (pos, "{\\", 2) == 0 && (gt = strchr (pos + 2, '}'))) {
+      if (subrip_remove_unhandled_tag (pos, gt + 1))
         --pos;
     }
   }
