Index: tag-reader.c
===================================================================
--- tag-reader.c	(revision 377)
+++ tag-reader.c	(working copy)
@@ -114,9 +114,20 @@
          * Remove source element.
          **/
         gst_element_unlink (tag_reader->priv->src, tag_reader->priv->decodebin);
+        
+        g_debug ("Making sure state changes are done...");
+        gst_element_get_state (tag_reader->priv->pipeline, 
+                               NULL, NULL, GST_CLOCK_TIME_NONE);
+        g_debug ("...ok. Removing src from pipeline...");
         gst_bin_remove (GST_BIN (tag_reader->priv->pipeline),
                         tag_reader->priv->src);
-
+        /* calling abort_state will prevent the next get_state from blocking forever */
+        // gst_element_abort_state (tag_reader->priv->pipeline);
+        g_debug ("...ok. Making sure state changes are done...");
+        gst_element_get_state (tag_reader->priv->pipeline, 
+                               NULL, NULL, GST_CLOCK_TIME_NONE);
+        g_debug ("...ok");
+        
         /**
          * Pop head from queue.
          **/
