diff --git a/gst/multipart/multipartdemux.c b/gst/multipart/multipartdemux.c
index a4f0f9c..f701310 100644
--- a/gst/multipart/multipartdemux.c
+++ b/gst/multipart/multipartdemux.c
@@ -60,7 +60,7 @@ static const GstElementDetails gst_multipart_demux_details =
 GST_ELEMENT_DETAILS ("Multipart demuxer",
     "Codec/Demuxer",
     "demux multipart streams",
-    "Wim Taymans <wim@fluendo.com>, Sjoerd Simons <sjoerd@luon.net>");
+    "Wim Taymans <wim.taymans@gmail.com>, Sjoerd Simons <sjoerd@luon.net>");
 
 
 /* signals and args */
@@ -81,7 +81,7 @@ enum
 };
 
 static GstStaticPadTemplate multipart_demux_src_template_factory =
-GST_STATIC_PAD_TEMPLATE ("src",
+GST_STATIC_PAD_TEMPLATE ("src_%d",
     GST_PAD_SRC,
     GST_PAD_SOMETIMES,
     GST_STATIC_CAPS_ANY);
@@ -99,14 +99,22 @@ typedef struct
   const gchar *val;
 } GstNamesMap;
 
-/* convert from mime types to gst structure names. Add more when needed. */
+/* convert from mime types to gst structure names. Add more when needed. The
+ * mime-type is stored as lowercase */
 static const GstNamesMap gstnames[] = {
   /* RFC 2046 says audio/basic is mulaw, mono, 8000Hz */
   {"audio/basic", "audio/x-mulaw, channels=1, rate=8000"},
-  {"audio/G726-16", "audio/x-adpcm, bitrate=16000"},
-  {"audio/G726-24", "audio/x-adpcm, bitrate=24000"},
-  {"audio/G726-32", "audio/x-adpcm, bitrate=32000"},
-  {"audio/G726-40", "audio/x-adpcm, bitrate=40000"},
+  {"audio/g726-16",
+      "audio/x-adpcm, bitrate=16000, layout=g726, channels=1, rate=8000"},
+  {"audio/g726-24",
+      "audio/x-adpcm, bitrate=24000, layout=g726, channels=1, rate=8000"},
+  {"audio/g726-32",
+      "audio/x-adpcm, bitrate=32000, layout=g726, channels=1, rate=8000"},
+  {"audio/g726-40",
+      "audio/x-adpcm, bitrate=40000, layout=g726, channels=1, rate=8000"},
+  /* Panasonic Network Cameras non-standard types */
+  {"audio/g726",
+      "audio/x-adpcm, bitrate=32000, layout=g726, channels=1, rate=8000"},
   {NULL, NULL}
 };
 
@@ -231,6 +239,36 @@ gst_multipart_demux_get_gstname (GstMultipartDemux * demux, gchar * mimetype)
   return gstname;
 }
 
+static GstFlowReturn
+gst_multipart_combine_flows (GstMultipartDemux * demux, GstMultipartPad * pad,
+    GstFlowReturn ret)
+{
+  GSList *walk;
+
+  /* store the value */
+  pad->last_ret = ret;
+
+  /* any other error that is not-linked can be returned right
+   * away */
+  if (ret != GST_FLOW_NOT_LINKED)
+    goto done;
+
+  /* only return NOT_LINKED if all other pads returned NOT_LINKED */
+  for (walk = demux->srcpads; walk; walk = g_slist_next (walk)) {
+    GstMultipartPad *opad = (GstMultipartPad *) walk->data;
+
+    ret = opad->last_ret;
+    /* some other return value (must be SUCCESS but we can return
+     * other values as well) */
+    if (ret != GST_FLOW_NOT_LINKED)
+      goto done;
+  }
+  /* if we get here, all other pads were unlinked and we return
+   * NOT_LINKED then */
+done:
+  return ret;
+}
+
 static GstMultipartPad *
 gst_multipart_find_pad_by_mime (GstMultipartDemux * demux, gchar * mime,
     gboolean * created)
@@ -278,6 +316,7 @@ gst_multipart_find_pad_by_mime (GstMultipartDemux * demux, gchar * mime,
 
     mppad->pad = pad;
     mppad->mime = g_strdup (mime);
+    mppad->last_ret = GST_FLOW_OK;
 
     demux->srcpads = g_slist_prepend (demux->srcpads, mppad);
     demux->numpads++;
@@ -389,7 +428,7 @@ multipart_parse_header (GstMultipartDemux * multipart)
 
     if (len >= 14 && !g_ascii_strncasecmp ("content-type:", (gchar *) pos, 13)) {
       g_free (multipart->mime_type);
-      multipart->mime_type = g_strndup ((gchar *) pos + 14, len - 14);
+      multipart->mime_type = g_ascii_strdown ((gchar *) pos + 14, len - 14);
     } else if (len >= 15 &&
         !g_ascii_strncasecmp ("content-length:", (gchar *) pos, 15)) {
       multipart->content_length =
@@ -535,6 +574,7 @@ gst_multipart_demux_chain (GstPad * pad, GstBuffer * buf)
       GST_DEBUG_OBJECT (multipart, "buffer has caps %" GST_PTR_FORMAT,
           GST_BUFFER_CAPS (outbuf));
       res = gst_pad_push (srcpad->pad, outbuf);
+      res = gst_multipart_combine_flows (multipart, srcpad, res);
       if (res != GST_FLOW_OK)
         break;
     }
diff --git a/gst/multipart/multipartdemux.h b/gst/multipart/multipartdemux.h
index af51d5b..930f49f 100644
--- a/gst/multipart/multipartdemux.h
+++ b/gst/multipart/multipartdemux.h
@@ -50,6 +50,8 @@ typedef struct
   GstPad *pad;                  /* reference for this pad is held by element we belong to */
 
   gchar *mime;
+
+  GstFlowReturn last_ret;
 }
 GstMultipartPad;
 
