Index: plugins/elements/gstmultiqueue.c
===================================================================
--- plugins/elements/gstmultiqueue.c	(revision 4133)
+++ plugins/elements/gstmultiqueue.c	(working copy)
@@ -465,6 +465,15 @@
   g_free (item);
 }
 
+static void
+gst_multi_queue_item_destroy_full (GstMultiQueueItem * item)
+{
+  /* Unref the queued object, since multiqueue has become it's owner */
+  gst_mini_object_unref (item->object);
+  /* Free MultiQueueItem */
+  gst_multi_queue_item_destroy (item);
+}
+
 static GstMultiQueueItem *
 gst_multi_queue_item_new (GstMiniObject * object)
 {
@@ -472,7 +481,7 @@
 
   item = g_new0 (GstMultiQueueItem, 1);
   item->object = gst_mini_object_ref (object);
-  item->destroy = (GDestroyNotify) gst_multi_queue_item_destroy;
+  item->destroy = (GDestroyNotify) gst_multi_queue_item_destroy_full;
 
   if (GST_IS_BUFFER (object)) {
     item->size = GST_BUFFER_SIZE (object);
@@ -552,7 +561,7 @@
       /* 4. Check again status, maybe we're flushing */
       if ((sq->srcresult != GST_FLOW_OK)
           && (sq->srcresult != GST_FLOW_NOT_LINKED)) {
-        gst_multi_queue_item_destroy (item);
+        gst_multi_queue_item_destroy_full (item);
         goto out_flushing;
       }
     }
@@ -624,8 +633,11 @@
   if (!(gst_data_queue_push (sq->queue, (GstDataQueueItem *) item))) {
     GST_LOG_OBJECT (mq, "SingleQueue %d : exit because task paused, reason: %s",
         sq->id, gst_flow_get_name (sq->srcresult));
+    gst_multi_queue_item_destroy_full (item);
+    /*
     gst_multi_queue_item_destroy (item);
     gst_buffer_unref (buffer);
+    */
     ret = sq->srcresult;
   }
 
@@ -721,8 +733,11 @@
   if (!(gst_data_queue_push (sq->queue, (GstDataQueueItem *) item))) {
     GST_LOG_OBJECT (mq, "SingleQueue %d : exit because task paused, reason: %s",
         sq->id, gst_flow_get_name (sq->srcresult));
+    gst_multi_queue_item_destroy_full (item);
+    /*
     gst_multi_queue_item_destroy (item);
     gst_event_unref (event);
+    */
   }
 
 done:
