Merge branch 'upstream-experimental' into upstream
diff --git a/ChangeLog b/ChangeLog
index ae00232..6ce2c39 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,11 +1,982 @@
-=== release 1.8.3 ===
+=== release 1.9.90 ===
 
-2016-08-19  Sebastian Dröge <slomo@coaxion.net>
+2016-09-30  Sebastian Dröge <slomo@coaxion.net>
 
 	* configure.ac:
-	  releasing 1.8.3
+	  releasing 1.9.90
 
-2016-08-19 11:50:15 +0300  Sebastian Dröge <sebastian@centricular.com>
+2016-09-30 11:41:14 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* po/de.po:
+	  po: Update translations
+
+2016-09-27 18:00:47 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* meson.build:
+	* plugins/tracers/meson.build:
+	  meson: tracers: signal availability of libunwind and backtrace() to code
+	  Not setting cdata here on purpose because of .. complications.
+
+2016-09-26 18:21:19 -0300  Thibault Saunier <thibault.saunier@osg.samsung.com>
+
+	* config.h.meson:
+	* meson.build:
+	* plugins/meson.build:
+	* plugins/tracers/meson.build:
+	  meson: Build tracers
+
+2016-09-23 20:40:39 -0300  Thibault Saunier <thibault.saunier@osg.samsung.com>
+
+	* docs/gst/meson.build:
+	* docs/libs/meson.build:
+	* docs/meson.build:
+	  meson: Fix gtkdoc using new meson features
+
+2016-09-26 12:14:14 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/gst/gstbuffer.c:
+	* tests/check/gst/gstmemory.c:
+	* tests/check/gst/gstmeta.c:
+	  tests: remove unused valgrind stuff
+	  Code was also checking the wrong define anyway.
+
+2016-09-26 12:12:12 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/Makefile.am:
+	* tests/check/pipelines/parse-launch.c:
+	  tests: parse-launch: looks clean nowadays, so re-enable for valgrind
+	  Also, the valgrind bits weren't hooked up properly anyway,
+	  checking the wrong define.
+
+2016-09-24 18:22:26 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* config.h.meson:
+	* meson.build:
+	  meson: remove incorrect and unneeded check for ptrdiff_t
+	  Need to include stddef.h for it, so this would've worked:
+	  if cc.has_type('ptrdiff_t', prefix: '#include <stddef.h>')
+
+2016-09-24 18:06:31 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/printf/meson.build:
+	  meson: fix internal printf for %ll format modifier on 32-bit systems
+	  gst/gstprintf unit test would fail on 32-bit x86 with:
+	  gstprintf.c:83:printf_I32_I64:0: 'str' (64-bit x value = b5a6978f) is not equal to '"64-bit x value = f1e2d3c4b5a6978f"'
+
+2016-09-23 04:19:47 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
+
+	* gst/meson.build:
+	  Revert "meson: Force gstenum_h to be built when using gst_dep"
+	  This reverts commit cfc565e2d88a8e7d656b68c5c2a1b7acb08cdb7f.
+	  The commit was redundant since gst_gen_sources already contains
+	  gstenum_h. We're still investigating why some people are still seeing
+	  a racy build failure.
+
+2016-09-23 00:28:53 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
+
+	* gst/meson.build:
+	  meson: Force gstenum_h to be built when using gst_dep
+	  This forces gstenumtypes.h to be built whenever something uses gst_dep
+	  as a subproject dependency. This is needed since gst/gst.h includes
+	  gstenumtypes.h
+	  Closes https://github.com/mesonbuild/meson/issues/714 which is not
+	  actually a Meson bug.
+
+2016-09-19 10:07:51 -0400  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/gstbin.c:
+	  bin: Add forgotten "git commit --amend" for last commit
+	  Need to cast away the const as g_queue_foreach() takes a non-const GQueue*
+
+2016-09-19 10:04:55 -0400  Kouhei Sutou <kou@clear-code.com>
+
+	* gst/gstbin.c:
+	  bin: When copying the sort iterator, also copy its internal queue
+	  Otherwise both iterators share the same references, the second one
+	  usually resulting in a crash when being freed.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=771649
+
+2016-09-11 15:28:43 +0200  Carlos Rafael Giani <dv@pseudoterminal.org>
+
+	* tests/check/elements/queue2.c:
+	  queue2: Fix watermark test
+	  This carries over code for a similar test from multiqueue to ensure full
+	  control over the dataflow while testing. (The previous attempt was racy
+	  since the fill level changed without any thread sync with the test code.)
+	  https://bugzilla.gnome.org/show_bug.cgi?id=771210
+
+2016-09-11 15:26:26 +0200  Carlos Rafael Giani <dv@pseudoterminal.org>
+
+	* plugins/elements/gstqueue2.c:
+	  queue2: Update buffering if its enabled and low/high watermarks are changed
+	  https://bugzilla.gnome.org/show_bug.cgi?id=771210
+
+2016-09-15 17:38:49 +0530  Arun Raghavan <arun@arunraghavan.net>
+
+	* gst/gstmessage.c:
+	  message: Fix documentation for gst_message_new_duration()
+	  Seems like there was some documentation left over from when this was
+	  gst_message_new_duration().
+
+2016-09-12 17:41:16 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* libs/gst/base/gstbasesink.c:
+	  basesink: Remove unused fields and always use the buffer timestamp difference for calculating the QoS proportion
+	  The buffer timestamps are only hints and more often than not have
+	  nothing to do with reality.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=771306
+
+2016-09-08 12:58:54 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
+
+	* configure.ac:
+	* gst/gstconfig.h.in:
+	* meson.build:
+	  gstconfig: Use __declspec when built with MinGW and linking with MSVC
+	  Earlier we were only using __declspec(dllexport/import) when we were
+	  built with MSVC because when built with MinGW and linking with MinGW we
+	  don't need it (and we get linker errors because of it).
+	  However, when we're built with MinGW and someone wants to link to us
+	  with MSVC, we still need the prototypes to have __declspec(dllimport)
+	  since MSVC cannot do auto-import like GCC can.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=771029
+
+2016-09-12 17:07:09 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/gstbin.c:
+	  bin: Also don't *unset* element flags if they're in the suppressed flags
+	  Otherwise our bin might lose various flags that were explicitly set on
+	  it at arbitrary times.
+
+2016-09-10 11:59:11 -0300  Thiago Santos <thiagossantos@gmail.com>
+
+	* tests/check/gst/gstbin.c:
+	  tests: gstbin: add tests for suppressed flags
+	  Some simple tests to make sure it keeps working
+
+2016-09-02 17:39:17 +0900  Wonchul Lee <wonchul.lee@collabora.com>
+
+	* gst/gstbin.c:
+	* gst/gstbin.h:
+	* win32/common/libgstreamer.def:
+	  bin: Add setter and getter to suppress element flags
+	  Suppress-flags is for preventing propagation of child element's specific
+	  flag when it is added to the bin.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=770627
+
+2016-09-10 20:50:48 +1000  Jan Schmidt <jan@centricular.com>
+
+	* autogen.sh:
+	* common:
+	  Automatic update of common submodule
+	  From b18d820 to f980fd9
+
+2015-11-13 16:00:02 +0000  Graham Leggett <minfrin@sharp.fm>
+
+	* gst/gst.c:
+	  gst: Ensure gst_value is initialised before gst_tag
+	  Otherwise GST_TYPE_FRACTION will work correctly in tags.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=753922
+
+2016-09-09 11:46:11 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/gstutils.c:
+	  element: Reset the stop position to NONE in seek_simple()
+	  When using seek_simple() in combination with other kinds of seeks, this
+	  becomes problematic. seek_simple() does not reset the stop position to
+	  GST_CLOCK_TIME_NONE but keeps whatever a previous seek did. So for example
+	  when doing a seek_simple() after a rate=-1 seek, we would usually get
+	  assertions that start>stop (and stop being the old stop from the rate=1 seek).
+	  https://bugzilla.gnome.org/show_bug.cgi?id=771104
+
+2016-09-10 09:53:42 +1000  Jan Schmidt <jan@centricular.com>
+
+	* autogen.sh:
+	* common:
+	  Automatic update of common submodule
+	  From f49c55e to b18d820
+
+2016-09-09 09:36:40 -0300  Thibault Saunier <thibault.saunier@osg.samsung.com>
+
+	* tests/check/meson.build:
+	  meson:tests: Bump timeout to 3 minutes
+	  Basically we already have each test with a 20sec timeout,
+	  and testsuite can last more than the default 30secs from
+	  meson. 3 minutes is another arbitrary timeout but should
+	  be good enough.
+
+2016-09-08 15:19:38 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* libs/gst/base/gstbasesink.c:
+	  basesink: Use the average durations based on timestamps for the QoS proportion when doing trickmodes
+	  The durations of the buffers are (usually) assuming that no frames are being
+	  dropped and are just the durations coming from the stream. However if we do
+	  trickmodes, frames are being dropped regularly especially if only key units
+	  are supposed to be played.
+	  Fixes completely bogus QoS proportion values in the above case.
+
+2016-09-05 18:07:49 -0300  Thibault Saunier <thibault.saunier@osg.samsung.com>
+
+	* meson.build:
+	  meson: Fix building with meson 0.34
+
+2016-08-26 20:06:59 -0300  Thibault Saunier <tsaunier@gnome.org>
+
+	* gst/meson.build:
+	* meson.build:
+	* meson_options.txt:
+	  meson: Allow others to build GIR files when using GStreamer as subproject
+	  And add a way to disable the introspection and bump version to 1.9.2
+
+2016-09-05 11:11:29 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/gstconfig.h.in:
+	  gstconfig.h.in: Add another version of the SH4 #define and S390x
+	  https://bugzilla.gnome.org/show_bug.cgi?id=770731
+
+2016-09-05 09:50:17 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/gstconfig.h.in:
+	  config: newer gcc doesn't know __ppc__ and __ppc64__ anymore
+	  __ppc__ and __ppc64__ are non-standard defines, we should use
+	  __powerpc__ and __powerpc64__ instead because newer gcc doesn't know
+	  them anymore.
+
+2016-09-04 20:39:31 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tools/gst-inspect.c:
+	  tools: gst-inspect: add * for pointer signal arguments where needed
+	  Print GObject argument properly with pointer marker:
+	  "client-added" :  void user_function (GstElement* object,
+	  GObject* arg0,
+	  gpointer user_data);
+	  instead of
+	  "client-added" :  void user_function (GstElement* object,
+	  GObject arg0,
+	  gpointer user_data);
+	  for gst-inspect-1.0 tcpserversink.
+
+2016-09-02 23:22:17 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/Makefile.am:
+	  tests: don't build misc subdir if both examples and benchmarks have been disabled
+	  https://bugzilla.gnome.org/show_bug.cgi?id=770740
+
+2016-09-01 14:13:40 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/gstconfig.h.in:
+	  config: support System z
+
+2016-09-01 12:25:23 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* configure.ac:
+	  Back to development
+
+=== release 1.9.2 ===
+
+2016-09-01 12:24:45 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/gstreamer-plugins.args:
+	* docs/plugins/inspect/plugin-coreelements.xml:
+	* gstreamer.doap:
+	* win32/common/config.h:
+	* win32/common/gstenumtypes.c:
+	* win32/common/gstversion.h:
+	  Release 1.9.2
+
+2016-09-01 11:22:45 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* po/af.po:
+	* po/az.po:
+	* po/be.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/el.po:
+	* po/en_GB.po:
+	* po/eo.po:
+	* po/es.po:
+	* po/eu.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/gl.po:
+	* po/hr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ro.po:
+	* po/ru.po:
+	* po/rw.po:
+	* po/sk.po:
+	* po/sl.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	* po/zh_TW.po:
+	  po: Update translations
+
+2016-08-31 09:49:03 +0200  Carlos Rafael Giani <dv@pseudoterminal.org>
+
+	* plugins/elements/gstmultiqueue.c:
+	* tests/check/elements/multiqueue.c:
+	  multiqueue: Add higher-resolution low/high-watermark properties
+	  low/high-watermark are of type double, and given in range 0.0-1.0. This
+	  makes it possible to set low/high watermarks with greater resolution,
+	  which is useful with large multiqueue max sizes and watermarks like 0.5%.
+	  Also adding a test to check the fill and watermark level behavior.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=770628
+
+2016-08-31 09:48:53 +0200  Carlos Rafael Giani <dv@pseudoterminal.org>
+
+	* plugins/elements/gstmultiqueue.c:
+	* plugins/elements/gstmultiqueue.h:
+	  multiqueue: Distinguish between buffering percentage and buffering level
+	  To make the code clearer, and to facilitate future improvements, introduce
+	  a distinction between the buffering level and the buffering percentage.
+	  Buffering level: the queue's current fill level. The low/high watermarks
+	  are in this range.
+	  Buffering percentage: percentage relative to the low/high watermarks
+	  (0% = low watermark, 100% = high watermark).
+	  To that end, get_percentage() is renamed to get_buffering_level(). Also,
+	  low/high_percent are renamed to low/high_watermark to avoid confusion.
+	  mq->buffering_percent values are now normalized in the 0..100 range for
+	  buffering messages inside update_buffering(), and not just before sending
+	  the buffering message. Finally the buffering level range is parameterized
+	  by adding a new constant called MAX_BUFFERING_LEVEL.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=770628
+
+2016-08-31 09:48:38 +0200  Carlos Rafael Giani <dv@pseudoterminal.org>
+
+	* plugins/elements/gstmultiqueue.c:
+	* plugins/elements/gstmultiqueue.h:
+	  multiqueue: Rename percent/percent_changed to buffering_percent(_changed)
+	  This is a prerequisite for subsequent commits, and makes queue2 and
+	  multiqueue code a little more consistent.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=770628
+
+2016-08-23 14:57:33 +0900  Edward Hervey <edward@centricular.com>
+
+	* plugins/elements/gstmultiqueue.c:
+	  multiqueue: Fix high_time wakeup logic
+	  When calculating the high_time, cache the group value in each singlequeue.
+	  This fixes the issue by which wake_up_next_non_linked() would use the global
+	  high-time to decide whether to wake-up a waiting thread, instead of the group
+	  one, resulting in those threads constantly spinning.
+	  Tidy up a bit the waiting logic while we're at it.
+	  With this patch, we go from 212% playing a 8 audio / 8 video file down to less
+	  than 10% (most of it being the video decoding).
+	  https://bugzilla.gnome.org/show_bug.cgi?id=770225
+
+2016-08-28 16:02:14 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tools/gst-inspect.c:
+	  tools: gst-inspect: don't print internal pad request function name
+	  This just confuses people, they look at it and try to call it
+	  directly by name, instead of using the public GstElement API.
+	  It stands to reason that it goes without saying that when an
+	  element provides request pads that they can actually be
+	  requested using the standard API, and there's no point in
+	  printing internal implementation details of the element.
+
+2016-08-23 13:27:58 -0300  Thibault Saunier <tsaunier@gnome.org>
+
+	* libs/gst/base/gstbaseparse.c:
+	* libs/gst/base/gstbasesink.c:
+	* libs/gst/base/gstbasesrc.c:
+	* plugins/elements/gstdownloadbuffer.c:
+	* plugins/elements/gstmultiqueue.c:
+	* plugins/elements/gstqueue.c:
+	* plugins/elements/gstqueue2.c:
+	* plugins/elements/gsttypefindelement.c:
+	  Make use of the new GST_ELEMENT_FLOW_ERROR API all around.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=770158
+
+2016-08-23 13:27:20 -0300  Thibault Saunier <tsaunier@gnome.org>
+
+	* docs/gst/gstreamer-sections.txt:
+	* gst/gstelement.h:
+	  element: Add API to more easily post messages about flowing issues
+	  In many parts of the code we raise streaming error when the flow
+	  goes wrong, and each time we create more or less similare error
+	  message. Also that message does not let the application know what
+	  has actually gone wrong. In the new API we add a "flow-return" detail
+	  field inside the GstMessage so that the application has all the information
+	  if it needs it.
+	  API:
+	  GST_ELEMENT_FLOW_ERROR
+	  https://bugzilla.gnome.org/show_bug.cgi?id=770158
+
+2016-08-26 19:27:22 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
+
+	* configure.ac:
+	* gst/gstconfig.h.in:
+	* meson.build:
+	  gstconfig: Decide GST_EXPORT declaration style at build time
+	  We only use GST_EXPORT consistently when building with MSVC by using the
+	  visual studio definitions files (win32/common/*.def), so always disable
+	  it when building with Autotools and only enable it with Meson when
+	  building with MSVC.
+	  This allows you to use MinGW to link to a GStreamer built with MSVC and
+	  get the correct function prototypes to find functions and variables in
+	  DLLs.
+
+2016-08-26 16:21:30 +0900  Wonchul Lee <wonchul.lee@collabora.com>
+
+	* docs/design/part-stream-selection.txt:
+	  docs: fix typo in stream selection docs
+	  https://bugzilla.gnome.org//show_bug.cgi?id=770428
+
+2016-08-26 12:55:04 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* docs/gst/gstreamer-sections.txt:
+	* gst/gstelement.c:
+	* gst/gstelement.h:
+	* win32/common/libgstreamer.def:
+	  element: rename gst_element_message_new_details() to gst_make_element_message_details()
+	  Fixes g-i warning "Gst: Constructor return type mismatch
+	  symbol='gst_element_message_new_details' constructed='Gst.Element'
+	  return='Gst.Structure'".
+	  This is a newly-added function in git that has not been in a stable
+	  release yet, so it's fine to rename it. It's also only used indirectly
+	  via macros.
+
+2016-08-26 12:35:23 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/gstelement.c:
+	* gst/gstmessage.c:
+	* gst/gsttracerutils.c:
+	  docs: fix various gtk-doc warnings
+	  e.g. "warning: multi-line since docs found"
+
+2016-08-26 12:04:33 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/gstinfo.c:
+	  g-i: info: allow passing NULL to gst_debug_remove_log_function()
+	  Useful for removing the default handler from bindings.
+
+2016-08-25 15:04:06 -0300  Thibault Saunier <tsaunier@gnome.org>
+
+	* docs/gst/meson.build:
+	* docs/libs/meson.build:
+	* meson.build:
+	  meson: doc: Fix building documentation when using subprojects
+	  and check the presence of gtk-doc before building the documentation
+
+2016-08-26 03:17:41 +1000  Jan Schmidt <jan@centricular.com>
+
+	* gst/gstvalue.c:
+	* tests/check/gst/gstvalue.c:
+	  value: Implement can_intersect for GstFlagSet types
+	  Make sure that gst_value_can_intersect returns TRUE
+	  for GstFlagSet combinations that can successfully
+	  intersect
+
+2016-08-03 15:20:20 +0200  Carlos Rafael Giani <dv@pseudoterminal.org>
+
+	* plugins/elements/gstqueue2.c:
+	* plugins/elements/gstqueue2.h:
+	* tests/check/elements/queue2.c:
+	  queue2: Add higher-resolution low/high-watermark properties
+	  low/high-watermark are of type double, and given in range 0.0-1.0. This
+	  makes it possible to set low/high watermarks with greater resolution,
+	  which is useful with large queue2 max sizes and watermarks like 0.5%.
+	  Also adding a test to check the fill and watermark level behavior.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=769449
+
+2016-08-03 15:27:40 +0200  Carlos Rafael Giani <dv@pseudoterminal.org>
+
+	* plugins/elements/gstqueue2.c:
+	  queue2: Distinguish between buffering percentage and buffering level
+	  To make the code clearer, and to facilitate future improvements, introduce
+	  a distinction between the buffering level and the buffering percentage.
+	  Buffering level: the queue's current fill level. The low/high watermarks
+	  are in this range.
+	  Buffering percentage: percentage relative to the low/high watermarks
+	  (0% = low watermark, 100% = high watermark).
+	  To that end, get_buffering_percent() is renamed to get_buffering_level(),
+	  and the code at the end that transforms to the buffering percentage is
+	  factored out into a new convert_to_buffering_percent() function. Also,
+	  the buffering level range is parameterized by adding a new constant called
+	  MAX_BUFFERING_LEVEL.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=769449
+
+2016-08-23 10:52:32 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* docs/random/release:
+	  docs: release: add tag signing command
+
+2016-07-07 08:01:24 +0200  Arjen Veenhuizen <arjen.veenhuizen@tno.nl>
+
+	* docs/gst/gstreamer-sections.txt:
+	* gst/gstbuffer.c:
+	* gst/gstbuffer.h:
+	* win32/common/libgstreamer.def:
+	  buffer: add explicit getters and setters for buffer flags
+	  These can be used from bindings.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=768301
+
+2016-08-22 00:01:46 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* libs/gst/check/meson.build:
+	  meson: install libgstcheck-1.0 and add api version to name
+
+2016-08-20 08:54:27 +0900  Hoonhee Lee <hoonhee.lee@lge.com>
+
+	* gst/gststreams.c:
+	  streams: update and emit notify signal only if taglist actually changed
+	  https://bugzilla.gnome.org/show_bug.cgi?id=770161
+
+2016-08-12 20:25:17 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
+
+	* .gitignore:
+	* config.h.meson:
+	* docs/gst/meson.build:
+	* docs/libs/meson.build:
+	* docs/meson.build:
+	* gst/build_mkenum.py:
+	* gst/meson.build:
+	* gst/parse/gen_grammar.py.in:
+	* gst/parse/gen_lex.py.in:
+	* gst/parse/meson.build:
+	* gst/printf/meson.build:
+	* libs/gst/base/meson.build:
+	* libs/gst/check/libcheck/meson.build:
+	* libs/gst/check/meson.build:
+	* libs/gst/controller/meson.build:
+	* libs/gst/helpers/meson.build:
+	* libs/gst/meson.build:
+	* libs/gst/net/meson.build:
+	* libs/meson.build:
+	* meson.build:
+	* meson_options.txt:
+	* pkgconfig/meson.build:
+	* plugins/elements/meson.build:
+	* plugins/meson.build:
+	* po/meson.build:
+	* tests/benchmarks/meson.build:
+	* tests/check/meson.build:
+	* tests/examples/adapter/meson.build:
+	* tests/examples/controller/meson.build:
+	* tests/examples/helloworld/meson.build:
+	* tests/examples/memory/meson.build:
+	* tests/examples/meson.build:
+	* tests/examples/netclock/meson.build:
+	* tests/examples/ptp/meson.build:
+	* tests/examples/stepping/meson.build:
+	* tests/examples/streamiddemux/meson.build:
+	* tests/examples/streams/meson.build:
+	* tests/meson.build:
+	* tests/misc/meson.build:
+	* tools/meson.build:
+	  Add support for Meson as alternative/parallel build system
+	  https://github.com/mesonbuild/meson
+	  With contributions from:
+	  Tim-Philipp Müller <tim@centricular.com>
+	  Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
+	  Jussi Pakkanen <jpakkane@gmail.com> (original port)
+	  Highlights of the features provided are:
+	  * Faster builds on Linux (~40-50% faster)
+	  * The ability to build with MSVC on Windows
+	  * Generate Visual Studio project files
+	  * Generate XCode project files
+	  * Much faster builds on Windows (on-par with Linux)
+	  * Seriously fast configure and building on embedded
+	  ... and many more. For more details see:
+	  http://blog.nirbheek.in/2016/05/gstreamer-and-meson-new-hope.html
+	  http://blog.nirbheek.in/2016/07/building-and-developing-gstreamer-using.html
+	  Building with Meson should work on both Linux and Windows, but may
+	  need a few more tweaks on other operating systems.
+
+2016-08-13 13:55:15 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/Makefile.am:
+	* pkgconfig/gstreamer.pc.in:
+	  Move gstconfig.h back to normal include dir
+	  Now that it's arch-independent again. Will need fixes in cerbero too.
+
+2016-06-21 18:59:49 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
+
+	* configure.ac:
+	* gst/gstconfig.h.in:
+	  gstconfig.h: Detect unaligned access support at compile-time
+	  This makes gstconfig.h completely arch-independent. Should cover all
+	  compilers that gstreamer is known to build on, and all architectures
+	  that I could find information on. People are encouraged to file bugs if
+	  their platform/arch is missing.
+
+2016-08-13 09:55:46 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* Makefile.am:
+	* configure.ac:
+	* docs/gst/gstreamer-sections.txt:
+	* gst/Makefile.am:
+	* gst/gst.c:
+	* gst/gstclock.c:
+	* gst/gstconfig.h.in:
+	* gst/gstminiobject.c:
+	* gst/gstobject.c:
+	* gst/gsttrace.c:
+	* gst/gsttrace.h:
+	* po/POTFILES.in:
+	* tests/check/Makefile.am:
+	* win32/common/gstconfig.h:
+	* win32/common/libgstreamer.def:
+	  Remove old alloc tracing code now that we have a GstTracer-based replacement
+	  It's been internal API only in 1.x.
+
+2016-08-12 16:15:25 +0200  Edward Hervey <edward@centricular.com>
+
+	* plugins/elements/gstqueue2.c:
+	  queue2: Post buffering messages earlier in ringbuffer mode
+	  In ringbuffer mode we need to make sure we post buffering messages *before*
+	  blocking to wait for data to be drained.
+	  Without this, we would end up in situations like this:
+	  * pipeline is pre-rolling
+	  * Downstream demuxer/decoder has pushed data to all sinks, and demuxer thread
+	  is blocking downstream (i.e. not pulling from upstream/queue2).
+	  * Therefore pipeline has pre-rolled ...
+	  * ... but queue2 hasn't filled up yet, therefore the application waits for
+	  the buffering 100% messages before setting the pipeline to PLAYING
+	  * But queue2 can't post that message, since the 100% message will be posted
+	  *after* there is room available for that last buffer.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=769802
+
+2016-08-08 16:42:06 +0200  Josep Torra <n770galaxy@gmail.com>
+
+	* plugins/elements/gstmultiqueue.c:
+	  multiqueue: removed redundant call to g_thread_self
+	  Remove an unneeded call to g_thread_self and minor coding style fix.
+
+2016-03-16 18:00:15 +1100  Jan Schmidt <jan@centricular.com>
+
+	* plugins/elements/gstinputselector.c:
+	  inputselector: Handle stream-group-done
+	  Handle the new stream-group-done message to unblock pads which
+	  are waiting for the running time to advance on that group.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=768995
+
+2016-03-14 14:20:42 +1100  Jan Schmidt <jan@centricular.com>
+
+	* docs/gst/gstreamer-sections.txt:
+	* gst/gstevent.c:
+	* gst/gstevent.h:
+	* gst/gstpad.c:
+	* gst/gstquark.c:
+	* gst/gstquark.h:
+	* tests/check/gst/gstevent.c:
+	* win32/common/libgstreamer.def:
+	  events: Implement the stream-group-done event
+	  A new event which precedes EOS in situations where we
+	  need downstream to unblock any pads waiting on a stream
+	  before we can send EOS. E.g, decodebin draining a chain
+	  so it can switch pads.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=768995
+
+2016-07-25 11:22:36 +0200  Carlos Rafael Giani <dv@pseudoterminal.org>
+
+	* docs/gst/gstreamer-sections.txt:
+	* gst/gstmessage.c:
+	* gst/gstmessage.h:
+	* gst/gstquark.c:
+	* gst/gstquark.h:
+	* tests/check/gst/gstmessage.c:
+	* win32/common/libgstreamer.def:
+	  message: Add redirect message
+	  Redirection messages are already used in fragmented sources and in
+	  uridecodebin, so it makes sense to introduce these as an official message
+	  type.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=631673
+
+2016-07-25 19:15:15 +1000  Jan Schmidt <jan@centricular.com>
+
+	* plugins/elements/gstinputselector.c:
+	  inputselector: Wake other pads when selected goes EOS
+	  Other pads that are waiting for the stream on the selected
+	  pad to advance before they finish waiting themselves
+	  should be given the chance to do so when the selected pad
+	  goes EOS. Fixes problems where input streams can end up
+	  waiting forever if the active stream goes EOS earlier than
+	  their own end time.
+
+2016-07-24 01:35:41 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/gstelement.h:
+	  element: fix GST_ELEMENT_ERROR() error code expansion
+	  In some corner cases, the error 'code' part passed to
+	  GST_ELEMENT_ERROR() is a valid define as well, in which
+	  case it won't survive two levels of macro expansion, but
+	  only one. Fixes:
+	  oss4-sink.c: In function ‘gst_oss4_sink_open’:
+	  error: ‘GST_RESOURCE_ERROR_0x00000002’ undeclared (first use in this function)
+	  GST_ ## domain ## _ERROR_ ## code, __txt, __dbg, __FILE__,
+	  which is from GST_ELEMENT_ERROR(el,RESOURCE,OPEN_WRITE,..)
+	  and OPEN_WRITE happens to be defined to 2 here.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756806
+	  https://bugzilla.gnome.org/show_bug.cgi?id=769117
+
+2016-07-22 17:32:33 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/gstmessage.c:
+	  message: fix some nonsensical annotations
+
+2016-07-22 15:25:09 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* docs/gst/gstreamer-sections.txt:
+	  docs: add GST_ELEMENT_*_WITH_DETAILS to doc list
+
+2016-07-22 15:04:58 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* docs/gst/gstreamer-sections.txt:
+	  docs: list new message details apis where they seem to belong
+
+2016-07-22 14:59:56 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* win32/common/libgstreamer.def:
+	  libgstreamer.def: fix mentions of new message details api
+	  I had not updated it after the review changes
+
+2016-03-02 11:22:23 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst/gstelement.c:
+	* gst/gstelement.h:
+	* gst/gstmessage.c:
+	* gst/gstmessage.h:
+	* tests/check/gst/gstmessage.c:
+	* win32/common/libgstreamer.def:
+	  message: new API for additional custom data to error messages
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756806
+
+2016-07-20 12:22:10 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* plugins/tracers/gstleaks.c:
+	* plugins/tracers/gstleaks.h:
+	  tracers: leaks: update type filter later for unknown types
+	  This allow us to filter using an object type which is implemented
+	  by a plugin like, say, GstGtkGLSink.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=768989
+
+2016-07-19 14:45:53 +0200  Aurélien Zanelli <aurelien.zanelli@parrot.com>
+
+	* libs/gst/base/gstcollectpads.c:
+	  collectpads: add g-i transfer annotations to peek/pop/read_buffer/take_buffer functions
+	  https://bugzilla.gnome.org/show_bug.cgi?id=768948
+
+2016-07-19 23:18:24 +1000  Jan Schmidt <jan@centricular.com>
+
+	* tests/check/libs/gstnetclientclock.c:
+	  tests: Use gst_clock_wait_for_sync () for net client clock
+	  Instead of looping, use the gst_clock_wait_for_sync() function
+	  to give clocks up to 1 second to synchronise
+
+2016-07-13 15:43:21 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* gst/gstmessage.c:
+	  message: fix annotation of parse_stream_{collection,streams_selected}
+	  gst_structure_id_get() returns a new reference so the returned object is
+	  actually (transfer full).
+	  The unit tests was already unreffing the objects.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=768776
+
+2016-07-13 15:43:21 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* gst/gstdevicemonitor.c:
+	* gst/gstmessage.c:
+	  message: fix annotation of parse_device_{added,removed}
+	  gst_structure_id_get() returns a new reference so the returned device is
+	  actually (transfer full).
+	  The code using this API was already correct but the code example in
+	  comments was not.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=768776
+
+2016-07-14 16:40:22 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* gst/gstpad.c:
+	  pad: add g-i transfer annotatation to _store_sticky_event()
+	  For clarity.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=768810
+
+2016-07-12 12:32:56 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* libs/gst/base/gstbasesrc.c:
+	  basesrc: Fix automatic-eos=false mode if a segment.stop is given
+	  If segment.stop was given, and the subclass provides a size that might be
+	  smaller than segment.stop and also smaller than the actual size, we would
+	  already stop there.
+	  Instead try reading up to segment.stop, the goal is to ignore the (possibly
+	  inaccurate) size the subclass gives and finish until segment.stop or when the
+	  subclass tells us to stop.
+
+2016-07-11 21:13:28 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From f363b32 to f49c55e
+
+2016-07-11 18:45:49 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
+
+	* tests/benchmarks/capsnego.c:
+	  benchmarks: Fix potential stack corruption in capsnego test
+	  flavour_str is a non-const pointer that will be written to if the -f
+	  option is passed
+
+2016-07-11 11:34:02 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* plugins/tracers/gstleaks.c:
+	  leaks: check return values of libunwind calls
+
+2016-07-11 09:58:47 +0200  Edward Hervey <edward@centricular.com>
+
+	* plugins/elements/gstqueue2.c:
+	  queue2: Fix average input rate calculation on small input range
+	  When dealing with small-ish input data coming into queue2, such as
+	  adaptivedemux fragments, we would never take into account the last
+	  <200ms of data coming in.
+	  The problem is that usually on TCP connection the download rate
+	  gradually increases (i.e. the rate is lower at the beginning of a
+	  download than it is later on). Combined with small download time (less
+	  than a second) we would end up with a computed average input rate
+	  which was sometimes up to 30-50% off from the *actual* average input
+	  rate for that fragment.
+	  In order to fix this, force the average input rate calculation when
+	  we receive an EOS so that we take into account that final window
+	  of data.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=768649
+
+2016-07-08 16:31:56 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* gst/gstminiobject.c:
+	  miniobject: weak_unref: display the pointer of the object if failing
+	  That's generally the most useful information to help debugging the
+	  problem.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=768579
+
+2016-07-08 16:29:38 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* gst/gstbin.c:
+	  bin: properly display the type of the removed message
+	  Makes debugging easier.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=768579
+
+2016-07-08 17:46:06 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/gstelement.c:
+	  element: re-create threadpool after cleaning up tasks
+	  We don't free this from gst_deinit() but from gst_task_cleanup_all(),
+	  so more GStreamer API may be called. In particular makes unit tests
+	  work again with CK_FORK=no.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=768577
+
+2016-07-08 16:53:51 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* plugins/tracers/gstleaks.c:
+	* plugins/tracers/gstleaks.h:
+	  leaks: warn if object is destroyed while the tracer is disposing
+	  This should not happen and generally means some thread is still running.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=768578
+
+2016-07-08 16:36:01 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* gst/gst_private.h:
+	* gst/gstelement.c:
+	* gst/gsttask.c:
+	  element: clean up thread pool from gst_task_cleanup_all()
+	  This ensures that all async operations (started from gst_element_call_async())
+	  have been completed and so there is no extra thread running.
+	  Fix races when checking for leaks on unit tests as some of those
+	  operations were still running when the leaks tracer was checking for
+	  leaked objects.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=768577
+
+2016-07-08 11:15:06 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* configure.ac:
+	* plugins/tracers/gstleaks.c:
+	  leaks tracer: use G_OS_UNIX to check for signal support
+	  Checking for signal.h is not good enough as it's present in Windows.
+	  Those signals are UNIX specific anyway.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=767857
+
+2016-06-22 16:25:16 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* configure.ac:
+	* docs/design/part-tracing.txt:
+	* plugins/tracers/Makefile.am:
+	* plugins/tracers/gstleaks.c:
+	* plugins/tracers/gstleaks.h:
+	  leaks tracer: add creation stack trace support
+	  This allow us to provide the trace of leaked objects making it easier
+	  to debug.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=767862
+
+2016-06-01 11:08:39 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* docs/design/part-tracing.txt:
+	* plugins/tracers/gstleaks.c:
+	* plugins/tracers/gstleaks.h:
+	  leaks tracer: add checkpoint support using SIGUSR2
+	  https://bugzilla.gnome.org/show_bug.cgi?id=767857
+
+2016-05-31 16:56:26 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* configure.ac:
+	* docs/design/part-tracing.txt:
+	* plugins/tracers/gstleaks.c:
+	  leaks tracer: log alive objects when receiving SIGUSR1
+	  We don't want to automatically catch signals so use an env variable to
+	  enable this feature.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=767857
+
+2016-07-07 13:15:51 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* plugins/elements/gstfunnel.c:
+	  funnel: Only forward sticky events on GAP events if needed
+	  That is, if the active pad changed and if forwarding of sticky events is
+	  requested at all. We otherwise forward events too often.
+
+2016-07-05 16:50:16 +0200  Miguel París Díaz <mparisdiaz@gmail.com>
+
+	* gst/gstpad.c:
+	  pad: check query caps answered and caps not NULL
+	  https://bugzilla.gnome.org/show_bug.cgi?id=768450
+
+2016-07-06 13:50:56 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* configure.ac:
+	  Back to development
+
+=== release 1.9.1 ===
+
+2016-07-06 13:05:02 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/gstreamer-plugins.hierarchy:
+	* docs/plugins/inspect/plugin-coreelements.xml:
+	* gstreamer.doap:
+	* win32/common/config.h:
+	* win32/common/gstenumtypes.c:
+	* win32/common/gstenumtypes.h:
+	* win32/common/gstversion.h:
+	  Release 1.9.1
+
+2016-07-06 11:37:56 +0300  Sebastian Dröge <sebastian@centricular.com>
 
 	* po/af.po:
 	* po/az.po:
@@ -48,40 +1019,566 @@
 	* po/zh_TW.po:
 	  Update .po files
 
-2016-08-12 16:15:25 +0200  Edward Hervey <edward@centricular.com>
+2016-07-06 10:17:37 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* po/da.po:
+	* po/hr.po:
+	* po/pt_BR.po:
+	* po/sk.po:
+	  po: Update translations
+
+2016-07-05 12:17:18 +0200  Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
+
+	* libs/gst/base/gstbaseparse.c:
+	  baseparse: Don't add calculated bitrates until threshold
+	  Waiting before posting calculated bitrates seems to be the
+	  intent of the code, so avoid adding them to the tag list
+	  pushed with the first frame.
+	  When the threshold is reached, gst_base_parse_update_bitrates
+	  sets tags_changed, so this posts the calculated ones right
+	  that moment.
+	  This prevents an insane average calculated from just the
+	  first (key) frame from getting posted.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=768439
+
+2016-07-04 10:00:38 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* libs/gst/base/gstbaseparse.c:
+	  baseparse: Make sure to not create an invalid event order when generating the default CAPS event because of a GAP event
+	  There must be a SEGMENT event before the GAP event, and SEGMENT events must
+	  come after any CAPS event. We however did not produce any CAPS yet, so we need
+	  to ensure to insert the CAPS event before the SEGMENT event into the pending
+	  events list.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=766970
+
+2016-07-01 22:34:59 +1000  Jan Schmidt <jan@centricular.com>
+
+	* gst/gstinfo.h:
+	  gstinfo: Avoid gcc 6 warning that breaks the tests build
+	  gcc 6 has problems detecting and avoiding throwing
+	  a warning for tautological compares in macros (they
+	  should only trigger for compares outside macros).
+	  Avoid them with a nasty cast of one parameter to void *
+	  https://bugzilla.gnome.org/show_bug.cgi?id=764526
+
+2016-07-01 09:44:12 +0200  Edward Hervey <edward@centricular.com>
+
+	* plugins/elements/gstmultiqueue.c:
+	  multiqueue: Fix behaviour with not-linked and eos pads
+	  This is an update on c9b6848885f4675d447e823c8fb117e247658252
+	  multiqueue: Fix not-linked pad handling at EOS
+	  While that commit did fix the behaviour if upstream sent a GST_EVENT_EOS,
+	  it would break the same issue when *downstream* returns GST_FLOW_EOS
+	  (which can happen for example when downstream decoders receive data
+	  from after the segment stop).
+	  GST_PAD_IS_EOS() is only TRUE when a GST_EVENT_EOS has flown through it
+	  and not when a GST_EVENT_EOS has gone through it.
+	  In order to handle both cases, also take into account the last flow
+	  return.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=763770
+
+2016-06-30 15:07:28 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/gstevent.c:
+	* gst/gstevent.h:
+	* gst/gstmessage.c:
+	* gst/gstmessage.h:
+	* gst/gststreamcollection.c:
+	* gst/gststreamcollection.h:
+	* gst/gststreams.c:
+	* gst/gstutils.c:
+	  streams: sprinkle some Since: markers for docs
+
+2016-06-30 14:37:17 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* plugins/elements/gstmultiqueue.c:
+	  multiqueue: add gtk-doc blurb for new pad property
+
+2016-02-10 11:42:04 +0100  Edward Hervey <edward@centricular.com>
+
+	* plugins/elements/gstmultiqueue.c:
+	* plugins/elements/gstmultiqueue.h:
+	  multiqueue: Add a pad property to "group" streams
+	  When syncing by running time, multiqueue will throttle unlinked streams
+	  based on a global "high-time" and the pending "next_time" of a stream.
+	  The idea is that we don't want unlinked streams to be "behind" the global
+	  running time of linked streams, so that if/when they get linked (like when
+	  switching tracks) decoding/playback can resume from the same position as
+	  the other streams.
+	  The problem is that it assumes elements downstream will have a more or less
+	  equal buffering/latency ... which isn't the case for streams of different
+	  type. Video decoders tend to have higher latency (and therefore consume more
+	  from upstream to output a given decoded frame) compared to audio ones, resulting
+	  in the computed "high_time" being at the position of the video stream,
+	  much further than the audio streams.
+	  This means the unlinked audio streams end up being quite a bit after the linked
+	  audio streams, resulting in gaps when switching streams.
+	  In order to mitigate this issue, this patch adds a new "group-id" pad property
+	  which allows users to "group" streams together. Calculating the high-time will
+	  now be done not only globally, but also per group. This ensures that within
+	  a given group unlinked streams will be throttled by that group's high-time
+	  instead.
+	  This fixes gaps when switching downstream elements (like switching audio tracks).
+
+2015-06-12 10:53:23 +0200  Edward Hervey <edward@centricular.com>
+
+	* docs/design/part-stream-selection.txt:
+	* docs/gst/gstreamer-docs.sgml:
+	* docs/gst/gstreamer-sections.txt:
+	* gst/Makefile.am:
+	* gst/gst.c:
+	* gst/gst.h:
+	* gst/gstevent.c:
+	* gst/gstevent.h:
+	* gst/gstmessage.c:
+	* gst/gstmessage.h:
+	* gst/gstquark.c:
+	* gst/gstquark.h:
+	* gst/gststreamcollection.c:
+	* gst/gststreamcollection.h:
+	* gst/gststreams.c:
+	* gst/gststreams.h:
+	* gst/gstutils.c:
+	* gst/gstutils.h:
+	* tests/check/Makefile.am:
+	* tests/check/gst/.gitignore:
+	* tests/check/gst/gstevent.c:
+	* tests/check/gst/gstmessage.c:
+	* tests/check/gst/gststream.c:
+	* tests/check/gst/gststream.h:
+	* win32/common/libgstreamer.def:
+	  gst: New Stream listing/selection system
+	  * GstStream
+	  * GstStreamCollection
+	  * GST_EVENT_SELECT_STREAMS
+	  * GST_MESSAGE_STREAM_COLLECTION
+
+2016-06-29 23:24:02 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/gstbufferpool.c:
+	* gst/gstbus.c:
+	* gst/gstpoll.c:
+	  poll: #define EWOULDBLOCK to EAGAIN if it's not defined on Windows
+
+2016-06-29 14:05:18 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/gstbufferpool.c:
+	  bufferpool: Fix handling of the GstPoll
+	  Especially if multiple threads are waiting for buffers to be available again,
+	  the current code was wrong. Fix this and document clearly how the GstPoll is
+	  supposed to be used.
+	  Also fix some potential races with reading from the GstPoll before writing
+	  actually happened.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=767979
+
+2016-06-29 14:02:55 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/gstbus.c:
+	  bus: Make sure to always read the control after popping a message
+	  It might happen that we popped the message before writing of the control
+	  happened. In this case we just have to retry again a bit later, and failure to
+	  do so will cause an additional byte in the control and the GSource /
+	  gst_poll_wait() to always wake up again immediately.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=750397
+
+2016-06-29 13:37:28 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/gstsystemclock.c:
+	  systemclock: Improve GstPoll handling and don't check for impossible errno values
+	  Also just read/write control every time, GstPoll is optimized by itself
+	  already to only do I/O if switching between empty and one byte.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=750397
+
+2016-06-29 13:35:35 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/gstpoll.c:
+	  poll: Clarify when FALSE is returned from read/write_control()
+	  And also mention what the expected values of errno are going to be.
+	  write_control() will only ever return FALSE if there was a critical error. It
+	  will never return because of EINTR, EAGAIN or EWOULDBLOCK.
+	  read_control() will return FALSE if there was no byte to read, in which case
+	  errno would be EWOULDBLOCK.
+	  In all other cases there was a critical error.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=750397
+
+2016-06-29 13:26:57 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/gstpoll.c:
+	  poll: set_controllable(), restart() and set_flushing() are only valid for non-timer GstPolls
+	  On timer GstPolls it will cause the control socket state to become
+	  inconsistent as now one less read_control() than write_control() be would
+	  needed.
+	  Similarly, read_control() and write_control() are only valid on timer
+	  GstPolls.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=750397
+
+2016-06-29 13:11:01 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/gstpoll.h:
+	  poll: Warn if the return value of gst_poll_read_control() is unused
+	  This might fail even under correct usage, e.g. if read_control() is called
+	  from another thread before write_control() finished in another. It has to be
+	  retried then, or other measures have to be taken, depending on how it is used
+	  by the surrounding code.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=750397
+
+2016-06-29 18:57:42 +0200  Matthew Gruenke <mgruenke@tycoint.com>
+
+	* gst/gstpoll.c:
+	  poll: Fix various race conditions with read_control() and write_control()
+	  This addresses slightly different race conditions on Linux and Windows, and
+	  fixes gst_poll_read_control() when control_pending == 0.
+	  On Linux, the socketpair() used for control should not be made O_NONBLOCK.
+	  If there's any propagation delay between set->control_write_fd.fd and
+	  set->control_read_fd.fd, even the mutex now held will not be sufficient to
+	  prevent a race condition.  There's no benefit to using O_NONBLOCK, here.
+	  Only liabilities.
+	  For Windows, it's necessary to fix the race condition between testing
+	  set->control_pending and performing WAKE_EVENT()/RELEASE_EVENT().  This is
+	  accomplished by acquiring and holding set->lock, for both of these operations.
+	  We could optimize the Linux version by making this Windows-specific.
+	  For consistency with the Linux implementation, Windows' RELEASE_EVENT()
+	  has also been made to block, although it should never happen.
+	  Also, changed release_wakeup() to return TRUE and decrement control_pending
+	  only when > 0.  Furthermore, RELEASE_EVENT() is called only when
+	  control_pending == 1.
+	  Finally, changed control_pending to use normal, non-atomic arithmetic
+	  operations, since it's now protected by set->lock.
+	  Note: even though the underlying signaling mechanisms are blocking,
+	  release_wakeup() is effectively non-blocking, as it will only attempt to read
+	  from control_read_fd.fd after a byte has been written to control_write_fd.fd
+	  or WaitForSingleObject() after it's been signaled.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=750397
+
+2016-06-28 15:01:17 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* gst/gstbus.c:
+	  bus: chain up GObject::constructed() to the parent class' implementation
+	  Needed so GstBus can be tracked by the leaks tracer.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=768141
+
+2016-06-24 05:26:09 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
+
+	* gst/gstconfig.h.in:
+	  gstconfig.h: Don't use extern with dllexport
+	  GCC emits an error for this with -Werror:
+	  plugin.c:22:1: error: 'gst_plugin_desc' initialized and declared 'extern' [-Werror]
+	  This matches how glib does symbol exporting.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=767463
+
+2016-06-21 19:49:15 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
+
+	* configure.ac:
+	* gst/gstconfig.h.in:
+	  win32: Don't use dllexport/import when only building statically
+	  If the prototypes in the public API have dllimport in them when building
+	  statically on Windows, the compiler will look for symbols with symbol
+	  mangling and indirection corresponding to a DLL. This will cause a build
+	  failure when trying to link tests/examples/etc.
+	  External users of GStreamer also need to define -DGST_STATIC_COMPILATION
+	  if they want to link to static gstreamer libraries on Windows.
+	  A similar version of this patch has been committed to all gstreamer
+	  repositories.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=767463
+
+2016-06-21 11:45:26 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* common:
+	  Automatic update of common submodule
+	  From ac2f647 to f363b32
+
+2016-06-15 16:24:27 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* tests/check/elements/queue2.c:
+	  tests: add a test for small ring buffer sizes
+	  https://bugzilla.gnome.org/show_bug.cgi?id=767688
+
+2016-06-15 13:43:59 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
 
 	* plugins/elements/gstqueue2.c:
-	  queue2: Post buffering messages earlier in ringbuffer mode
-	  In ringbuffer mode we need to make sure we post buffering messages *before*
-	  blocking to wait for data to be drained.
-	  Without this, we would end up in situations like this:
-	  * pipeline is pre-rolling
-	  * Downstream demuxer/decoder has pushed data to all sinks, and demuxer thread
-	  is blocking downstream (i.e. not pulling from upstream/queue2).
-	  * Therefore pipeline has pre-rolled ...
-	  * ... but queue2 hasn't filled up yet, therefore the application waits for
-	  the buffering 100% messages before setting the pipeline to PLAYING
-	  * But queue2 can't post that message, since the 100% message will be posted
-	  *after* there is room available for that last buffer.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=769802
+	  queue2: fix crash deleting current region for small ring buffers
+	  Ensure we do not attempt to destroy the current range. Doing so
+	  causes the current one to be left dangling, and it may be dereferenced
+	  later, leading to a crash.
+	  This can happen with a very small queue2 ring buffer (10000 bytes)
+	  and 4 kB buffers.
+	  repro case:
+	  gst-launch-1.0 fakesrc sizetype=2 sizemax=4096 ! \
+	  queue2 ring-buffer-max-size=1000 ! fakesink sync=true
+	  https://bugzilla.gnome.org/show_bug.cgi?id=767688
 
-2016-07-11 09:58:47 +0200  Edward Hervey <edward@centricular.com>
+2016-06-20 11:34:49 +0100  Tim-Philipp Müller <tim@centricular.com>
 
-	* plugins/elements/gstqueue2.c:
-	  queue2: Fix average input rate calculation on small input range
-	  When dealing with small-ish input data coming into queue2, such as
-	  adaptivedemux fragments, we would never take into account the last
-	  <200ms of data coming in.
-	  The problem is that usually on TCP connection the download rate
-	  gradually increases (i.e. the rate is lower at the beginning of a
-	  download than it is later on). Combined with small download time (less
-	  than a second) we would end up with a computed average input rate
-	  which was sometimes up to 30-50% off from the *actual* average input
-	  rate for that fragment.
-	  In order to fix this, force the average input rate calculation when
-	  we receive an EOS so that we take into account that final window
-	  of data.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=768649
+	* tests/check/gst/gstobject.c:
+	  tests: gstobject: fix typo in test name
+
+2016-06-16 14:08:01 -0700  Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
+
+	* docs/design/part-tracing.txt:
+	  docs/design/part-tracing: fix reference to renamed func
+
+2016-06-08 12:34:53 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* plugins/elements/gsttee.c:
+	  tee: Properly handle return value when only 1 pad
+	  This patch handle the case when you have 1 pad (so the fast path is
+	  being used) but this pad is removed. If we are in allow-not-linked, we
+	  should return GST_FLOW_OK, otherwise, we should return GST_FLOW_UNLINKED
+	  and ignore the meaningless return value obtained from pushing.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=767413
+
+2016-06-16 15:52:16 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* scripts/gst-plot-traces.sh:
+	  gst-plot-traces.sh: add a script to plot gst-tracer graphs
+	  The script extracts cpu-usage data from a tracelog and plots it via gnuplot.
+
+2016-06-15 16:12:23 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/gstdevice.c:
+	  device: Fix typo
+	  paramater -> parameter
+
+2016-06-14 19:16:33 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/gstinfo.h:
+	  info: flesh out GST_PTR_FORMAT docs a bit
+
+2016-06-13 18:33:27 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* libs/gst/base/gstbasesink.c:
+	  basesink: Update start time when losing state only if we were in PLAYING
+	  If we were in PAUSED, the current clock time and base time don't have much to
+	  do with the running time anymore as the clock might have advanced while we
+	  were PAUSED. The system clock does that for example, audio clocks often don't.
+	  Updating the start time in PAUSED will cause a) the wrong position to be
+	  reported, b) step events to step not just the requested amount but the amount
+	  of time we spent in PAUSED. The start time should only ever be updated when
+	  going from PLAYING to PAUSED to remember the current running time (to be able
+	  to compensate later when going to PLAYING for the clock time advancing while
+	  PAUSED), not when we are already in PAUSED.
+	  Based on a patch by Kishore Arepalli <kishore.arepalli@gmail.com>
+	  The updating of the start time when the state is lost was added in commit
+	  ba943a82c0bbfd17c9ee9f5068d44c9d9274fd13 to fix the position reporting when
+	  the state is lost. This still works correctly after this change.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=739289
+
+2016-06-11 22:18:06 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/gstpad.c:
+	  pad: Log pad offsets as signed times
+
+2016-06-11 21:56:19 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* tests/check/gst/gstpad.c:
+	  pad: Also check the number of segment events and if other serialized events and queries trigger segment updating too
+	  https://bugzilla.gnome.org/show_bug.cgi?id=765049
+
+2016-06-11 21:37:47 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* tests/check/gst/gstpad.c:
+	  pad: Add unit test for pad offset handling on src pads
+	  https://bugzilla.gnome.org/show_bug.cgi?id=765049
+
+2016-06-07 11:32:47 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* docs/libs/gstreamer-libs-sections.txt:
+	* libs/gst/base/gstadapter.c:
+	* libs/gst/base/gstadapter.h:
+	* tests/check/libs/adapter.c:
+	* win32/common/libgstbase.def:
+	  adapter: Rename functions and implement new functions, update test
+	  We don't do calculations with different units (buffer offsets and bytes)
+	  anymore but have functions for:
+	  1) getting the number of bytes since the last discont
+	  2) getting the offset (and pts/dts) at the last discont
+	  and the previously added function to get the last offset and its distance from
+	  the current adapter position.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=766647
+
+2016-05-19 10:31:02 +0200  Edward Hervey <edward@centricular.com>
+
+	* docs/libs/gstreamer-libs-sections.txt:
+	* libs/gst/base/gstadapter.c:
+	* libs/gst/base/gstadapter.h:
+	* tests/check/libs/adapter.c:
+	* win32/common/libgstbase.def:
+	  adapter: Add methods to query current offset
+	  API: gst_buffer_prev_offset
+	  API: gst_buffer_get_offset_from_discont
+	  The gst_buffer_get_offset_from_discont() method allows retrieving the current
+	  offset based on the GST_BUFFER_OFFSET of the buffers that were pushed in.
+	  The offset will be set initially by the GST_BUFFER_OFFSET of
+	  DISCONT buffers, and then incremented by the sizes of the following
+	  buffers.
+	  The gst_buffer_prev_offset() method allows retrievent the previous
+	  GST_BUFFER_OFFSET regardless of flags. It works in the same way as
+	  the other gst_buffer_prev_*() methods.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=766647
+
+2016-06-09 17:42:13 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/gstconfig.h.in:
+	  gstconfig.h.in: indent #if #else jungle for better readability
+
+2016-06-08 12:11:19 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* docs/gst/gstreamer-sections.txt:
+	* gst/gstutils.c:
+	* gst/gstutils.h:
+	* win32/common/libgstreamer.def:
+	  utils: Add gst_pad_link_maybe_ghosting() for consistency
+	  We already had a _full() version, but having that alone seems inconsistent.
+	  Add a non-full version that mirrors the behaviour of gst_pad_link() vs
+	  gst_pad_link_full().
+
+2016-05-22 13:10:06 +0200  Edward Hervey <edward@centricular.com>
+
+	* libs/gst/base/gstbaseparse.c:
+	  baseparse: Make sure DISCONT flags are properly propagated
+	  If we drop a frame that contained a discontinuity, we must remember
+	  that for the next frame that *will* be pushed downstream.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=766795
+
+2016-06-04 13:31:58 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/gstdeviceprovider.c:
+	  deviceprovider: remove base_class_finalize function
+	  It's not going to get called anyway.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=765540
+
+2016-06-04 13:11:55 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/gstelement.c:
+	  element: remove base_class_finalize_func which is never called
+	  Won't be called for static types, so no point keeping it around.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=765540
+
+2016-06-03 13:55:44 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* plugins/tracers/gstleaks.c:
+	  tracers: leaks: some micro-optimisations
+	  - we know number of filter items is not going to change,
+	  but compiler doesn't
+	  - only do GST_IS_TRACER check for GObjects, not mini objects
+	  - use non-type check cast macros in performance critical paths
+
+2016-05-10 09:29:12 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* docs/design/part-tracing.txt:
+	* plugins/tracers/Makefile.am:
+	* plugins/tracers/gstleaks.c:
+	* plugins/tracers/gstleaks.h:
+	* plugins/tracers/gsttracers.c:
+	  tracers: add leaks tracer
+	  https://bugzilla.gnome.org/show_bug.cgi?id=765052
+
+2016-05-30 12:11:13 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* gst/gstcaps.c:
+	* gst/gstdeviceproviderfactory.c:
+	* gst/gstelementfactory.c:
+	* gst/gstpadtemplate.c:
+	* gst/gsttask.c:
+	* libs/gst/net/gstnetclientclock.c:
+	  Use MAY_BE_LEAKED_FLAG
+	  This helps having "make check" passing with the leaks tracer enabled.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=766008
+
+2016-05-09 16:31:36 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* gst/gstminiobject.c:
+	* gst/gstobject.c:
+	* gst/gsttracerutils.c:
+	* gst/gsttracerutils.h:
+	  tracing: add hooks when objects or miniobjects are created and destroyed
+	  https://bugzilla.gnome.org/show_bug.cgi?id=765052
+
+2016-05-09 16:56:56 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* gst/gst.c:
+	  gst_deinit: move down tracers cleaning
+	  We want the tracer detecting leaks to be finalized as late as possible
+	  to give the chance to other gst components to be properly cleaned first.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=765052
+
+2016-05-10 11:06:42 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* tests/check/gst/gstplugin.c:
+	  tests: plugin: remove feature refcount assert
+	  This check fails if one, or more, tracers are loaded while running the
+	  test. The new "leaks" tracer will be able to check for leaks anyway.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=765052
+
+2016-04-14 12:25:43 +0300  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* gst/gststructure.c:
+	  tracerrecord: allow G_TYPE_POINTER for field types
+	  Tracers may want to display the address of an object.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=765052
+
+2016-05-30 13:42:36 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* tests/check/gst/gstobject.c:
+	  gstobject: split up name tests
+	  It is better to have separate tests:
+	  1) the test name will tell what is broekn when the test fails
+	  2) we still run the other tests when one assert fails
+	  3) the tests are easier to understand
+	  4) we don't rely on sie effect of previous actions
+	  5) ...
+	  Also ix the assertion message for the name checks (Gst -> fakeobject).
+
+2016-05-30 02:06:01 -0700  Stefan Sauer <ensonic@users.sf.net>
+
+	* docs/design/part-tracing.txt:
+	  design: update design doc
+	  Some of the api was renamed before the merge.
+
+2016-05-30 02:04:18 -0700  Stefan Sauer <ensonic@users.sf.net>
+
+	* gst/gstquery.c:
+	  docs: xref the free function and expand allocation query docs
+	  Add xrefs for how to parse pool details from an allocation query.
+
+2016-05-26 14:43:10 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* tests/check/gst/gstobject.c:
+	  object: Add _set_name() test on parented object
+	  This is not allowed, and set_name() should fail.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=766923
+
+2016-05-26 14:41:38 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* tests/check/gst/gstobject.c:
+	  object: Check that name change are notified once
+	  GObject allow calling g_object_notify() within set_property() and
+	  won't notify it twice. As it was raised during review, add a unit test to
+	  make sure.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=766923
+
+2016-05-26 13:17:37 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* gst/gstobject.c:
+	  object: Notify name change when using _set_name()
+	  There was a 0.11 FIXME about notifying the name change or removing that
+	  function. Clearly we can't remove this function, so let's notify it.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=766923
+
+2016-05-25 15:30:21 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/gst_private.h:
+	  gst_private: Fix gstconfig include
+	  Since it's a generated header, we need to specify the gst subdir so
+	  that it gets properly included in out-of-dir compilation
+
+2016-05-25 10:48:05 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/gst_private.h:
+	  gst: make sure to include gstconfig.h also in gst_private.h
+	  For GST_EXPORT define and also things like GST_DISABLE_REGISTRY.
+	  Hopefully fixes the following build failure on cerbero-cross-mingw32:
+	  helpers/gst-plugin-scanner.c:50: undefined reference to `_imp___gst_disable_registry_cache'
 
 2016-05-24 00:40:27 +0100  Tim-Philipp Müller <tim@centricular.com>
 
@@ -105,178 +1602,87 @@
 	* gst/Makefile.am:
 	  gst: attempt to fix/track-down mysterious gnome-continuous build failures
 
-2016-07-25 19:15:15 +1000  Jan Schmidt <jan@centricular.com>
+2016-05-23 18:00:30 +0100  Tim-Philipp Müller <tim@centricular.com>
 
-	* plugins/elements/gstinputselector.c:
-	  inputselector: Wake other pads when selected goes EOS
-	  Other pads that are waiting for the stream on the selected
-	  pad to advance before they finish waiting themselves
-	  should be given the chance to do so when the selected pad
-	  goes EOS. Fixes problems where input streams can end up
-	  waiting forever if the active stream goes EOS earlier than
-	  their own end time.
+	* gst/gstiterator.c:
+	  iterator: only unset GValue if it was inited
+	  And add some function guards. From GLib 2.48 on it is
+	  allowed to pass an uninitialised GValue to g_value_unset().
+	  https://bugzilla.gnome.org/show_bug.cgi?id=763762
 
-2016-07-05 16:50:16 +0200  Miguel París Díaz <mparisdiaz@gmail.com>
+2016-05-23 18:44:01 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
 
-	* gst/gstpad.c:
-	  pad: check query caps answered and caps not NULL
-	  https://bugzilla.gnome.org/show_bug.cgi?id=768450
+	* gst/parse/Makefile.am:
+	  gst/parse: Also pass -DGST_EXPORTS here
+	  This static library gets included directly into libgstreamer-1.0.so, so it needs
+	  the same GST_EXPORTS definition as the rest of the code that's compiled into
+	  that otherwise it will try to find the constants it uses from gstinfo via DLL
+	  importing (__declspec(dllimport)).
+	  Fixes https://ci.gstreamer.net/job/cerbero-cross-mingw32/4393/
 
-2016-07-04 10:00:38 +0200  Sebastian Dröge <sebastian@centricular.com>
+2016-05-20 00:24:54 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
 
-	* libs/gst/base/gstbaseparse.c:
-	  baseparse: Make sure to not create an invalid event order when generating the default CAPS event because of a GAP event
-	  There must be a SEGMENT event before the GAP event, and SEGMENT events must
-	  come after any CAPS event. We however did not produce any CAPS yet, so we need
-	  to ensure to insert the CAPS event before the SEGMENT event into the pending
-	  events list.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=766970
+	* gst/gstconfig.h.in:
+	  gstconfig.h: Always use dllexport/import on Windows
+	  __declspec(dllexport/import) are supported by GCC and are needed for
+	  properly generating code that fetches the values of constants from DLLs
+	  built with __declspec(dllexport) which happens when anything using
+	  GST_EXPORT is built with MSVC.
+	  See: https://msdn.microsoft.com/en-us/library/619w14ds.aspx
+	  Essentially, if you built gstreamer with MSVC and then tried to use
+	  constants from it (such as GST_TYPE_CAPS) in a plugin, GCC would
+	  retrieve the address of the value instead of the value itself.
 
-2016-06-28 15:01:17 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+2016-05-19 11:27:36 -0300  Danilo Cesar Lemes de Paula <danilo.cesar@collabora.co.uk>
 
-	* gst/gstbus.c:
-	  bus: chain up GObject::constructed() to the parent class' implementation
-	  Needed so GstBus can be tracked by the leaks tracer.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=768141
+	* scripts/git-update.sh:
+	  scripts: make git-update.sh build with all cores available
+	  The git-update.sh now builds with all cores available. In case of
+	  failure it defaults to 1
+	  The developer can still override this by setting -j to something else
+	  in MAKEFLAGS, as stated by 299605dfe2f97fca330161ff01a392e1a85fe422.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=766666
 
-2016-06-15 13:43:59 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+2016-05-04 13:53:56 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
 
-	* plugins/elements/gstqueue2.c:
-	  queue2: fix crash deleting current region for small ring buffers
-	  Ensure we do not attempt to destroy the current range. Doing so
-	  causes the current one to be left dangling, and it may be dereferenced
-	  later, leading to a crash.
-	  This can happen with a very small queue2 ring buffer (10000 bytes)
-	  and 4 kB buffers.
-	  repro case:
-	  gst-launch-1.0 fakesrc sizetype=2 sizemax=4096 ! \
-	  queue2 ring-buffer-max-size=1000 ! fakesink sync=true
-	  https://bugzilla.gnome.org/show_bug.cgi?id=767688
+	* gst/gstminiobject.h:
+	* gst/gstobject.h:
+	  (mini)object: add MAY_BE_LEAKED flag
+	  https://bugzilla.gnome.org/show_bug.cgi?id=766008
 
-2016-07-01 09:44:12 +0200  Edward Hervey <edward@centricular.com>
+2016-05-15 14:15:51 +0100  Tim-Philipp Müller <tim@centricular.com>
 
-	* plugins/elements/gstmultiqueue.c:
-	  multiqueue: Fix behaviour with not-linked and eos pads
-	  This is an update on c9b6848885f4675d447e823c8fb117e247658252
-	  multiqueue: Fix not-linked pad handling at EOS
-	  While that commit did fix the behaviour if upstream sent a GST_EVENT_EOS,
-	  it would break the same issue when *downstream* returns GST_FLOW_EOS
-	  (which can happen for example when downstream decoders receive data
-	  from after the segment stop).
-	  GST_PAD_IS_EOS() is only TRUE when a GST_EVENT_EOS has flown through it
-	  and not when a GST_EVENT_EOS has gone through it.
-	  In order to handle both cases, also take into account the last flow
-	  return.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=763770
+	* gst/gstbin.c:
+	* tests/check/gst/gstbin.c:
+	  bin: emit deep-element-{added,removed} for children of newly-added/removed bin
+	  https://bugzilla.gnome.org/show_bug.cgi?id=578933
 
-2016-06-08 12:34:53 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+2016-05-14 10:55:53 +0100  Tim-Philipp Müller <tim@centricular.com>
 
-	* plugins/elements/gsttee.c:
-	  tee: Properly handle return value when only 1 pad
-	  This patch handle the case when you have 1 pad (so the fast path is
-	  being used) but this pad is removed. If we are in allow-not-linked, we
-	  should return GST_FLOW_OK, otherwise, we should return GST_FLOW_UNLINKED
-	  and ignore the meaningless return value obtained from pushing.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=767413
+	* gst/gstbin.c:
+	* gst/gstbin.h:
+	* tests/check/gst/gstbin.c:
+	  bin: add "deep-element-added" and "deep-element-removed" signals
+	  This means applications and bin sub-classes can easily track when
+	  a new child element is added to the pipeline sub-hierarchy or
+	  removed.
+	  Currently doesn't signal deep added/removed for elements inside
+	  a bin if a bin is added/removed.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=578933
 
-2016-06-13 18:33:27 +0200  Sebastian Dröge <sebastian@centricular.com>
+2016-05-15 15:02:49 +0300  Sebastian Dröge <sebastian@centricular.com>
 
-	* libs/gst/base/gstbasesink.c:
-	  basesink: Update start time when losing state only if we were in PLAYING
-	  If we were in PAUSED, the current clock time and base time don't have much to
-	  do with the running time anymore as the clock might have advanced while we
-	  were PAUSED. The system clock does that for example, audio clocks often don't.
-	  Updating the start time in PAUSED will cause a) the wrong position to be
-	  reported, b) step events to step not just the requested amount but the amount
-	  of time we spent in PAUSED. The start time should only ever be updated when
-	  going from PLAYING to PAUSED to remember the current running time (to be able
-	  to compensate later when going to PLAYING for the clock time advancing while
-	  PAUSED), not when we are already in PAUSED.
-	  Based on a patch by Kishore Arepalli <kishore.arepalli@gmail.com>
-	  The updating of the start time when the state is lost was added in commit
-	  ba943a82c0bbfd17c9ee9f5068d44c9d9274fd13 to fix the position reporting when
-	  the state is lost. This still works correctly after this change.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=739289
+	* gst/gstpad.h:
+	  pad: Improve IDLE probe docs
+	  Make it explicit that the pad is only blocked while the callback is running,
+	  and the pad will be unblocked again once the callback returned.
+	  If BLOCK and IDLE behaviour is needed, both need to be used.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=766002
 
-2016-02-19 16:18:12 +0100  Linus Svensson <linussn@axis.com>
+2016-05-15 13:29:55 +0300  Sebastian Dröge <sebastian@centricular.com>
 
-	* tests/check/gst/gstpad.c:
-	  gstpad tests: Add a test for flush event only probes
-	  https://bugzilla.gnome.org/show_bug.cgi?id=762330
-
-2016-03-24 12:13:39 -0300  Thiago Santos <thiagoss@osg.samsung.com>
-
-	* gst/gstpad.c:
-	  pad: consider PROBE_TYPE_EVENT_FLUSH when using PROBE_TYPE_ALL_BOTH
-	  When GST_PAD_PROBE_EVENT_FLUSH is used, the probes already have
-	  a data type and it is not needed to automatically add the default
-	  types. Without this, EVENT_FLUSH probes that didn't specify a data
-	  type would be called also for other data such as buffers.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=762330
-
-=== release 1.8.2 ===
-
-2016-06-09 11:50:03 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* ChangeLog:
-	* NEWS:
-	* RELEASE:
-	* configure.ac:
 	* docs/plugins/inspect/plugin-coreelements.xml:
-	* gstreamer.doap:
-	* win32/common/config.h:
-	* win32/common/gstversion.h:
-	  Release 1.8.2
-
-2016-06-09 11:12:07 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* po/af.po:
-	* po/az.po:
-	* po/be.po:
-	* po/bg.po:
-	* po/ca.po:
-	* po/cs.po:
-	* po/da.po:
-	* po/de.po:
-	* po/el.po:
-	* po/en_GB.po:
-	* po/eo.po:
-	* po/es.po:
-	* po/eu.po:
-	* po/fi.po:
-	* po/fr.po:
-	* po/gl.po:
-	* po/hr.po:
-	* po/hu.po:
-	* po/id.po:
-	* po/it.po:
-	* po/ja.po:
-	* po/lt.po:
-	* po/nb.po:
-	* po/nl.po:
-	* po/pl.po:
-	* po/pt_BR.po:
-	* po/ro.po:
-	* po/ru.po:
-	* po/rw.po:
-	* po/sk.po:
-	* po/sl.po:
-	* po/sq.po:
-	* po/sr.po:
-	* po/sv.po:
-	* po/tr.po:
-	* po/uk.po:
-	* po/vi.po:
-	* po/zh_CN.po:
-	* po/zh_TW.po:
-	  Update .po files
-
-2016-06-09 10:04:18 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* po/hr.po:
-	* po/pt_BR.po:
-	* po/sk.po:
-	  po: Update translations
+	  docs: Update for git master
 
 2016-03-11 16:04:52 +0200  Sebastian Dröge <sebastian@centricular.com>
 
@@ -288,15 +1694,6 @@
 	  interesting effects.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=763496
 
-2016-05-15 15:02:49 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* gst/gstpad.h:
-	  pad: Improve IDLE probe docs
-	  Make it explicit that the pad is only blocked while the callback is running,
-	  and the pad will be unblocked again once the callback returned.
-	  If BLOCK and IDLE behaviour is needed, both need to be used.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=766002
-
 2016-05-14 17:31:51 +0300  Sebastian Dröge <sebastian@centricular.com>
 
 	* libs/gst/base/gstbasesink.c:
@@ -315,6 +1712,42 @@
 	  send it because there'll be no actual state changed message.
 	  Allow EOS through directly in that case.
 
+2016-05-13 09:43:14 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/gstpad.c:
+	  pad: Don't drop LATENCY queries with default implementation
+	  If there is only one pad in the internal pads, when folding for
+	  LATENCY queries it will just drop the response if it's not live.
+	  This is maybe not the proper fix, but it will just accept the first
+	  peer responses, and if there are any other pads, it will only take
+	  them into account if the response is live.
+	  This *should* properly handle the aggregation/folding behaviour of
+	  multiple live peer responses, while at the same time handling the
+	  simple one-pad-only-and-forward use-case
+	  https://bugzilla.gnome.org/show_bug.cgi?id=766360
+
+2016-04-07 00:46:20 +1000  Jan Schmidt <jan@centricular.com>
+
+	* tools/gst-launch.1.in:
+	  Update the examples in the gst-launch-1.0 manpage
+	  Replace elements that don't exist any more with ones
+	  that do, and insert elements like mpegaudioparse where
+	  they are needed.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=727105
+
+2016-04-02 01:05:39 +1100  Jan Schmidt <jan@centricular.com>
+
+	* gst/gst.c:
+	  debug: Instantiate GType when dumping debug categories.
+	  A lot of debug categories are declared in element class_init
+	  functions, which don't get run until the element is first created
+	  (not just registered in the plugin load function). This means
+	  that --gst-debug-help doesn't print out a lot of categories.
+	  Creating an instance of each element from the element factory
+	  makes them visible, at some extra cost - 2-3 times longer, which can
+	  be a full second or two of extra waiting. Yikes!
+	  https://bugzilla.gnome.org/show_bug.cgi?id=741001
+
 2016-05-11 15:06:39 +0300  Sebastian Dröge <sebastian@centricular.com>
 
 	* plugins/elements/gsttypefindelement.c:
@@ -324,6 +1757,12 @@
 	  deadlocks and is in general unexpected by elements that are in PULL mode.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=765906
 
+2016-05-11 12:16:09 +0900  Wonchul Lee <wonchul.lee@collabora.com>
+
+	* gst/gstdebugutils.c:
+	  debugutils: fix warning on enum properties printing
+	  https://bugzilla.gnome.org/show_bug.cgi?id=766251
+
 2016-05-10 15:01:42 +0300  Sebastian Dröge <sebastian@centricular.com>
 
 	* gst/gstpad.c:
@@ -336,6 +1775,42 @@
 	  This fixes e.g. typefind in decodebin reactivating PUSH/PULL mode if upstream
 	  actually fails to go into PULL mode after first PUSHING data to typefind.
 
+2016-03-13 11:05:29 -0400  Anthony G. Basile <blueness@gentoo.org>
+
+	* libs/gst/check/libcheck/strsignal.c:
+	  libcompat.h: strsignal() should be not be decleared const
+	  POSIX standards requires strsignal() to return a pointer to a char,
+	  not a const pointer to a char. [1]  On uClibc, and possibly other
+	  libc's, that do not HAVE_DECL_STRSIGNAL, libcompat.h declares
+	  const char *strsignal (int sig) which causes a type error.
+	  [1] man 3 strsignal
+	  https://bugzilla.gnome.org/show_bug.cgi?id=763567
+
+2016-05-05 18:50:05 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* libs/gst/base/gstflowcombiner.c:
+	  flowcombiner: add debug category
+	  Not that it logs much.
+
+2016-05-05 18:02:21 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* libs/gst/base/gstflowcombiner.c:
+	  flowcombiner: fix docs for gst_flow_combiner_reset()
+
+2016-05-04 10:04:30 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* tests/check/pipelines/parse-launch.c:
+	  parse-launch: fix factory leak in test
+	  We get 2 references one from gst_element_factory_find() and the other
+	  from gst_plugin_feature_load().
+	  https://bugzilla.gnome.org/show_bug.cgi?id=765976
+
+2016-05-04 13:46:46 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* tests/check/gst/gstminiobject.c:
+	  miniobject: fix ref count leaks in tests
+	  https://bugzilla.gnome.org/show_bug.cgi?id=765978
+
 2016-05-04 09:53:32 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
 
 	* gst/gstutils.c:
@@ -344,6 +1819,134 @@
 	  The root element was not unreffed when iterating over ancestors.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=765961
 
+2016-05-02 17:35:29 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* tools/gst-inspect.c:
+	  inspect: fix feature leak
+	  https://bugzilla.gnome.org/show_bug.cgi?id=765957
+
+2016-05-03 11:49:03 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* gst/gsturi.c:
+	  uri: unref instead of using _gst_uri_free() directly
+	  This confuses gst_tracing as we shortcut the mini object reference
+	  system.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=765958
+
+2016-05-02 09:32:47 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* tests/check/pipelines/seek.c:
+	  pipeline: fix bus leak in seek test
+	  gst_bus_add_signal_watch_full() keeps a ref on the bus which should
+	  be released using gst_bus_remove_signal_watch().
+	  https://bugzilla.gnome.org/show_bug.cgi?id=765903
+
+2016-05-02 09:29:31 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* tests/check/elements/streamiddemux.c:
+	  streamiddemux: fix list and event leaks in test
+	  https://bugzilla.gnome.org/show_bug.cgi?id=765903
+
+2016-05-02 08:43:04 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* tests/check/elements/selector.c:
+	  selector: fix pad leaks in tests
+	  setup_input_pad() creates a new pad so we should unref it once we're
+	  done.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=765903
+
+2016-05-02 08:33:42 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* tests/check/elements/filesrc.c:
+	  filesrc: fix buffer leaks in tests
+	  gst_check_setup_sink_pad() internally uses gst_check_chain_func() so we
+	  should call gst_check_drop_buffers() when tearing down tests to free the
+	  buffers which have been exchanged through the pipeline.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=765903
+
+2016-05-02 08:29:00 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* tests/check/elements/fakesink.c:
+	  fakesink: fix pipeline leak in test
+	  https://bugzilla.gnome.org/show_bug.cgi?id=765903
+
+2016-05-02 07:35:45 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* tests/check/gst/gstelementfactory.c:
+	  elementfactory: fix factory leak in test
+	  https://bugzilla.gnome.org/show_bug.cgi?id=765903
+
+2016-05-02 16:00:42 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* gst/gstdeviceproviderfactory.c:
+	  deviceproviderfactory: fix factory leak
+	  The code path when early returning was leaking the extra reference on
+	  the factory.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=765904
+
+2016-04-10 11:42:18 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/gstquery.c:
+	  query: fix compiler warning
+	  C4146: unary minus operator applied to unsigned type, result still unsigned
+
+2016-04-28 14:59:51 +0300  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* tests/check/gst/gstbin.c:
+	  bin: fix leaks in unit tests
+	  The test rely on bus being flushed when setting the bin to the NULL state which
+	  is not the case. This apply only when setting the pipeline state to
+	  NULL.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=765720
+
+2016-04-28 14:56:18 +0300  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* tests/check/gst/gstpad.c:
+	  pad: fix buffer leaks in tests
+	  The buffer received through the pad have to be unreffed using
+	  gst_check_drop_buffers().
+	  https://bugzilla.gnome.org/show_bug.cgi?id=765719
+
+2016-04-30 14:15:08 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/gstbuffer.c:
+	* gst/gstghostpad.c:
+	* libs/gst/check/gstharness.c:
+	  Fix some nonsensical g-i annotations
+
+2016-04-29 14:55:02 +0200  Matej Knopp <matej.knopp@gmail.com>
+
+	* plugins/elements/gstmultiqueue.c:
+	  multiqueue: Ignore time when determining whether sparse stream limits have been reached
+	  Basically, sq->max_size.visible is never increased for sparse streams in
+	  overruncb when empty queue has been found;
+	  If the queue is sparse it just skip the entire logic determining whether
+	  max_size.visible should be increased, deadlocking the demuxer.
+	  What should be done instead is that when determining if limits have been
+	  reached, to ignore time for sparse streams, as the buffer may be far in the
+	  future.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=765736
+
+2016-02-28 12:06:40 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* docs/gst/gstreamer-sections.txt:
+	* gst/gstbin.c:
+	* gst/gstbin.h:
+	* gst/gstelement.c:
+	* gst/gstelement.h:
+	* win32/common/libgstreamer.def:
+	  element: Add gst_element_call_async()
+	  This calls a function from another thread, asynchronously. This is to be
+	  used for cases when a state change has to be performed from a streaming
+	  thread, directly via gst_element_set_state() or indirectly e.g. via SEEK
+	  events.
+	  Calling those functions directly from the streaming thread will cause
+	  deadlocks in many situations, as they might involve waiting for the
+	  streaming thread to shut down from this very streaming thread.
+	  This is mostly a convenience function around a GThreadPool and is for example
+	  used by GstBin to continue asynchronous state changes.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760532
+
 2016-04-27 09:21:31 +0300  Sebastian Dröge <sebastian@centricular.com>
 
 	* docs/manual/advanced-dataaccess.xml:
@@ -351,6 +1954,36 @@
 	  g_signal_emit_by_name() is not like gst_app_src_push_buffer() due to reference
 	  counting limitations of signals, it does *not* take ownership of the buffer.
 
+2016-04-26 16:02:14 +0300  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* gst/gst.c:
+	* gst/gst_private.h:
+	* gst/gstcaps.c:
+	  caps: add cleanup priv function
+	  Those are allocated in _priv_gst_caps_initialize() so it makes
+	  sense to have a symetric cleanup functions called by gst_deinit().
+	  https://bugzilla.gnome.org/show_bug.cgi?id=765606
+
+2016-04-26 16:02:14 +0300  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* gst/gst.c:
+	* gst/gst_private.h:
+	* gst/gstcapsfeatures.c:
+	  capsfeature: add cleanup priv function
+	  Those are allocated in _priv_gst_caps_features_initialize() so it makes
+	  sense to have a symetric cleanup functions called by gst_deinit().
+	  https://bugzilla.gnome.org/show_bug.cgi?id=765606
+
+2016-04-21 14:45:39 +0100  Alex Ashley <bugzilla@ashley-family.net>
+
+	* libs/gst/check/gsttestclock.c:
+	  testclock: add clock-type property
+	  To allow the GstTestClock to be used as a GstSystemClock, it is
+	  useful to implement the clock-type property that GstSystemClock
+	  provides. This allows GstTestClock to be used as the system clock
+	  with code that expects a GstSystemClock.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=762147
+
 2016-04-21 13:49:32 +0300  Sebastian Dröge <sebastian@centricular.com>
 
 	* gst/gstdatetime.c:
@@ -359,67 +1992,6 @@
 	  cause an assertion and generally does not make much sense. Instead consider it
 	  as a parsing error like hours > 24 and return NULL.
 
-=== release 1.8.1 ===
-
-2016-04-20 18:09:16 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* ChangeLog:
-	* NEWS:
-	* RELEASE:
-	* configure.ac:
-	* docs/plugins/inspect/plugin-coreelements.xml:
-	* gstreamer.doap:
-	* win32/common/config.h:
-	* win32/common/gstversion.h:
-	  Release 1.8.1
-
-2016-04-20 17:52:31 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* po/af.po:
-	* po/az.po:
-	* po/be.po:
-	* po/bg.po:
-	* po/ca.po:
-	* po/cs.po:
-	* po/de.po:
-	* po/el.po:
-	* po/en_GB.po:
-	* po/eo.po:
-	* po/es.po:
-	* po/eu.po:
-	* po/fi.po:
-	* po/fr.po:
-	* po/gl.po:
-	* po/hr.po:
-	* po/hu.po:
-	* po/id.po:
-	* po/it.po:
-	* po/ja.po:
-	* po/lt.po:
-	* po/nb.po:
-	* po/nl.po:
-	* po/pl.po:
-	* po/pt_BR.po:
-	* po/ro.po:
-	* po/ru.po:
-	* po/rw.po:
-	* po/sk.po:
-	* po/sl.po:
-	* po/sq.po:
-	* po/sr.po:
-	* po/sv.po:
-	* po/tr.po:
-	* po/uk.po:
-	* po/vi.po:
-	* po/zh_CN.po:
-	* po/zh_TW.po:
-	  Update .po files
-
-2016-04-20 15:29:15 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* po/da.po:
-	  po: Update translations
-
 2016-04-20 11:46:19 +0300  Sebastian Dröge <sebastian@centricular.com>
 
 	* libs/gst/base/gstbaseparse.c:
@@ -429,6 +2001,27 @@
 	  exactly increasing with the duration of each packet.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=765260
 
+2016-04-20 11:45:28 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* libs/gst/base/gsttypefindhelper.c:
+	  typefindhelper: Fix gobject-introspection warning about invalid transfer annotation
+	  gsttypefindhelper.c:485: Warning: GstBase: invalid "transfer" annotation for gsize: only valid for array, struct, union, boxed, object and interface types
+
+2016-04-18 13:05:40 +0300  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* gst/gst.c:
+	* gst/gst_private.h:
+	* gst/gstallocator.c:
+	  allocator: add cleanup method
+	  Make tracking memory leaks easier.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=765212
+
+2016-03-25 15:55:18 +0100  Francisco Velazquez <francisv@ifi.uio.no>
+
+	* tests/check/gst/gstplugin.c:
+	  tests: plugin: improve debug message
+	  https://bugzilla.gnome.org/show_bug.cgi?id=764199
+
 2016-04-14 11:54:32 +0200  Carlos Rafael Giani <dv@pseudoterminal.org>
 
 	* plugins/elements/gstmultiqueue.c:
@@ -470,6 +2063,433 @@
 	  the code was introduced.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=765096
 
+2016-04-14 09:58:04 +0100  Julien Isorce <j.isorce@samsung.com>
+
+	* README:
+	* common:
+	  Automatic update of common submodule
+	  From 6f2d209 to ac2f647
+
+2016-04-13 16:08:30 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* plugins/elements/gstmultiqueue.c:
+	  multiqueue: catch errors and flushing case after lock
+	  This ensures we can not get into an indefinite wait on the
+	  following cond var wait.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=764999
+
+2016-04-13 16:40:43 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tools/gst-launch.c:
+	  tools: gst-launch: fix up caps printing in verbose mode
+	  Add missing 'else' and print caps and taglists without the
+	  annoying duplicate string escaping, making both nicer to read.
+	  Fixes string leak and coverity CID 1358492.
+
+2016-04-13 12:38:05 +0300  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* plugins/tracers/gstrusage.c:
+	  rusage: properly free the queue memory
+	  The queue is allocated as part of the tracer struct so we should not
+	  use g_queue_free() to free it.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=764985
+
+2016-04-13 10:21:15 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/gstbuffer.c:
+	* gst/gstmeta.c:
+	  meta: Warn if a meta implementation is registered without init function
+	  This previously caused uninitialized memory unless something else was
+	  initializing all the fields explicitly to something.
+	  To be on the safe side, we also allocate metas without init function to all
+	  zeroes now as it was relatively common.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=764902
+
+2016-04-12 15:17:36 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* libs/gst/base/gstbasesink.c:
+	  Revert "basesink: Take PREROLL_LOCK in wait_event()"
+	  This reverts commit 828a4627db0cb6a6706b96d9be97e5e5c7d22215.
+	  The lock was already taken elsewhere, in gst_base_sink_event().
+
+2016-04-12 15:11:30 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* libs/gst/base/gstbasesink.c:
+	  basesink: Take PREROLL_LOCK in wait_event()
+	  It is calling do_sync(), which requires the STREAM_LOCK and PREROLL_LOCK to be
+	  taken. The STREAM_LOCK is already taken in all callers, the PREROLL_LOCK not.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=764939
+
+2016-02-11 09:33:28 +0100  Julien Isorce <j.isorce@samsung.com>
+
+	* tests/check/Makefile.am:
+	  tests: add PTHREAD_CFLAGS for make check to pass on OS X
+	  Currently "make check" fails with:
+	  "error: argument unused during compilation: '-pthread'"
+	  PTHREAD_CFLAGS now contains -Qunused-arguments to fix that.
+	  Explanation here: http://savannah.gnu.org/patch/?8186#comment21
+	  https://bugzilla.gnome.org/show_bug.cgi?id=747954
+
+2016-04-11 10:44:22 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/libs/baseparse.c:
+	  tests: baseparse: make work with CK_FORK=no
+	  https://bugzilla.gnome.org/show_bug.cgi?id=623469
+
+2016-04-11 10:27:56 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/libs/test_transform.c:
+	* tests/check/libs/transform1.c:
+	* tests/check/libs/transform2.c:
+	  tests: transform1: make test work with CK_FORK=no
+	  We need to clear some global state and register a new test
+	  basetransform subclass for each test because we do things
+	  in class_init base on global state.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=623469
+
+2016-04-10 20:45:24 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/libs/collectpads.c:
+	  tests: collectpads: fix for CK_FORK=no
+	  Reset global state when done, and unref sink pads too
+	  in teardown function to make it valgrind clean.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=623469
+
+2016-04-10 20:25:44 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/elements/streamiddemux.c:
+	  tests: streamiddemux: fix with CK_FORK=no
+	  Clear global state when done.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=623469
+
+2016-04-10 20:04:07 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/gst/gstbufferpool.c:
+	  tests: bufferpool: fix wrong assumptions about pointers and object lifecycles
+	  The test assumed that if a buffer has the same pointer address as
+	  before it is in fact the same mini object and has been re-used by
+	  the pool. This seems to be mostly true, but not always. The buffer
+	  might be destroyed and when a new buffer is created the allocator
+	  might return the same memory that we just freed.
+	  Instead attach a qdata with destroy notify function to buffer
+	  instances we want to track to make sure the buffer actually
+	  gets finalized rather than resurrected and put back into the pool.
+
+2016-04-10 18:37:31 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* docs/pwg/building-boiler.xml:
+	* docs/pwg/pwg.xml:
+	  docs: pwg: remove broken references to example code
+	  We point to gst-template at the beginning that shoul be
+	  enough.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=623575
+
+2016-04-08 13:26:48 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/Makefile.am:
+	  tests: don't run tracerrecord in valgrind for now
+	  Because of the way we implement logging and adding/removing
+	  log functions currently (we leak a GList on purpose) this
+	  test leaks.
+
+2016-03-05 17:51:01 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* tools/gst-launch.c:
+	  tools: gst-launch: use new async property change notification API
+	  https://bugzilla.gnome.org/show_bug.cgi?id=763142
+
+2016-03-05 14:12:36 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* docs/gst/gstreamer-sections.txt:
+	* gst/gstelement.c:
+	* gst/gstelement.h:
+	* gst/gstmessage.c:
+	* gst/gstmessage.h:
+	* gst/gstquark.c:
+	* gst/gstquark.h:
+	* tests/check/gst/gstelement.c:
+	* win32/common/libgstreamer.def:
+	  element: add API to get property change notifications via messages
+	  Be notified in the application thread via bus messages about
+	  notify::* and deep-notify::* property changes, instead of
+	  having to deal with it in a non-application thread.
+	  API: gst_element_add_property_notify_watch()
+	  API: gst_element_add_property_deep_notify_watch()
+	  API: gst_element_remove_property_notify_watch()
+	  API: gst_message_new_property_notify()
+	  API: gst_message_parse_property_notify()
+	  API: GST_MESSAGE_PROPERTY_NOTIFY
+	  https://bugzilla.gnome.org/show_bug.cgi?id=763142
+
+2016-04-07 20:29:10 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* tests/check/gst/gstcpp.cc:
+	* tests/check/libs/gstlibscpp.cc:
+	  tests: Add C++ tests for the other INIT macros we have
+
+2016-04-06 17:19:28 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/gst/gstcpp.cc:
+	  tests: gstcpp: flesh out C++ test so we can add more bits
+	  Like a check for GST_MAP_INFO_INIT.
+
+2016-04-06 16:48:38 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/libs/gstlibscpp.cc:
+	  tests: use catch-all includes for c++ gst libs include test
+	  So we get any new header files as well as they're added.
+
+2016-04-06 17:23:20 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/gstmemory.h:
+	  memory: fix C++ compiler warnings with GST_MAP_INFO_INIT
+
+2016-04-04 10:28:18 +0000  Matthew Waters <matthew@centricular.com>
+
+	* gst/gstutils.c:
+	* tests/check/gst/gstutils.c:
+	  utils: check the correct element's state on ghosting pads
+	  Checking the current element's state when we're adding pads to
+	  the parent element is checking the wrong thing.
+	  Silences a 'attempting to add an inactive pad to a running element'
+	  warning when adding a ghost pad to a running parent bin of the parent
+	  bin of the element.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=764176
+
+2016-03-25 01:28:18 +0000  Matthew Waters <matthew@centricular.com>
+
+	* docs/gst/gstreamer-sections.txt:
+	* gst/gstutils.c:
+	* gst/gstutils.h:
+	* win32/common/libgstreamer.def:
+	  utils: expose pad_link_maybe_ghosting
+	  This is a useful function to automatically add ghost pads when linking
+	  two elements across bin boundaries without know their exact parentage.
+	  e.g. when using gst_parse_bin_from_description (with or without it ghosting pads),
+	  one can simply retreive the src/sink pads from the bin to link to another pad.
+	  Similar functionality is provided by gst_element_link_pads{_full}() however only
+	  by pad name rather than by actual pads.
+	  API: gst_pad_link_maybe_ghosting_full
+	  https://bugzilla.gnome.org/show_bug.cgi?id=764176
+
+2016-04-03 23:35:46 -0700  Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
+
+	* docs/design/part-states.txt:
+	  docs/design/part-states.txt: spelling fix
+
+2015-05-15 13:36:04 +0100  Mark Combellack <gnome-bugzilla@combellack.net>
+
+	* gst/gstbin.c:
+	* gst/gstbufferpool.c:
+	* gst/gstelement.c:
+	* gst/gstobject.c:
+	* gst/gstpad.c:
+	* gst/gstpipeline.c:
+	  GST_REFCOUNTING: Add logging of pointer address for dispose, finalize, etc messages
+	  Updated the GST_REFCOUNTING logging so that it includes the pointer
+	  address of the object that is being disposed or finalized.
+	  With this change is is then possible to match up GST_REFCOUNTING log messages
+	  for object allocation/disposal/finalization. This can help with diagnosing
+	  "memory leaks" in applications that have not correctly disposed of all the
+	  GStreamer objects it creates.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=749427
+
+2016-03-31 11:46:03 +0100  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* gst/gstinfo.c:
+	  info: only open log file when adding it to the log function
+	  This avoids the leak of opening it and then not passing it or closing it
+	  before it goes out of scope.
+
+2016-04-01 22:41:51 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/gstclock.c:
+	  clock: Return FALSE in all paths that don't set out parameters in gst_clock_add_observation_unapplied()
+	  It returned TRUE when regression failed, while not setting any of the out
+	  parameters. This caused uninitialized data from the stack to be used for
+	  setting the clock calibration.
+
+2016-03-24 17:34:20 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst/gstpad.c:
+	  pad: rework probe's hook_marshall function
+	  PUSH and PULL mode have opposite scenarios for IDLE and BLOCK
+	  probes.
+	  For PUSH it will BLOCK with some data type and IDLE won't have a type.
+	  For PULL it will BLOCK before getting some data and will be IDLE when
+	  some data is obtained.
+	  The check in hook_marshall was specific for PUSH mode and would cause
+	  PULL probes to fail to be called. Adding different checks for the mode
+	  to fix this issue.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=761211
+
+2016-03-24 17:34:40 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* tests/check/gst/gstpad.c:
+	  tests: pad: extra tests for pad pull probes
+	  For BUFFER and IDLE probes
+	  https://bugzilla.gnome.org/show_bug.cgi?id=761211
+
+2016-01-28 16:22:17 +0100  Matej Knopp <matej.knopp@gmail.com>
+
+	* tests/check/gst/gstpad.c:
+	  pad: Add test for blocking pull probe
+	  https://bugzilla.gnome.org/show_bug.cgi?id=761211
+
+2016-03-24 12:13:39 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst/gstpad.c:
+	  pad: consider PROBE_TYPE_EVENT_FLUSH when using PROBE_TYPE_ALL_BOTH
+	  When GST_PAD_PROBE_EVENT_FLUSH is used, the probes already have
+	  a data type and it is not needed to automatically add the default
+	  types.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=762330
+
+2016-02-19 16:18:12 +0100  Linus Svensson <linussn@axis.com>
+
+	* tests/check/gst/gstpad.c:
+	  gstpad tests: Add a test for flush event only probes
+	  https://bugzilla.gnome.org/show_bug.cgi?id=762330
+
+2016-03-26 17:21:51 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/gstdebugutils.c:
+	  debugutils: fix enum/flag properties printing for elements
+	  We want to use the flag/enum nicks here, not only because they
+	  are shorter but also because in case of element-specific enums
+	  and flags we abuse the enum/flag name field for the description,
+	  and we don't want that printed in the dot file.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=763814
+
+2016-03-23 10:31:46 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/gsttrace.c:
+	  alloctrace: print size and allocator details for buffers and memories
+
+2016-02-29 19:04:16 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/gstinfo.c:
+	  info: make it possible to remove default log handler before gst_init()
+	  Make sure it's not even added then, so that we never output
+	  anything via the default log handler then.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=751538
+
+2016-03-05 14:27:35 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/gstmemory.h:
+	* gst/gstminiobject.h:
+	* gst/gsturi.h:
+	  miniobject, memory, uri: warn on unused return value of some funcs
+	  Make compiler issue a warning for common beginner mistakes such as:
+	  ...
+	  gst_buffer_make_writable (buf);
+	  gst_buffer_map (buf, &map, GST_MAP_WRITE);
+	  ...
+	  and similar. Only do this for some functions for now.
+
+2016-03-26 11:17:02 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* .gitignore:
+	  .gitignore new netclock-replay testing tool binary
+
+2015-10-17 18:01:47 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/gstregistry.c:
+	  registry: allow plugin and feature filter funcs to call registry API
+	  Don't keep the registry locked whilst iterating over the plugins
+	  or features with a filter function. This would deadlock if the
+	  callback tried to access the registry from the function. Instead,
+	  make a copy of the feature/plugin list and then filter it without
+	  holding the registry lock. This is still considerably faster than
+	  the alternative which would be to use a GstIterator.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756738
+
+2016-03-25 12:59:57 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* configure.ac:
+	  configure: Remove unneeded parenthesis from AG_GST_CHECK_CHECKS
+
+2016-03-25 12:05:41 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* tests/check/elements/valve.c:
+	  valve: Fix unit test by sending caps before buffers
+	  Unexpected critical/warning: gstpad.c:4400:gst_pad_push_data:<'':src> Got data flow before segment event
+	  https://bugzilla.gnome.org/show_bug.cgi?id=763753
+
+2016-03-25 10:23:46 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* tests/misc/Makefile.am:
+	  netclock: Link the replay example to GIO
+
+2016-03-03 21:45:54 +0530  Arun Raghavan <arun@centricular.com>
+
+	* tests/misc/Makefile.am:
+	* tests/misc/netclock-replay.c:
+	  tests: Add some code to replay and analyse netclientclock
+	  This takes readings in the form of ...
+	  <local_1> <remote_1> <remote_2> <local_2>
+	  ... with one observation per line, and then replays it using the
+	  netclientclock code.
+	  The output is the statistics structure emitted by the netclientclock,
+	  which can then be analysed and tuned once we get those readings for
+	  potential edge-cases.
+	  It should be possible to find some inputs with "bad" data and convert
+	  this into a unit test for future tweaks to run against.
+
+2016-03-03 21:44:35 +0530  Arun Raghavan <arun@centricular.com>
+
+	* libs/gst/net/gstnetclientclock.c:
+	  netclientclock: Always dump clock observations in logs
+	  This makes it possible to examine what values we get in logs, and
+	  potentially tune our filtering/extrapolation in various scenarios.
+
+2016-03-16 15:13:39 +0100  Havard Graff <havard.graff@gmail.com>
+
+	* plugins/elements/gstvalve.c:
+	* tests/check/elements/valve.c:
+	  valve: don't send sticky events as a direct response to upstream events
+	  Also refactor the existing valve test to actually test the valve,
+	  and not just test the EOS mechanism of a pad.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=763753
+
+2016-03-11 09:23:04 +0100  Carlos Rafael Giani <dv@pseudoterminal.org>
+
+	* gst/gstparse.c:
+	* gst/gstparse.h:
+	* gst/parse/grammar.y:
+	  parse-launch: Add flag for placing elements in a bin instead of a pipeline
+	  By default, gst_parse_launch_full() creates a GstPipeline if there's more
+	  than one toplevel element. Add a flag to let it use a GstBin instead.
+	  Also fix the parser to let it use this flag for GST_TYPE_ELEMENT property
+	  values, to avoid having GstPipelines inside other GstPipelines.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=763457
+
+2016-03-08 19:08:16 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* plugins/elements/gstcapsfilter.c:
+	* plugins/elements/gstcapsfilter.h:
+	  capsfilter: optimisation: avoid unnecessary gst_pad_has_current_caps() checks
+	  No need to do this for every input buffer, since it involves
+	  locking and iterating of the sticky events array and such.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=763337
+
+2016-03-03 14:15:00 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* gst/gstpadtemplate.c:
+	* libs/gst/base/gstbasesink.c:
+	* libs/gst/base/gstbasesrc.c:
+	* tests/check/elements/fakesink.c:
+	* tests/check/gst/gstpad.c:
+	* tests/check/gst/gstprotection.c:
+	* tests/check/gst/gstutils.c:
+	* tests/check/libs/baseparse.c:
+	* tests/check/libs/collectpads.c:
+	* tests/check/libs/test_transform.c:
+	* tests/check/pipelines/parse-launch.c:
+	* tests/check/pipelines/seek.c:
+	  gstreamer: use new gst_element_class_add_static_pad_template()
+	  https://bugzilla.gnome.org/show_bug.cgi?id=763020
+
 2016-03-02 17:47:33 +0100  Edward Hervey <edward@centricular.com>
 
 	* plugins/elements/gstqueue.c:
@@ -493,21 +2513,19 @@
 	  race.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=761912
 
-2016-03-25 12:05:41 +0200  Sebastian Dröge <sebastian@centricular.com>
+2016-03-02 21:11:51 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.com>
 
-	* tests/check/elements/valve.c:
-	  valve: Fix unit test by sending caps before buffers
-	  Unexpected critical/warning: gstpad.c:4400:gst_pad_push_data:<'':src> Got data flow before segment event
-	  https://bugzilla.gnome.org/show_bug.cgi?id=763753
+	* libs/gst/base/gstcollectpads.c:
+	  collectpads: Assume PTS is equal DTS if PTS is missing
+	  This is the best guess we can make if such a buffer reached the collect
+	  pad. This is uncommon, we do expect parsers to have tried and fixed that
+	  if possible (or needed).
+	  https://bugzilla.gnome.org/show_bug.cgi?id=762207
 
-2016-03-16 15:13:39 +0100  Havard Graff <havard.graff@gmail.com>
+2016-03-24 13:32:41 +0200  Sebastian Dröge <sebastian@centricular.com>
 
-	* plugins/elements/gstvalve.c:
-	* tests/check/elements/valve.c:
-	  valve: don't send sticky events as a direct response to upstream events
-	  Also refactor the existing valve test to actually test the valve,
-	  and not just test the EOS mechanism of a pad.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=763753
+	* configure.ac:
+	  Back to development
 
 2016-03-24 11:49:44 +0200  Sebastian Dröge <sebastian@centricular.com>
 
diff --git a/Makefile.am b/Makefile.am
index 503ffb3..aeefe9d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -153,10 +153,8 @@
 # Do not run the check-exports test in case any option which causes the API to
 # change has been used
 if !GST_DISABLE_REGISTRY
-if !GST_DISABLE_TRACE
 CHECK_EXPORTS = check-exports
 endif
-endif
 
 check: $(CHECK_EXPORTS) check-enum-gettypes
 
diff --git a/Makefile.in b/Makefile.in
index c912a68..e888043 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -359,6 +359,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -366,17 +367,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -501,6 +499,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
@@ -620,7 +620,7 @@
 
 # Do not run the check-exports test in case any option which causes the API to
 # change has been used
-@GST_DISABLE_REGISTRY_FALSE@@GST_DISABLE_TRACE_FALSE@CHECK_EXPORTS = check-exports
+@GST_DISABLE_REGISTRY_FALSE@CHECK_EXPORTS = check-exports
 
 # cruft: plugins that have been merged or moved or renamed
 CRUFT_FILES = \
@@ -1239,8 +1239,11 @@
 
 update-exports:
 	make check-exports 2>&1 | patch -p1
-	git add win32/common/libgst*.def
-	git diff --cached -- win32/common/
+	if test -f "$(top_srcdir)/win32/common/libgstgl.def"; then \
+	  git checkout "$(top_srcdir)/win32/common/libgstgl.def";  \
+	fi
+	git add $(top_srcdir)/win32/common/libgst*.def
+	git diff --cached -- $(top_srcdir)/win32/common/
 	echo '^^^--- updated and staged changes above'
 
 # complain about nonportable printf format strings (%lld, %llu, %zu etc.)
diff --git a/NEWS b/NEWS
index 90393f5..072b2df 100644
--- a/NEWS
+++ b/NEWS
@@ -1,29 +1 @@
-### 1.8.3
-
-The third 1.8 bug-fix release (1.8.3) was released on 19 August 2016.
-This release only contains bugfixes and it should be safe to update from 1.8.x.
-
-#### Major bugfixes in 1.8.3
-
- - Fix Android build scripts on OS X and Windows
- - Fix stepping in PAUSED state in certain circumstances
- - Fix jackaudiosink hang when exiting
- - Fix udpsrc receiving multicast packets not only from the selected
-   multicast group
- - Fix unnecessary decoding of unselected streams in GES
- - Fix (multi)udpsink randomly not sending to clients
- - Fix ALL\_BOTH probes not considering EVENT\_FLUSH
- - Fix average input rate calculations in queue2
- - Fix various locking issues causing deadlock in adaptivedemux
- - Fix gst-libav encoders to correctly produce codec\_data in caps
- - Add Wayland, Windows and Rasberry Pi support to the QML GL video sink
- - Add support for building with OpenH264 1.6
- - Add support for controlling deinterlacing in GES video sources
- - ... and many, many more!
-
-For a full list of bugfixes see [Bugzilla][buglist-1.8.3]. Note that this is
-not the full list of changes. For the full list of changes please refer to the
-GIT logs or ChangeLogs of the particular modules.
-
-[buglist-1.8.3]: https://bugzilla.gnome.org/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&classification=Platform&limit=0&list_id=145400&order=bug_id&product=GStreamer&query_format=advanced&resolution=FIXED&target_milestone=1.8.3
-
+This is GStreamer 1.9.90
diff --git a/README b/README
index fa53f95..48e2c9f 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-GStreamer 1.7.x development series
+GStreamer 1.9.x development series
 
 WHAT IT IS
 ----------
diff --git a/RELEASE b/RELEASE
index b867688..6c009a2 100644
--- a/RELEASE
+++ b/RELEASE
@@ -1,15 +1,13 @@
 
-Release notes for GStreamer 1.8.3
+Release notes for GStreamer 1.9.90
 
-The GStreamer team is proud to announce the third bugfix release in the stable
-1.8 release series of your favourite cross-platform multimedia framework!
+The GStreamer team is pleased to announce the first release candidate of the
+stable 1.10 release series. The 1.10 release series is adding new features on
+top of the 1.0, 1.2, 1.4, 1.6 and 1.8 series and is part of the API and
+ABI-stable 1.x release series of the GStreamer multimedia framework.
 
 
-This release only contains bugfixes and it is safe to update from 1.8.x. For a
-full list of bugfixes see Bugzilla.
-
-
-See /releases/1.8/ for the full release notes.
+Binaries for Android, iOS, Mac OS X and Windows will be provided in the next days.
 
 
 This module, gstreamer, only contains core functionality.
@@ -35,15 +33,14 @@
 
 Bugs fixed in this release
      
-      * 739289 : basesink: Stepping incorrectly updates start time when stepping in PAUSED, causing step amount to be calculated wrongly
-      * 762330 : Probe only flush events, is not possible
-      * 767413 : tee: Properly handle return value when only 1 pad
-      * 767688 : queue2: fix crash deleting current region for small ring buffers
-      * 768141 : bus: chain up constructed.
-      * 768326 : Building GStreamer for Android fails on Windows (new since 1.8.2)
-      * 768450 : pad: check caps not NULL before referring
-      * 768649 : queue2: Force final average input rate calculation on EOS
-      * 769802 : queue2: Post buffering messages earlier in ringbuffer mode
+      * 753922 : GValue types are registered after types that might use them (e.g. tags)
+      * 770731 : gstconfig.h: Need to add support for more platforms / PPC broken
+      * 770740 : No way to disable build of tests/misc
+      * 771104 : element: seek_simple() does not reset stop position
+      * 771210 : tests: new queue2: Add higher-resolution low/high-watermark properties unit test is flaky
+      * 771306 : basesink: Remove unused fields and always use the buffer timestamp difference for calculating the QoS proportion
+      * 771649 : gst_bin_sort_iterator_copy doesn't copy GstBinSortIterator::queue
+      * 771029 : MSVC can't link against autotools-build generated DLLs
 
 ==== Download ====
 
@@ -80,15 +77,16 @@
         
 Contributors to this release
     
-      * Edward Hervey
-      * Guillaume Desmottes
+      * Arun Raghavan
+      * Carlos Rafael Giani
+      * Graham Leggett
       * Jan Schmidt
-      * Linus Svensson
-      * Miguel París Díaz
-      * Nicolas Dufresne
-      * Ray Strode
+      * Kouhei Sutou
+      * Nirbheek Chauhan
       * Sebastian Dröge
       * Thiago Santos
+      * Thibault Saunier
       * Tim-Philipp Müller
-      * Vincent Penquerc'h
+      * Wim Taymans
+      * Wonchul Lee
  
\ No newline at end of file
diff --git a/common/Makefile.in b/common/Makefile.in
index b9943c2..a9deeb4 100644
--- a/common/Makefile.in
+++ b/common/Makefile.in
@@ -288,6 +288,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -295,17 +296,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -430,6 +428,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/common/gst.supp b/common/gst.supp
index 2740e9a..f85cd69 100644
--- a/common/gst.supp
+++ b/common/gst.supp
@@ -4024,5 +4024,4 @@
    fun:malloc
    ...
    fun:g_quark_init
-   fun:glib_init_ctor
 }
diff --git a/common/gtk-doc-plugins.mak b/common/gtk-doc-plugins.mak
index fe0977c..4b5dd1b 100644
--- a/common/gtk-doc-plugins.mak
+++ b/common/gtk-doc-plugins.mak
@@ -179,9 +179,13 @@
 		$(top_srcdir)/common/plugins.xsl $$a > xml/`basename $$a`; done
 	@for f in $(EXAMPLE_CFILES); do \
 		$(PYTHON) $(top_srcdir)/common/c-to-xml.py $$f > xml/element-`basename $$f .c`.xml; done
-	@gtkdoc-mkdb \
+	@_source_dir='' ;						\
+	for i in $(DOC_SOURCE_DIR) ; do					\
+	    _source_dir="$${_source_dir} --source-dir=$$i" ;	        \
+	done ;								\
+	gtkdoc-mkdb \
 		--module=$(DOC_MODULE) \
-		--source-dir=$(DOC_SOURCE_DIR) \
+		$${_source_dir} \
 		 --expand-content-files="$(expand_content_files)" \
 		--main-sgml-file=$(srcdir)/$(DOC_MAIN_SGML_FILE) \
 		--output-format=xml \
diff --git a/common/gtk-doc.mak b/common/gtk-doc.mak
index 2aab3a9..3f83491 100644
--- a/common/gtk-doc.mak
+++ b/common/gtk-doc.mak
@@ -121,7 +121,11 @@
 
 sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(expand_content_files)
 	@echo '  DOC   Building XML'
-	@gtkdoc-mkdb --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR)  --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) --output-format=xml $(MKDB_OPTIONS)
+	@_source_dir='' ;						\
+	for i in $(DOC_SOURCE_DIR) ; do					\
+	    _source_dir="$${_source_dir} --source-dir=$$i" ;	        \
+	done ;							        \
+	gtkdoc-mkdb --module=$(DOC_MODULE) $${_source_dir}  --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) --output-format=xml $(MKDB_OPTIONS)
 	@cp ../version.entities xml
 	@touch sgml-build.stamp
 
diff --git a/common/m4/Makefile.in b/common/m4/Makefile.in
index 26ebf92..027a87c 100644
--- a/common/m4/Makefile.in
+++ b/common/m4/Makefile.in
@@ -228,6 +228,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -235,17 +236,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -370,6 +368,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/common/m4/ax_pthread.m4 b/common/m4/ax_pthread.m4
index d383ad5..4c4051e 100644
--- a/common/m4/ax_pthread.m4
+++ b/common/m4/ax_pthread.m4
@@ -19,10 +19,10 @@
 #   is necessary on AIX to use the special cc_r compiler alias.)
 #
 #   NOTE: You are assumed to not only compile your program with these flags,
-#   but also link it with them as well. e.g. you should link with
+#   but also to link with them as well. For example, you might link with
 #   $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
 #
-#   If you are only building threads programs, you may wish to use these
+#   If you are only building threaded programs, you may wish to use these
 #   variables in your default LIBS, CFLAGS, and CC:
 #
 #     LIBS="$PTHREAD_LIBS $LIBS"
@@ -30,8 +30,8 @@
 #     CC="$PTHREAD_CC"
 #
 #   In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant
-#   has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name
-#   (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
+#   has a nonstandard name, this macro defines PTHREAD_CREATE_JOINABLE to
+#   that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
 #
 #   Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the
 #   PTHREAD_PRIO_INHERIT symbol is defined when compiling with
@@ -82,35 +82,40 @@
 #   modified version of the Autoconf Macro, you may extend this special
 #   exception to the GPL to apply to your modified version as well.
 
-#serial 21
+#serial 23
 
 AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
 AC_DEFUN([AX_PTHREAD], [
 AC_REQUIRE([AC_CANONICAL_HOST])
+AC_REQUIRE([AC_PROG_CC])
+AC_REQUIRE([AC_PROG_SED])
 AC_LANG_PUSH([C])
 ax_pthread_ok=no
 
 # We used to check for pthread.h first, but this fails if pthread.h
-# requires special compiler flags (e.g. on True64 or Sequent).
+# requires special compiler flags (e.g. on Tru64 or Sequent).
 # It gets checked for in the link test anyway.
 
 # First of all, check if the user has set any of the PTHREAD_LIBS,
 # etcetera environment variables, and if threads linking works using
 # them:
-if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
-        save_CFLAGS="$CFLAGS"
+if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then
+        ax_pthread_save_CC="$CC"
+        ax_pthread_save_CFLAGS="$CFLAGS"
+        ax_pthread_save_LIBS="$LIBS"
+        AS_IF([test "x$PTHREAD_CC" != "x"], [CC="$PTHREAD_CC"])
         CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-        save_LIBS="$LIBS"
         LIBS="$PTHREAD_LIBS $LIBS"
-        AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
-        AC_TRY_LINK_FUNC([pthread_join], [ax_pthread_ok=yes])
+        AC_MSG_CHECKING([for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS])
+        AC_LINK_IFELSE([AC_LANG_CALL([], [pthread_join])], [ax_pthread_ok=yes])
         AC_MSG_RESULT([$ax_pthread_ok])
-        if test x"$ax_pthread_ok" = xno; then
+        if test "x$ax_pthread_ok" = "xno"; then
                 PTHREAD_LIBS=""
                 PTHREAD_CFLAGS=""
         fi
-        LIBS="$save_LIBS"
-        CFLAGS="$save_CFLAGS"
+        CC="$ax_pthread_save_CC"
+        CFLAGS="$ax_pthread_save_CFLAGS"
+        LIBS="$ax_pthread_save_LIBS"
 fi
 
 # We must check for the threads library under a number of different
@@ -123,7 +128,7 @@
 # which indicates that we try without any flags at all, and "pthread-config"
 # which is a program returning the flags for the Pth emulation library.
 
-ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
+ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
 
 # The ordering *is* (sometimes) important.  Some notes on the
 # individual items follow:
@@ -132,82 +137,225 @@
 # none: in case threads are in libc; should be tried before -Kthread and
 #       other compiler flags to prevent continual compiler warnings
 # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
-# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
-# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
-# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
-# -pthreads: Solaris/gcc
-# -mthreads: Mingw32/gcc, Lynx/gcc
+# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64
+#           (Note: HP C rejects this with "bad form for `-t' option")
+# -pthreads: Solaris/gcc (Note: HP C also rejects)
 # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
-#      doesn't hurt to check since this sometimes defines pthreads too;
-#      also defines -D_REENTRANT)
-#      ... -mt is also the pthreads flag for HP/aCC
+#      doesn't hurt to check since this sometimes defines pthreads and
+#      -D_REENTRANT too), HP C (must be checked before -lpthread, which
+#      is present but should not be used directly; and before -mthreads,
+#      because the compiler interprets this as "-mt" + "-hreads")
+# -mthreads: Mingw32/gcc, Lynx/gcc
 # pthread: Linux, etcetera
 # --thread-safe: KAI C++
 # pthread-config: use pthread-config program (for GNU Pth library)
 
-case ${host_os} in
+case $host_os in
+
+        freebsd*)
+
+        # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
+        # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
+
+        ax_pthread_flags="-kthread lthread $ax_pthread_flags"
+        ;;
+
+        hpux*)
+
+        # From the cc(1) man page: "[-mt] Sets various -D flags to enable
+        # multi-threading and also sets -lpthread."
+
+        ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags"
+        ;;
+
+        openedition*)
+
+        # IBM z/OS requires a feature-test macro to be defined in order to
+        # enable POSIX threads at all, so give the user a hint if this is
+        # not set. (We don't define these ourselves, as they can affect
+        # other portions of the system API in unpredictable ways.)
+
+        AC_EGREP_CPP([AX_PTHREAD_ZOS_MISSING],
+            [
+#            if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS)
+             AX_PTHREAD_ZOS_MISSING
+#            endif
+            ],
+            [AC_MSG_WARN([IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support.])])
+        ;;
+
         solaris*)
 
         # On Solaris (at least, for some versions), libc contains stubbed
         # (non-functional) versions of the pthreads routines, so link-based
-        # tests will erroneously succeed.  (We need to link with -pthreads/-mt/
-        # -lpthread.)  (The stubs are missing pthread_cleanup_push, or rather
-        # a function called by this macro, so we could check for that, but
-        # who knows whether they'll stub that too in a future libc.)  So,
-        # we'll just look for -pthreads and -lpthread first:
+        # tests will erroneously succeed. (N.B.: The stubs are missing
+        # pthread_cleanup_push, or rather a function called by this macro,
+        # so we could check for that, but who knows whether they'll stub
+        # that too in a future libc.)  So we'll check first for the
+        # standard Solaris way of linking pthreads (-mt -lpthread).
 
-        ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
-        ;;
-
-        darwin*)
-        ax_pthread_flags="-pthread $ax_pthread_flags"
+        ax_pthread_flags="-mt,pthread pthread $ax_pthread_flags"
         ;;
 esac
 
-# Clang doesn't consider unrecognized options an error unless we specify
-# -Werror. We throw in some extra Clang-specific options to ensure that
-# this doesn't happen for GCC, which also accepts -Werror.
+# GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC)
 
-AC_MSG_CHECKING([if compiler needs -Werror to reject unknown flags])
-save_CFLAGS="$CFLAGS"
-ax_pthread_extra_flags="-Werror"
-CFLAGS="$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument"
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([int foo(void);],[foo()])],
-                  [AC_MSG_RESULT([yes])],
-                  [ax_pthread_extra_flags=
-                   AC_MSG_RESULT([no])])
-CFLAGS="$save_CFLAGS"
+AS_IF([test "x$GCC" = "xyes"],
+      [ax_pthread_flags="-pthread -pthreads $ax_pthread_flags"])
 
-if test x"$ax_pthread_ok" = xno; then
-for flag in $ax_pthread_flags; do
+# The presence of a feature test macro requesting re-entrant function
+# definitions is, on some systems, a strong hint that pthreads support is
+# correctly enabled
 
-        case $flag in
+case $host_os in
+        darwin* | hpux* | linux* | osf* | solaris*)
+        ax_pthread_check_macro="_REENTRANT"
+        ;;
+
+        aix*)
+        ax_pthread_check_macro="_THREAD_SAFE"
+        ;;
+
+        *)
+        ax_pthread_check_macro="--"
+        ;;
+esac
+AS_IF([test "x$ax_pthread_check_macro" = "x--"],
+      [ax_pthread_check_cond=0],
+      [ax_pthread_check_cond="!defined($ax_pthread_check_macro)"])
+
+# Are we compiling with Clang?
+
+AC_CACHE_CHECK([whether $CC is Clang],
+    [ax_cv_PTHREAD_CLANG],
+    [ax_cv_PTHREAD_CLANG=no
+     # Note that Autoconf sets GCC=yes for Clang as well as GCC
+     if test "x$GCC" = "xyes"; then
+        AC_EGREP_CPP([AX_PTHREAD_CC_IS_CLANG],
+            [/* Note: Clang 2.7 lacks __clang_[a-z]+__ */
+#            if defined(__clang__) && defined(__llvm__)
+             AX_PTHREAD_CC_IS_CLANG
+#            endif
+            ],
+            [ax_cv_PTHREAD_CLANG=yes])
+     fi
+    ])
+ax_pthread_clang="$ax_cv_PTHREAD_CLANG"
+
+ax_pthread_clang_warning=no
+
+# Clang needs special handling, because older versions handle the -pthread
+# option in a rather... idiosyncratic way
+
+if test "x$ax_pthread_clang" = "xyes"; then
+
+        # Clang takes -pthread; it has never supported any other flag
+
+        # (Note 1: This will need to be revisited if a system that Clang
+        # supports has POSIX threads in a separate library.  This tends not
+        # to be the way of modern systems, but it's conceivable.)
+
+        # (Note 2: On some systems, notably Darwin, -pthread is not needed
+        # to get POSIX threads support; the API is always present and
+        # active.  We could reasonably leave PTHREAD_CFLAGS empty.  But
+        # -pthread does define _REENTRANT, and while the Darwin headers
+        # ignore this macro, third-party headers might not.)
+
+        PTHREAD_CFLAGS="-pthread"
+        PTHREAD_LIBS=
+
+        ax_pthread_ok=yes
+
+        # However, older versions of Clang make a point of warning the user
+        # that, in an invocation where only linking and no compilation is
+        # taking place, the -pthread option has no effect ("argument unused
+        # during compilation").  They expect -pthread to be passed in only
+        # when source code is being compiled.
+        #
+        # Problem is, this is at odds with the way Automake and most other
+        # C build frameworks function, which is that the same flags used in
+        # compilation (CFLAGS) are also used in linking.  Many systems
+        # supported by AX_PTHREAD require exactly this for POSIX threads
+        # support, and in fact it is often not straightforward to specify a
+        # flag that is used only in the compilation phase and not in
+        # linking.  Such a scenario is extremely rare in practice.
+        #
+        # Even though use of the -pthread flag in linking would only print
+        # a warning, this can be a nuisance for well-run software projects
+        # that build with -Werror.  So if the active version of Clang has
+        # this misfeature, we search for an option to squash it.
+
+        AC_CACHE_CHECK([whether Clang needs flag to prevent "argument unused" warning when linking with -pthread],
+            [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG],
+            [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown
+             # Create an alternate version of $ac_link that compiles and
+             # links in two steps (.c -> .o, .o -> exe) instead of one
+             # (.c -> exe), because the warning occurs only in the second
+             # step
+             ax_pthread_save_ac_link="$ac_link"
+             ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g'
+             ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"`
+             ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)"
+             ax_pthread_save_CFLAGS="$CFLAGS"
+             for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do
+                AS_IF([test "x$ax_pthread_try" = "xunknown"], [break])
+                CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS"
+                ac_link="$ax_pthread_save_ac_link"
+                AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])],
+                    [ac_link="$ax_pthread_2step_ac_link"
+                     AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])],
+                         [break])
+                    ])
+             done
+             ac_link="$ax_pthread_save_ac_link"
+             CFLAGS="$ax_pthread_save_CFLAGS"
+             AS_IF([test "x$ax_pthread_try" = "x"], [ax_pthread_try=no])
+             ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try"
+            ])
+
+        case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in
+                no | unknown) ;;
+                *) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;;
+        esac
+
+fi # $ax_pthread_clang = yes
+
+if test "x$ax_pthread_ok" = "xno"; then
+for ax_pthread_try_flag in $ax_pthread_flags; do
+
+        case $ax_pthread_try_flag in
                 none)
                 AC_MSG_CHECKING([whether pthreads work without any flags])
                 ;;
 
+                -mt,pthread)
+                AC_MSG_CHECKING([whether pthreads work with -mt -lpthread])
+                PTHREAD_CFLAGS="-mt"
+                PTHREAD_LIBS="-lpthread"
+                ;;
+
                 -*)
-                AC_MSG_CHECKING([whether pthreads work with $flag])
-                PTHREAD_CFLAGS="$flag"
+                AC_MSG_CHECKING([whether pthreads work with $ax_pthread_try_flag])
+                PTHREAD_CFLAGS="$ax_pthread_try_flag"
                 ;;
 
                 pthread-config)
                 AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no])
-                if test x"$ax_pthread_config" = xno; then continue; fi
+                AS_IF([test "x$ax_pthread_config" = "xno"], [continue])
                 PTHREAD_CFLAGS="`pthread-config --cflags`"
                 PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
                 ;;
 
                 *)
-                AC_MSG_CHECKING([for the pthreads library -l$flag])
-                PTHREAD_LIBS="-l$flag"
+                AC_MSG_CHECKING([for the pthreads library -l$ax_pthread_try_flag])
+                PTHREAD_LIBS="-l$ax_pthread_try_flag"
                 ;;
         esac
 
-        save_LIBS="$LIBS"
-        save_CFLAGS="$CFLAGS"
+        ax_pthread_save_CFLAGS="$CFLAGS"
+        ax_pthread_save_LIBS="$LIBS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
         LIBS="$PTHREAD_LIBS $LIBS"
-        CFLAGS="$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags"
 
         # Check for various functions.  We must include pthread.h,
         # since some functions may be macros.  (On the Sequent, we
@@ -218,7 +366,11 @@
         # pthread_cleanup_push because it is one of the few pthread
         # functions on Solaris that doesn't have a non-functional libc stub.
         # We try pthread_create on general principles.
+
         AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>
+#                       if $ax_pthread_check_cond
+#                        error "$ax_pthread_check_macro must be defined"
+#                       endif
                         static void routine(void *a) { a = 0; }
                         static void *start_routine(void *a) { return a; }],
                        [pthread_t th; pthread_attr_t attr;
@@ -227,16 +379,14 @@
                         pthread_attr_init(&attr);
                         pthread_cleanup_push(routine, 0);
                         pthread_cleanup_pop(0) /* ; */])],
-                [ax_pthread_ok=yes],
-                [])
+            [ax_pthread_ok=yes],
+            [])
 
-        LIBS="$save_LIBS"
-        CFLAGS="$save_CFLAGS"
+        CFLAGS="$ax_pthread_save_CFLAGS"
+        LIBS="$ax_pthread_save_LIBS"
 
         AC_MSG_RESULT([$ax_pthread_ok])
-        if test "x$ax_pthread_ok" = xyes; then
-                break;
-        fi
+        AS_IF([test "x$ax_pthread_ok" = "xyes"], [break])
 
         PTHREAD_LIBS=""
         PTHREAD_CFLAGS=""
@@ -244,71 +394,74 @@
 fi
 
 # Various other checks:
-if test "x$ax_pthread_ok" = xyes; then
-        save_LIBS="$LIBS"
-        LIBS="$PTHREAD_LIBS $LIBS"
-        save_CFLAGS="$CFLAGS"
+if test "x$ax_pthread_ok" = "xyes"; then
+        ax_pthread_save_CFLAGS="$CFLAGS"
+        ax_pthread_save_LIBS="$LIBS"
         CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+        LIBS="$PTHREAD_LIBS $LIBS"
 
         # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
-        AC_MSG_CHECKING([for joinable pthread attribute])
-        attr_name=unknown
-        for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
-            AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>],
-                           [int attr = $attr; return attr /* ; */])],
-                [attr_name=$attr; break],
-                [])
-        done
-        AC_MSG_RESULT([$attr_name])
-        if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
-            AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE], [$attr_name],
-                               [Define to necessary symbol if this constant
-                                uses a non-standard name on your system.])
-        fi
+        AC_CACHE_CHECK([for joinable pthread attribute],
+            [ax_cv_PTHREAD_JOINABLE_ATTR],
+            [ax_cv_PTHREAD_JOINABLE_ATTR=unknown
+             for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
+                 AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>],
+                                                 [int attr = $ax_pthread_attr; return attr /* ; */])],
+                                [ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break],
+                                [])
+             done
+            ])
+        AS_IF([test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \
+               test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \
+               test "x$ax_pthread_joinable_attr_defined" != "xyes"],
+              [AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE],
+                                  [$ax_cv_PTHREAD_JOINABLE_ATTR],
+                                  [Define to necessary symbol if this constant
+                                   uses a non-standard name on your system.])
+               ax_pthread_joinable_attr_defined=yes
+              ])
 
-        AC_MSG_CHECKING([if more special flags are required for pthreads])
-        flag=no
-        case ${host_os} in
-            aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";;
-            osf* | hpux*) flag="-D_REENTRANT";;
-            solaris*)
-            if test "$GCC" = "yes"; then
-                flag="-D_REENTRANT"
-            else
-                # TODO: What about Clang on Solaris?
-                flag="-mt -D_REENTRANT"
-            fi
-            ;;
-        esac
-        AC_MSG_RESULT([$flag])
-        if test "x$flag" != xno; then
-            PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
-        fi
+        AC_CACHE_CHECK([whether more special flags are required for pthreads],
+            [ax_cv_PTHREAD_SPECIAL_FLAGS],
+            [ax_cv_PTHREAD_SPECIAL_FLAGS=no
+             case $host_os in
+             solaris*)
+             ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS"
+             ;;
+             esac
+            ])
+        AS_IF([test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \
+               test "x$ax_pthread_special_flags_added" != "xyes"],
+              [PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS"
+               ax_pthread_special_flags_added=yes])
 
         AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT],
-            [ax_cv_PTHREAD_PRIO_INHERIT], [
-                AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]],
-                                                [[int i = PTHREAD_PRIO_INHERIT;]])],
-                    [ax_cv_PTHREAD_PRIO_INHERIT=yes],
-                    [ax_cv_PTHREAD_PRIO_INHERIT=no])
+            [ax_cv_PTHREAD_PRIO_INHERIT],
+            [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]],
+                                             [[int i = PTHREAD_PRIO_INHERIT;]])],
+                            [ax_cv_PTHREAD_PRIO_INHERIT=yes],
+                            [ax_cv_PTHREAD_PRIO_INHERIT=no])
             ])
-        AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"],
-            [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])])
+        AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \
+               test "x$ax_pthread_prio_inherit_defined" != "xyes"],
+              [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])
+               ax_pthread_prio_inherit_defined=yes
+              ])
 
-        LIBS="$save_LIBS"
-        CFLAGS="$save_CFLAGS"
+        CFLAGS="$ax_pthread_save_CFLAGS"
+        LIBS="$ax_pthread_save_LIBS"
 
         # More AIX lossage: compile with *_r variant
-        if test "x$GCC" != xyes; then
+        if test "x$GCC" != "xyes"; then
             case $host_os in
                 aix*)
                 AS_CASE(["x/$CC"],
-                  [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6],
-                  [#handle absolute path differently from PATH based program lookup
-                   AS_CASE(["x$CC"],
-                     [x/*],
-                     [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])],
-                     [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])])
+                    [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6],
+                    [#handle absolute path differently from PATH based program lookup
+                     AS_CASE(["x$CC"],
+                         [x/*],
+                         [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])],
+                         [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])])
                 ;;
             esac
         fi
@@ -321,7 +474,7 @@
 AC_SUBST([PTHREAD_CC])
 
 # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
-if test x"$ax_pthread_ok" = xyes; then
+if test "x$ax_pthread_ok" = "xyes"; then
         ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1])
         :
 else
diff --git a/common/win32.mak b/common/win32.mak
index 87cd346..6060532 100644
--- a/common/win32.mak
+++ b/common/win32.mak
@@ -61,8 +61,11 @@
 
 update-exports:
 	make check-exports 2>&1 | patch -p1
-	git add win32/common/libgst*.def
-	git diff --cached -- win32/common/
+	if test -f "$(top_srcdir)/win32/common/libgstgl.def"; then \
+	  git checkout "$(top_srcdir)/win32/common/libgstgl.def";  \
+	fi
+	git add $(top_srcdir)/win32/common/libgst*.def
+	git diff --cached -- $(top_srcdir)/win32/common/
 	echo '^^^--- updated and staged changes above'
 
 # complain about nonportable printf format strings (%lld, %llu, %zu etc.)
diff --git a/config.h.in b/config.h.in
index b13b309..dde8e5e 100644
--- a/config.h.in
+++ b/config.h.in
@@ -79,6 +79,9 @@
 /* Define to 1 if you have the `alarm' function. */
 #undef HAVE_ALARM
 
+/* Have backtrace */
+#undef HAVE_BACKTRACE
+
 /* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the
    CoreFoundation framework. */
 #undef HAVE_CFLOCALECOPYCURRENT
@@ -164,6 +167,9 @@
 /* Define to 1 if you have the <dlfcn.h> header file. */
 #undef HAVE_DLFCN_H
 
+/* Define to 1 if you have the <execinfo.h> header file. */
+#undef HAVE_EXECINFO_H
+
 /* Define to 1 if you have the `fgetpos' function. */
 #undef HAVE_FGETPOS
 
@@ -397,15 +403,15 @@
 /* Have __uint128_t type */
 #undef HAVE_UINT128_T
 
-/* defined if unaligned memory access works correctly */
-#undef HAVE_UNALIGNED_ACCESS
-
 /* Define to 1 if you have the <unistd.h> header file. */
 #undef HAVE_UNISTD_H
 
 /* Define to 1 if the system has the type `unsigned long long int'. */
 #undef HAVE_UNSIGNED_LONG_LONG_INT
 
+/* libunwind available */
+#undef HAVE_UNWIND
+
 /* Define if valgrind should be used */
 #undef HAVE_VALGRIND
 
diff --git a/configure b/configure
index f224002..af186c2 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for GStreamer 1.8.3.
+# Generated by GNU Autoconf 2.69 for GStreamer 1.9.90.
 #
 # Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer>.
 #
@@ -591,8 +591,8 @@
 # Identity of this package.
 PACKAGE_NAME='GStreamer'
 PACKAGE_TARNAME='gstreamer'
-PACKAGE_VERSION='1.8.3'
-PACKAGE_STRING='GStreamer 1.8.3'
+PACKAGE_VERSION='1.9.90'
+PACKAGE_STRING='GStreamer 1.9.90'
 PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer'
 PACKAGE_URL=''
 
@@ -683,6 +683,8 @@
 GST_LICENSE
 HAVE_CHECK_FALSE
 HAVE_CHECK_TRUE
+UNWIND_LIBS
+UNWIND_CFLAGS
 HAVE_GTK_FALSE
 HAVE_GTK_TRUE
 GTK_LIBS
@@ -803,7 +805,6 @@
 am__fastdepCCAS_TRUE
 CCASDEPMODE
 CCAS
-GST_HAVE_UNALIGNED_ACCESS_DEFINE
 HOST_CPU
 HAVE_CPU_CRISV32_FALSE
 HAVE_CPU_CRISV32_TRUE
@@ -861,6 +862,7 @@
 BASH_COMPLETION_DIR
 BASH_COMPLETION_LIBS
 BASH_COMPLETION_CFLAGS
+GSTCONFIG_BUILT_WITH_MSVC
 GST_PKG_CONFIG_PATH
 GST_PACKAGE_ORIGIN
 GST_PACKAGE_NAME
@@ -884,12 +886,6 @@
 GST_DISABLE_REGISTRY_FALSE
 GST_DISABLE_REGISTRY_TRUE
 GST_DISABLE_REGISTRY_DEFINE
-GST_DISABLE_ALLOC_TRACE_FALSE
-GST_DISABLE_ALLOC_TRACE_TRUE
-GST_DISABLE_ALLOC_TRACE_DEFINE
-GST_DISABLE_TRACE_FALSE
-GST_DISABLE_TRACE_TRUE
-GST_DISABLE_TRACE_DEFINE
 GST_DISABLE_OPTION_PARSING_FALSE
 GST_DISABLE_OPTION_PARSING_TRUE
 GST_DISABLE_OPTION_PARSING_DEFINE
@@ -1087,8 +1083,6 @@
 enable_gst_tracer_hooks
 enable_parse
 enable_option_parsing
-enable_trace
-enable_alloc_trace
 enable_registry
 enable_plugin
 enable_debug
@@ -1151,7 +1145,9 @@
 GIO_CFLAGS
 GIO_LIBS
 GTK_CFLAGS
-GTK_LIBS'
+GTK_LIBS
+UNWIND_CFLAGS
+UNWIND_LIBS'
 
 
 # Initialize some variables set by options.
@@ -1702,7 +1698,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures GStreamer 1.8.3 to adapt to many kinds of systems.
+\`configure' configures GStreamer 1.9.90 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1774,7 +1770,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of GStreamer 1.8.3:";;
+     short | recursive ) echo "Configuration of GStreamer 1.9.90:";;
    esac
   cat <<\_ACEOF
 
@@ -1807,8 +1803,6 @@
   --disable-parse         disable command-line parser
   --disable-option-parsing
                           disable option parsing when gst_init
-  --disable-trace         disable historic tracing subsystem
-  --disable-alloc-trace   disable allocation tracing
   --disable-registry      disable plugin registry
   --disable-plugin        disable plugin
   --disable-debug         disable addition of -g debugging info
@@ -1915,6 +1909,9 @@
   GIO_LIBS    linker flags for GIO, overriding pkg-config
   GTK_CFLAGS  C compiler flags for GTK, overriding pkg-config
   GTK_LIBS    linker flags for GTK, overriding pkg-config
+  UNWIND_CFLAGS
+              C compiler flags for UNWIND, overriding pkg-config
+  UNWIND_LIBS linker flags for UNWIND, overriding pkg-config
 
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
@@ -1982,7 +1979,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-GStreamer configure 1.8.3
+GStreamer configure 1.9.90
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2841,7 +2838,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by GStreamer $as_me 1.8.3, which was
+It was created by GStreamer $as_me 1.9.90, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3822,7 +3819,7 @@
 
 # Define the identity of the package.
  PACKAGE='gstreamer'
- VERSION='1.8.3'
+ VERSION='1.9.90'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -4033,9 +4030,9 @@
 
 
 
-  PACKAGE_VERSION_MAJOR=$(echo 1.8.3 | cut -d'.' -f1)
-  PACKAGE_VERSION_MINOR=$(echo 1.8.3 | cut -d'.' -f2)
-  PACKAGE_VERSION_MICRO=$(echo 1.8.3 | cut -d'.' -f3)
+  PACKAGE_VERSION_MAJOR=$(echo 1.9.90 | cut -d'.' -f1)
+  PACKAGE_VERSION_MINOR=$(echo 1.9.90 | cut -d'.' -f2)
+  PACKAGE_VERSION_MICRO=$(echo 1.9.90 | cut -d'.' -f3)
 
 
 
@@ -4046,7 +4043,7 @@
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5
 $as_echo_n "checking nano version... " >&6; }
 
-  NANO=$(echo 1.8.3 | cut -d'.' -f4)
+  NANO=$(echo 1.9.90 | cut -d'.' -f4)
 
   if test x"$NANO" = x || test "x$NANO" = "x0" ; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5
@@ -8889,10 +8886,10 @@
 done
 
 
-  GST_CURRENT=803
+  GST_CURRENT=990
   GST_REVISION=0
-  GST_AGE=803
-  GST_LIBVERSION=803:0:803
+  GST_AGE=990
+  GST_LIBVERSION=990:0:990
 
 
 
@@ -15746,74 +15743,6 @@
 
 
 
-  # Check whether --enable-trace was given.
-if test "${enable_trace+set}" = set; then :
-  enableval=$enable_trace;
-      case "${enableval}" in
-        yes) GST_DISABLE_TRACE=no ;;
-        no) GST_DISABLE_TRACE=yes ;;
-        *) as_fn_error $? "bad value ${enableval} for --enable-trace" "$LINENO" 5 ;;
-       esac
-
-else
-  GST_DISABLE_TRACE=no
-fi
-
-  if test x$GST_DISABLE_TRACE = xyes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: disabled subsystem historic tracing subsystem" >&5
-$as_echo "$as_me: disabled subsystem historic tracing subsystem" >&6;}
-    GST_DISABLE_TRACE_DEFINE="#define GST_DISABLE_TRACE 1"
-  else
-    GST_DISABLE_TRACE_DEFINE="/* #undef GST_DISABLE_TRACE */"
-  fi
-
-
-
- if test "x$GST_DISABLE_TRACE" = "xyes"; then
-  GST_DISABLE_TRACE_TRUE=
-  GST_DISABLE_TRACE_FALSE='#'
-else
-  GST_DISABLE_TRACE_TRUE='#'
-  GST_DISABLE_TRACE_FALSE=
-fi
-
-
-
-
-  # Check whether --enable-alloc-trace was given.
-if test "${enable_alloc_trace+set}" = set; then :
-  enableval=$enable_alloc_trace;
-      case "${enableval}" in
-        yes) GST_DISABLE_ALLOC_TRACE=no ;;
-        no) GST_DISABLE_ALLOC_TRACE=yes ;;
-        *) as_fn_error $? "bad value ${enableval} for --enable-alloc-trace" "$LINENO" 5 ;;
-       esac
-
-else
-  GST_DISABLE_ALLOC_TRACE=no
-fi
-
-  if test x$GST_DISABLE_ALLOC_TRACE = xyes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: disabled subsystem allocation tracing" >&5
-$as_echo "$as_me: disabled subsystem allocation tracing" >&6;}
-    GST_DISABLE_ALLOC_TRACE_DEFINE="#define GST_DISABLE_ALLOC_TRACE 1"
-  else
-    GST_DISABLE_ALLOC_TRACE_DEFINE="/* #undef GST_DISABLE_ALLOC_TRACE */"
-  fi
-
-
-
- if test "x$GST_DISABLE_ALLOC_TRACE" = "xyes"; then
-  GST_DISABLE_ALLOC_TRACE_TRUE=
-  GST_DISABLE_ALLOC_TRACE_FALSE='#'
-else
-  GST_DISABLE_ALLOC_TRACE_TRUE='#'
-  GST_DISABLE_ALLOC_TRACE_FALSE=
-fi
-
-
-
-
   # Check whether --enable-registry was given.
 if test "${enable_registry+set}" = set; then :
   enableval=$enable_registry;
@@ -16444,6 +16373,11 @@
   fi
 
 
+# We only use this when building with MSVC, which is only done with the
+# alternate Meson build system files
+GSTCONFIG_BUILT_WITH_MSVC=0
+
+
 
 # Check whether --with-bash-completion-dir was given.
 if test "${with_bash_completion_dir+set}" = set; then :
@@ -16656,6 +16590,10 @@
 fi
 
 
+if test x$enable_static = xyes -a x$enable_shared = xno; then
+  GST_OBJ_STATIC_CFLAGS="-DGST_STATIC_COMPILATION"
+fi
+
 # Check whether --enable-tests was given.
 if test "${enable_tests+set}" = set; then :
   enableval=$enable_tests;
@@ -17572,74 +17510,6 @@
 
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if unaligned memory access works correctly" >&5
-$as_echo_n "checking if unaligned memory access works correctly... " >&6; }
-  if test x"$as_cv_unaligned_access" = x ; then
-    case $host in
-      alpha*|arc*|arm*|aarch64*|hp*|mips*|sh*|sparc*|ia64*)
-        $as_echo_n "(blacklisted) " >&6
-        as_cv_unaligned_access=no
-	;;
-      i?86*|x86_64*|amd64*|powerpc*|m68k*|cris*)
-        $as_echo_n "(whitelisted) " >&6
-        as_cv_unaligned_access=yes
-	;;
-    esac
-  else
-    $as_echo_n "(cached) " >&6
-  fi
-  if test x"$as_cv_unaligned_access" = x ; then
-    if test "$cross_compiling" = yes; then :
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run test program while cross compiling
-See \`config.log' for more details" "$LINENO" 5; }
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int main(int argc, char **argv)
-{
-  char array[] = "ABCDEFGH";
-  unsigned int iarray[2];
-  memcpy(iarray,array,8);
-#define GET(x) (*(unsigned int *)((char *)iarray + (x)))
-  if(GET(0) != 0x41424344 && GET(0) != 0x44434241) return 1;
-  if(GET(1) != 0x42434445 && GET(1) != 0x45444342) return 1;
-  if(GET(2) != 0x43444546 && GET(2) != 0x46454443) return 1;
-  if(GET(3) != 0x44454647 && GET(3) != 0x47464544) return 1;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  as_cv_unaligned_access="yes"
-else
-  as_cv_unaligned_access="no"
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-  fi
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $as_cv_unaligned_access" >&5
-$as_echo "$as_cv_unaligned_access" >&6; }
-  if test "$as_cv_unaligned_access" = "yes"; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_UNALIGNED_ACCESS 1
-_ACEOF
-
-  fi
-
-if test x${as_cv_unaligned_access} = xyes ; then
-  GST_HAVE_UNALIGNED_ACCESS_DEFINE="#define GST_HAVE_UNALIGNED_ACCESS 1"
-else
-  GST_HAVE_UNALIGNED_ACCESS_DEFINE="#define GST_HAVE_UNALIGNED_ACCESS 0"
-fi
-
-
-
 
 
   case $host_os in
@@ -24710,6 +24580,8 @@
 
 
 
+
+
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -24719,19 +24591,23 @@
 ax_pthread_ok=no
 
 # We used to check for pthread.h first, but this fails if pthread.h
-# requires special compiler flags (e.g. on True64 or Sequent).
+# requires special compiler flags (e.g. on Tru64 or Sequent).
 # It gets checked for in the link test anyway.
 
 # First of all, check if the user has set any of the PTHREAD_LIBS,
 # etcetera environment variables, and if threads linking works using
 # them:
-if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
-        save_CFLAGS="$CFLAGS"
+if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then
+        ax_pthread_save_CC="$CC"
+        ax_pthread_save_CFLAGS="$CFLAGS"
+        ax_pthread_save_LIBS="$LIBS"
+        if test "x$PTHREAD_CC" != "x"; then :
+  CC="$PTHREAD_CC"
+fi
         CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-        save_LIBS="$LIBS"
         LIBS="$PTHREAD_LIBS $LIBS"
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5
-$as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; }
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS" >&5
+$as_echo_n "checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS... " >&6; }
         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -24757,12 +24633,13 @@
     conftest$ac_exeext conftest.$ac_ext
         { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
 $as_echo "$ax_pthread_ok" >&6; }
-        if test x"$ax_pthread_ok" = xno; then
+        if test "x$ax_pthread_ok" = "xno"; then
                 PTHREAD_LIBS=""
                 PTHREAD_CFLAGS=""
         fi
-        LIBS="$save_LIBS"
-        CFLAGS="$save_CFLAGS"
+        CC="$ax_pthread_save_CC"
+        CFLAGS="$ax_pthread_save_CFLAGS"
+        LIBS="$ax_pthread_save_LIBS"
 fi
 
 # We must check for the threads library under a number of different
@@ -24775,7 +24652,7 @@
 # which indicates that we try without any flags at all, and "pthread-config"
 # which is a program returning the flags for the Pth emulation library.
 
-ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
+ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
 
 # The ordering *is* (sometimes) important.  Some notes on the
 # individual items follow:
@@ -24784,82 +24661,257 @@
 # none: in case threads are in libc; should be tried before -Kthread and
 #       other compiler flags to prevent continual compiler warnings
 # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
-# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
-# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
-# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
-# -pthreads: Solaris/gcc
-# -mthreads: Mingw32/gcc, Lynx/gcc
+# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64
+#           (Note: HP C rejects this with "bad form for `-t' option")
+# -pthreads: Solaris/gcc (Note: HP C also rejects)
 # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
-#      doesn't hurt to check since this sometimes defines pthreads too;
-#      also defines -D_REENTRANT)
-#      ... -mt is also the pthreads flag for HP/aCC
+#      doesn't hurt to check since this sometimes defines pthreads and
+#      -D_REENTRANT too), HP C (must be checked before -lpthread, which
+#      is present but should not be used directly; and before -mthreads,
+#      because the compiler interprets this as "-mt" + "-hreads")
+# -mthreads: Mingw32/gcc, Lynx/gcc
 # pthread: Linux, etcetera
 # --thread-safe: KAI C++
 # pthread-config: use pthread-config program (for GNU Pth library)
 
-case ${host_os} in
+case $host_os in
+
+        freebsd*)
+
+        # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
+        # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
+
+        ax_pthread_flags="-kthread lthread $ax_pthread_flags"
+        ;;
+
+        hpux*)
+
+        # From the cc(1) man page: "[-mt] Sets various -D flags to enable
+        # multi-threading and also sets -lpthread."
+
+        ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags"
+        ;;
+
+        openedition*)
+
+        # IBM z/OS requires a feature-test macro to be defined in order to
+        # enable POSIX threads at all, so give the user a hint if this is
+        # not set. (We don't define these ourselves, as they can affect
+        # other portions of the system API in unpredictable ways.)
+
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#            if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS)
+             AX_PTHREAD_ZOS_MISSING
+#            endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&5
+$as_echo "$as_me: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&2;}
+fi
+rm -f conftest*
+
+        ;;
+
         solaris*)
 
         # On Solaris (at least, for some versions), libc contains stubbed
         # (non-functional) versions of the pthreads routines, so link-based
-        # tests will erroneously succeed.  (We need to link with -pthreads/-mt/
-        # -lpthread.)  (The stubs are missing pthread_cleanup_push, or rather
-        # a function called by this macro, so we could check for that, but
-        # who knows whether they'll stub that too in a future libc.)  So,
-        # we'll just look for -pthreads and -lpthread first:
+        # tests will erroneously succeed. (N.B.: The stubs are missing
+        # pthread_cleanup_push, or rather a function called by this macro,
+        # so we could check for that, but who knows whether they'll stub
+        # that too in a future libc.)  So we'll check first for the
+        # standard Solaris way of linking pthreads (-mt -lpthread).
 
-        ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
-        ;;
-
-        darwin*)
-        ax_pthread_flags="-pthread $ax_pthread_flags"
+        ax_pthread_flags="-mt,pthread pthread $ax_pthread_flags"
         ;;
 esac
 
-# Clang doesn't consider unrecognized options an error unless we specify
-# -Werror. We throw in some extra Clang-specific options to ensure that
-# this doesn't happen for GCC, which also accepts -Werror.
+# GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC)
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler needs -Werror to reject unknown flags" >&5
-$as_echo_n "checking if compiler needs -Werror to reject unknown flags... " >&6; }
-save_CFLAGS="$CFLAGS"
-ax_pthread_extra_flags="-Werror"
-CFLAGS="$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-int foo(void);
-int
-main ()
-{
-foo()
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  ax_pthread_extra_flags=
-                   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+if test "x$GCC" = "xyes"; then :
+  ax_pthread_flags="-pthread -pthreads $ax_pthread_flags"
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-CFLAGS="$save_CFLAGS"
 
-if test x"$ax_pthread_ok" = xno; then
-for flag in $ax_pthread_flags; do
+# The presence of a feature test macro requesting re-entrant function
+# definitions is, on some systems, a strong hint that pthreads support is
+# correctly enabled
 
-        case $flag in
+case $host_os in
+        darwin* | hpux* | linux* | osf* | solaris*)
+        ax_pthread_check_macro="_REENTRANT"
+        ;;
+
+        aix*)
+        ax_pthread_check_macro="_THREAD_SAFE"
+        ;;
+
+        *)
+        ax_pthread_check_macro="--"
+        ;;
+esac
+if test "x$ax_pthread_check_macro" = "x--"; then :
+  ax_pthread_check_cond=0
+else
+  ax_pthread_check_cond="!defined($ax_pthread_check_macro)"
+fi
+
+# Are we compiling with Clang?
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC is Clang" >&5
+$as_echo_n "checking whether $CC is Clang... " >&6; }
+if ${ax_cv_PTHREAD_CLANG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ax_cv_PTHREAD_CLANG=no
+     # Note that Autoconf sets GCC=yes for Clang as well as GCC
+     if test "x$GCC" = "xyes"; then
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Note: Clang 2.7 lacks __clang_[a-z]+__ */
+#            if defined(__clang__) && defined(__llvm__)
+             AX_PTHREAD_CC_IS_CLANG
+#            endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1; then :
+  ax_cv_PTHREAD_CLANG=yes
+fi
+rm -f conftest*
+
+     fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG" >&5
+$as_echo "$ax_cv_PTHREAD_CLANG" >&6; }
+ax_pthread_clang="$ax_cv_PTHREAD_CLANG"
+
+ax_pthread_clang_warning=no
+
+# Clang needs special handling, because older versions handle the -pthread
+# option in a rather... idiosyncratic way
+
+if test "x$ax_pthread_clang" = "xyes"; then
+
+        # Clang takes -pthread; it has never supported any other flag
+
+        # (Note 1: This will need to be revisited if a system that Clang
+        # supports has POSIX threads in a separate library.  This tends not
+        # to be the way of modern systems, but it's conceivable.)
+
+        # (Note 2: On some systems, notably Darwin, -pthread is not needed
+        # to get POSIX threads support; the API is always present and
+        # active.  We could reasonably leave PTHREAD_CFLAGS empty.  But
+        # -pthread does define _REENTRANT, and while the Darwin headers
+        # ignore this macro, third-party headers might not.)
+
+        PTHREAD_CFLAGS="-pthread"
+        PTHREAD_LIBS=
+
+        ax_pthread_ok=yes
+
+        # However, older versions of Clang make a point of warning the user
+        # that, in an invocation where only linking and no compilation is
+        # taking place, the -pthread option has no effect ("argument unused
+        # during compilation").  They expect -pthread to be passed in only
+        # when source code is being compiled.
+        #
+        # Problem is, this is at odds with the way Automake and most other
+        # C build frameworks function, which is that the same flags used in
+        # compilation (CFLAGS) are also used in linking.  Many systems
+        # supported by AX_PTHREAD require exactly this for POSIX threads
+        # support, and in fact it is often not straightforward to specify a
+        # flag that is used only in the compilation phase and not in
+        # linking.  Such a scenario is extremely rare in practice.
+        #
+        # Even though use of the -pthread flag in linking would only print
+        # a warning, this can be a nuisance for well-run software projects
+        # that build with -Werror.  So if the active version of Clang has
+        # this misfeature, we search for an option to squash it.
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread" >&5
+$as_echo_n "checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread... " >&6; }
+if ${ax_cv_PTHREAD_CLANG_NO_WARN_FLAG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown
+             # Create an alternate version of $ac_link that compiles and
+             # links in two steps (.c -> .o, .o -> exe) instead of one
+             # (.c -> exe), because the warning occurs only in the second
+             # step
+             ax_pthread_save_ac_link="$ac_link"
+             ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g'
+             ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"`
+             ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)"
+             ax_pthread_save_CFLAGS="$CFLAGS"
+             for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do
+                if test "x$ax_pthread_try" = "xunknown"; then :
+  break
+fi
+                CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS"
+                ac_link="$ax_pthread_save_ac_link"
+                cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int main(void){return 0;}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_link="$ax_pthread_2step_ac_link"
+                     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int main(void){return 0;}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  break
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+             done
+             ac_link="$ax_pthread_save_ac_link"
+             CFLAGS="$ax_pthread_save_CFLAGS"
+             if test "x$ax_pthread_try" = "x"; then :
+  ax_pthread_try=no
+fi
+             ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&5
+$as_echo "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&6; }
+
+        case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in
+                no | unknown) ;;
+                *) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;;
+        esac
+
+fi # $ax_pthread_clang = yes
+
+if test "x$ax_pthread_ok" = "xno"; then
+for ax_pthread_try_flag in $ax_pthread_flags; do
+
+        case $ax_pthread_try_flag in
                 none)
                 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5
 $as_echo_n "checking whether pthreads work without any flags... " >&6; }
                 ;;
 
+                -mt,pthread)
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with -mt -lpthread" >&5
+$as_echo_n "checking whether pthreads work with -mt -lpthread... " >&6; }
+                PTHREAD_CFLAGS="-mt"
+                PTHREAD_LIBS="-lpthread"
+                ;;
+
                 -*)
-                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5
-$as_echo_n "checking whether pthreads work with $flag... " >&6; }
-                PTHREAD_CFLAGS="$flag"
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $ax_pthread_try_flag" >&5
+$as_echo_n "checking whether pthreads work with $ax_pthread_try_flag... " >&6; }
+                PTHREAD_CFLAGS="$ax_pthread_try_flag"
                 ;;
 
                 pthread-config)
@@ -24901,22 +24953,24 @@
 fi
 
 
-                if test x"$ax_pthread_config" = xno; then continue; fi
+                if test "x$ax_pthread_config" = "xno"; then :
+  continue
+fi
                 PTHREAD_CFLAGS="`pthread-config --cflags`"
                 PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
                 ;;
 
                 *)
-                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5
-$as_echo_n "checking for the pthreads library -l$flag... " >&6; }
-                PTHREAD_LIBS="-l$flag"
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$ax_pthread_try_flag" >&5
+$as_echo_n "checking for the pthreads library -l$ax_pthread_try_flag... " >&6; }
+                PTHREAD_LIBS="-l$ax_pthread_try_flag"
                 ;;
         esac
 
-        save_LIBS="$LIBS"
-        save_CFLAGS="$CFLAGS"
+        ax_pthread_save_CFLAGS="$CFLAGS"
+        ax_pthread_save_LIBS="$LIBS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
         LIBS="$PTHREAD_LIBS $LIBS"
-        CFLAGS="$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags"
 
         # Check for various functions.  We must include pthread.h,
         # since some functions may be macros.  (On the Sequent, we
@@ -24927,9 +24981,13 @@
         # pthread_cleanup_push because it is one of the few pthread
         # functions on Solaris that doesn't have a non-functional libc stub.
         # We try pthread_create on general principles.
+
         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <pthread.h>
+#                       if $ax_pthread_check_cond
+#                        error "$ax_pthread_check_macro must be defined"
+#                       endif
                         static void routine(void *a) { a = 0; }
                         static void *start_routine(void *a) { return a; }
 int
@@ -24951,14 +25009,14 @@
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
 
-        LIBS="$save_LIBS"
-        CFLAGS="$save_CFLAGS"
+        CFLAGS="$ax_pthread_save_CFLAGS"
+        LIBS="$ax_pthread_save_LIBS"
 
         { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
 $as_echo "$ax_pthread_ok" >&6; }
-        if test "x$ax_pthread_ok" = xyes; then
-                break;
-        fi
+        if test "x$ax_pthread_ok" = "xyes"; then :
+  break
+fi
 
         PTHREAD_LIBS=""
         PTHREAD_CFLAGS=""
@@ -24966,72 +25024,80 @@
 fi
 
 # Various other checks:
-if test "x$ax_pthread_ok" = xyes; then
-        save_LIBS="$LIBS"
-        LIBS="$PTHREAD_LIBS $LIBS"
-        save_CFLAGS="$CFLAGS"
+if test "x$ax_pthread_ok" = "xyes"; then
+        ax_pthread_save_CFLAGS="$CFLAGS"
+        ax_pthread_save_LIBS="$LIBS"
         CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+        LIBS="$PTHREAD_LIBS $LIBS"
 
         # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
         { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5
 $as_echo_n "checking for joinable pthread attribute... " >&6; }
-        attr_name=unknown
-        for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
-            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+if ${ax_cv_PTHREAD_JOINABLE_ATTR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ax_cv_PTHREAD_JOINABLE_ATTR=unknown
+             for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
+                 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <pthread.h>
 int
 main ()
 {
-int attr = $attr; return attr /* ; */
+int attr = $ax_pthread_attr; return attr /* ; */
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  attr_name=$attr; break
+  ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-        done
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5
-$as_echo "$attr_name" >&6; }
-        if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
+             done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_JOINABLE_ATTR" >&5
+$as_echo "$ax_cv_PTHREAD_JOINABLE_ATTR" >&6; }
+        if test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \
+               test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \
+               test "x$ax_pthread_joinable_attr_defined" != "xyes"; then :
 
 cat >>confdefs.h <<_ACEOF
-#define PTHREAD_CREATE_JOINABLE $attr_name
+#define PTHREAD_CREATE_JOINABLE $ax_cv_PTHREAD_JOINABLE_ATTR
 _ACEOF
 
-        fi
+               ax_pthread_joinable_attr_defined=yes
 
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5
-$as_echo_n "checking if more special flags are required for pthreads... " >&6; }
-        flag=no
-        case ${host_os} in
-            aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";;
-            osf* | hpux*) flag="-D_REENTRANT";;
-            solaris*)
-            if test "$GCC" = "yes"; then
-                flag="-D_REENTRANT"
-            else
-                # TODO: What about Clang on Solaris?
-                flag="-mt -D_REENTRANT"
-            fi
-            ;;
-        esac
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag" >&5
-$as_echo "$flag" >&6; }
-        if test "x$flag" != xno; then
-            PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
-        fi
+fi
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether more special flags are required for pthreads" >&5
+$as_echo_n "checking whether more special flags are required for pthreads... " >&6; }
+if ${ax_cv_PTHREAD_SPECIAL_FLAGS+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ax_cv_PTHREAD_SPECIAL_FLAGS=no
+             case $host_os in
+             solaris*)
+             ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS"
+             ;;
+             esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_SPECIAL_FLAGS" >&5
+$as_echo "$ax_cv_PTHREAD_SPECIAL_FLAGS" >&6; }
+        if test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \
+               test "x$ax_pthread_special_flags_added" != "xyes"; then :
+  PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS"
+               ax_pthread_special_flags_added=yes
+fi
 
         { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5
 $as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; }
 if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-
-                cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <pthread.h>
 int
@@ -25053,23 +25119,26 @@
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5
 $as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; }
-        if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"; then :
+        if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \
+               test "x$ax_pthread_prio_inherit_defined" != "xyes"; then :
 
 $as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h
 
+               ax_pthread_prio_inherit_defined=yes
+
 fi
 
-        LIBS="$save_LIBS"
-        CFLAGS="$save_CFLAGS"
+        CFLAGS="$ax_pthread_save_CFLAGS"
+        LIBS="$ax_pthread_save_LIBS"
 
         # More AIX lossage: compile with *_r variant
-        if test "x$GCC" != xyes; then
+        if test "x$GCC" != "xyes"; then
             case $host_os in
                 aix*)
                 case "x/$CC" in #(
   x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6) :
     #handle absolute path differently from PATH based program lookup
-                   case "x$CC" in #(
+                     case "x$CC" in #(
   x/*) :
     if as_fn_executable_p ${CC}_r; then :
   PTHREAD_CC="${CC}_r"
@@ -25134,7 +25203,7 @@
 
 
 # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
-if test x"$ax_pthread_ok" = xyes; then
+if test "x$ax_pthread_ok" = "xyes"; then
 
 $as_echo "#define HAVE_PTHREAD 1" >>confdefs.h
 
@@ -27145,6 +27214,107 @@
 fi
 
 
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for UNWIND" >&5
+$as_echo_n "checking for UNWIND... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$UNWIND_CFLAGS"; then
+        pkg_cv_UNWIND_CFLAGS="$UNWIND_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libunwind\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libunwind") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_UNWIND_CFLAGS=`$PKG_CONFIG --cflags "libunwind" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$UNWIND_LIBS"; then
+        pkg_cv_UNWIND_LIBS="$UNWIND_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libunwind\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libunwind") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_UNWIND_LIBS=`$PKG_CONFIG --libs "libunwind" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        UNWIND_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libunwind"`
+        else
+	        UNWIND_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libunwind"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$UNWIND_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                HAVE_UNWIND=no
+elif test $pkg_failed = untried; then
+	HAVE_UNWIND=no
+else
+	UNWIND_CFLAGS=$pkg_cv_UNWIND_CFLAGS
+	UNWIND_LIBS=$pkg_cv_UNWIND_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	HAVE_UNWIND=yes
+fi
+
+ac_fn_c_check_func "$LINENO" "backtrace" "ac_cv_func_backtrace"
+if test "x$ac_cv_func_backtrace" = xyes; then :
+
+  for ac_header in execinfo.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "execinfo.h" "ac_cv_header_execinfo_h" "$ac_includes_default"
+if test "x$ac_cv_header_execinfo_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_EXECINFO_H 1
+_ACEOF
+
+
+$as_echo "#define HAVE_BACKTRACE 1" >>confdefs.h
+
+
+fi
+
+done
+
+
+fi
+
+
+if test "x$HAVE_UNWIND" = "xyes"; then
+
+$as_echo "#define HAVE_UNWIND 1" >>confdefs.h
+
+fi
+
 # Check whether --enable-check was given.
 if test "${enable_check+set}" = set; then :
   enableval=$enable_check;
@@ -27711,8 +27881,8 @@
 GST_LIB_LDFLAGS="-export-symbols-regex \^_?\(gst_\|Gst\|GST_\).*"
 
 
-GST_OBJ_CFLAGS="\$(GST_ALL_CFLAGS)"
-GST_OBJ_CXXFLAGS="\$(GST_ALL_CXXFLAGS)"
+GST_OBJ_CFLAGS="\$(GST_ALL_CFLAGS) $GST_OBJ_STATIC_CFLAGS"
+GST_OBJ_CXXFLAGS="\$(GST_ALL_CXXFLAGS) $GST_OBJ_STATIC_CFLAGS"
 GST_OBJ_LIBS="\$(top_builddir)/gst/libgstreamer-$GST_API_VERSION.la \$(GST_ALL_LIBS)"
 
 
@@ -28858,14 +29028,6 @@
   as_fn_error $? "conditional \"GST_DISABLE_OPTION_PARSING\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
-if test -z "${GST_DISABLE_TRACE_TRUE}" && test -z "${GST_DISABLE_TRACE_FALSE}"; then
-  as_fn_error $? "conditional \"GST_DISABLE_TRACE\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${GST_DISABLE_ALLOC_TRACE_TRUE}" && test -z "${GST_DISABLE_ALLOC_TRACE_FALSE}"; then
-  as_fn_error $? "conditional \"GST_DISABLE_ALLOC_TRACE\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
 if test -z "${GST_DISABLE_REGISTRY_TRUE}" && test -z "${GST_DISABLE_REGISTRY_FALSE}"; then
   as_fn_error $? "conditional \"GST_DISABLE_REGISTRY\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -29500,7 +29662,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by GStreamer $as_me 1.8.3, which was
+This file was extended by GStreamer $as_me 1.9.90, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -29566,7 +29728,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-GStreamer config.status 1.8.3
+GStreamer config.status 1.9.90
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
@@ -32192,8 +32354,6 @@
 if test "x${GST_DISABLE_GST_TRACER_HOOKS}" = "xno"; then enable_gst_tracer_hooks="yes"; fi
 if test "x${GST_DISABLE_PARSE}" = "xno"; then enable_parse="yes"; fi
 if test "x${GST_DISABLE_OPTION_PARSING}" = "xno"; then enable_option_parsing="yes"; fi
-if test "x${GST_DISABLE_TRACE}" = "xno"; then enable_trace="yes"; fi
-if test "x${GST_DISABLE_ALLOC_TRACE}" = "xno"; then enable_alloc_trace="yes"; fi
 if test "x${GST_DISABLE_PLUGIN}" = "xno"; then enable_plugin="yes"; fi
 if test "x${GST_DISABLE_REGISTRY}" = "xno"; then enable_registry="yes"; fi
 
@@ -32214,13 +32374,12 @@
 	Tracing subsystem hooks    : ${enable_gst_tracer_hooks}
 	Command-line parser        : ${enable_parse}
 	Option parsing in gst_init : ${enable_option_parsing}
-	Historic tracing subsystem : ${enable_trace}
-	Allocation tracing         : ${enable_alloc_trace}
 	Plugin registry            : ${enable_registry}
 	Plugin support	           : ${enable_plugin}
 	Static plugins             : ${enable_static_plugins}
 	Unit testing support       : ${BUILD_CHECK}
 	PTP clock support          : ${HAVE_PTP}
+	libunwind support          : ${HAVE_UNWIND}
 
 	Debug                      : ${USE_DEBUG}
 	Profiling                  : ${USE_PROFILING}
diff --git a/configure.ac b/configure.ac
index 05ac220..bf14e2b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4,7 +4,7 @@
 dnl when going to/from release please set the nano (fourth number) right !
 dnl releases only do Wall, git and prerelease does Werror too
 dnl
-AC_INIT([GStreamer],[1.8.3],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gstreamer])
+AC_INIT([GStreamer],[1.9.90],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gstreamer])
 AG_GST_INIT
 
 dnl initialize automake (we require GNU make)
@@ -62,7 +62,7 @@
 dnl      1.10.9 (who knows) => 1009
 dnl
 dnl sets GST_LT_LDFLAGS
-AS_LIBTOOL(GST, 803, 0, 803)
+AS_LIBTOOL(GST, 990, 0, 990)
 
 dnl *** autotools stuff ****
 
@@ -101,10 +101,6 @@
   AC_DEFINE(GST_DISABLE_OPTION_PARSING, 1,
     [Define if option parsing is disabled])
 fi
-AG_GST_CHECK_SUBSYSTEM_DISABLE(TRACE,[historic tracing subsystem])
-AM_CONDITIONAL(GST_DISABLE_TRACE, test "x$GST_DISABLE_TRACE" = "xyes")
-AG_GST_CHECK_SUBSYSTEM_DISABLE(ALLOC_TRACE,[allocation tracing])
-AM_CONDITIONAL(GST_DISABLE_ALLOC_TRACE, test "x$GST_DISABLE_ALLOC_TRACE" = "xyes")
 AG_GST_CHECK_SUBSYSTEM_DISABLE(REGISTRY,[plugin registry])
 AM_CONDITIONAL(GST_DISABLE_REGISTRY, test "x$GST_DISABLE_REGISTRY" = "xyes")
 dnl define a substitution to use in docs/gst/gstreamer.types
@@ -135,6 +131,11 @@
   ["${srcdir}/gstreamer.doap"],
   [$PACKAGE_VERSION_MAJOR.$PACKAGE_VERSION_MINOR.$PACKAGE_VERSION_MICRO])
 
+# We only use this when building with MSVC, which is only done with the
+# alternate Meson build system files
+GSTCONFIG_BUILT_WITH_MSVC=0
+AC_SUBST(GSTCONFIG_BUILT_WITH_MSVC)
+
 dnl check for bash completion
 AC_ARG_WITH([bash-completion-dir],
     AS_HELP_STRING([--with-bash-completion-dir[=PATH]],
@@ -188,6 +189,12 @@
 AC_SUBST(GST_PLUGIN_LIBTOOLFLAGS)
 AM_CONDITIONAL(GST_PLUGIN_BUILD_STATIC, test "x$enable_static_plugins" = "xyes")
 
+dnl If only building static libraries, define GST_STATIC_COMPILATION. This is
+dnl needed only on Windows, but it doesn't hurt to have it everywhere.
+if test x$enable_static = xyes -a x$enable_shared = xno; then
+  GST_OBJ_STATIC_CFLAGS="-DGST_STATIC_COMPILATION"
+fi
+
 dnl building of tests
 AC_ARG_ENABLE(tests,
   AS_HELP_STRING([--disable-tests],[disable building test apps]),
@@ -409,17 +416,6 @@
 HOST_CPU=$host_cpu
 AC_SUBST(HOST_CPU)
 
-dnl common/m4/gst-arch.m4
-dnl check for unaligned access
-AG_GST_UNALIGNED_ACCESS
-dnl create a configure variable for gst/gstconfig.h
-if test x${as_cv_unaligned_access} = xyes ; then
-  GST_HAVE_UNALIGNED_ACCESS_DEFINE="#define GST_HAVE_UNALIGNED_ACCESS 1"
-else
-  GST_HAVE_UNALIGNED_ACCESS_DEFINE="#define GST_HAVE_UNALIGNED_ACCESS 0"
-fi
-AC_SUBST(GST_HAVE_UNALIGNED_ACCESS_DEFINE)
-
 dnl check for platform specific settings
 AG_GST_PLATFORM
 
@@ -791,6 +787,20 @@
 fi
 AM_CONDITIONAL(HAVE_GTK, test "x$HAVE_GTK" = "xyes")
 
+dnl libunwind is optionally used by the leaks tracer
+PKG_CHECK_MODULES(UNWIND, libunwind, HAVE_UNWIND=yes, HAVE_UNWIND=no)
+
+dnl Check for backtrace() from libc
+AC_CHECK_FUNC(backtrace, [
+  AC_CHECK_HEADERS([execinfo.h], [
+    AC_DEFINE(HAVE_BACKTRACE,1,[Have backtrace])
+  ], [], [])
+])
+
+if test "x$HAVE_UNWIND" = "xyes"; then
+  AC_DEFINE(HAVE_UNWIND, 1, [libunwind available])
+fi
+
 dnl building of unit test libraries
 AC_ARG_ENABLE(check,
   AS_HELP_STRING([--disable-check],[disable building unit test libraries]),
@@ -950,8 +960,8 @@
 dnl GST_OBJ_*
 dnl default vars for all internal objects built on libgstreamer
 dnl includes GST_ALL_*
-GST_OBJ_CFLAGS="\$(GST_ALL_CFLAGS)"
-GST_OBJ_CXXFLAGS="\$(GST_ALL_CXXFLAGS)"
+GST_OBJ_CFLAGS="\$(GST_ALL_CFLAGS) $GST_OBJ_STATIC_CFLAGS"
+GST_OBJ_CXXFLAGS="\$(GST_ALL_CXXFLAGS) $GST_OBJ_STATIC_CFLAGS"
 GST_OBJ_LIBS="\$(top_builddir)/gst/libgstreamer-$GST_API_VERSION.la \$(GST_ALL_LIBS)"
 AC_SUBST(GST_OBJ_CFLAGS)
 AC_SUBST(GST_OBJ_CXXFLAGS)
@@ -976,7 +986,7 @@
 
 dnl things for our internal libcheck (must be called even if building
 dnl libcheck is disabled because it defines conditionals)
-AG_GST_CHECK_CHECKS()
+AG_GST_CHECK_CHECKS
 
 AC_CONFIG_FILES(
 Makefile
@@ -1089,8 +1099,6 @@
 if test "x${GST_DISABLE_GST_TRACER_HOOKS}" = "xno"; then enable_gst_tracer_hooks="yes"; fi
 if test "x${GST_DISABLE_PARSE}" = "xno"; then enable_parse="yes"; fi
 if test "x${GST_DISABLE_OPTION_PARSING}" = "xno"; then enable_option_parsing="yes"; fi
-if test "x${GST_DISABLE_TRACE}" = "xno"; then enable_trace="yes"; fi
-if test "x${GST_DISABLE_ALLOC_TRACE}" = "xno"; then enable_alloc_trace="yes"; fi
 if test "x${GST_DISABLE_PLUGIN}" = "xno"; then enable_plugin="yes"; fi
 if test "x${GST_DISABLE_REGISTRY}" = "xno"; then enable_registry="yes"; fi
 
@@ -1111,13 +1119,12 @@
 	Tracing subsystem hooks    : ${enable_gst_tracer_hooks}
 	Command-line parser        : ${enable_parse}
 	Option parsing in gst_init : ${enable_option_parsing}
-	Historic tracing subsystem : ${enable_trace}
-	Allocation tracing         : ${enable_alloc_trace}
 	Plugin registry            : ${enable_registry}
 	Plugin support	           : ${enable_plugin}
 	Static plugins             : ${enable_static_plugins}
 	Unit testing support       : ${BUILD_CHECK}
 	PTP clock support          : ${HAVE_PTP}
+	libunwind support          : ${HAVE_UNWIND}
 
 	Debug                      : ${USE_DEBUG}
 	Profiling                  : ${USE_PROFILING}
diff --git a/data/Makefile.in b/data/Makefile.in
index ba04dc0..51b6a20 100644
--- a/data/Makefile.in
+++ b/data/Makefile.in
@@ -261,6 +261,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -268,17 +269,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -403,6 +401,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/docs/Makefile.in b/docs/Makefile.in
index 67e32b7..eb6773b 100644
--- a/docs/Makefile.in
+++ b/docs/Makefile.in
@@ -293,6 +293,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -300,17 +301,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -435,6 +433,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/docs/design/Makefile.in b/docs/design/Makefile.in
index 621dd6a..f6f8bfa 100644
--- a/docs/design/Makefile.in
+++ b/docs/design/Makefile.in
@@ -228,6 +228,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -235,17 +236,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -370,6 +368,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/docs/design/part-states.txt b/docs/design/part-states.txt
index 7040d21..6ad300c 100644
--- a/docs/design/part-states.txt
+++ b/docs/design/part-states.txt
@@ -337,7 +337,7 @@
            
 
 
-* Element commiting ASYNC
+* Element committing ASYNC
 
  - STATE_LOCK is taken in set_state
  - change state is called and returns ASYNC
diff --git a/docs/design/part-tracing.txt b/docs/design/part-tracing.txt
index 4c0b4d5..e396474 100644
--- a/docs/design/part-tracing.txt
+++ b/docs/design/part-tracing.txt
@@ -110,7 +110,7 @@
 Here the tracers describe the data the will emit.
 
 instance init
-Tracers attach handlers to one or more hooks using gst_tracer_register_hook().
+Tracers attach handlers to one or more hooks using gst_tracing_register_hook().
 In case the are configurable, they can read the options from the 'params'
 property. This is the extra detail from the environment var.
 
@@ -142,7 +142,7 @@
 
 // the name is the value name + ".class"
 // the content describes a single log record
-gst_structure_new ("thread-rusage.class",
+gst_tracer_record_new ("thread-rusage.class",
     // value in the log record (order does not matter)
     // 'thread-id' is a 'key' to related the record to something as indicated
     // by 'scope' substructure
@@ -180,16 +180,11 @@
     - they add a unique 'ix' to each instance as the memory ptr can be reused
       for new instances, the data is attached to the objects as qdata
     - the latency tracer would like to also reference this metadata
-- enums and flags are logged as comma separated string to not require the front-
-  ends to know the flag values (is that okay?)
 - right now we log the classes as structures
   - this is important so that the log is self contained
   - it would be nice to add them to the registry, so that gst-inspect can show
     them
 
-In addition to the above spec, each log event will contain a "ts" field as a
-G_TYPE_UINT64 to specify the time of the event.
-
 We could also consider to add each value as a READABLE gobject property. The
 property has name/description. We could use qdata for scope and flags (or have
 some new property flags).
@@ -265,6 +260,17 @@
 - use an atexit handler to dump leaked instance
 https://bugzilla.gnome.org/show_bug.cgi?id=756760#c6
 
+leaks
+-----
+- track creation/destruction of GstObject and GstMiniObject
+- log those which are still alive when app is exiting and raise an error if any
+- If the GST_LEAKS_TRACER_SIG env variable is defined:
+  - log alive objects when receiving the SIGUSR1 signal.
+  - create a checkpoint and print a list of objects created and destroyed since
+    the previous checkpoint.
+- If the GST_LEAKS_TRACER_STACK_TRACE env variable is defined log the creation
+  stack trace of leaked objects. This may significantly increase memory
+  consumption.
 
 User interfaces
 ===============
@@ -354,6 +360,12 @@
 GST_DEBUG="GST_TRACER:7" GST_TRACERS=latency gst-launch-1.0 audiotestsrc num-buffers=10 ! audioconvert ! volume volume=0.7 ! autoaudiosink
 - print processing latencies
 
+GST_TRACERS="leaks" gst-launch-1.0 videotestsrc num-buffers=10 ! fakesink
+- Raise a warning if a leak is detected
+
+GST_DEBUG="GST_TRACER:7" GST_TRACERS="leaks(GstEvent,GstMessage)" gst-launch-1.0 videotestsrc num-buffers=10 ! fakesink
+- check if any GstEvent or GstMessage is leaked and raise a warning
+
 Performance
 ===========
 run ./tests/benchmarks/tracing.sh <tracer(s)> <media>
diff --git a/docs/faq/Makefile.in b/docs/faq/Makefile.in
index 8aff779..6943be6 100644
--- a/docs/faq/Makefile.in
+++ b/docs/faq/Makefile.in
@@ -282,6 +282,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -289,17 +290,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -424,6 +422,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/docs/gst/Makefile.in b/docs/gst/Makefile.in
index be9900e..4a04893 100644
--- a/docs/gst/Makefile.in
+++ b/docs/gst/Makefile.in
@@ -251,6 +251,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -258,17 +259,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -393,6 +391,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
@@ -927,7 +927,11 @@
 
 @ENABLE_GTK_DOC_TRUE@sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(expand_content_files)
 @ENABLE_GTK_DOC_TRUE@	@echo '  DOC   Building XML'
-@ENABLE_GTK_DOC_TRUE@	@gtkdoc-mkdb --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR)  --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) --output-format=xml $(MKDB_OPTIONS)
+@ENABLE_GTK_DOC_TRUE@	@_source_dir='' ;						\
+@ENABLE_GTK_DOC_TRUE@	for i in $(DOC_SOURCE_DIR) ; do					\
+@ENABLE_GTK_DOC_TRUE@	    _source_dir="$${_source_dir} --source-dir=$$i" ;	        \
+@ENABLE_GTK_DOC_TRUE@	done ;							        \
+@ENABLE_GTK_DOC_TRUE@	gtkdoc-mkdb --module=$(DOC_MODULE) $${_source_dir}  --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) --output-format=xml $(MKDB_OPTIONS)
 @ENABLE_GTK_DOC_TRUE@	@cp ../version.entities xml
 @ENABLE_GTK_DOC_TRUE@	@touch sgml-build.stamp
 
diff --git a/docs/gst/gstreamer-docs.sgml b/docs/gst/gstreamer-docs.sgml
index dfa293b..3d1f6dc 100644
--- a/docs/gst/gstreamer-docs.sgml
+++ b/docs/gst/gstreamer-docs.sgml
@@ -99,6 +99,8 @@
     <xi:include href="xml/gstquery.xml" />
     <xi:include href="xml/gstregistry.xml" />
     <xi:include href="xml/gstsegment.xml" />
+    <xi:include href="xml/gststreams.xml" />
+    <xi:include href="xml/gststreamcollection.xml" />
     <xi:include href="xml/gststructure.xml" />
     <xi:include href="xml/gstsystemclock.xml" />
     <xi:include href="xml/gsttaglist.xml" />
diff --git a/docs/gst/gstreamer-sections.txt b/docs/gst/gstreamer-sections.txt
index e9bd819..9355155 100644
--- a/docs/gst/gstreamer-sections.txt
+++ b/docs/gst/gstreamer-sections.txt
@@ -36,8 +36,6 @@
 GstQuarkId
 GstPluginLoader
 GstPluginLoaderFuncs
-GstAllocTrace
-GstAllocTraceFlags
 </SECTION>
 
 <SECTION>
@@ -260,6 +258,11 @@
 gst_buffer_add_parent_buffer_meta
 gst_buffer_get_parent_buffer_meta
 
+gst_buffer_get_flags
+gst_buffer_set_flags
+gst_buffer_unset_flags
+gst_buffer_has_flags
+
 <SUBSECTION Standard>
 GstBufferClass
 GST_BUFFER
@@ -698,8 +701,6 @@
 <TITLE>GstConfig</TITLE>
 GST_DISABLE_GST_DEBUG
 GST_DISABLE_PARSE
-GST_DISABLE_TRACE
-GST_DISABLE_ALLOC_TRACE
 GST_DISABLE_REGISTRY
 GST_DISABLE_PLUGIN
 <SUBSECTION Private>
@@ -813,8 +814,12 @@
 GST_ELEMENT_PADS
 GST_ELEMENT_START_TIME
 GST_ELEMENT_ERROR
+GST_ELEMENT_ERROR_WITH_DETAILS
+GST_ELEMENT_FLOW_ERROR
 GST_ELEMENT_WARNING
+GST_ELEMENT_WARNING_WITH_DETAILS
 GST_ELEMENT_INFO
+GST_ELEMENT_INFO_WITH_DETAILS
 GST_ELEMENT_IS_LOCKED_STATE
 
 <SUBSECTION element-metadata>
@@ -899,6 +904,8 @@
 
 <SUBSECTION element-messages>
 gst_element_message_full
+gst_element_message_full_with_details
+gst_make_element_message_details
 gst_element_post_message
 
 <SUBSECTION element-query>
@@ -912,6 +919,15 @@
 gst_element_seek_simple
 gst_element_seek
 
+<SUBSECTION element-property-notifications>
+gst_element_add_property_notify_watch
+gst_element_add_property_deep_notify_watch
+gst_element_remove_property_notify_watch
+
+<SUBSECTION element-call-async>
+GstElementCallAsyncFunc
+gst_element_call_async
+
 <SUBSECTION Standard>
 GST_ELEMENT
 GST_IS_ELEMENT
@@ -1114,6 +1130,9 @@
 gst_event_set_group_id
 gst_event_parse_group_id
 
+gst_event_set_stream
+gst_event_parse_stream
+
 gst_event_new_segment
 gst_event_parse_segment
 gst_event_copy_segment
@@ -1160,6 +1179,15 @@
 
 gst_event_new_protection
 gst_event_parse_protection
+
+gst_event_new_select_streams
+gst_event_parse_select_streams
+
+gst_event_new_stream_collection
+gst_event_parse_stream_collection
+
+gst_event_new_stream_group_done
+gst_event_parse_stream_group_done
 <SUBSECTION Standard>
 GstEventClass
 GST_EVENT
@@ -1561,11 +1589,17 @@
 
 gst_message_new_eos
 gst_message_new_error
+gst_message_new_error_with_details
 gst_message_parse_error
+gst_message_parse_error_details
 gst_message_new_warning
+gst_message_new_warning_with_details
 gst_message_parse_warning
+gst_message_parse_warning_details
 gst_message_new_info
+gst_message_new_info_with_details
 gst_message_parse_info
+gst_message_parse_info_details
 gst_message_new_tag
 gst_message_parse_tag
 gst_message_new_buffering
@@ -1612,6 +1646,8 @@
 gst_message_set_group_id
 gst_message_parse_group_id
 
+gst_message_new_stream_collection
+gst_message_parse_stream_collection
 GstStructureChangeType
 gst_message_new_structure_change
 gst_message_parse_structure_change
@@ -1637,6 +1673,21 @@
 gst_message_new_device_removed
 gst_message_parse_device_added
 gst_message_parse_device_removed
+
+gst_message_new_property_notify
+gst_message_parse_property_notify
+
+gst_message_new_streams_selected
+gst_message_parse_streams_selected
+gst_message_streams_selected_add
+gst_message_streams_selected_get_size
+gst_message_streams_selected_get_stream
+
+gst_message_new_redirect
+gst_message_add_redirect_entry
+gst_message_parse_redirect_entry
+gst_message_get_num_redirect_entries
+
 <SUBSECTION Standard>
 GstMessageClass
 GST_MESSAGE
@@ -1819,6 +1870,8 @@
 
 gst_pad_link
 gst_pad_link_full
+gst_pad_link_maybe_ghosting
+gst_pad_link_maybe_ghosting_full
 gst_pad_unlink
 gst_pad_is_linked
 gst_pad_can_link
@@ -1963,6 +2016,7 @@
 gst_pad_create_stream_id_printf_valist
 
 gst_pad_get_stream_id
+gst_pad_get_stream
 
 GstPadForwardFunction
 gst_pad_forward
@@ -2602,6 +2656,60 @@
 <SUBSECTION Private>
 </SECTION>
 
+<SECTION>
+<FILE>gststreams</FILE>
+<TITLE>GstStream</TITLE>
+GstStream
+GstStreamClass
+GstStreamType
+gst_stream_new
+gst_stream_get_caps
+gst_stream_get_stream_flags
+gst_stream_get_stream_id
+gst_stream_get_stream_type
+gst_stream_get_tags
+gst_stream_set_caps
+gst_stream_set_stream_flags
+gst_stream_set_stream_type
+gst_stream_set_tags
+gst_stream_type_get_name
+<SUBSECTION Standard>
+GST_IS_STREAM
+GST_IS_STREAM_CLASS
+GST_STREAM
+GST_STREAM_CAST
+GST_STREAM_CLASS
+GST_STREAM_GET_CLASS
+GST_TYPE_STREAM
+GST_TYPE_STREAM_TYPE
+gst_stream_get_type
+gst_stream_type_get_type
+<SUBSECTION Private>
+GstStreamPrivate
+</SECTION>
+
+<SECTION>
+<FILE>gststreamcollection</FILE>
+<TITLE>GstStreamCollection</TITLE>
+GstStreamCollection
+GstStreamCollectionClass
+gst_stream_collection_new
+gst_stream_collection_add_stream
+gst_stream_collection_get_upstream_id
+gst_stream_collection_get_size
+gst_stream_collection_get_stream
+<SUBSECTION Standard>
+gst_stream_collection_get_type
+GST_IS_STREAM_COLLECTION
+GST_IS_STREAM_COLLECTION_CLASS
+GST_STREAM_COLLECTION
+GST_STREAM_COLLECTION_CAST
+GST_STREAM_COLLECTION_CLASS
+GST_STREAM_COLLECTION_GET_CLASS
+GST_TYPE_STREAM_COLLECTION
+<SUBSECTION Private>
+GstStreamCollectionPrivate
+</SECTION>
 
 <SECTION>
 <FILE>gststructure</FILE>
diff --git a/docs/gst/html/GstBin.html b/docs/gst/html/GstBin.html
index 50e471d..8687f53 100644
--- a/docs/gst/html/GstBin.html
+++ b/docs/gst/html/GstBin.html
@@ -238,6 +238,16 @@
 </colgroup>
 <tbody>
 <tr>
+<td class="signal_type"><span class="returnvalue">void</span></td>
+<td class="signal_name"><a class="link" href="GstBin.html#GstBin-deep-element-added" title="The “deep-element-added” signal">deep-element-added</a></td>
+<td class="signal_flags"><a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></td>
+</tr>
+<tr>
+<td class="signal_type"><span class="returnvalue">void</span></td>
+<td class="signal_name"><a class="link" href="GstBin.html#GstBin-deep-element-removed" title="The “deep-element-removed” signal">deep-element-removed</a></td>
+<td class="signal_flags"><a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></td>
+</tr>
+<tr>
 <td class="signal_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a></td>
 <td class="signal_name"><a class="link" href="GstBin.html#GstBin-do-latency" title="The “do-latency” signal">do-latency</a></td>
 <td class="signal_flags"><a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
@@ -1237,6 +1247,10 @@
   gboolean (*remove_element) (GstBin *bin, GstElement *element);
 
   void		(*handle_message) (GstBin *bin, GstMessage *message);
+
+  /* signal */
+  void          (*deep_element_added)   (GstBin *bin, GstBin *sub_bin, GstElement *child);
+  void          (*deep_element_removed) (GstBin *bin, GstBin *sub_bin, GstElement *child);
 };
 </pre>
 <p>Subclasses can override the <em class="parameter"><code>add_element</code></em>
@@ -1248,6 +1262,12 @@
 message handling.  <em class="parameter"><code>handle_message</code></em>
  takes ownership of the message, just like
 <a class="link" href="GstElement.html#gst-element-post-message" title="gst_element_post_message ()"><span class="type">gst_element_post_message</span></a>.</p>
+<p>The <em class="parameter"><code>element_added_deep</code></em>
+ vfunc will be called when a new element has been
+added to any bin inside this bin, so it will also be called if a new child
+was added to a sub-bin of this bin. <a class="link" href="GstBin.html" title="GstBin"><span class="type">GstBin</span></a> implementations that override
+this message should chain up to the parent class implementation so the
+element-added-deep signal is emitted on all parents.</p>
 <div class="refsect3">
 <a name="GstBinClass.members"></a><h4>Members</h4>
 <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -1272,6 +1292,16 @@
 <td class="struct_member_description"><p>method to handle a message from the children</p></td>
 <td class="struct_member_annotations"> </td>
 </tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstBinClass.deep-element-added"></a>deep_element_added</code></em> ()</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstBinClass.deep-element-removed"></a>deep_element_removed</code></em> ()</p></td>
+<td> </td>
+<td> </td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -1341,6 +1371,96 @@
 <div class="refsect1">
 <a name="GstBin.signal-details"></a><h2>Signal Details</h2>
 <div class="refsect2">
+<a name="GstBin-deep-element-added"></a><h3>The <code class="literal">“deep-element-added”</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+user_function (<a class="link" href="GstBin.html" title="GstBin"><span class="type">GstBin</span></a>     *bin,
+               <a class="link" href="GstBin.html" title="GstBin"><span class="type">GstBin</span></a>     *sub_bin,
+               <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a> *element,
+               <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>    user_data)</pre>
+<p>Will be emitted after the element was added to sub_bin.</p>
+<div class="refsect3">
+<a name="GstBin-deep-element-added.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>bin</p></td>
+<td class="parameter_description"><p>the <a class="link" href="GstBin.html" title="GstBin"><span class="type">GstBin</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>sub_bin</p></td>
+<td class="parameter_description"><p>the <a class="link" href="GstBin.html" title="GstBin"><span class="type">GstBin</span></a> the element was added to</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>element</p></td>
+<td class="parameter_description"><p>the <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a> that was added to <em class="parameter"><code>sub_bin</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>user data set when the signal handler was connected.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p>Flags: <a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></p>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstBin-deep-element-removed"></a><h3>The <code class="literal">“deep-element-removed”</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+user_function (<a class="link" href="GstBin.html" title="GstBin"><span class="type">GstBin</span></a>     *bin,
+               <a class="link" href="GstBin.html" title="GstBin"><span class="type">GstBin</span></a>     *sub_bin,
+               <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a> *element,
+               <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>    user_data)</pre>
+<p>Will be emitted after the element was removed from sub_bin.</p>
+<div class="refsect3">
+<a name="GstBin-deep-element-removed.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>bin</p></td>
+<td class="parameter_description"><p>the <a class="link" href="GstBin.html" title="GstBin"><span class="type">GstBin</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>sub_bin</p></td>
+<td class="parameter_description"><p>the <a class="link" href="GstBin.html" title="GstBin"><span class="type">GstBin</span></a> the element was removed from</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>element</p></td>
+<td class="parameter_description"><p>the <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a> that was removed from <em class="parameter"><code>sub_bin</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>user data set when the signal handler was connected.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p>Flags: <a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></p>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="GstBin-do-latency"></a><h3>The <code class="literal">“do-latency”</code> signal</h3>
 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
 user_function (<a class="link" href="GstBin.html" title="GstBin"><span class="type">GstBin</span></a>  *bin,
diff --git a/docs/gst/html/GstBuffer.html b/docs/gst/html/GstBuffer.html
index feec7a7..e49229c 100644
--- a/docs/gst/html/GstBuffer.html
+++ b/docs/gst/html/GstBuffer.html
@@ -570,6 +570,38 @@
 <a class="link" href="GstBuffer.html#gst-buffer-get-parent-buffer-meta" title="gst_buffer_get_parent_buffer_meta()">gst_buffer_get_parent_buffer_meta</a><span class="c_punctuation">()</span>
 </td>
 </tr>
+<tr>
+<td class="function_type">
+<a class="link" href="GstBuffer.html#GstBufferFlags" title="enum GstBufferFlags"><span class="returnvalue">GstBufferFlags</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GstBuffer.html#gst-buffer-get-flags" title="gst_buffer_get_flags ()">gst_buffer_get_flags</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GstBuffer.html#gst-buffer-set-flags" title="gst_buffer_set_flags ()">gst_buffer_set_flags</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GstBuffer.html#gst-buffer-unset-flags" title="gst_buffer_unset_flags ()">gst_buffer_unset_flags</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GstBuffer.html#gst-buffer-has-flags" title="gst_buffer_has_flags ()">gst_buffer_has_flags</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -1697,8 +1729,7 @@
 </div>
 <div class="refsect3">
 <a name="gst-buffer-n-memory.returns"></a><h4>Returns</h4>
-<p> the amount of memory block in this buffer. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p> the number of memory blocks this buffer is made of.</p>
 </div>
 </div>
 <hr>
@@ -3477,6 +3508,112 @@
 </table></div>
 </div>
 </div>
+<hr>
+<div class="refsect2">
+<a name="gst-buffer-get-flags"></a><h3>gst_buffer_get_flags ()</h3>
+<pre class="programlisting"><a class="link" href="GstBuffer.html#GstBufferFlags" title="enum GstBufferFlags"><span class="returnvalue">GstBufferFlags</span></a>
+gst_buffer_get_flags (<em class="parameter"><code><a class="link" href="GstBuffer.html" title="GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>);</pre>
+<p>Get the <a class="link" href="GstBuffer.html#GstBufferFlags" title="enum GstBufferFlags"><span class="type">GstBufferFlags</span></a> flags set on this buffer.</p>
+<div class="refsect3">
+<a name="gst-buffer-get-flags.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstBuffer.html" title="GstBuffer"><span class="type">GstBuffer</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-buffer-get-flags.returns"></a><h4>Returns</h4>
+<p> the flags set on this buffer.</p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-buffer-set-flags"></a><h3>gst_buffer_set_flags ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_buffer_set_flags (<em class="parameter"><code><a class="link" href="GstBuffer.html" title="GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
+                      <em class="parameter"><code><a class="link" href="GstBuffer.html#GstBufferFlags" title="enum GstBufferFlags"><span class="type">GstBufferFlags</span></a> flags</code></em>);</pre>
+<p>Sets one or more buffer flags on a buffer.</p>
+<div class="refsect3">
+<a name="gst-buffer-set-flags.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstBuffer.html" title="GstBuffer"><span class="type">GstBuffer</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>the <a class="link" href="GstBuffer.html#GstBufferFlags" title="enum GstBufferFlags"><span class="type">GstBufferFlags</span></a> to set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-buffer-set-flags.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>flags</code></em>
+were successfully set on buffer.</p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-buffer-unset-flags"></a><h3>gst_buffer_unset_flags ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_buffer_unset_flags (<em class="parameter"><code><a class="link" href="GstBuffer.html" title="GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
+                        <em class="parameter"><code><a class="link" href="GstBuffer.html#GstBufferFlags" title="enum GstBufferFlags"><span class="type">GstBufferFlags</span></a> flags</code></em>);</pre>
+<p>Clears one or more buffer flags.</p>
+<div class="refsect3">
+<a name="gst-buffer-unset-flags.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstBuffer.html" title="GstBuffer"><span class="type">GstBuffer</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>the <a class="link" href="GstBuffer.html#GstBufferFlags" title="enum GstBufferFlags"><span class="type">GstBufferFlags</span></a> to clear</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-buffer-unset-flags.returns"></a><h4>Returns</h4>
+<p> true if <em class="parameter"><code>flags</code></em>
+is successfully cleared from buffer.</p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-buffer-has-flags"></a><h3>gst_buffer_has_flags ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_buffer_has_flags (<em class="parameter"><code><a class="link" href="GstBuffer.html" title="GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
+                      <em class="parameter"><code><a class="link" href="GstBuffer.html#GstBufferFlags" title="enum GstBufferFlags"><span class="type">GstBufferFlags</span></a> flags</code></em>);</pre>
+</div>
 </div>
 <div class="refsect1">
 <a name="GstBuffer.other_details"></a><h2>Types and Values</h2>
diff --git a/docs/gst/html/GstElement.html b/docs/gst/html/GstElement.html
index bd67947..474298a 100644
--- a/docs/gst/html/GstElement.html
+++ b/docs/gst/html/GstElement.html
@@ -153,18 +153,42 @@
 <tr>
 <td class="define_keyword">#define</td>
 <td class="function_name">
+<a class="link" href="GstElement.html#GST-ELEMENT-ERROR-WITH-DETAILS:CAPS" title="GST_ELEMENT_ERROR_WITH_DETAILS()">GST_ELEMENT_ERROR_WITH_DETAILS</a><span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name">
+<a class="link" href="GstElement.html#GST-ELEMENT-FLOW-ERROR:CAPS" title="GST_ELEMENT_FLOW_ERROR()">GST_ELEMENT_FLOW_ERROR</a><span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name">
 <a class="link" href="GstElement.html#GST-ELEMENT-WARNING:CAPS" title="GST_ELEMENT_WARNING()">GST_ELEMENT_WARNING</a><span class="c_punctuation">()</span>
 </td>
 </tr>
 <tr>
 <td class="define_keyword">#define</td>
 <td class="function_name">
+<a class="link" href="GstElement.html#GST-ELEMENT-WARNING-WITH-DETAILS:CAPS" title="GST_ELEMENT_WARNING_WITH_DETAILS()">GST_ELEMENT_WARNING_WITH_DETAILS</a><span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name">
 <a class="link" href="GstElement.html#GST-ELEMENT-INFO:CAPS" title="GST_ELEMENT_INFO()">GST_ELEMENT_INFO</a><span class="c_punctuation">()</span>
 </td>
 </tr>
 <tr>
 <td class="define_keyword">#define</td>
 <td class="function_name">
+<a class="link" href="GstElement.html#GST-ELEMENT-INFO-WITH-DETAILS:CAPS" title="GST_ELEMENT_INFO_WITH_DETAILS()">GST_ELEMENT_INFO_WITH_DETAILS</a><span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name">
 <a class="link" href="GstElement.html#GST-ELEMENT-IS-LOCKED-STATE:CAPS" title="GST_ELEMENT_IS_LOCKED_STATE()">GST_ELEMENT_IS_LOCKED_STATE</a><span class="c_punctuation">()</span>
 </td>
 </tr>
@@ -647,6 +671,22 @@
 </tr>
 <tr>
 <td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstElement.html#gst-element-message-full-with-details" title="gst_element_message_full_with_details ()">gst_element_message_full_with_details</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="GstStructure.html" title="GstStructure"><span class="returnvalue">GstStructure</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GstElement.html#gst-make-element-message-details" title="gst_make_element_message_details ()">gst_make_element_message_details</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
 <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
 </td>
 <td class="function_name">
@@ -709,6 +749,46 @@
 <a class="link" href="GstElement.html#gst-element-seek" title="gst_element_seek ()">gst_element_seek</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gulong"><span class="returnvalue">gulong</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GstElement.html#gst-element-add-property-notify-watch" title="gst_element_add_property_notify_watch ()">gst_element_add_property_notify_watch</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gulong"><span class="returnvalue">gulong</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GstElement.html#gst-element-add-property-deep-notify-watch" title="gst_element_add_property_deep_notify_watch ()">gst_element_add_property_deep_notify_watch</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstElement.html#gst-element-remove-property-notify-watch" title="gst_element_remove_property_notify_watch ()">gst_element_remove_property_notify_watch</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="GstElement.html#GstElementCallAsyncFunc" title="GstElementCallAsyncFunc ()">*GstElementCallAsyncFunc</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstElement.html#gst-element-call-async" title="gst_element_call_async ()">gst_element_call_async</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -1276,7 +1356,7 @@
 <hr>
 <div class="refsect2">
 <a name="GST-ELEMENT-ERROR:CAPS"></a><h3>GST_ELEMENT_ERROR()</h3>
-<pre class="programlisting">#define             GST_ELEMENT_ERROR(el, domain, code, text, debug)</pre>
+<pre class="programlisting">#define             GST_ELEMENT_ERROR(el,domain,code,text,debug)</pre>
 <p>Utility function that elements can use in case they encountered a fatal
 data processing error. The pipeline will post an error message and the
 application will be requested to stop further media processing.</p>
@@ -1322,6 +1402,88 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="GST-ELEMENT-ERROR-WITH-DETAILS:CAPS"></a><h3>GST_ELEMENT_ERROR_WITH_DETAILS()</h3>
+<pre class="programlisting">#define             GST_ELEMENT_ERROR_WITH_DETAILS(el,domain,code,text,debug,args)</pre>
+<p>Utility function that elements can use in case they encountered a fatal
+data processing error. The pipeline will post an error message and the
+application will be requested to stop further media processing.</p>
+<div class="refsect3">
+<a name="GST-ELEMENT-ERROR-WITH-DETAILS.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>el</p></td>
+<td class="parameter_description"><p>the element that generates the error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>domain</p></td>
+<td class="parameter_description"><p>like CORE, LIBRARY, RESOURCE or STREAM (see <a class="link" href="gstreamer-GstGError.html" title="GstGError"><span class="type">gstreamer-GstGError</span></a>)</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>code</p></td>
+<td class="parameter_description"><p>error code defined for that domain (see <a class="link" href="gstreamer-GstGError.html" title="GstGError"><span class="type">gstreamer-GstGError</span></a>)</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>text</p></td>
+<td class="parameter_description"><p>the message to display (format string and args enclosed in
+parentheses)</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>debug</p></td>
+<td class="parameter_description"><p>debugging information for the message (format string and args
+enclosed in parentheses)
+<em class="parameter"><code>args</code></em>
+optional name, type, value triplets, which will be stored
+in the associated GstStructure. NULL terminator required.
+Must be enclosed within parentheses.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-ELEMENT-FLOW-ERROR:CAPS"></a><h3>GST_ELEMENT_FLOW_ERROR()</h3>
+<pre class="programlisting">#define             GST_ELEMENT_FLOW_ERROR(el,flow_return)</pre>
+<p>Utility function that elements can use in case they encountered a fatal
+data processing error due to wrong flow processing.</p>
+<div class="refsect3">
+<a name="GST-ELEMENT-FLOW-ERROR.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>el</p></td>
+<td class="parameter_description"><p>the element that generates the error</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flow_return</p></td>
+<td class="parameter_description"><p>the GstFlowReturn leading to that ERROR message</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="GST-ELEMENT-WARNING:CAPS"></a><h3>GST_ELEMENT_WARNING()</h3>
 <pre class="programlisting">#define             GST_ELEMENT_WARNING(el, domain, code, text, debug)</pre>
 <p>Utility function that elements can use in case they encountered a non-fatal
@@ -1369,6 +1531,58 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="GST-ELEMENT-WARNING-WITH-DETAILS:CAPS"></a><h3>GST_ELEMENT_WARNING_WITH_DETAILS()</h3>
+<pre class="programlisting">#define             GST_ELEMENT_WARNING_WITH_DETAILS(el, domain, code, text, debug, args)</pre>
+<p>Utility function that elements can use in case they encountered a non-fatal
+data processing problem. The pipeline will post a warning message and the
+application will be informed.</p>
+<div class="refsect3">
+<a name="GST-ELEMENT-WARNING-WITH-DETAILS.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>el</p></td>
+<td class="parameter_description"><p>the element that generates the warning</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>domain</p></td>
+<td class="parameter_description"><p>like CORE, LIBRARY, RESOURCE or STREAM (see <a class="link" href="gstreamer-GstGError.html" title="GstGError"><span class="type">gstreamer-GstGError</span></a>)</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>code</p></td>
+<td class="parameter_description"><p>error code defined for that domain (see <a class="link" href="gstreamer-GstGError.html" title="GstGError"><span class="type">gstreamer-GstGError</span></a>)</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>text</p></td>
+<td class="parameter_description"><p>the message to display (format string and args enclosed in
+parentheses)</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>debug</p></td>
+<td class="parameter_description"><p>debugging information for the message (format string and args
+enclosed in parentheses)
+<em class="parameter"><code>args</code></em>
+optional name, type, value triplets, which will be stored
+in the associated GstStructure. NULL terminator required.
+Must be enclosed within parentheses.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="GST-ELEMENT-INFO:CAPS"></a><h3>GST_ELEMENT_INFO()</h3>
 <pre class="programlisting">#define             GST_ELEMENT_INFO(el, domain, code, text, debug)</pre>
 <p>Utility function that elements can use in case they want to inform
@@ -1417,6 +1631,61 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="GST-ELEMENT-INFO-WITH-DETAILS:CAPS"></a><h3>GST_ELEMENT_INFO_WITH_DETAILS()</h3>
+<pre class="programlisting">#define             GST_ELEMENT_INFO_WITH_DETAILS(el, domain, code, text, debug, args)</pre>
+<p>Utility function that elements can use in case they want to inform
+the application of something noteworthy that is not an error.
+The pipeline will post a info message and the
+application will be informed.
+Optional name, type, value triplets may be supplied, and will be stored
+in the associated GstStructure. NULL terminator required.</p>
+<div class="refsect3">
+<a name="GST-ELEMENT-INFO-WITH-DETAILS.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>el</p></td>
+<td class="parameter_description"><p>the element that generates the information</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>domain</p></td>
+<td class="parameter_description"><p>like CORE, LIBRARY, RESOURCE or STREAM (see <a class="link" href="gstreamer-GstGError.html" title="GstGError"><span class="type">gstreamer-GstGError</span></a>)</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>code</p></td>
+<td class="parameter_description"><p>error code defined for that domain (see <a class="link" href="gstreamer-GstGError.html" title="GstGError"><span class="type">gstreamer-GstGError</span></a>)</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>text</p></td>
+<td class="parameter_description"><p>the message to display (format string and args enclosed in
+parentheses)</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>debug</p></td>
+<td class="parameter_description"><p>debugging information for the message (format string and args
+enclosed in parentheses)
+<em class="parameter"><code>args</code></em>
+optional name, type, value triplets, which will be stored
+in the associated GstStructure. NULL terminator required.
+Must be enclosed within parentheses.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="GST-ELEMENT-IS-LOCKED-STATE:CAPS"></a><h3>GST_ELEMENT_IS_LOCKED_STATE()</h3>
 <pre class="programlisting">#define GST_ELEMENT_IS_LOCKED_STATE(elem)        (GST_OBJECT_FLAG_IS_SET(elem,GST_ELEMENT_FLAG_LOCKED_STATE))
 </pre>
@@ -3801,6 +4070,99 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-element-message-full-with-details"></a><h3>gst_element_message_full_with_details ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_element_message_full_with_details (<em class="parameter"><code><a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a> *element</code></em>,
+                                       <em class="parameter"><code><a class="link" href="GstMessage.html#GstMessageType" title="enum GstMessageType"><span class="type">GstMessageType</span></a> type</code></em>,
+                                       <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Quarks.html#GQuark"><span class="type">GQuark</span></a> domain</code></em>,
+                                       <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> code</code></em>,
+                                       <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *text</code></em>,
+                                       <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *debug</code></em>,
+                                       <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *file</code></em>,
+                                       <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *function</code></em>,
+                                       <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> line</code></em>,
+                                       <em class="parameter"><code><a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> *structure</code></em>);</pre>
+<p>Post an error, warning or info message on the bus from inside an element.</p>
+<p><em class="parameter"><code>type</code></em>
+ must be of <a class="link" href="GstMessage.html#GST-MESSAGE-ERROR:CAPS"><span class="type">GST_MESSAGE_ERROR</span></a>, <a class="link" href="GstMessage.html#GST-MESSAGE-WARNING:CAPS"><span class="type">GST_MESSAGE_WARNING</span></a> or
+<a class="link" href="GstMessage.html#GST-MESSAGE-INFO:CAPS"><span class="type">GST_MESSAGE_INFO</span></a>.</p>
+<div class="refsect3">
+<a name="gst-element-message-full-with-details.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>element</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a> to send message from</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>type</p></td>
+<td class="parameter_description"><p>the <a class="link" href="GstMessage.html#GstMessageType" title="enum GstMessageType"><span class="type">GstMessageType</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>domain</p></td>
+<td class="parameter_description"><p>the GStreamer GError domain this message belongs to</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>code</p></td>
+<td class="parameter_description"><p>the GError code belonging to the domain</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>text</p></td>
+<td class="parameter_description"><p> an allocated text string to be used
+as a replacement for the default message connected to code,
+or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>debug</p></td>
+<td class="parameter_description"><p> an allocated debug message to be
+used as a replacement for the default debugging information,
+or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>file</p></td>
+<td class="parameter_description"><p>the source code file where the error was generated</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>function</p></td>
+<td class="parameter_description"><p>the source code function where the error was generated</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>line</p></td>
+<td class="parameter_description"><p>the source code line where the error was generated</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>structure</p></td>
+<td class="parameter_description"><p> optional details structure. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-make-element-message-details"></a><h3>gst_make_element_message_details ()</h3>
+<pre class="programlisting"><a class="link" href="GstStructure.html" title="GstStructure"><span class="returnvalue">GstStructure</span></a> *
+gst_make_element_message_details (<em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+                                  <em class="parameter"><code>...</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-element-post-message"></a><h3>gst_element_post_message ()</h3>
 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
 gst_element_post_message (<em class="parameter"><code><a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a> *element</code></em>,
@@ -4201,6 +4563,183 @@
 preroll, which will emit <a class="link" href="GstMessage.html#GST-MESSAGE-ASYNC-DONE:CAPS"><code class="literal">GST_MESSAGE_ASYNC_DONE</code></a>.</p>
 </div>
 </div>
+<hr>
+<div class="refsect2">
+<a name="gst-element-add-property-notify-watch"></a><h3>gst_element_add_property_notify_watch ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gulong"><span class="returnvalue">gulong</span></a>
+gst_element_add_property_notify_watch (<em class="parameter"><code><a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a> *element</code></em>,
+                                       <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *property_name</code></em>,
+                                       <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> include_value</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-element-add-property-notify-watch.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>element</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a> to watch for property changes</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>property_name</p></td>
+<td class="parameter_description"><p> name of property to watch for changes, or
+NULL to watch all properties. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>include_value</p></td>
+<td class="parameter_description"><p>whether to include the new property value in the message</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-element-add-property-notify-watch.returns"></a><h4>Returns</h4>
+<p> a watch id, which can be used in connection with
+<a class="link" href="GstElement.html#gst-element-remove-property-notify-watch" title="gst_element_remove_property_notify_watch ()"><code class="function">gst_element_remove_property_notify_watch()</code></a> to remove the watch again.</p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-element-add-property-deep-notify-watch"></a><h3>gst_element_add_property_deep_notify_watch ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gulong"><span class="returnvalue">gulong</span></a>
+gst_element_add_property_deep_notify_watch
+                               (<em class="parameter"><code><a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a> *element</code></em>,
+                                <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *property_name</code></em>,
+                                <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> include_value</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-element-add-property-deep-notify-watch.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>element</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a> to watch (recursively) for property changes</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>property_name</p></td>
+<td class="parameter_description"><p> name of property to watch for changes, or
+NULL to watch all properties. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>include_value</p></td>
+<td class="parameter_description"><p>whether to include the new property value in the message</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-element-add-property-deep-notify-watch.returns"></a><h4>Returns</h4>
+<p> a watch id, which can be used in connection with
+<a class="link" href="GstElement.html#gst-element-remove-property-notify-watch" title="gst_element_remove_property_notify_watch ()"><code class="function">gst_element_remove_property_notify_watch()</code></a> to remove the watch again.</p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-element-remove-property-notify-watch"></a><h3>gst_element_remove_property_notify_watch ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_element_remove_property_notify_watch
+                               (<em class="parameter"><code><a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a> *element</code></em>,
+                                <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gulong"><span class="type">gulong</span></a> watch_id</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-element-remove-property-notify-watch.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>element</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a> being watched for property changes</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>watch_id</p></td>
+<td class="parameter_description"><p>watch id to remove</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstElementCallAsyncFunc"></a><h3>GstElementCallAsyncFunc ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+<span class="c_punctuation">(</span>*GstElementCallAsyncFunc<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a> *element</code></em>,
+                            <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-element-call-async"></a><h3>gst_element_call_async ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_element_call_async (<em class="parameter"><code><a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a> *element</code></em>,
+                        <em class="parameter"><code><a class="link" href="GstElement.html#GstElementCallAsyncFunc" title="GstElementCallAsyncFunc ()"><span class="type">GstElementCallAsyncFunc</span></a> func</code></em>,
+                        <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
+                        <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> destroy_notify</code></em>);</pre>
+<p>Calls <em class="parameter"><code>func</code></em>
+ from another thread and passes <em class="parameter"><code>user_data</code></em>
+ to it. This is to be
+used for cases when a state change has to be performed from a streaming
+thread, directly via <a class="link" href="GstElement.html#gst-element-set-state" title="gst_element_set_state ()"><code class="function">gst_element_set_state()</code></a> or indirectly e.g. via SEEK
+events.</p>
+<p>Calling those functions directly from the streaming thread will cause
+deadlocks in many situations, as they might involve waiting for the
+streaming thread to shut down from this very streaming thread.</p>
+<p>MT safe.</p>
+<div class="refsect3">
+<a name="gst-element-call-async.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>element</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>func</p></td>
+<td class="parameter_description"><p>Function to call asynchronously from another thread</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>Data to pass to <em class="parameter"><code>func</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>destroy_notify</p></td>
+<td class="parameter_description"><p>GDestroyNotify for <em class="parameter"><code>user_data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
 </div>
 <div class="refsect1">
 <a name="GstElement.other_details"></a><h2>Types and Values</h2>
diff --git a/docs/gst/html/GstEvent.html b/docs/gst/html/GstEvent.html
index e53ea46..89e3e69 100644
--- a/docs/gst/html/GstEvent.html
+++ b/docs/gst/html/GstEvent.html
@@ -339,6 +339,22 @@
 </tr>
 <tr>
 <td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstEvent.html#gst-event-set-stream" title="gst_event_set_stream ()">gst_event_set_stream</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstEvent.html#gst-event-parse-stream" title="gst_event_parse_stream ()">gst_event_parse_stream</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
 <a class="link" href="GstEvent.html" title="GstEvent"><span class="returnvalue">GstEvent</span></a> *
 </td>
 <td class="function_name">
@@ -569,6 +585,54 @@
 <a class="link" href="GstEvent.html#gst-event-parse-protection" title="gst_event_parse_protection ()">gst_event_parse_protection</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
+<tr>
+<td class="function_type">
+<a class="link" href="GstEvent.html" title="GstEvent"><span class="returnvalue">GstEvent</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GstEvent.html#gst-event-new-select-streams" title="gst_event_new_select_streams ()">gst_event_new_select_streams</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstEvent.html#gst-event-parse-select-streams" title="gst_event_parse_select_streams ()">gst_event_parse_select_streams</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="GstEvent.html" title="GstEvent"><span class="returnvalue">GstEvent</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GstEvent.html#gst-event-new-stream-collection" title="gst_event_new_stream_collection ()">gst_event_new_stream_collection</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstEvent.html#gst-event-parse-stream-collection" title="gst_event_parse_stream_collection ()">gst_event_parse_stream_collection</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="GstEvent.html" title="GstEvent"><span class="returnvalue">GstEvent</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GstEvent.html#gst-event-new-stream-group-done" title="gst_event_new_stream_group_done ()">gst_event_new_stream_group_done</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstEvent.html#gst-event-parse-stream-group-done" title="gst_event_parse_stream_group_done ()">gst_event_parse_stream_group_done</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -1907,6 +1971,71 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-event-set-stream"></a><h3>gst_event_set_stream ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_event_set_stream (<em class="parameter"><code><a class="link" href="GstEvent.html" title="GstEvent"><span class="type">GstEvent</span></a> *event</code></em>,
+                      <em class="parameter"><code><a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> *stream</code></em>);</pre>
+<p>Set the <em class="parameter"><code>stream</code></em>
+ on the stream-start <em class="parameter"><code>event</code></em>
+</p>
+<div class="refsect3">
+<a name="gst-event-set-stream.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>event</p></td>
+<td class="parameter_description"><p>a stream-start event</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>stream</p></td>
+<td class="parameter_description"><p> the stream object to set. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-event-parse-stream"></a><h3>gst_event_parse_stream ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_event_parse_stream (<em class="parameter"><code><a class="link" href="GstEvent.html" title="GstEvent"><span class="type">GstEvent</span></a> *event</code></em>,
+                        <em class="parameter"><code><a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> **stream</code></em>);</pre>
+<p>Parse a stream-start <em class="parameter"><code>event</code></em>
+ and extract the <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> from it.</p>
+<div class="refsect3">
+<a name="gst-event-parse-stream.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>event</p></td>
+<td class="parameter_description"><p>a stream-start event</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>stream</p></td>
+<td class="parameter_description"><p> adress of variable to store the stream. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-event-new-segment"></a><h3>gst_event_new_segment ()</h3>
 <pre class="programlisting"><a class="link" href="GstEvent.html" title="GstEvent"><span class="returnvalue">GstEvent</span></a> *
 gst_event_new_segment (<em class="parameter"><code>const <a class="link" href="GstSegment.html" title="GstSegment"><span class="type">GstSegment</span></a> *segment</code></em>);</pre>
@@ -3227,6 +3356,208 @@
 </div>
 <p class="since">Since: <a class="link" href="ix03.html#api-index-1.6">1.6</a></p>
 </div>
+<hr>
+<div class="refsect2">
+<a name="gst-event-new-select-streams"></a><h3>gst_event_new_select_streams ()</h3>
+<pre class="programlisting"><a class="link" href="GstEvent.html" title="GstEvent"><span class="returnvalue">GstEvent</span></a> *
+gst_event_new_select_streams (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *streams</code></em>);</pre>
+<p>Allocate a new select-streams event.</p>
+<p>The select-streams event requests the specified <em class="parameter"><code>streams</code></em>
+ to be activated.</p>
+<p>The list of <em class="parameter"><code>streams</code></em>
+ corresponds to the "Stream ID" of each stream to be
+activated. Those ID can be obtained via the <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> objects present
+in <a class="link" href="GstEvent.html#GST-EVENT-STREAM-START:CAPS"><span class="type">GST_EVENT_STREAM_START</span></a>, <a class="link" href="GstEvent.html#GST-EVENT-STREAM-COLLECTION:CAPS"><span class="type">GST_EVENT_STREAM_COLLECTION</span></a> or 
+<span class="type">GST_MESSSAGE_STREAM_COLLECTION</span>.</p>
+<div class="refsect3">
+<a name="gst-event-new-select-streams.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>streams</p></td>
+<td class="parameter_description"><p> the list of streams to
+activate. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> gchar][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-event-new-select-streams.returns"></a><h4>Returns</h4>
+<p> a new select-streams event. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-event-parse-select-streams"></a><h3>gst_event_parse_select_streams ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_event_parse_select_streams (<em class="parameter"><code><a class="link" href="GstEvent.html" title="GstEvent"><span class="type">GstEvent</span></a> *event</code></em>,
+                                <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> **streams</code></em>);</pre>
+<p>Parse the SELECT_STREAMS event and retrieve the contained streams.</p>
+<div class="refsect3">
+<a name="gst-event-parse-select-streams.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>event</p></td>
+<td class="parameter_description"><p>The event to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>streams</p></td>
+<td class="parameter_description"><p> the streams. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> gchar][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-event-new-stream-collection"></a><h3>gst_event_new_stream_collection ()</h3>
+<pre class="programlisting"><a class="link" href="GstEvent.html" title="GstEvent"><span class="returnvalue">GstEvent</span></a> *
+gst_event_new_stream_collection (<em class="parameter"><code><a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a> *collection</code></em>);</pre>
+<p>Create a new STREAM_COLLECTION event. The stream collection event can only
+travel downstream synchronized with the buffer flow.</p>
+<p>Source elements, demuxers and other elements that manage collections
+of streams and post <a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a> messages on the bus also send
+this event downstream on each pad involved in the collection, so that
+activation of a new collection can be tracked through the downstream
+data flow.</p>
+<div class="refsect3">
+<a name="gst-event-new-stream-collection.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>collection</p></td>
+<td class="parameter_description"><p>Active collection for this data flow</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-event-new-stream-collection.returns"></a><h4>Returns</h4>
+<p> the new STREAM_COLLECTION event. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-event-parse-stream-collection"></a><h3>gst_event_parse_stream_collection ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_event_parse_stream_collection (<em class="parameter"><code><a class="link" href="GstEvent.html" title="GstEvent"><span class="type">GstEvent</span></a> *event</code></em>,
+                                   <em class="parameter"><code><a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a> **collection</code></em>);</pre>
+<p>Retrieve new <a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a> from STREAM_COLLECTION event <em class="parameter"><code>event</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-event-parse-stream-collection.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>event</p></td>
+<td class="parameter_description"><p>a stream-collection event</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>collection</p></td>
+<td class="parameter_description"><p> pointer to store the collection. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-event-new-stream-group-done"></a><h3>gst_event_new_stream_group_done ()</h3>
+<pre class="programlisting"><a class="link" href="GstEvent.html" title="GstEvent"><span class="returnvalue">GstEvent</span></a> *
+gst_event_new_stream_group_done (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> group_id</code></em>);</pre>
+<p>Create a new Stream Group Done event. The stream-group-done event can
+only travel downstream synchronized with the buffer flow. Elements
+that receive the event on a pad should handle it mostly like EOS,
+and emit any data or pending buffers that would depend on more data
+arriving and unblock, since there won't be any more data.</p>
+<p>This event is followed by EOS at some point in the future, and is
+generally used when switching pads - to unblock downstream so that
+new pads can be exposed before sending EOS on the existing pads.</p>
+<div class="refsect3">
+<a name="gst-event-new-stream-group-done.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>group_id</p></td>
+<td class="parameter_description"><p>the group id of the stream group which is ending</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-event-new-stream-group-done.returns"></a><h4>Returns</h4>
+<p> the new stream-group-done event. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-event-parse-stream-group-done"></a><h3>gst_event_parse_stream_group_done ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_event_parse_stream_group_done (<em class="parameter"><code><a class="link" href="GstEvent.html" title="GstEvent"><span class="type">GstEvent</span></a> *event</code></em>,
+                                   <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> *group_id</code></em>);</pre>
+<p>Parse a stream-group-done <em class="parameter"><code>event</code></em>
+ and store the result in the given
+<em class="parameter"><code>group_id</code></em>
+ location.</p>
+<div class="refsect3">
+<a name="gst-event-parse-stream-group-done.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>event</p></td>
+<td class="parameter_description"><p>a stream-group-done event.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>group_id</p></td>
+<td class="parameter_description"><p> address of variable to store the group id into. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
 </div>
 <div class="refsect1">
 <a name="GstEvent.other_details"></a><h2>Types and Values</h2>
@@ -3404,6 +3735,13 @@
 <td class="enum_member_annotations"> </td>
 </tr>
 <tr>
+<td class="enum_member_name"><p><a name="GST-EVENT-STREAM-COLLECTION:CAPS"></a>GST_EVENT_STREAM_COLLECTION</p></td>
+<td class="enum_member_description">
+<p>A new <a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a> is available (Since 1.10)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
 <td class="enum_member_name"><p><a name="GST-EVENT-TAG:CAPS"></a>GST_EVENT_TAG</p></td>
 <td class="enum_member_description">
 <p>A new set of metadata tags has been found in the stream.</p>
@@ -3428,10 +3766,20 @@
 <td class="enum_member_annotations"> </td>
 </tr>
 <tr>
+<td class="enum_member_name"><p><a name="GST-EVENT-STREAM-GROUP-DONE:CAPS"></a>GST_EVENT_STREAM_GROUP_DONE</p></td>
+<td class="enum_member_description">
+<p>Indicates that there is no more data for
+                the stream group ID in the message. Sent before EOS
+                in some instances and should be handled mostly the same. (Since 1.10)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
 <td class="enum_member_name"><p><a name="GST-EVENT-EOS:CAPS"></a>GST_EVENT_EOS</p></td>
 <td class="enum_member_description">
 <p>End-Of-Stream. No more data is to be expected to follow
-                without a SEGMENT event.</p>
+                without either a STREAM_START event, or a FLUSH_STOP and a SEGMENT
+                event.</p>
 </td>
 <td class="enum_member_annotations"> </td>
 </tr>
@@ -3522,6 +3870,13 @@
 <td class="enum_member_annotations"> </td>
 </tr>
 <tr>
+<td class="enum_member_name"><p><a name="GST-EVENT-SELECT-STREAMS:CAPS"></a>GST_EVENT_SELECT_STREAMS</p></td>
+<td class="enum_member_description">
+<p>A request to select one or more streams (Since 1.10)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
 <td class="enum_member_name"><p><a name="GST-EVENT-CUSTOM-UPSTREAM:CAPS"></a>GST_EVENT_CUSTOM_UPSTREAM</p></td>
 <td class="enum_member_description">
 <p>Upstream custom event</p>
diff --git a/docs/gst/html/GstGhostPad.html b/docs/gst/html/GstGhostPad.html
index fe7fdf2..a0fab25 100644
--- a/docs/gst/html/GstGhostPad.html
+++ b/docs/gst/html/GstGhostPad.html
@@ -405,8 +405,7 @@
 <div class="refsect3">
 <a name="gst-ghost-pad-set-target.returns"></a><h4>Returns</h4>
 <p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the new target could be set. This function
-can return <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> when the internal pads could not be linked. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+can return <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> when the internal pads could not be linked.</p>
 </div>
 </div>
 <hr>
diff --git a/docs/gst/html/GstMemory.html b/docs/gst/html/GstMemory.html
index ca30a6c..45337a5 100644
--- a/docs/gst/html/GstMemory.html
+++ b/docs/gst/html/GstMemory.html
@@ -1655,7 +1655,7 @@
 <hr>
 <div class="refsect2">
 <a name="GST-MAP-INFO-INIT:CAPS"></a><h3>GST_MAP_INFO_INIT</h3>
-<pre class="programlisting">#define GST_MAP_INFO_INIT { NULL, 0, NULL, 0, 0, {0, }, {0, }}
+<pre class="programlisting">#define GST_MAP_INFO_INIT { NULL, (GstMapFlags) 0, NULL, 0, 0, { NULL, NULL, NULL, NULL}, {NULL, NULL, NULL, NULL}}
 </pre>
 <p>Initializer for <a class="link" href="GstMemory.html#GstMapInfo" title="GstMapInfo"><span class="type">GstMapInfo</span></a></p>
 </div>
diff --git a/docs/gst/html/GstMessage.html b/docs/gst/html/GstMessage.html
index 0934663..0b0e6f0 100644
--- a/docs/gst/html/GstMessage.html
+++ b/docs/gst/html/GstMessage.html
@@ -191,6 +191,14 @@
 </tr>
 <tr>
 <td class="function_type">
+<a class="link" href="GstMessage.html" title="GstMessage"><span class="returnvalue">GstMessage</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GstMessage.html#gst-message-new-error-with-details" title="gst_message_new_error_with_details ()">gst_message_new_error_with_details</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
 <span class="returnvalue">void</span>
 </td>
 <td class="function_name">
@@ -199,6 +207,14 @@
 </tr>
 <tr>
 <td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstMessage.html#gst-message-parse-error-details" title="gst_message_parse_error_details ()">gst_message_parse_error_details</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
 <a class="link" href="GstMessage.html" title="GstMessage"><span class="returnvalue">GstMessage</span></a> *
 </td>
 <td class="function_name">
@@ -207,6 +223,14 @@
 </tr>
 <tr>
 <td class="function_type">
+<a class="link" href="GstMessage.html" title="GstMessage"><span class="returnvalue">GstMessage</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GstMessage.html#gst-message-new-warning-with-details" title="gst_message_new_warning_with_details ()">gst_message_new_warning_with_details</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
 <span class="returnvalue">void</span>
 </td>
 <td class="function_name">
@@ -215,6 +239,14 @@
 </tr>
 <tr>
 <td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstMessage.html#gst-message-parse-warning-details" title="gst_message_parse_warning_details ()">gst_message_parse_warning_details</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
 <a class="link" href="GstMessage.html" title="GstMessage"><span class="returnvalue">GstMessage</span></a> *
 </td>
 <td class="function_name">
@@ -223,6 +255,14 @@
 </tr>
 <tr>
 <td class="function_type">
+<a class="link" href="GstMessage.html" title="GstMessage"><span class="returnvalue">GstMessage</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GstMessage.html#gst-message-new-info-with-details" title="gst_message_new_info_with_details ()">gst_message_new_info_with_details</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
 <span class="returnvalue">void</span>
 </td>
 <td class="function_name">
@@ -231,6 +271,14 @@
 </tr>
 <tr>
 <td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstMessage.html#gst-message-parse-info-details" title="gst_message_parse_info_details ()">gst_message_parse_info_details</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
 <a class="link" href="GstMessage.html" title="GstMessage"><span class="returnvalue">GstMessage</span></a> *
 </td>
 <td class="function_name">
@@ -586,6 +634,22 @@
 <a class="link" href="GstMessage.html" title="GstMessage"><span class="returnvalue">GstMessage</span></a> *
 </td>
 <td class="function_name">
+<a class="link" href="GstMessage.html#gst-message-new-stream-collection" title="gst_message_new_stream_collection ()">gst_message_new_stream_collection</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstMessage.html#gst-message-parse-stream-collection" title="gst_message_parse_stream_collection ()">gst_message_parse_stream_collection</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="GstMessage.html" title="GstMessage"><span class="returnvalue">GstMessage</span></a> *
+</td>
+<td class="function_name">
 <a class="link" href="GstMessage.html#gst-message-new-structure-change" title="gst_message_new_structure_change ()">gst_message_new_structure_change</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
@@ -724,6 +788,94 @@
 <a class="link" href="GstMessage.html#gst-message-parse-device-removed" title="gst_message_parse_device_removed ()">gst_message_parse_device_removed</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
+<tr>
+<td class="function_type">
+<a class="link" href="GstMessage.html" title="GstMessage"><span class="returnvalue">GstMessage</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GstMessage.html#gst-message-new-property-notify" title="gst_message_new_property_notify ()">gst_message_new_property_notify</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstMessage.html#gst-message-parse-property-notify" title="gst_message_parse_property_notify ()">gst_message_parse_property_notify</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="GstMessage.html" title="GstMessage"><span class="returnvalue">GstMessage</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GstMessage.html#gst-message-new-streams-selected" title="gst_message_new_streams_selected ()">gst_message_new_streams_selected</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstMessage.html#gst-message-parse-streams-selected" title="gst_message_parse_streams_selected ()">gst_message_parse_streams_selected</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstMessage.html#gst-message-streams-selected-add" title="gst_message_streams_selected_add ()">gst_message_streams_selected_add</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GstMessage.html#gst-message-streams-selected-get-size" title="gst_message_streams_selected_get_size ()">gst_message_streams_selected_get_size</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="returnvalue">GstStream</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GstMessage.html#gst-message-streams-selected-get-stream" title="gst_message_streams_selected_get_stream ()">gst_message_streams_selected_get_stream</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="GstMessage.html" title="GstMessage"><span class="returnvalue">GstMessage</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GstMessage.html#gst-message-new-redirect" title="gst_message_new_redirect ()">gst_message_new_redirect</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstMessage.html#gst-message-add-redirect-entry" title="gst_message_add_redirect_entry ()">gst_message_add_redirect_entry</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstMessage.html#gst-message-parse-redirect-entry" title="gst_message_parse_redirect_entry ()">gst_message_parse_redirect_entry</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="returnvalue">gsize</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GstMessage.html#gst-message-get-num-redirect-entries" title="gst_message_get_num_redirect_entries ()">gst_message_get_num_redirect_entries</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -1401,6 +1553,59 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-message-new-error-with-details"></a><h3>gst_message_new_error_with_details ()</h3>
+<pre class="programlisting"><a class="link" href="GstMessage.html" title="GstMessage"><span class="returnvalue">GstMessage</span></a> *
+gst_message_new_error_with_details (<em class="parameter"><code><a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> *src</code></em>,
+                                    <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
+                                    <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *debug</code></em>,
+                                    <em class="parameter"><code><a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> *details</code></em>);</pre>
+<p>Create a new error message. The message will copy <em class="parameter"><code>error</code></em>
+ and
+<em class="parameter"><code>debug</code></em>
+. This message is posted by element when a fatal event
+occurred. The pipeline will probably (partially) stop. The application
+receiving this message should stop the pipeline.</p>
+<div class="refsect3">
+<a name="gst-message-new-error-with-details.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>src</p></td>
+<td class="parameter_description"><p> The object originating the message. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p> The GError for this message. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>debug</p></td>
+<td class="parameter_description"><p>A debugging string.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>details</p></td>
+<td class="parameter_description"><p> (allow-none): A GstStructure with details. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-message-new-error-with-details.returns"></a><h4>Returns</h4>
+<p> the new error message. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-message-parse-error"></a><h3>gst_message_parse_error ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>
 gst_message_parse_error (<em class="parameter"><code><a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
@@ -1485,6 +1690,38 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-message-parse-error-details"></a><h3>gst_message_parse_error_details ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_message_parse_error_details (<em class="parameter"><code><a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
+                                 <em class="parameter"><code>const <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> **structure</code></em>);</pre>
+<p>Returns the optional details structure, may be NULL if none.
+The returned structure must not be freed.</p>
+<div class="refsect3">
+<a name="gst-message-parse-error-details.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>message</p></td>
+<td class="parameter_description"><p>The message object</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>structure</p></td>
+<td class="parameter_description"><p> A pointer to the returned details. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-message-new-warning"></a><h3>gst_message_new_warning ()</h3>
 <pre class="programlisting"><a class="link" href="GstMessage.html" title="GstMessage"><span class="returnvalue">GstMessage</span></a> *
 gst_message_new_warning (<em class="parameter"><code><a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> *src</code></em>,
@@ -1523,13 +1760,64 @@
 </div>
 <div class="refsect3">
 <a name="gst-message-new-warning.returns"></a><h4>Returns</h4>
-<p> The new warning message.</p>
+<p> the new warning message.</p>
 <p>MT safe. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-message-new-warning-with-details"></a><h3>gst_message_new_warning_with_details ()</h3>
+<pre class="programlisting"><a class="link" href="GstMessage.html" title="GstMessage"><span class="returnvalue">GstMessage</span></a> *
+gst_message_new_warning_with_details (<em class="parameter"><code><a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> *src</code></em>,
+                                      <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
+                                      <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *debug</code></em>,
+                                      <em class="parameter"><code><a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> *details</code></em>);</pre>
+<p>Create a new warning message. The message will make copies of <em class="parameter"><code>error</code></em>
+ and
+<em class="parameter"><code>debug</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-message-new-warning-with-details.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>src</p></td>
+<td class="parameter_description"><p> The object originating the message. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p> The GError for this message. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>debug</p></td>
+<td class="parameter_description"><p>A debugging string.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>details</p></td>
+<td class="parameter_description"><p> (allow-none): A GstStructure with details. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-message-new-warning-with-details.returns"></a><h4>Returns</h4>
+<p> the new warning message. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-message-parse-warning"></a><h3>gst_message_parse_warning ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>
 gst_message_parse_warning (<em class="parameter"><code><a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
@@ -1569,6 +1857,38 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-message-parse-warning-details"></a><h3>gst_message_parse_warning_details ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_message_parse_warning_details (<em class="parameter"><code><a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
+                                   <em class="parameter"><code>const <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> **structure</code></em>);</pre>
+<p>Returns the optional details structure, may be NULL if none
+The returned structure must not be freed.</p>
+<div class="refsect3">
+<a name="gst-message-parse-warning-details.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>message</p></td>
+<td class="parameter_description"><p>The message object</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>structure</p></td>
+<td class="parameter_description"><p> A pointer to the returned details structure. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-message-new-info"></a><h3>gst_message_new_info ()</h3>
 <pre class="programlisting"><a class="link" href="GstMessage.html" title="GstMessage"><span class="returnvalue">GstMessage</span></a> *
 gst_message_new_info (<em class="parameter"><code><a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> *src</code></em>,
@@ -1578,7 +1898,6 @@
  and
 <em class="parameter"><code>debug</code></em>
 .</p>
-<p>MT safe.</p>
 <div class="refsect3">
 <a name="gst-message-new-info.parameters"></a><h4>Parameters</h4>
 <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -1608,12 +1927,64 @@
 </div>
 <div class="refsect3">
 <a name="gst-message-new-info.returns"></a><h4>Returns</h4>
-<p> the new info message. </p>
+<p> the new info message.</p>
+<p>MT safe. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-message-new-info-with-details"></a><h3>gst_message_new_info_with_details ()</h3>
+<pre class="programlisting"><a class="link" href="GstMessage.html" title="GstMessage"><span class="returnvalue">GstMessage</span></a> *
+gst_message_new_info_with_details (<em class="parameter"><code><a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> *src</code></em>,
+                                   <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
+                                   <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *debug</code></em>,
+                                   <em class="parameter"><code><a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> *details</code></em>);</pre>
+<p>Create a new info message. The message will make copies of <em class="parameter"><code>error</code></em>
+ and
+<em class="parameter"><code>debug</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-message-new-info-with-details.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>src</p></td>
+<td class="parameter_description"><p> The object originating the message. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p> The GError for this message. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>debug</p></td>
+<td class="parameter_description"><p>A debugging string.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>details</p></td>
+<td class="parameter_description"><p> (allow-none): A GstStructure with details. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-message-new-info-with-details.returns"></a><h4>Returns</h4>
+<p> the new warning message. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-message-parse-info"></a><h3>gst_message_parse_info ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>
 gst_message_parse_info (<em class="parameter"><code><a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
@@ -1653,6 +2024,38 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-message-parse-info-details"></a><h3>gst_message_parse_info_details ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_message_parse_info_details (<em class="parameter"><code><a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
+                                <em class="parameter"><code>const <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> **structure</code></em>);</pre>
+<p>Returns the optional details structure, may be NULL if none
+The returned structure must not be freed.</p>
+<div class="refsect3">
+<a name="gst-message-parse-info-details.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>message</p></td>
+<td class="parameter_description"><p>The message object</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>structure</p></td>
+<td class="parameter_description"><p> A pointer to the returned details structure. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-message-new-tag"></a><h3>gst_message_new_tag ()</h3>
 <pre class="programlisting"><a class="link" href="GstMessage.html" title="GstMessage"><span class="returnvalue">GstMessage</span></a> *
 gst_message_new_tag (<em class="parameter"><code><a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> *src</code></em>,
@@ -2770,10 +3173,7 @@
 <p>Create a new duration changed message. This message is posted by elements
 that know the duration of a stream when the duration changes. This message
 is received by bins and is used to calculate the total duration of a
-pipeline. Elements may post a duration message with a duration of
-GST_CLOCK_TIME_NONE to indicate that the duration has changed and the 
-cached duration should be discarded. The new duration can then be 
-retrieved via a query.</p>
+pipeline.</p>
 <div class="refsect3">
 <a name="gst-message-new-duration-changed.parameters"></a><h4>Parameters</h4>
 <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -3664,6 +4064,74 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-message-new-stream-collection"></a><h3>gst_message_new_stream_collection ()</h3>
+<pre class="programlisting"><a class="link" href="GstMessage.html" title="GstMessage"><span class="returnvalue">GstMessage</span></a> *
+gst_message_new_stream_collection (<em class="parameter"><code><a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> *src</code></em>,
+                                   <em class="parameter"><code><a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a> *collection</code></em>);</pre>
+<p>Creates a new stream-collection message. The message is used to announce new
+<a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a></p>
+<div class="refsect3">
+<a name="gst-message-new-stream-collection.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>src</p></td>
+<td class="parameter_description"><p>The <a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> that created the message</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>collection</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-message-new-stream-collection.returns"></a><h4>Returns</h4>
+<p> a newly allocated <a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a></p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-message-parse-stream-collection"></a><h3>gst_message_parse_stream_collection ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_message_parse_stream_collection (<em class="parameter"><code><a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
+                                     <em class="parameter"><code><a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a> **collection</code></em>);</pre>
+<p>Parses a stream-collection message.</p>
+<div class="refsect3">
+<a name="gst-message-parse-stream-collection.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>message</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> of type <a class="link" href="GstMessage.html#GST-MESSAGE-STREAM-COLLECTION:CAPS"><code class="literal">GST_MESSAGE_STREAM_COLLECTION</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>collection</p></td>
+<td class="parameter_description"><p> A location where to store a
+pointer to the <a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a>, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-message-new-structure-change"></a><h3>gst_message_new_structure_change ()</h3>
 <pre class="programlisting"><a class="link" href="GstMessage.html" title="GstMessage"><span class="returnvalue">GstMessage</span></a> *
 gst_message_new_structure_change (<em class="parameter"><code><a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> *src</code></em>,
@@ -4314,7 +4782,7 @@
 <td class="parameter_name"><p>device</p></td>
 <td class="parameter_description"><p> A location where to store a
 pointer to the new <a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a>, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
 </tr>
 </tbody>
 </table></div>
@@ -4348,13 +4816,469 @@
 <td class="parameter_name"><p>device</p></td>
 <td class="parameter_description"><p> A location where to store a
 pointer to the removed <a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a>, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
 </tr>
 </tbody>
 </table></div>
 </div>
 <p class="since">Since: <a class="link" href="ix04.html#api-index-1.4">1.4</a></p>
 </div>
+<hr>
+<div class="refsect2">
+<a name="gst-message-new-property-notify"></a><h3>gst_message_new_property_notify ()</h3>
+<pre class="programlisting"><a class="link" href="GstMessage.html" title="GstMessage"><span class="returnvalue">GstMessage</span></a> *
+gst_message_new_property_notify (<em class="parameter"><code><a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> *src</code></em>,
+                                 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *property_name</code></em>,
+                                 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobjectgobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *val</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-message-new-property-notify.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>src</p></td>
+<td class="parameter_description"><p>The <a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> whose property changed (may or may not be a <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a>)</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>property_name</p></td>
+<td class="parameter_description"><p>name of the property that changed</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>val</p></td>
+<td class="parameter_description"><p> new property value, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-message-new-property-notify.returns"></a><h4>Returns</h4>
+<p> a newly allocated <a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a></p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-message-parse-property-notify"></a><h3>gst_message_parse_property_notify ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_message_parse_property_notify (<em class="parameter"><code><a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
+                                   <em class="parameter"><code><a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> **object</code></em>,
+                                   <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **property_name</code></em>,
+                                   <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/gobjectgobject-Generic-values.html#GValue"><span class="type">GValue</span></a> **property_value</code></em>);</pre>
+<p>Parses a property-notify message. These will be posted on the bus only
+when set up with <a class="link" href="GstElement.html#gst-element-add-property-notify-watch" title="gst_element_add_property_notify_watch ()"><code class="function">gst_element_add_property_notify_watch()</code></a> or
+<a class="link" href="GstElement.html#gst-element-add-property-deep-notify-watch" title="gst_element_add_property_deep_notify_watch ()"><code class="function">gst_element_add_property_deep_notify_watch()</code></a>.</p>
+<div class="refsect3">
+<a name="gst-message-parse-property-notify.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>message</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> of type <a class="link" href="GstMessage.html#GST-MESSAGE-PROPERTY-NOTIFY:CAPS"><code class="literal">GST_MESSAGE_PROPERTY_NOTIFY</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>object</p></td>
+<td class="parameter_description"><p> location where to store a
+pointer to the object whose property got changed, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>property_name</p></td>
+<td class="parameter_description"><p> return location for the name of the
+property that got changed, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>property_value</p></td>
+<td class="parameter_description"><p> return location for the new value of
+the property that got changed, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. This will only be set if the
+property notify watch was told to include the value when it was set up. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-message-new-streams-selected"></a><h3>gst_message_new_streams_selected ()</h3>
+<pre class="programlisting"><a class="link" href="GstMessage.html" title="GstMessage"><span class="returnvalue">GstMessage</span></a> *
+gst_message_new_streams_selected (<em class="parameter"><code><a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> *src</code></em>,
+                                  <em class="parameter"><code><a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a> *collection</code></em>);</pre>
+<p>Creates a new steams-selected message. The message is used to announce
+that an array of streams has been selected. This is generally in response
+to a <a class="link" href="GstEvent.html#GST-EVENT-SELECT-STREAMS:CAPS"><span class="type">GST_EVENT_SELECT_STREAMS</span></a> event, or when an element (such as decodebin3)
+makes an initial selection of streams.</p>
+<p>The message also contains the <a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a> to which the various streams
+belong to.</p>
+<p>Users of <a class="link" href="GstMessage.html#gst-message-new-streams-selected" title="gst_message_new_streams_selected ()"><code class="function">gst_message_new_streams_selected()</code></a> can add the selected streams with
+<a class="link" href="GstMessage.html#gst-message-streams-selected-add" title="gst_message_streams_selected_add ()"><code class="function">gst_message_streams_selected_add()</code></a>.</p>
+<div class="refsect3">
+<a name="gst-message-new-streams-selected.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>src</p></td>
+<td class="parameter_description"><p>The <a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> that created the message</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>collection</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-message-new-streams-selected.returns"></a><h4>Returns</h4>
+<p> a newly allocated <a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a></p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-message-parse-streams-selected"></a><h3>gst_message_parse_streams_selected ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_message_parse_streams_selected (<em class="parameter"><code><a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
+                                    <em class="parameter"><code><a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a> **collection</code></em>);</pre>
+<p>Parses a streams-selected message.</p>
+<div class="refsect3">
+<a name="gst-message-parse-streams-selected.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>message</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> of type <a class="link" href="GstMessage.html#GST-MESSAGE-STREAMS-SELECTED:CAPS"><code class="literal">GST_MESSAGE_STREAMS_SELECTED</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>collection</p></td>
+<td class="parameter_description"><p> A location where to store a
+pointer to the <a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a>, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-message-streams-selected-add"></a><h3>gst_message_streams_selected_add ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_message_streams_selected_add (<em class="parameter"><code><a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
+                                  <em class="parameter"><code><a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> *stream</code></em>);</pre>
+<p>Adds the <em class="parameter"><code>stream</code></em>
+ to the <em class="parameter"><code>message</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-message-streams-selected-add.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>message</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> of type <a class="link" href="GstMessage.html#GST-MESSAGE-STREAMS-SELECTED:CAPS"><code class="literal">GST_MESSAGE_STREAMS_SELECTED</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>stream</p></td>
+<td class="parameter_description"><p> a <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> to add to <em class="parameter"><code>message</code></em>
+. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-message-streams-selected-get-size"></a><h3>gst_message_streams_selected_get_size ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+gst_message_streams_selected_get_size (<em class="parameter"><code><a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> *message</code></em>);</pre>
+<p>Returns the number of streams contained in the <em class="parameter"><code>message</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-message-streams-selected-get-size.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>message</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> of type <a class="link" href="GstMessage.html#GST-MESSAGE-STREAMS-SELECTED:CAPS"><code class="literal">GST_MESSAGE_STREAMS_SELECTED</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-message-streams-selected-get-size.returns"></a><h4>Returns</h4>
+<p> The number of streams contained within.</p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-message-streams-selected-get-stream"></a><h3>gst_message_streams_selected_get_stream ()</h3>
+<pre class="programlisting"><a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="returnvalue">GstStream</span></a> *
+gst_message_streams_selected_get_stream
+                               (<em class="parameter"><code><a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
+                                <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> idx</code></em>);</pre>
+<p>Retrieves the <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> with index <em class="parameter"><code>index</code></em>
+ from the <em class="parameter"><code>message</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-message-streams-selected-get-stream.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>message</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> of type <a class="link" href="GstMessage.html#GST-MESSAGE-STREAMS-SELECTED:CAPS"><code class="literal">GST_MESSAGE_STREAMS_SELECTED</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>idx</p></td>
+<td class="parameter_description"><p>Index of the stream to retrieve</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-message-streams-selected-get-stream.returns"></a><h4>Returns</h4>
+<p> A <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-message-new-redirect"></a><h3>gst_message_new_redirect ()</h3>
+<pre class="programlisting"><a class="link" href="GstMessage.html" title="GstMessage"><span class="returnvalue">GstMessage</span></a> *
+gst_message_new_redirect (<em class="parameter"><code><a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> *src</code></em>,
+                          <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *location</code></em>,
+                          <em class="parameter"><code><a class="link" href="GstTagList.html" title="GstTagList"><span class="type">GstTagList</span></a> *tag_list</code></em>,
+                          <em class="parameter"><code>const <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> *entry_struct</code></em>);</pre>
+<p>Creates a new redirect message and adds a new entry to it. Redirect messages
+are posted when an element detects that the actual data has to be retrieved
+from a different location. This is useful if such a redirection cannot be
+handled inside a source element, for example when HTTP 302/303 redirects
+return a non-HTTP URL.</p>
+<p>The redirect message can hold multiple entries. The first one is added
+when the redirect message is created, with the given location, tag_list,
+entry_struct arguments. Use <a class="link" href="GstMessage.html#gst-message-add-redirect-entry" title="gst_message_add_redirect_entry ()"><code class="function">gst_message_add_redirect_entry()</code></a> to add more
+entries.</p>
+<p>Each entry has a location, a tag list, and a structure. All of these are
+optional. The tag list and structure are useful for additional metadata,
+such as bitrate statistics for the given location.</p>
+<p>By default, message recipients should treat entries in the order they are
+stored. The recipient should therefore try entry #0 first, and if this
+entry is not acceptable or working, try entry #1 etc. Senders must make
+sure that they add entries in this order. However, recipients are free to
+ignore the order and pick an entry that is "best" for them. One example
+would be a recipient that scans the entries for the one with the highest
+bitrate tag.</p>
+<p>The specified location string is copied. However, ownership over the tag
+list and structure are transferred to the message.</p>
+<div class="refsect3">
+<a name="gst-message-new-redirect.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>src</p></td>
+<td class="parameter_description"><p>The <a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> whose property changed (may or may not be a <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a>)</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>location</p></td>
+<td class="parameter_description"><p> location string for the new entry. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>tag_list</p></td>
+<td class="parameter_description"><p> tag list for the new entry. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>entry_struct</p></td>
+<td class="parameter_description"><p> structure for the new entry. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-message-new-redirect.returns"></a><h4>Returns</h4>
+<p> a newly allocated <a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a></p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-message-add-redirect-entry"></a><h3>gst_message_add_redirect_entry ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_message_add_redirect_entry (<em class="parameter"><code><a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
+                                <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *location</code></em>,
+                                <em class="parameter"><code><a class="link" href="GstTagList.html" title="GstTagList"><span class="type">GstTagList</span></a> *tag_list</code></em>,
+                                <em class="parameter"><code>const <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> *entry_struct</code></em>);</pre>
+<p>Creates and appends a new entry.</p>
+<p>The specified location string is copied. However, ownership over the tag
+list and structure are transferred to the message.</p>
+<div class="refsect3">
+<a name="gst-message-add-redirect-entry.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>message</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> of type <a class="link" href="GstMessage.html#GST-MESSAGE-REDIRECT:CAPS"><code class="literal">GST_MESSAGE_REDIRECT</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>location</p></td>
+<td class="parameter_description"><p> location string for the new entry. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>tag_list</p></td>
+<td class="parameter_description"><p> tag list for the new entry. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>entry_struct</p></td>
+<td class="parameter_description"><p> structure for the new entry. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-message-parse-redirect-entry"></a><h3>gst_message_parse_redirect_entry ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_message_parse_redirect_entry (<em class="parameter"><code><a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
+                                  <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> entry_index</code></em>,
+                                  <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **location</code></em>,
+                                  <em class="parameter"><code><a class="link" href="GstTagList.html" title="GstTagList"><span class="type">GstTagList</span></a> **tag_list</code></em>,
+                                  <em class="parameter"><code>const <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> **entry_struct</code></em>);</pre>
+<p>Parses the location and/or structure from the entry with the given index.
+The index must be between 0 and <a class="link" href="GstMessage.html#gst-message-get-num-redirect-entries" title="gst_message_get_num_redirect_entries ()"><code class="function">gst_message_get_num_redirect_entries()</code></a> - 1.
+Returned pointers are valid for as long as this message exists.</p>
+<div class="refsect3">
+<a name="gst-message-parse-redirect-entry.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>message</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> of type <a class="link" href="GstMessage.html#GST-MESSAGE-REDIRECT:CAPS"><code class="literal">GST_MESSAGE_REDIRECT</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>entry_index</p></td>
+<td class="parameter_description"><p>index of the entry to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>location</p></td>
+<td class="parameter_description"><p> return location for
+the pointer to the entry's location string, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>tag_list</p></td>
+<td class="parameter_description"><p> return location for
+the pointer to the entry's tag list, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>entry_struct</p></td>
+<td class="parameter_description"><p> return location
+for the pointer to the entry's structure, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-message-get-num-redirect-entries"></a><h3>gst_message_get_num_redirect_entries ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="returnvalue">gsize</span></a>
+gst_message_get_num_redirect_entries (<em class="parameter"><code><a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> *message</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-message-get-num-redirect-entries.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>message</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> of type <a class="link" href="GstMessage.html#GST-MESSAGE-REDIRECT:CAPS"><code class="literal">GST_MESSAGE_REDIRECT</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-message-get-num-redirect-entries.returns"></a><h4>Returns</h4>
+<p> the number of entries stored in the message</p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
 </div>
 <div class="refsect1">
 <a name="GstMessage.other_details"></a><h2>Types and Values</h2>
@@ -4713,6 +5637,39 @@
 <td class="enum_member_annotations"> </td>
 </tr>
 <tr>
+<td class="enum_member_name"><p><a name="GST-MESSAGE-PROPERTY-NOTIFY:CAPS"></a>GST_MESSAGE_PROPERTY_NOTIFY</p></td>
+<td class="enum_member_description">
+<p>Message indicating a <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct"><span class="type">GObject</span></a> property has
+    changed (Since 1.10)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MESSAGE-STREAM-COLLECTION:CAPS"></a>GST_MESSAGE_STREAM_COLLECTION</p></td>
+<td class="enum_member_description">
+<p>Message indicating a new <a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a>
+    is available (Since 1.10)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MESSAGE-STREAMS-SELECTED:CAPS"></a>GST_MESSAGE_STREAMS_SELECTED</p></td>
+<td class="enum_member_description">
+<p>Message indicating the active selection of
+    <a href="gstreamer-GstStream.html#GstStream"><span class="type">GstStreams</span></a> has changed (Since 1.10)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MESSAGE-REDIRECT:CAPS"></a>GST_MESSAGE_REDIRECT</p></td>
+<td class="enum_member_description">
+<p>Message indicating to request the application to
+    try to play the given URL(s). Useful if for example a HTTP 302/303
+    response is received with a non-HTTP URL inside. (Since 1.10)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
 <td class="enum_member_name"><p><a name="GST-MESSAGE-ANY:CAPS"></a>GST_MESSAGE_ANY</p></td>
 <td class="enum_member_description">
 <p>mask for all of the above messages.</p>
diff --git a/docs/gst/html/GstObject.html b/docs/gst/html/GstObject.html
index c490f83..f623d80 100644
--- a/docs/gst/html/GstObject.html
+++ b/docs/gst/html/GstObject.html
@@ -2040,13 +2040,24 @@
 <col class="enum_members_description">
 <col width="200px" class="enum_members_annotations">
 </colgroup>
-<tbody><tr>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-OBJECT-FLAG-MAY-BE-LEAKED:CAPS"></a>GST_OBJECT_FLAG_MAY_BE_LEAKED</p></td>
+<td class="enum_member_description">
+<p>the object is expected to stay alive even
+after <a class="link" href="gstreamer-Gst.html#gst-deinit" title="gst_deinit ()"><code class="function">gst_deinit()</code></a> has been called and so should be ignored by leak
+detection tools. (Since 1.10)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
 <td class="enum_member_name"><p><a name="GST-OBJECT-FLAG-LAST:CAPS"></a>GST_OBJECT_FLAG_LAST</p></td>
 <td class="enum_member_description">
 <p>subclasses can add additional flags starting from this flag</p>
 </td>
 <td class="enum_member_annotations"> </td>
-</tr></tbody>
+</tr>
+</tbody>
 </table></div>
 </div>
 </div>
diff --git a/docs/gst/html/GstPad.html b/docs/gst/html/GstPad.html
index b182ead..867a3cb 100644
--- a/docs/gst/html/GstPad.html
+++ b/docs/gst/html/GstPad.html
@@ -149,6 +149,22 @@
 <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
 </td>
 <td class="function_name">
+<a class="link" href="GstPad.html#gst-pad-link-maybe-ghosting" title="gst_pad_link_maybe_ghosting ()">gst_pad_link_maybe_ghosting</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GstPad.html#gst-pad-link-maybe-ghosting-full" title="gst_pad_link_maybe_ghosting_full ()">gst_pad_link_maybe_ghosting_full</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
 <a class="link" href="GstPad.html#gst-pad-unlink" title="gst_pad_unlink ()">gst_pad_unlink</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
@@ -944,6 +960,14 @@
 </tr>
 <tr>
 <td class="function_type">
+<a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="returnvalue">GstStream</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GstPad.html#gst-pad-get-stream" title="gst_pad_get_stream ()">gst_pad_get_stream</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
 <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
 </td>
 <td class="function_name">
@@ -1676,8 +1700,8 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>event</p></td>
-<td class="parameter_description"><p>a <a class="link" href="GstEvent.html" title="GstEvent"><span class="type">GstEvent</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> a <a class="link" href="GstEvent.html" title="GstEvent"><span class="type">GstEvent</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
 </tr>
 </tbody>
 </table></div>
@@ -1920,6 +1944,102 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-pad-link-maybe-ghosting"></a><h3>gst_pad_link_maybe_ghosting ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_pad_link_maybe_ghosting (<em class="parameter"><code><a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a> *src</code></em>,
+                             <em class="parameter"><code><a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a> *sink</code></em>);</pre>
+<p>Links <em class="parameter"><code>src</code></em>
+ to <em class="parameter"><code>sink</code></em>
+, creating any <a class="link" href="GstGhostPad.html" title="GstGhostPad"><span class="type">GstGhostPad</span></a>'s in between as necessary.</p>
+<p>This is a convenience function to save having to create and add intermediate
+<a class="link" href="GstGhostPad.html" title="GstGhostPad"><span class="type">GstGhostPad</span></a>'s as required for linking across <a class="link" href="GstBin.html" title="GstBin"><span class="type">GstBin</span></a> boundaries.</p>
+<p>If <em class="parameter"><code>src</code></em>
+ or <em class="parameter"><code>sink</code></em>
+ pads don't have parent elements or do not share a common
+ancestor, the link will fail.</p>
+<div class="refsect3">
+<a name="gst-pad-link-maybe-ghosting.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>src</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>sink</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-pad-link-maybe-ghosting.returns"></a><h4>Returns</h4>
+<p> whether the link succeeded.</p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-pad-link-maybe-ghosting-full"></a><h3>gst_pad_link_maybe_ghosting_full ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_pad_link_maybe_ghosting_full (<em class="parameter"><code><a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a> *src</code></em>,
+                                  <em class="parameter"><code><a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a> *sink</code></em>,
+                                  <em class="parameter"><code><a class="link" href="GstPad.html#GstPadLinkCheck" title="enum GstPadLinkCheck"><span class="type">GstPadLinkCheck</span></a> flags</code></em>);</pre>
+<p>Links <em class="parameter"><code>src</code></em>
+ to <em class="parameter"><code>sink</code></em>
+, creating any <a class="link" href="GstGhostPad.html" title="GstGhostPad"><span class="type">GstGhostPad</span></a>'s in between as necessary.</p>
+<p>This is a convenience function to save having to create and add intermediate
+<a class="link" href="GstGhostPad.html" title="GstGhostPad"><span class="type">GstGhostPad</span></a>'s as required for linking across <a class="link" href="GstBin.html" title="GstBin"><span class="type">GstBin</span></a> boundaries.</p>
+<p>If <em class="parameter"><code>src</code></em>
+ or <em class="parameter"><code>sink</code></em>
+ pads don't have parent elements or do not share a common
+ancestor, the link will fail.</p>
+<p>Calling <a class="link" href="GstPad.html#gst-pad-link-maybe-ghosting-full" title="gst_pad_link_maybe_ghosting_full ()"><code class="function">gst_pad_link_maybe_ghosting_full()</code></a> with
+<em class="parameter"><code>flags</code></em>
+ == <a class="link" href="GstPad.html#GST-PAD-LINK-CHECK-DEFAULT:CAPS"><code class="literal">GST_PAD_LINK_CHECK_DEFAULT</code></a> is the recommended way of linking
+pads with safety checks applied.</p>
+<div class="refsect3">
+<a name="gst-pad-link-maybe-ghosting-full.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>src</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>sink</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>some <a class="link" href="GstPad.html#GstPadLinkCheck" title="enum GstPadLinkCheck"><span class="type">GstPadLinkCheck</span></a> flags</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-pad-link-maybe-ghosting-full.returns"></a><h4>Returns</h4>
+<p> whether the link succeeded.</p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-pad-unlink"></a><h3>gst_pad_unlink ()</h3>
 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
 gst_pad_unlink (<em class="parameter"><code><a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a> *srcpad</code></em>,
@@ -5864,6 +5984,40 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-pad-get-stream"></a><h3>gst_pad_get_stream ()</h3>
+<pre class="programlisting"><a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="returnvalue">GstStream</span></a> *
+gst_pad_get_stream (<em class="parameter"><code><a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a> *pad</code></em>);</pre>
+<p>Returns the current <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> for the <em class="parameter"><code>pad</code></em>
+, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if none has been
+set yet, i.e. the pad has not received a stream-start event yet.</p>
+<p>This is a convenience wrapper around <a class="link" href="GstPad.html#gst-pad-get-sticky-event" title="gst_pad_get_sticky_event ()"><code class="function">gst_pad_get_sticky_event()</code></a> and
+<a class="link" href="GstEvent.html#gst-event-parse-stream" title="gst_event_parse_stream ()"><code class="function">gst_event_parse_stream()</code></a>.</p>
+<div class="refsect3">
+<a name="gst-pad-get-stream.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>pad</p></td>
+<td class="parameter_description"><p>A source <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-pad-get-stream.returns"></a><h4>Returns</h4>
+<p> the current <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> for <em class="parameter"><code>pad</code></em>
+, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
+unref the returned stream when no longer needed. </p>
+<p><span class="annotation">[<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="GstPadForwardFunction"></a><h3>GstPadForwardFunction ()</h3>
 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
 <span class="c_punctuation">(</span>*GstPadForwardFunction<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a> *pad</code></em>,
diff --git a/docs/gst/html/GstPadTemplate.html b/docs/gst/html/GstPadTemplate.html
index c3845bc..7e27b86 100644
--- a/docs/gst/html/GstPadTemplate.html
+++ b/docs/gst/html/GstPadTemplate.html
@@ -225,7 +225,7 @@
 convenient <a class="link" href="GstPadTemplate.html#GST-STATIC-PAD-TEMPLATE:CAPS" title="GST_STATIC_PAD_TEMPLATE()"><code class="function">GST_STATIC_PAD_TEMPLATE()</code></a> macro.</p>
 <p>A padtemplate can be used to create a pad (see <a class="link" href="GstPad.html#gst-pad-new-from-template" title="gst_pad_new_from_template ()"><code class="function">gst_pad_new_from_template()</code></a>
 or <a class="link" href="GstPad.html#gst-pad-new-from-static-template" title="gst_pad_new_from_static_template ()"><code class="function">gst_pad_new_from_static_template()</code></a>) or to add to an element class
-(see <a class="link" href="GstElement.html#gst-element-class-add-pad-template" title="gst_element_class_add_pad_template ()"><code class="function">gst_element_class_add_pad_template()</code></a>).</p>
+(see <a class="link" href="GstElement.html#gst-element-class-add-static-pad-template" title="gst_element_class_add_static_pad_template ()"><code class="function">gst_element_class_add_static_pad_template()</code></a>).</p>
 <p>The following code example shows the code to create a pad from a padtemplate.</p>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
@@ -283,15 +283,13 @@
 4
 5
 6
-7
-8</pre></td>
+7</pre></td>
         <td class="listing_code"><pre class="programlisting"><span class="gtkdoc kwb">static void</span>
 <span class="function">my_element_class_init</span> <span class="gtkdoc opt">(</span>GstMyElementClass <span class="gtkdoc opt">*</span>klass<span class="gtkdoc opt">)</span>
 <span class="gtkdoc opt">{</span>
   GstElementClass <span class="gtkdoc opt">*</span>gstelement_class <span class="gtkdoc opt">=</span> <span class="function">GST_ELEMENT_CLASS</span> <span class="gtkdoc opt">(</span>klass<span class="gtkdoc opt">);</span>
 
-  <span class="function"><a href="GstElement.html#gst-element-class-add-pad-template">gst_element_class_add_pad_template</a></span> <span class="gtkdoc opt">(</span>gstelement_class<span class="gtkdoc opt">,</span>
-      <span class="function"><a href="GstPadTemplate.html#gst-static-pad-template-get">gst_static_pad_template_get</a></span> <span class="gtkdoc opt">(&amp;</span>my_template<span class="gtkdoc opt">));</span>
+  <span class="function"><a href="GstElement.html#gst-element-class-add-static-pad-template">gst_element_class_add_static_pad_template</a></span> <span class="gtkdoc opt">(</span>gstelement_class<span class="gtkdoc opt">, &amp;</span>my_template<span class="gtkdoc opt">);</span>
 <span class="gtkdoc opt">}</span></pre></td>
       </tr>
     </tbody>
diff --git a/docs/gst/html/GstQuery.html b/docs/gst/html/GstQuery.html
index 4cc558c..2323332 100644
--- a/docs/gst/html/GstQuery.html
+++ b/docs/gst/html/GstQuery.html
@@ -1316,7 +1316,7 @@
                       <em class="parameter"><code><a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> *structure</code></em>);</pre>
 <p>Constructs a new custom query object. Use <a class="link" href="GstQuery.html#gst-query-unref" title="gst_query_unref ()"><code class="function">gst_query_unref()</code></a>
 when done with it.</p>
-<p>Free-function: gst_query_unref</p>
+<p>Free-function: <a class="link" href="GstQuery.html#gst-query-unref" title="gst_query_unref ()"><code class="function">gst_query_unref()</code></a></p>
 <div class="refsect3">
 <a name="gst-query-new-custom.parameters"></a><h4>Parameters</h4>
 <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -1384,7 +1384,7 @@
 <p>Constructs a new convert query object. Use <a class="link" href="GstQuery.html#gst-query-unref" title="gst_query_unref ()"><code class="function">gst_query_unref()</code></a>
 when done with it. A convert query is used to ask for a conversion between
 one format and another.</p>
-<p>Free-function: gst_query_unref</p>
+<p>Free-function: <a class="link" href="GstQuery.html#gst-query-unref" title="gst_query_unref ()"><code class="function">gst_query_unref()</code></a></p>
 <div class="refsect3">
 <a name="gst-query-new-convert.parameters"></a><h4>Parameters</h4>
 <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -1530,7 +1530,7 @@
 <p>Constructs a new query stream position query object. Use <a class="link" href="GstQuery.html#gst-query-unref" title="gst_query_unref ()"><code class="function">gst_query_unref()</code></a>
 when done with it. A position query is used to query the current position
 of playback in the streams, in some format.</p>
-<p>Free-function: gst_query_unref</p>
+<p>Free-function: <a class="link" href="GstQuery.html#gst-query-unref" title="gst_query_unref ()"><code class="function">gst_query_unref()</code></a></p>
 <div class="refsect3">
 <a name="gst-query-new-position.parameters"></a><h4>Parameters</h4>
 <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -1636,7 +1636,7 @@
 <p>Constructs a new stream duration query object to query in the given format.
 Use <a class="link" href="GstQuery.html#gst-query-unref" title="gst_query_unref ()"><code class="function">gst_query_unref()</code></a> when done with it. A duration query will give the
 total length of the stream.</p>
-<p>Free-function: gst_query_unref</p>
+<p>Free-function: <a class="link" href="GstQuery.html#gst-query-unref" title="gst_query_unref ()"><code class="function">gst_query_unref()</code></a></p>
 <div class="refsect3">
 <a name="gst-query-new-duration.parameters"></a><h4>Parameters</h4>
 <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -1743,7 +1743,7 @@
 Use <a class="link" href="GstQuery.html#gst-query-unref" title="gst_query_unref ()"><code class="function">gst_query_unref()</code></a> when done with it. A latency query is usually performed
 by sinks to compensate for additional latency introduced by elements in the
 pipeline.</p>
-<p>Free-function: gst_query_unref</p>
+<p>Free-function: <a class="link" href="GstQuery.html#gst-query-unref" title="gst_query_unref ()"><code class="function">gst_query_unref()</code></a></p>
 <div class="refsect3">
 <a name="gst-query-new-latency.returns"></a><h4>Returns</h4>
 <p> a <a class="link" href="GstQuery.html" title="GstQuery"><span class="type">GstQuery</span></a>. </p>
@@ -1841,7 +1841,7 @@
 gst_query_new_seeking (<em class="parameter"><code><a class="link" href="gstreamer-GstFormat.html#GstFormat" title="enum GstFormat"><span class="type">GstFormat</span></a> format</code></em>);</pre>
 <p>Constructs a new query object for querying seeking properties of
 the stream.</p>
-<p>Free-function: gst_query_unref</p>
+<p>Free-function: <a class="link" href="GstQuery.html#gst-query-unref" title="gst_query_unref ()"><code class="function">gst_query_unref()</code></a></p>
 <div class="refsect3">
 <a name="gst-query-new-seeking.parameters"></a><h4>Parameters</h4>
 <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -1974,7 +1974,7 @@
 gst_query_new_formats (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
 <p>Constructs a new query object for querying formats of
 the stream.</p>
-<p>Free-function: gst_query_unref</p>
+<p>Free-function: <a class="link" href="GstQuery.html#gst-query-unref" title="gst_query_unref ()"><code class="function">gst_query_unref()</code></a></p>
 <div class="refsect3">
 <a name="gst-query-new-formats.returns"></a><h4>Returns</h4>
 <p> a new <a class="link" href="GstQuery.html" title="GstQuery"><span class="type">GstQuery</span></a>. </p>
@@ -2145,7 +2145,7 @@
 <p>Constructs a new segment query object. Use <a class="link" href="GstQuery.html#gst-query-unref" title="gst_query_unref ()"><code class="function">gst_query_unref()</code></a>
 when done with it. A segment query is used to discover information about the
 currently configured segment for playback.</p>
-<p>Free-function: gst_query_unref</p>
+<p>Free-function: <a class="link" href="GstQuery.html#gst-query-unref" title="gst_query_unref ()"><code class="function">gst_query_unref()</code></a></p>
 <div class="refsect3">
 <a name="gst-query-new-segment.parameters"></a><h4>Parameters</h4>
 <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -2311,7 +2311,7 @@
 <em class="parameter"><code>filter</code></em>
  should be returned from the CAPS query. Specifying a filter might
 greatly reduce the amount of processing an element needs to do.</p>
-<p>Free-function: gst_query_unref</p>
+<p>Free-function: <a class="link" href="GstQuery.html#gst-query-unref" title="gst_query_unref ()"><code class="function">gst_query_unref()</code></a></p>
 <div class="refsect3">
 <a name="gst-query-new-caps.parameters"></a><h4>Parameters</h4>
 <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -2438,7 +2438,7 @@
 gst_query_new_accept_caps (<em class="parameter"><code><a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);</pre>
 <p>Constructs a new query object for querying if <em class="parameter"><code>caps</code></em>
  are accepted.</p>
-<p>Free-function: gst_query_unref</p>
+<p>Free-function: <a class="link" href="GstQuery.html#gst-query-unref" title="gst_query_unref ()"><code class="function">gst_query_unref()</code></a></p>
 <div class="refsect3">
 <a name="gst-query-new-accept-caps.parameters"></a><h4>Parameters</h4>
 <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -2564,7 +2564,7 @@
 gst_query_new_buffering (<em class="parameter"><code><a class="link" href="gstreamer-GstFormat.html#GstFormat" title="enum GstFormat"><span class="type">GstFormat</span></a> format</code></em>);</pre>
 <p>Constructs a new query object for querying the buffering status of
 a stream.</p>
-<p>Free-function: gst_query_unref</p>
+<p>Free-function: <a class="link" href="GstQuery.html#gst-query-unref" title="gst_query_unref ()"><code class="function">gst_query_unref()</code></a></p>
 <div class="refsect3">
 <a name="gst-query-new-buffering.parameters"></a><h4>Parameters</h4>
 <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -2993,7 +2993,7 @@
 <p>Constructs a new query URI query object. Use <a class="link" href="GstQuery.html#gst-query-unref" title="gst_query_unref ()"><code class="function">gst_query_unref()</code></a>
 when done with it. An URI query is used to query the current URI
 that is used by the source or sink.</p>
-<p>Free-function: gst_query_unref</p>
+<p>Free-function: <a class="link" href="GstQuery.html#gst-query-unref" title="gst_query_unref ()"><code class="function">gst_query_unref()</code></a></p>
 <div class="refsect3">
 <a name="gst-query-new-uri.returns"></a><h4>Returns</h4>
 <p> a new <a class="link" href="GstQuery.html" title="GstQuery"><span class="type">GstQuery</span></a>. </p>
@@ -3207,7 +3207,7 @@
 gst_query_new_allocation (<em class="parameter"><code><a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>,
                           <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> need_pool</code></em>);</pre>
 <p>Constructs a new query object for querying the allocation properties.</p>
-<p>Free-function: gst_query_unref</p>
+<p>Free-function: <a class="link" href="GstQuery.html#gst-query-unref" title="gst_query_unref ()"><code class="function">gst_query_unref()</code></a></p>
 <div class="refsect3">
 <a name="gst-query-new-allocation.parameters"></a><h4>Parameters</h4>
 <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -3248,6 +3248,8 @@
 whether a pool is needed in <em class="parameter"><code>need_pool</code></em>
 , if the respective parameters
 are non-<a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p>
+<p>Pool details can be retrieved using <a class="link" href="GstQuery.html#gst-query-get-n-allocation-pools" title="gst_query_get_n_allocation_pools ()"><code class="function">gst_query_get_n_allocation_pools()</code></a> and
+<a class="link" href="GstQuery.html#gst-query-parse-nth-allocation-pool" title="gst_query_parse_nth_allocation_pool ()"><code class="function">gst_query_parse_nth_allocation_pool()</code></a>.</p>
 <div class="refsect3">
 <a name="gst-query-parse-allocation.parameters"></a><h4>Parameters</h4>
 <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -3308,7 +3310,7 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>size</p></td>
-<td class="parameter_description"><p>the size</p></td>
+<td class="parameter_description"><p>the buffer size</p></td>
 <td class="parameter_annotations"> </td>
 </tr>
 <tr>
@@ -3392,7 +3394,7 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>size</p></td>
-<td class="parameter_description"><p> the size. </p></td>
+<td class="parameter_description"><p> the buffer size. </p></td>
 <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
 </tr>
 <tr>
@@ -3877,7 +3879,7 @@
 <pre class="programlisting"><a class="link" href="GstQuery.html" title="GstQuery"><span class="returnvalue">GstQuery</span></a> *
 gst_query_new_scheduling (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
 <p>Constructs a new query object for querying the scheduling properties.</p>
-<p>Free-function: gst_query_unref</p>
+<p>Free-function: <a class="link" href="GstQuery.html#gst-query-unref" title="gst_query_unref ()"><code class="function">gst_query_unref()</code></a></p>
 <div class="refsect3">
 <a name="gst-query-new-scheduling.returns"></a><h4>Returns</h4>
 <p> a new <a class="link" href="GstQuery.html" title="GstQuery"><span class="type">GstQuery</span></a>. </p>
@@ -4172,7 +4174,7 @@
 <pre class="programlisting"><a class="link" href="GstQuery.html" title="GstQuery"><span class="returnvalue">GstQuery</span></a> *
 gst_query_new_drain (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
 <p>Constructs a new query object for querying the drain state.</p>
-<p>Free-function: gst_query_unref</p>
+<p>Free-function: <a class="link" href="GstQuery.html#gst-query-unref" title="gst_query_unref ()"><code class="function">gst_query_unref()</code></a></p>
 <div class="refsect3">
 <a name="gst-query-new-drain.returns"></a><h4>Returns</h4>
 <p> a new <a class="link" href="GstQuery.html" title="GstQuery"><span class="type">GstQuery</span></a>. </p>
@@ -4185,7 +4187,7 @@
 <pre class="programlisting"><a class="link" href="GstQuery.html" title="GstQuery"><span class="returnvalue">GstQuery</span></a> *
 gst_query_new_context (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *context_type</code></em>);</pre>
 <p>Constructs a new query object for querying the pipeline-local context.</p>
-<p>Free-function: gst_query_unref</p>
+<p>Free-function: <a class="link" href="GstQuery.html#gst-query-unref" title="gst_query_unref ()"><code class="function">gst_query_unref()</code></a></p>
 <div class="refsect3">
 <a name="gst-query-new-context.parameters"></a><h4>Parameters</h4>
 <div class="informaltable"><table class="informaltable" width="100%" border="0">
diff --git a/docs/gst/html/GstSegment.html b/docs/gst/html/GstSegment.html
index 7c67cb5..9ed1936 100644
--- a/docs/gst/html/GstSegment.html
+++ b/docs/gst/html/GstSegment.html
@@ -7,7 +7,7 @@
 <link rel="home" href="index.html" title="GStreamer 1.0 Core Reference Manual">
 <link rel="up" href="libgstreamer.html" title="GStreamer Core Library">
 <link rel="prev" href="GstRegistry.html" title="GstRegistry">
-<link rel="next" href="GstStructure.html" title="GstStructure">
+<link rel="next" href="gstreamer-GstStream.html" title="GstStream">
 <meta name="generator" content="GTK-Doc V1.25 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
 </head>
@@ -21,7 +21,7 @@
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="libgstreamer.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
 <td><a accesskey="p" href="GstRegistry.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="GstStructure.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gstreamer-GstStream.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="GstSegment"></a><div class="titlepage"></div>
diff --git a/docs/gst/html/GstStructure.html b/docs/gst/html/GstStructure.html
index 9bfe24c..dba48e7 100644
--- a/docs/gst/html/GstStructure.html
+++ b/docs/gst/html/GstStructure.html
@@ -6,7 +6,7 @@
 <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer 1.0 Core Reference Manual">
 <link rel="up" href="libgstreamer.html" title="GStreamer Core Library">
-<link rel="prev" href="GstSegment.html" title="GstSegment">
+<link rel="prev" href="gstreamer-GstStreamCollection.html" title="GstStreamCollection">
 <link rel="next" href="GstSystemClock.html" title="GstSystemClock">
 <meta name="generator" content="GTK-Doc V1.25 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
@@ -20,7 +20,7 @@
 </td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="libgstreamer.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="GstSegment.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gstreamer-GstStreamCollection.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
 <td><a accesskey="n" href="GstSystemClock.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
diff --git a/docs/gst/html/GstTagList.html b/docs/gst/html/GstTagList.html
index 24b5eb2..f728191 100644
--- a/docs/gst/html/GstTagList.html
+++ b/docs/gst/html/GstTagList.html
@@ -3510,7 +3510,7 @@
 In the table below this is shown for the cases that a tag exists in the list
 (A) or does not exists (!A) and combinations thereof.</p>
 <div class="table">
-<a name="id-1.3.48.9.3.4"></a><p class="title"><b>Table 1. merge mode</b></p>
+<a name="id-1.3.50.9.3.4"></a><p class="title"><b>Table 1. merge mode</b></p>
 <div class="table-contents"><table class="table" summary="merge mode" border="1">
 <colgroup>
 <col>
diff --git a/docs/gst/html/gstreamer-1.0.devhelp2 b/docs/gst/html/gstreamer-1.0.devhelp2
index a1848af..e141252 100644
--- a/docs/gst/html/gstreamer-1.0.devhelp2
+++ b/docs/gst/html/gstreamer-1.0.devhelp2
@@ -49,6 +49,8 @@
       <sub name="GstQuery" link="GstQuery.html"/>
       <sub name="GstRegistry" link="GstRegistry.html"/>
       <sub name="GstSegment" link="GstSegment.html"/>
+      <sub name="GstStream" link="gstreamer-GstStream.html"/>
+      <sub name="GstStreamCollection" link="gstreamer-GstStreamCollection.html"/>
       <sub name="GstStructure" link="GstStructure.html"/>
       <sub name="GstSystemClock" link="GstSystemClock.html"/>
       <sub name="GstTagList" link="GstTagList.html"/>
@@ -150,6 +152,8 @@
     <keyword type="enum" name="enum GstBinFlags" link="GstBin.html#GstBinFlags"/>
     <keyword type="property" name="The “async-handling” property" link="GstBin.html#GstBin--async-handling"/>
     <keyword type="property" name="The “message-forward” property" link="GstBin.html#GstBin--message-forward"/>
+    <keyword type="signal" name="The “deep-element-added” signal" link="GstBin.html#GstBin-deep-element-added"/>
+    <keyword type="signal" name="The “deep-element-removed” signal" link="GstBin.html#GstBin-deep-element-removed"/>
     <keyword type="signal" name="The “do-latency” signal" link="GstBin.html#GstBin-do-latency"/>
     <keyword type="signal" name="The “element-added” signal" link="GstBin.html#GstBin-element-added"/>
     <keyword type="signal" name="The “element-removed” signal" link="GstBin.html#GstBin-element-removed"/>
@@ -224,6 +228,10 @@
     <keyword type="function" name="gst_buffer_foreach_meta ()" link="GstBuffer.html#gst-buffer-foreach-meta"/>
     <keyword type="function" name="gst_buffer_add_parent_buffer_meta ()" link="GstBuffer.html#gst-buffer-add-parent-buffer-meta" since="1.6"/>
     <keyword type="macro" name="gst_buffer_get_parent_buffer_meta()" link="GstBuffer.html#gst-buffer-get-parent-buffer-meta"/>
+    <keyword type="function" name="gst_buffer_get_flags ()" link="GstBuffer.html#gst-buffer-get-flags" since="1.10"/>
+    <keyword type="function" name="gst_buffer_set_flags ()" link="GstBuffer.html#gst-buffer-set-flags" since="1.10"/>
+    <keyword type="function" name="gst_buffer_unset_flags ()" link="GstBuffer.html#gst-buffer-unset-flags" since="1.10"/>
+    <keyword type="function" name="gst_buffer_has_flags ()" link="GstBuffer.html#gst-buffer-has-flags"/>
     <keyword type="struct" name="struct GstBuffer" link="GstBuffer.html#GstBuffer-struct"/>
     <keyword type="enum" name="enum GstBufferFlags" link="GstBuffer.html#GstBufferFlags"/>
     <keyword type="macro" name="GST_BUFFER_OFFSET_NONE" link="GstBuffer.html#GST-BUFFER-OFFSET-NONE:CAPS"/>
@@ -497,8 +505,6 @@
     <keyword type="signal" name="The “synced” signal" link="GstClock.html#GstClock-synced"/>
     <keyword type="macro" name="GST_DISABLE_GST_DEBUG" link="gstreamer-GstConfig.html#GST-DISABLE-GST-DEBUG:CAPS"/>
     <keyword type="macro" name="GST_DISABLE_PARSE" link="gstreamer-GstConfig.html#GST-DISABLE-PARSE:CAPS"/>
-    <keyword type="macro" name="GST_DISABLE_TRACE" link="gstreamer-GstConfig.html#GST-DISABLE-TRACE:CAPS"/>
-    <keyword type="macro" name="GST_DISABLE_ALLOC_TRACE" link="gstreamer-GstConfig.html#GST-DISABLE-ALLOC-TRACE:CAPS"/>
     <keyword type="macro" name="GST_DISABLE_REGISTRY" link="gstreamer-GstConfig.html#GST-DISABLE-REGISTRY:CAPS"/>
     <keyword type="macro" name="GST_DISABLE_PLUGIN" link="gstreamer-GstConfig.html#GST-DISABLE-PLUGIN:CAPS"/>
     <keyword type="function" name="gst_context_new ()" link="GstContext.html#gst-context-new" since="1.2"/>
@@ -580,8 +586,12 @@
     <keyword type="macro" name="GST_ELEMENT_PADS()" link="GstElement.html#GST-ELEMENT-PADS:CAPS"/>
     <keyword type="macro" name="GST_ELEMENT_START_TIME()" link="GstElement.html#GST-ELEMENT-START-TIME:CAPS"/>
     <keyword type="macro" name="GST_ELEMENT_ERROR()" link="GstElement.html#GST-ELEMENT-ERROR:CAPS"/>
+    <keyword type="macro" name="GST_ELEMENT_ERROR_WITH_DETAILS()" link="GstElement.html#GST-ELEMENT-ERROR-WITH-DETAILS:CAPS" since="1.10"/>
+    <keyword type="macro" name="GST_ELEMENT_FLOW_ERROR()" link="GstElement.html#GST-ELEMENT-FLOW-ERROR:CAPS" since="1.10"/>
     <keyword type="macro" name="GST_ELEMENT_WARNING()" link="GstElement.html#GST-ELEMENT-WARNING:CAPS"/>
+    <keyword type="macro" name="GST_ELEMENT_WARNING_WITH_DETAILS()" link="GstElement.html#GST-ELEMENT-WARNING-WITH-DETAILS:CAPS" since="1.10"/>
     <keyword type="macro" name="GST_ELEMENT_INFO()" link="GstElement.html#GST-ELEMENT-INFO:CAPS"/>
+    <keyword type="macro" name="GST_ELEMENT_INFO_WITH_DETAILS()" link="GstElement.html#GST-ELEMENT-INFO-WITH-DETAILS:CAPS" since="1.10"/>
     <keyword type="macro" name="GST_ELEMENT_IS_LOCKED_STATE()" link="GstElement.html#GST-ELEMENT-IS-LOCKED-STATE:CAPS"/>
     <keyword type="function" name="gst_element_class_add_pad_template ()" link="GstElement.html#gst-element-class-add-pad-template"/>
     <keyword type="function" name="gst_element_class_add_static_pad_template ()" link="GstElement.html#gst-element-class-add-static-pad-template" since="1.8"/>
@@ -644,6 +654,8 @@
     <keyword type="function" name="gst_element_sync_state_with_parent ()" link="GstElement.html#gst-element-sync-state-with-parent"/>
     <keyword type="function" name="gst_element_change_state ()" link="GstElement.html#gst-element-change-state"/>
     <keyword type="function" name="gst_element_message_full ()" link="GstElement.html#gst-element-message-full"/>
+    <keyword type="function" name="gst_element_message_full_with_details ()" link="GstElement.html#gst-element-message-full-with-details" since="1.10"/>
+    <keyword type="function" name="gst_make_element_message_details ()" link="GstElement.html#gst-make-element-message-details"/>
     <keyword type="function" name="gst_element_post_message ()" link="GstElement.html#gst-element-post-message"/>
     <keyword type="function" name="gst_element_query ()" link="GstElement.html#gst-element-query"/>
     <keyword type="function" name="gst_element_query_convert ()" link="GstElement.html#gst-element-query-convert"/>
@@ -652,6 +664,11 @@
     <keyword type="function" name="gst_element_send_event ()" link="GstElement.html#gst-element-send-event"/>
     <keyword type="function" name="gst_element_seek_simple ()" link="GstElement.html#gst-element-seek-simple"/>
     <keyword type="function" name="gst_element_seek ()" link="GstElement.html#gst-element-seek"/>
+    <keyword type="function" name="gst_element_add_property_notify_watch ()" link="GstElement.html#gst-element-add-property-notify-watch" since="1.10"/>
+    <keyword type="function" name="gst_element_add_property_deep_notify_watch ()" link="GstElement.html#gst-element-add-property-deep-notify-watch" since="1.10"/>
+    <keyword type="function" name="gst_element_remove_property_notify_watch ()" link="GstElement.html#gst-element-remove-property-notify-watch" since="1.10"/>
+    <keyword type="function" name="GstElementCallAsyncFunc ()" link="GstElement.html#GstElementCallAsyncFunc"/>
+    <keyword type="function" name="gst_element_call_async ()" link="GstElement.html#gst-element-call-async" since="1.10"/>
     <keyword type="struct" name="struct GstElement" link="GstElement.html#GstElement-struct"/>
     <keyword type="struct" name="struct GstElementClass" link="GstElement.html#GstElementClass"/>
     <keyword type="enum" name="enum GstElementFlags" link="GstElement.html#GstElementFlags"/>
@@ -762,6 +779,8 @@
     <keyword type="function" name="gst_event_parse_stream_flags ()" link="GstEvent.html#gst-event-parse-stream-flags" since="1.2"/>
     <keyword type="function" name="gst_event_set_group_id ()" link="GstEvent.html#gst-event-set-group-id" since="1.2"/>
     <keyword type="function" name="gst_event_parse_group_id ()" link="GstEvent.html#gst-event-parse-group-id" since="1.2"/>
+    <keyword type="function" name="gst_event_set_stream ()" link="GstEvent.html#gst-event-set-stream" since="1.10"/>
+    <keyword type="function" name="gst_event_parse_stream ()" link="GstEvent.html#gst-event-parse-stream" since="1.10"/>
     <keyword type="function" name="gst_event_new_segment ()" link="GstEvent.html#gst-event-new-segment"/>
     <keyword type="function" name="gst_event_parse_segment ()" link="GstEvent.html#gst-event-parse-segment"/>
     <keyword type="function" name="gst_event_copy_segment ()" link="GstEvent.html#gst-event-copy-segment"/>
@@ -791,6 +810,12 @@
     <keyword type="function" name="gst_event_parse_segment_done ()" link="GstEvent.html#gst-event-parse-segment-done"/>
     <keyword type="function" name="gst_event_new_protection ()" link="GstEvent.html#gst-event-new-protection" since="1.6"/>
     <keyword type="function" name="gst_event_parse_protection ()" link="GstEvent.html#gst-event-parse-protection" since="1.6"/>
+    <keyword type="function" name="gst_event_new_select_streams ()" link="GstEvent.html#gst-event-new-select-streams" since="1.10"/>
+    <keyword type="function" name="gst_event_parse_select_streams ()" link="GstEvent.html#gst-event-parse-select-streams" since="1.10"/>
+    <keyword type="function" name="gst_event_new_stream_collection ()" link="GstEvent.html#gst-event-new-stream-collection" since="1.10"/>
+    <keyword type="function" name="gst_event_parse_stream_collection ()" link="GstEvent.html#gst-event-parse-stream-collection" since="1.10"/>
+    <keyword type="function" name="gst_event_new_stream_group_done ()" link="GstEvent.html#gst-event-new-stream-group-done" since="1.10"/>
+    <keyword type="function" name="gst_event_parse_stream_group_done ()" link="GstEvent.html#gst-event-parse-stream-group-done" since="1.10"/>
     <keyword type="struct" name="struct GstEvent" link="GstEvent.html#GstEvent-struct"/>
     <keyword type="enum" name="enum GstEventTypeFlags" link="GstEvent.html#GstEventTypeFlags"/>
     <keyword type="macro" name="GST_EVENT_TYPE_BOTH" link="GstEvent.html#GST-EVENT-TYPE-BOTH:CAPS"/>
@@ -911,11 +936,17 @@
     <keyword type="function" name="gst_message_replace ()" link="GstMessage.html#gst-message-replace"/>
     <keyword type="function" name="gst_message_new_eos ()" link="GstMessage.html#gst-message-new-eos"/>
     <keyword type="function" name="gst_message_new_error ()" link="GstMessage.html#gst-message-new-error"/>
+    <keyword type="function" name="gst_message_new_error_with_details ()" link="GstMessage.html#gst-message-new-error-with-details" since="1.10"/>
     <keyword type="function" name="gst_message_parse_error ()" link="GstMessage.html#gst-message-parse-error"/>
+    <keyword type="function" name="gst_message_parse_error_details ()" link="GstMessage.html#gst-message-parse-error-details" since="1.10"/>
     <keyword type="function" name="gst_message_new_warning ()" link="GstMessage.html#gst-message-new-warning"/>
+    <keyword type="function" name="gst_message_new_warning_with_details ()" link="GstMessage.html#gst-message-new-warning-with-details" since="1.10"/>
     <keyword type="function" name="gst_message_parse_warning ()" link="GstMessage.html#gst-message-parse-warning"/>
+    <keyword type="function" name="gst_message_parse_warning_details ()" link="GstMessage.html#gst-message-parse-warning-details" since="1.10"/>
     <keyword type="function" name="gst_message_new_info ()" link="GstMessage.html#gst-message-new-info"/>
+    <keyword type="function" name="gst_message_new_info_with_details ()" link="GstMessage.html#gst-message-new-info-with-details" since="1.10"/>
     <keyword type="function" name="gst_message_parse_info ()" link="GstMessage.html#gst-message-parse-info"/>
+    <keyword type="function" name="gst_message_parse_info_details ()" link="GstMessage.html#gst-message-parse-info-details" since="1.10"/>
     <keyword type="function" name="gst_message_new_tag ()" link="GstMessage.html#gst-message-new-tag"/>
     <keyword type="function" name="gst_message_parse_tag ()" link="GstMessage.html#gst-message-parse-tag"/>
     <keyword type="function" name="gst_message_new_buffering ()" link="GstMessage.html#gst-message-new-buffering"/>
@@ -960,6 +991,8 @@
     <keyword type="function" name="gst_message_new_stream_start ()" link="GstMessage.html#gst-message-new-stream-start"/>
     <keyword type="function" name="gst_message_set_group_id ()" link="GstMessage.html#gst-message-set-group-id" since="1.2"/>
     <keyword type="function" name="gst_message_parse_group_id ()" link="GstMessage.html#gst-message-parse-group-id" since="1.2"/>
+    <keyword type="function" name="gst_message_new_stream_collection ()" link="GstMessage.html#gst-message-new-stream-collection" since="1.10"/>
+    <keyword type="function" name="gst_message_parse_stream_collection ()" link="GstMessage.html#gst-message-parse-stream-collection" since="1.10"/>
     <keyword type="function" name="gst_message_new_structure_change ()" link="GstMessage.html#gst-message-new-structure-change"/>
     <keyword type="function" name="gst_message_parse_structure_change ()" link="GstMessage.html#gst-message-parse-structure-change"/>
     <keyword type="function" name="gst_message_new_request_state ()" link="GstMessage.html#gst-message-new-request-state"/>
@@ -978,6 +1011,17 @@
     <keyword type="function" name="gst_message_new_device_removed ()" link="GstMessage.html#gst-message-new-device-removed" since="1.4"/>
     <keyword type="function" name="gst_message_parse_device_added ()" link="GstMessage.html#gst-message-parse-device-added" since="1.4"/>
     <keyword type="function" name="gst_message_parse_device_removed ()" link="GstMessage.html#gst-message-parse-device-removed" since="1.4"/>
+    <keyword type="function" name="gst_message_new_property_notify ()" link="GstMessage.html#gst-message-new-property-notify" since="1.10"/>
+    <keyword type="function" name="gst_message_parse_property_notify ()" link="GstMessage.html#gst-message-parse-property-notify" since="1.10"/>
+    <keyword type="function" name="gst_message_new_streams_selected ()" link="GstMessage.html#gst-message-new-streams-selected" since="1.10"/>
+    <keyword type="function" name="gst_message_parse_streams_selected ()" link="GstMessage.html#gst-message-parse-streams-selected" since="1.10"/>
+    <keyword type="function" name="gst_message_streams_selected_add ()" link="GstMessage.html#gst-message-streams-selected-add" since="1.10"/>
+    <keyword type="function" name="gst_message_streams_selected_get_size ()" link="GstMessage.html#gst-message-streams-selected-get-size" since="1.10"/>
+    <keyword type="function" name="gst_message_streams_selected_get_stream ()" link="GstMessage.html#gst-message-streams-selected-get-stream" since="1.10"/>
+    <keyword type="function" name="gst_message_new_redirect ()" link="GstMessage.html#gst-message-new-redirect" since="1.10"/>
+    <keyword type="function" name="gst_message_add_redirect_entry ()" link="GstMessage.html#gst-message-add-redirect-entry" since="1.10"/>
+    <keyword type="function" name="gst_message_parse_redirect_entry ()" link="GstMessage.html#gst-message-parse-redirect-entry" since="1.10"/>
+    <keyword type="function" name="gst_message_get_num_redirect_entries ()" link="GstMessage.html#gst-message-get-num-redirect-entries" since="1.10"/>
     <keyword type="struct" name="struct GstMessage" link="GstMessage.html#GstMessage-struct"/>
     <keyword type="enum" name="enum GstMessageType" link="GstMessage.html#GstMessageType"/>
     <keyword type="enum" name="enum GstStructureChangeType" link="GstMessage.html#GstStructureChangeType"/>
@@ -1096,6 +1140,8 @@
     <keyword type="function" name="gst_pad_get_pad_template ()" link="GstPad.html#gst-pad-get-pad-template"/>
     <keyword type="function" name="gst_pad_link ()" link="GstPad.html#gst-pad-link"/>
     <keyword type="function" name="gst_pad_link_full ()" link="GstPad.html#gst-pad-link-full"/>
+    <keyword type="function" name="gst_pad_link_maybe_ghosting ()" link="GstPad.html#gst-pad-link-maybe-ghosting" since="1.10"/>
+    <keyword type="function" name="gst_pad_link_maybe_ghosting_full ()" link="GstPad.html#gst-pad-link-maybe-ghosting-full" since="1.10"/>
     <keyword type="function" name="gst_pad_unlink ()" link="GstPad.html#gst-pad-unlink"/>
     <keyword type="function" name="gst_pad_is_linked ()" link="GstPad.html#gst-pad-is-linked"/>
     <keyword type="function" name="gst_pad_can_link ()" link="GstPad.html#gst-pad-can-link"/>
@@ -1201,6 +1247,7 @@
     <keyword type="function" name="gst_pad_create_stream_id_printf ()" link="GstPad.html#gst-pad-create-stream-id-printf"/>
     <keyword type="function" name="gst_pad_create_stream_id_printf_valist ()" link="GstPad.html#gst-pad-create-stream-id-printf-valist"/>
     <keyword type="function" name="gst_pad_get_stream_id ()" link="GstPad.html#gst-pad-get-stream-id" since="1.2"/>
+    <keyword type="function" name="gst_pad_get_stream ()" link="GstPad.html#gst-pad-get-stream" since="1.10"/>
     <keyword type="function" name="GstPadForwardFunction ()" link="GstPad.html#GstPadForwardFunction"/>
     <keyword type="function" name="gst_pad_forward ()" link="GstPad.html#gst-pad-forward"/>
     <keyword type="function" name="gst_pad_chain ()" link="GstPad.html#gst-pad-chain"/>
@@ -1571,6 +1618,27 @@
     <keyword type="function" name="gst_segment_is_equal ()" link="GstSegment.html#gst-segment-is-equal" since="1.6"/>
     <keyword type="struct" name="struct GstSegment" link="GstSegment.html#GstSegment-struct"/>
     <keyword type="enum" name="enum GstSegmentFlags" link="GstSegment.html#GstSegmentFlags"/>
+    <keyword type="function" name="gst_stream_new ()" link="gstreamer-GstStream.html#gst-stream-new" since="1.10"/>
+    <keyword type="function" name="gst_stream_get_caps ()" link="gstreamer-GstStream.html#gst-stream-get-caps" since="1.10"/>
+    <keyword type="function" name="gst_stream_get_stream_flags ()" link="gstreamer-GstStream.html#gst-stream-get-stream-flags" since="1.10"/>
+    <keyword type="function" name="gst_stream_get_stream_id ()" link="gstreamer-GstStream.html#gst-stream-get-stream-id" since="1.10"/>
+    <keyword type="function" name="gst_stream_get_stream_type ()" link="gstreamer-GstStream.html#gst-stream-get-stream-type" since="1.10"/>
+    <keyword type="function" name="gst_stream_get_tags ()" link="gstreamer-GstStream.html#gst-stream-get-tags" since="1.10"/>
+    <keyword type="function" name="gst_stream_set_caps ()" link="gstreamer-GstStream.html#gst-stream-set-caps" since="1.10"/>
+    <keyword type="function" name="gst_stream_set_stream_flags ()" link="gstreamer-GstStream.html#gst-stream-set-stream-flags" since="1.10"/>
+    <keyword type="function" name="gst_stream_set_stream_type ()" link="gstreamer-GstStream.html#gst-stream-set-stream-type" since="1.10"/>
+    <keyword type="function" name="gst_stream_set_tags ()" link="gstreamer-GstStream.html#gst-stream-set-tags" since="1.10"/>
+    <keyword type="function" name="gst_stream_type_get_name ()" link="gstreamer-GstStream.html#gst-stream-type-get-name" since="1.10"/>
+    <keyword type="struct" name="struct GstStream" link="gstreamer-GstStream.html#GstStream"/>
+    <keyword type="struct" name="struct GstStreamClass" link="gstreamer-GstStream.html#GstStreamClass"/>
+    <keyword type="enum" name="enum GstStreamType" link="gstreamer-GstStream.html#GstStreamType"/>
+    <keyword type="function" name="gst_stream_collection_new ()" link="gstreamer-GstStreamCollection.html#gst-stream-collection-new" since="1.10"/>
+    <keyword type="function" name="gst_stream_collection_add_stream ()" link="gstreamer-GstStreamCollection.html#gst-stream-collection-add-stream" since="1.10"/>
+    <keyword type="function" name="gst_stream_collection_get_upstream_id ()" link="gstreamer-GstStreamCollection.html#gst-stream-collection-get-upstream-id" since="1.10"/>
+    <keyword type="function" name="gst_stream_collection_get_size ()" link="gstreamer-GstStreamCollection.html#gst-stream-collection-get-size" since="1.10"/>
+    <keyword type="function" name="gst_stream_collection_get_stream ()" link="gstreamer-GstStreamCollection.html#gst-stream-collection-get-stream" since="1.10"/>
+    <keyword type="struct" name="struct GstStreamCollection" link="gstreamer-GstStreamCollection.html#GstStreamCollection" since="1.10"/>
+    <keyword type="struct" name="struct GstStreamCollectionClass" link="gstreamer-GstStreamCollection.html#GstStreamCollectionClass"/>
     <keyword type="function" name="GstStructureForeachFunc ()" link="GstStructure.html#GstStructureForeachFunc"/>
     <keyword type="function" name="GstStructureMapFunc ()" link="GstStructure.html#GstStructureMapFunc"/>
     <keyword type="function" name="GstStructureFilterMapFunc ()" link="GstStructure.html#GstStructureFilterMapFunc"/>
@@ -2485,9 +2553,11 @@
     <keyword type="constant" name="GST_EVENT_STREAM_START" link="GstEvent.html#GST-EVENT-STREAM-START:CAPS"/>
     <keyword type="constant" name="GST_EVENT_CAPS" link="GstEvent.html#GST-EVENT-CAPS"/>
     <keyword type="constant" name="GST_EVENT_SEGMENT" link="GstEvent.html#GST-EVENT-SEGMENT:CAPS"/>
+    <keyword type="constant" name="GST_EVENT_STREAM_COLLECTION" link="GstEvent.html#GST-EVENT-STREAM-COLLECTION:CAPS"/>
     <keyword type="constant" name="GST_EVENT_TAG" link="GstEvent.html#GST-EVENT-TAG:CAPS"/>
     <keyword type="constant" name="GST_EVENT_BUFFERSIZE" link="GstEvent.html#GST-EVENT-BUFFERSIZE:CAPS"/>
     <keyword type="constant" name="GST_EVENT_SINK_MESSAGE" link="GstEvent.html#GST-EVENT-SINK-MESSAGE:CAPS"/>
+    <keyword type="constant" name="GST_EVENT_STREAM_GROUP_DONE" link="GstEvent.html#GST-EVENT-STREAM-GROUP-DONE:CAPS"/>
     <keyword type="constant" name="GST_EVENT_EOS" link="GstEvent.html#GST-EVENT-EOS:CAPS"/>
     <keyword type="constant" name="GST_EVENT_TOC" link="GstEvent.html#GST-EVENT-TOC:CAPS"/>
     <keyword type="constant" name="GST_EVENT_PROTECTION" link="GstEvent.html#GST-EVENT-PROTECTION:CAPS"/>
@@ -2500,6 +2570,7 @@
     <keyword type="constant" name="GST_EVENT_STEP" link="GstEvent.html#GST-EVENT-STEP:CAPS"/>
     <keyword type="constant" name="GST_EVENT_RECONFIGURE" link="GstEvent.html#GST-EVENT-RECONFIGURE:CAPS"/>
     <keyword type="constant" name="GST_EVENT_TOC_SELECT" link="GstEvent.html#GST-EVENT-TOC-SELECT:CAPS"/>
+    <keyword type="constant" name="GST_EVENT_SELECT_STREAMS" link="GstEvent.html#GST-EVENT-SELECT-STREAMS:CAPS"/>
     <keyword type="constant" name="GST_EVENT_CUSTOM_UPSTREAM" link="GstEvent.html#GST-EVENT-CUSTOM-UPSTREAM:CAPS"/>
     <keyword type="constant" name="GST_EVENT_CUSTOM_DOWNSTREAM" link="GstEvent.html#GST-EVENT-CUSTOM-DOWNSTREAM:CAPS"/>
     <keyword type="constant" name="GST_EVENT_CUSTOM_DOWNSTREAM_OOB" link="GstEvent.html#GST-EVENT-CUSTOM-DOWNSTREAM-OOB:CAPS"/>
@@ -2586,6 +2657,10 @@
     <keyword type="constant" name="GST_MESSAGE_EXTENDED" link="GstMessage.html#GST-MESSAGE-EXTENDED:CAPS"/>
     <keyword type="constant" name="GST_MESSAGE_DEVICE_ADDED" link="GstMessage.html#GST-MESSAGE-DEVICE-ADDED:CAPS"/>
     <keyword type="constant" name="GST_MESSAGE_DEVICE_REMOVED" link="GstMessage.html#GST-MESSAGE-DEVICE-REMOVED:CAPS"/>
+    <keyword type="constant" name="GST_MESSAGE_PROPERTY_NOTIFY" link="GstMessage.html#GST-MESSAGE-PROPERTY-NOTIFY:CAPS"/>
+    <keyword type="constant" name="GST_MESSAGE_STREAM_COLLECTION" link="GstMessage.html#GST-MESSAGE-STREAM-COLLECTION:CAPS"/>
+    <keyword type="constant" name="GST_MESSAGE_STREAMS_SELECTED" link="GstMessage.html#GST-MESSAGE-STREAMS-SELECTED:CAPS"/>
+    <keyword type="constant" name="GST_MESSAGE_REDIRECT" link="GstMessage.html#GST-MESSAGE-REDIRECT:CAPS"/>
     <keyword type="constant" name="GST_MESSAGE_ANY" link="GstMessage.html#GST-MESSAGE-ANY:CAPS"/>
     <keyword type="constant" name="GST_STRUCTURE_CHANGE_TYPE_PAD_LINK" link="GstMessage.html#GST-STRUCTURE-CHANGE-TYPE-PAD-LINK:CAPS"/>
     <keyword type="constant" name="GST_STRUCTURE_CHANGE_TYPE_PAD_UNLINK" link="GstMessage.html#GST-STRUCTURE-CHANGE-TYPE-PAD-UNLINK:CAPS"/>
@@ -2608,11 +2683,13 @@
     <keyword type="constant" name="GST_META_FLAG_LAST" link="gstreamer-GstMeta.html#GST-META-FLAG-LAST:CAPS"/>
     <keyword type="constant" name="GST_MINI_OBJECT_FLAG_LOCKABLE" link="gstreamer-GstMiniObject.html#GST-MINI-OBJECT-FLAG-LOCKABLE:CAPS"/>
     <keyword type="constant" name="GST_MINI_OBJECT_FLAG_LOCK_READONLY" link="gstreamer-GstMiniObject.html#GST-MINI-OBJECT-FLAG-LOCK-READONLY:CAPS"/>
+    <keyword type="constant" name="GST_MINI_OBJECT_FLAG_MAY_BE_LEAKED" link="gstreamer-GstMiniObject.html#GST-MINI-OBJECT-FLAG-MAY-BE-LEAKED:CAPS"/>
     <keyword type="constant" name="GST_MINI_OBJECT_FLAG_LAST" link="gstreamer-GstMiniObject.html#GST-MINI-OBJECT-FLAG-LAST:CAPS"/>
     <keyword type="constant" name="GST_LOCK_FLAG_READ" link="gstreamer-GstMiniObject.html#GST-LOCK-FLAG-READ:CAPS"/>
     <keyword type="constant" name="GST_LOCK_FLAG_WRITE" link="gstreamer-GstMiniObject.html#GST-LOCK-FLAG-WRITE:CAPS"/>
     <keyword type="constant" name="GST_LOCK_FLAG_EXCLUSIVE" link="gstreamer-GstMiniObject.html#GST-LOCK-FLAG-EXCLUSIVE:CAPS"/>
     <keyword type="constant" name="GST_LOCK_FLAG_LAST" link="gstreamer-GstMiniObject.html#GST-LOCK-FLAG-LAST:CAPS"/>
+    <keyword type="constant" name="GST_OBJECT_FLAG_MAY_BE_LEAKED" link="GstObject.html#GST-OBJECT-FLAG-MAY-BE-LEAKED:CAPS"/>
     <keyword type="constant" name="GST_OBJECT_FLAG_LAST" link="GstObject.html#GST-OBJECT-FLAG-LAST:CAPS"/>
     <keyword type="constant" name="GST_PAD_UNKNOWN" link="GstPad.html#GST-PAD-UNKNOWN:CAPS"/>
     <keyword type="constant" name="GST_PAD_SRC" link="GstPad.html#GST-PAD-SRC:CAPS"/>
@@ -2701,6 +2778,7 @@
     <keyword type="constant" name="GST_PARSE_FLAG_NONE" link="gstreamer-GstParse.html#GST-PARSE-FLAG-NONE:CAPS"/>
     <keyword type="constant" name="GST_PARSE_FLAG_FATAL_ERRORS" link="gstreamer-GstParse.html#GST-PARSE-FLAG-FATAL-ERRORS:CAPS"/>
     <keyword type="constant" name="GST_PARSE_FLAG_NO_SINGLE_ELEMENT_BINS" link="gstreamer-GstParse.html#GST-PARSE-FLAG-NO-SINGLE-ELEMENT-BINS:CAPS"/>
+    <keyword type="constant" name="GST_PARSE_FLAG_PLACE_IN_BIN" link="gstreamer-GstParse.html#GST-PARSE-FLAG-PLACE-IN-BIN:CAPS"/>
     <keyword type="constant" name="GST_PIPELINE_FLAG_FIXED_CLOCK" link="GstPipeline.html#GST-PIPELINE-FLAG-FIXED-CLOCK:CAPS"/>
     <keyword type="constant" name="GST_PIPELINE_FLAG_LAST" link="GstPipeline.html#GST-PIPELINE-FLAG-LAST:CAPS"/>
     <keyword type="constant" name="GST_PLUGIN_ERROR_MODULE" link="GstPlugin.html#GST-PLUGIN-ERROR-MODULE:CAPS"/>
@@ -2753,6 +2831,11 @@
     <keyword type="constant" name="GST_SEGMENT_FLAG_SEGMENT" link="GstSegment.html#GST-SEGMENT-FLAG-SEGMENT:CAPS"/>
     <keyword type="constant" name="GST_SEGMENT_FLAG_TRICKMODE_KEY_UNITS" link="GstSegment.html#GST-SEGMENT-FLAG-TRICKMODE-KEY-UNITS:CAPS"/>
     <keyword type="constant" name="GST_SEGMENT_FLAG_TRICKMODE_NO_AUDIO" link="GstSegment.html#GST-SEGMENT-FLAG-TRICKMODE-NO-AUDIO:CAPS"/>
+    <keyword type="constant" name="GST_STREAM_TYPE_UNKNOWN" link="gstreamer-GstStream.html#GST-STREAM-TYPE-UNKNOWN:CAPS"/>
+    <keyword type="constant" name="GST_STREAM_TYPE_AUDIO" link="gstreamer-GstStream.html#GST-STREAM-TYPE-AUDIO:CAPS"/>
+    <keyword type="constant" name="GST_STREAM_TYPE_VIDEO" link="gstreamer-GstStream.html#GST-STREAM-TYPE-VIDEO:CAPS"/>
+    <keyword type="constant" name="GST_STREAM_TYPE_CONTAINER" link="gstreamer-GstStream.html#GST-STREAM-TYPE-CONTAINER:CAPS"/>
+    <keyword type="constant" name="GST_STREAM_TYPE_TEXT" link="gstreamer-GstStream.html#GST-STREAM-TYPE-TEXT:CAPS"/>
     <keyword type="constant" name="GST_CLOCK_TYPE_REALTIME" link="GstSystemClock.html#GST-CLOCK-TYPE-REALTIME:CAPS"/>
     <keyword type="constant" name="GST_CLOCK_TYPE_MONOTONIC" link="GstSystemClock.html#GST-CLOCK-TYPE-MONOTONIC:CAPS"/>
     <keyword type="constant" name="GST_CLOCK_TYPE_OTHER" link="GstSystemClock.html#GST-CLOCK-TYPE-OTHER:CAPS"/>
@@ -2875,6 +2958,8 @@
     <keyword type="member" name="GstBinClass.add-element" link="GstBin.html#GstBinClass.add-element"/>
     <keyword type="member" name="GstBinClass.remove-element" link="GstBin.html#GstBinClass.remove-element"/>
     <keyword type="member" name="GstBinClass.handle-message" link="GstBin.html#GstBinClass.handle-message"/>
+    <keyword type="member" name="GstBinClass.deep-element-added" link="GstBin.html#GstBinClass.deep-element-added"/>
+    <keyword type="member" name="GstBinClass.deep-element-removed" link="GstBin.html#GstBinClass.deep-element-removed"/>
     <keyword type="member" name="GstBuffer-struct.mini-object" link="GstBuffer.html#GstBuffer-struct.mini-object"/>
     <keyword type="member" name="GstBuffer-struct.pool" link="GstBuffer.html#GstBuffer-struct.pool"/>
     <keyword type="member" name="GstBuffer-struct.pts" link="GstBuffer.html#GstBuffer-struct.pts"/>
@@ -3068,6 +3153,9 @@
     <keyword type="member" name="GstSegment-struct.time" link="GstSegment.html#GstSegment-struct.time"/>
     <keyword type="member" name="GstSegment-struct.position" link="GstSegment.html#GstSegment-struct.position"/>
     <keyword type="member" name="GstSegment-struct.duration" link="GstSegment.html#GstSegment-struct.duration"/>
+    <keyword type="member" name="GstStream.object" link="gstreamer-GstStream.html#GstStream.object"/>
+    <keyword type="member" name="GstStream.stream-id" link="gstreamer-GstStream.html#GstStream.stream-id"/>
+    <keyword type="member" name="GstStreamCollectionClass.stream-notify" link="gstreamer-GstStreamCollection.html#GstStreamCollectionClass.stream-notify"/>
     <keyword type="member" name="GstStructure-struct.type" link="GstStructure.html#GstStructure-struct.type"/>
     <keyword type="member" name="GstTagList-struct.mini-object" link="GstTagList.html#GstTagList-struct.mini-object"/>
     <keyword type="member" name="GstTask-struct.state" link="GstTask.html#GstTask-struct.state"/>
diff --git a/docs/gst/html/gstreamer-GstConfig.html b/docs/gst/html/gstreamer-GstConfig.html
index 709e232..1fd8118 100644
--- a/docs/gst/html/gstreamer-GstConfig.html
+++ b/docs/gst/html/gstreamer-GstConfig.html
@@ -49,14 +49,6 @@
 </tr>
 <tr>
 <td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="gstreamer-GstConfig.html#GST-DISABLE-TRACE:CAPS" title="GST_DISABLE_TRACE">GST_DISABLE_TRACE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="gstreamer-GstConfig.html#GST-DISABLE-ALLOC-TRACE:CAPS" title="GST_DISABLE_ALLOC_TRACE">GST_DISABLE_ALLOC_TRACE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
 <td class="function_name"><a class="link" href="gstreamer-GstConfig.html#GST-DISABLE-REGISTRY:CAPS" title="GST_DISABLE_REGISTRY">GST_DISABLE_REGISTRY</a></td>
 </tr>
 <tr>
@@ -125,22 +117,6 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="GST-DISABLE-TRACE:CAPS"></a><h3>GST_DISABLE_TRACE</h3>
-<pre class="programlisting">#define GST_DISABLE_TRACE 1
-</pre>
-<p>Configures the inclusion of a resource tracing facility
-(seems to be unused)</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GST-DISABLE-ALLOC-TRACE:CAPS"></a><h3>GST_DISABLE_ALLOC_TRACE</h3>
-<pre class="programlisting">#define GST_DISABLE_ALLOC_TRACE 1
-</pre>
-<p>Configures the use of a memory tracer based on the resource tracer
-if TRACE is disabled, ALLOC_TRACE is disabled as well</p>
-</div>
-<hr>
-<div class="refsect2">
 <a name="GST-DISABLE-REGISTRY:CAPS"></a><h3>GST_DISABLE_REGISTRY</h3>
 <pre class="programlisting">#define GST_DISABLE_REGISTRY 1
 </pre>
diff --git a/docs/gst/html/gstreamer-GstDevice.html b/docs/gst/html/gstreamer-GstDevice.html
index 0ccc7a2..f86397c 100644
--- a/docs/gst/html/gstreamer-GstDevice.html
+++ b/docs/gst/html/gstreamer-GstDevice.html
@@ -145,7 +145,7 @@
 <pre class="programlisting"><a class="link" href="GstElement.html" title="GstElement"><span class="returnvalue">GstElement</span></a> *
 gst_device_create_element (<em class="parameter"><code><a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a> *device</code></em>,
                            <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
-<p>Creates the element with all of the required paramaters set to use
+<p>Creates the element with all of the required parameters set to use
 this device.</p>
 <div class="refsect3">
 <a name="gst-device-create-element.parameters"></a><h4>Parameters</h4>
diff --git a/docs/gst/html/gstreamer-GstDeviceMonitor.html b/docs/gst/html/gstreamer-GstDeviceMonitor.html
index bf3c8bd..e2e88dc 100644
--- a/docs/gst/html/gstreamer-GstDeviceMonitor.html
+++ b/docs/gst/html/gstreamer-GstDeviceMonitor.html
@@ -230,7 +230,9 @@
 43
 44
 45
-46</pre></td>
+46
+47
+48</pre></td>
         <td class="listing_code"><pre class="programlisting"><span class="gtkdoc kwb">static</span> gboolean
 <span class="function">my_bus_func</span> <span class="gtkdoc opt">(</span>GstBus <span class="gtkdoc opt">*</span> bus<span class="gtkdoc opt">,</span> GstMessage <span class="gtkdoc opt">*</span> message<span class="gtkdoc opt">,</span> gpointer user_data<span class="gtkdoc opt">)</span>
 <span class="gtkdoc opt">{</span>
@@ -243,12 +245,14 @@
        name <span class="gtkdoc opt">=</span> <span class="function"><a href="gstreamer-GstDevice.html#gst-device-get-display-name">gst_device_get_display_name</a></span> <span class="gtkdoc opt">(</span>device<span class="gtkdoc opt">);</span>
        <span class="function"><a href="/usr/share/gtk-doc/html/glibglib-Warnings-and-Assertions.html#g-print">g_print</a></span><span class="gtkdoc opt">(</span><span class="string">&quot;Device added: %s</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span> name<span class="gtkdoc opt">);</span>
        <span class="function"><a href="/usr/share/gtk-doc/html/glibglib-Memory-Allocation.html#g-free">g_free</a></span> <span class="gtkdoc opt">(</span>name<span class="gtkdoc opt">);</span>
+       <span class="function"><a href="GstObject.html#gst-object-unref">gst_object_unref</a></span> <span class="gtkdoc opt">(</span>device<span class="gtkdoc opt">);</span>
        <span class="keyword">break</span><span class="gtkdoc opt">;</span>
      <span class="keyword">case</span> GST_MESSAGE_DEVICE_REMOVED<span class="gtkdoc opt">:</span>
        <span class="function"><a href="GstMessage.html#gst-message-parse-device-removed">gst_message_parse_device_removed</a></span> <span class="gtkdoc opt">(</span>message<span class="gtkdoc opt">, &amp;</span>device<span class="gtkdoc opt">);</span>
        name <span class="gtkdoc opt">=</span> <span class="function"><a href="gstreamer-GstDevice.html#gst-device-get-display-name">gst_device_get_display_name</a></span> <span class="gtkdoc opt">(</span>device<span class="gtkdoc opt">);</span>
        <span class="function"><a href="/usr/share/gtk-doc/html/glibglib-Warnings-and-Assertions.html#g-print">g_print</a></span><span class="gtkdoc opt">(</span><span class="string">&quot;Device removed: %s</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span> name<span class="gtkdoc opt">);</span>
        <span class="function"><a href="/usr/share/gtk-doc/html/glibglib-Memory-Allocation.html#g-free">g_free</a></span> <span class="gtkdoc opt">(</span>name<span class="gtkdoc opt">);</span>
+       <span class="function"><a href="GstObject.html#gst-object-unref">gst_object_unref</a></span> <span class="gtkdoc opt">(</span>device<span class="gtkdoc opt">);</span>
        <span class="keyword">break</span><span class="gtkdoc opt">;</span>
      <span class="keyword">default</span><span class="gtkdoc opt">:</span>
        <span class="keyword">break</span><span class="gtkdoc opt">;</span>
diff --git a/docs/gst/html/gstreamer-GstInfo.html b/docs/gst/html/gstreamer-GstInfo.html
index fb6694c..1f15cf1 100644
--- a/docs/gst/html/gstreamer-GstInfo.html
+++ b/docs/gst/html/gstreamer-GstInfo.html
@@ -1195,8 +1195,9 @@
 </colgroup>
 <tbody><tr>
 <td class="parameter_name"><p>func</p></td>
-<td class="parameter_description"><p> the log function to remove. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid only during the call to the method."><span class="acronym">scope call</span></acronym>]</span></td>
+<td class="parameter_description"><p> the log function to remove, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> to
+remove the default log function. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid only during the call to the method."><span class="acronym">scope call</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
 </tr></tbody>
 </table></div>
 </div>
@@ -3792,15 +3793,25 @@
 <a name="GST-PTR-FORMAT:CAPS"></a><h3>GST_PTR_FORMAT</h3>
 <pre class="programlisting">#define GST_PTR_FORMAT     "p\aA"
 </pre>
-<p>printf format type used to debug GStreamer types.
-This can only be used on types whose size is &gt;= sizeof(gpointer).</p>
+<p>printf format type used to debug GStreamer types. You can use this in
+combination with GStreamer's debug logging system as well as the functions
+<a class="link" href="gstreamer-GstInfo.html#gst-info-vasprintf" title="gst_info_vasprintf ()"><code class="function">gst_info_vasprintf()</code></a>, <a class="link" href="gstreamer-GstInfo.html#gst-info-strdup-vprintf" title="gst_info_strdup_vprintf ()"><code class="function">gst_info_strdup_vprintf()</code></a> and <a class="link" href="gstreamer-GstInfo.html#gst-info-strdup-printf" title="gst_info_strdup_printf ()"><code class="function">gst_info_strdup_printf()</code></a>
+to pretty-print the following types: <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a>, <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a>,
+<a class="link" href="GstCapsFeatures.html" title="GstCapsFeatures"><span class="type">GstCapsFeatures</span></a>, <a class="link" href="GstTagList.html" title="GstTagList"><span class="type">GstTagList</span></a>, <a class="link" href="GstDateTime.html" title="GstDateTime"><span class="type">GstDateTime</span></a>, <a class="link" href="GstBuffer.html" title="GstBuffer"><span class="type">GstBuffer</span></a>, <a class="link" href="GstBufferList.html" title="GstBufferList"><span class="type">GstBufferList</span></a>,
+<a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a>, <a class="link" href="GstEvent.html" title="GstEvent"><span class="type">GstEvent</span></a>, <a class="link" href="GstQuery.html" title="GstQuery"><span class="type">GstQuery</span></a>, <a class="link" href="GstContext.html" title="GstContext"><span class="type">GstContext</span></a>, <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a>, <a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a>. All
+<a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct"><span class="type">GObject</span></a> types will be printed as typename plus pointer, and everything
+else will simply be printed as pointer address.</p>
+<p>This can only be used on types whose size is &gt;= sizeof(gpointer).</p>
 </div>
 <hr>
 <div class="refsect2">
 <a name="GST-SEGMENT-FORMAT:CAPS"></a><h3>GST_SEGMENT_FORMAT</h3>
 <pre class="programlisting">#define GST_SEGMENT_FORMAT "p\aB"
 </pre>
-<p>printf format type used to debug GStreamer segments.
+<p>printf format type used to debug GStreamer segments. You can use this in
+combination with GStreamer's debug logging system as well as the functions
+<a class="link" href="gstreamer-GstInfo.html#gst-info-vasprintf" title="gst_info_vasprintf ()"><code class="function">gst_info_vasprintf()</code></a>, <a class="link" href="gstreamer-GstInfo.html#gst-info-strdup-vprintf" title="gst_info_strdup_vprintf ()"><code class="function">gst_info_strdup_vprintf()</code></a> and <a class="link" href="gstreamer-GstInfo.html#gst-info-strdup-printf" title="gst_info_strdup_printf ()"><code class="function">gst_info_strdup_printf()</code></a>
+to pretty-print <a class="link" href="GstSegment.html" title="GstSegment"><span class="type">GstSegment</span></a> structures.
 This can only be used on pointers to GstSegment structures.</p>
 </div>
 </div>
diff --git a/docs/gst/html/gstreamer-GstMiniObject.html b/docs/gst/html/gstreamer-GstMiniObject.html
index e5170c1..34999bc 100644
--- a/docs/gst/html/gstreamer-GstMiniObject.html
+++ b/docs/gst/html/gstreamer-GstMiniObject.html
@@ -1360,6 +1360,15 @@
 <td class="enum_member_annotations"> </td>
 </tr>
 <tr>
+<td class="enum_member_name"><p><a name="GST-MINI-OBJECT-FLAG-MAY-BE-LEAKED:CAPS"></a>GST_MINI_OBJECT_FLAG_MAY_BE_LEAKED</p></td>
+<td class="enum_member_description">
+<p>the object is expected to stay alive
+even after <a class="link" href="gstreamer-Gst.html#gst-deinit" title="gst_deinit ()"><code class="function">gst_deinit()</code></a> has been called and so should be ignored by leak
+detection tools. (Since 1.10)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
 <td class="enum_member_name"><p><a name="GST-MINI-OBJECT-FLAG-LAST:CAPS"></a>GST_MINI_OBJECT_FLAG_LAST</p></td>
 <td class="enum_member_description">
 <p>first flag that can be used by subclasses.</p>
diff --git a/docs/gst/html/gstreamer-GstParse.html b/docs/gst/html/gstreamer-GstParse.html
index a099992..a4d7080 100644
--- a/docs/gst/html/gstreamer-GstParse.html
+++ b/docs/gst/html/gstreamer-GstParse.html
@@ -274,7 +274,9 @@
 <p> a new element on success, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on failure. If
 more than one toplevel element is specified by the <em class="parameter"><code>pipeline_description</code></em>
 ,
-all elements are put into a <a class="link" href="GstPipeline.html" title="GstPipeline"><span class="type">GstPipeline</span></a>, which then is returned. </p>
+all elements are put into a <a class="link" href="GstPipeline.html" title="GstPipeline"><span class="type">GstPipeline</span></a>, which then is returned (unless
+the GST_PARSE_FLAG_PLACE_IN_BIN flag is set, in which case they are put
+in a <a class="link" href="GstBin.html" title="GstBin"><span class="type">GstBin</span></a> instead). </p>
 <p><span class="annotation">[<acronym title="Alias for transfer none, used for objects with floating refs."><span class="acronym">transfer floating</span></acronym>]</span></p>
 </div>
 </div>
@@ -683,6 +685,15 @@
 </td>
 <td class="enum_member_annotations"> </td>
 </tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-PARSE-FLAG-PLACE-IN-BIN:CAPS"></a>GST_PARSE_FLAG_PLACE_IN_BIN</p></td>
+<td class="enum_member_description">
+<p>If more than one toplevel element is described
+    by the pipeline description string, put them in a <a class="link" href="GstBin.html" title="GstBin"><span class="type">GstBin</span></a> instead of a
+    <a class="link" href="GstPipeline.html" title="GstPipeline"><span class="type">GstPipeline</span></a>. (Since 1.10)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
 </tbody>
 </table></div>
 </div>
diff --git a/docs/gst/html/gstreamer-GstPoll.html b/docs/gst/html/gstreamer-GstPoll.html
index 5b7ba83..a2a08db 100644
--- a/docs/gst/html/gstreamer-GstPoll.html
+++ b/docs/gst/html/gstreamer-GstPoll.html
@@ -731,6 +731,8 @@
 .</p>
 <p>If <em class="parameter"><code>set</code></em>
  is not controllable, then this call will have no effect.</p>
+<p>This function only works for non-timer <a class="link" href="gstreamer-GstPoll.html#GstPoll" title="GstPoll"><span class="type">GstPoll</span></a> objects created with
+<a class="link" href="gstreamer-GstPoll.html#gst-poll-new" title="gst_poll_new ()"><code class="function">gst_poll_new()</code></a>.</p>
 <div class="refsect3">
 <a name="gst-poll-restart.parameters"></a><h4>Parameters</h4>
 <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -757,6 +759,8 @@
  is <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, this function ensures that future calls to
 <a class="link" href="gstreamer-GstPoll.html#gst-poll-wait" title="gst_poll_wait ()"><code class="function">gst_poll_wait()</code></a> will be affected by <a class="link" href="gstreamer-GstPoll.html#gst-poll-restart" title="gst_poll_restart ()"><code class="function">gst_poll_restart()</code></a> and
 <a class="link" href="gstreamer-GstPoll.html#gst-poll-set-flushing" title="gst_poll_set_flushing ()"><code class="function">gst_poll_set_flushing()</code></a>.</p>
+<p>This function only works for non-timer <a class="link" href="gstreamer-GstPoll.html#GstPoll" title="GstPoll"><span class="type">GstPoll</span></a> objects created with
+<a class="link" href="gstreamer-GstPoll.html#gst-poll-new" title="gst_poll_new ()"><code class="function">gst_poll_new()</code></a>.</p>
 <div class="refsect3">
 <a name="gst-poll-set-controllable.parameters"></a><h4>Parameters</h4>
 <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -796,6 +800,8 @@
 to <a class="link" href="gstreamer-GstPoll.html#gst-poll-wait" title="gst_poll_wait ()"><code class="function">gst_poll_wait()</code></a> will return -1, with errno set to EBUSY.</p>
 <p>Unsetting the flushing state will restore normal operation of <em class="parameter"><code>set</code></em>
 .</p>
+<p>This function only works for non-timer <a class="link" href="gstreamer-GstPoll.html#GstPoll" title="GstPoll"><span class="type">GstPoll</span></a> objects created with
+<a class="link" href="gstreamer-GstPoll.html#gst-poll-new" title="gst_poll_new ()"><code class="function">gst_poll_new()</code></a>.</p>
 <div class="refsect3">
 <a name="gst-poll-set-flushing.parameters"></a><h4>Parameters</h4>
 <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -872,8 +878,8 @@
 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
 gst_poll_read_control (<em class="parameter"><code><a class="link" href="gstreamer-GstPoll.html#GstPoll" title="GstPoll"><span class="type">GstPoll</span></a> *set</code></em>);</pre>
 <p>Read a byte from the control socket of the controllable <em class="parameter"><code>set</code></em>
-.
-This function is mostly useful for timer <a class="link" href="gstreamer-GstPoll.html#GstPoll" title="GstPoll"><span class="type">GstPoll</span></a> objects created with
+.</p>
+<p>This function only works for timer <a class="link" href="gstreamer-GstPoll.html#GstPoll" title="GstPoll"><span class="type">GstPoll</span></a> objects created with
 <a class="link" href="gstreamer-GstPoll.html#gst-poll-new-timer" title="gst_poll_new_timer ()"><code class="function">gst_poll_new_timer()</code></a>.</p>
 <div class="refsect3">
 <a name="gst-poll-read-control.parameters"></a><h4>Parameters</h4>
@@ -892,9 +898,10 @@
 </div>
 <div class="refsect3">
 <a name="gst-poll-read-control.returns"></a><h4>Returns</h4>
-<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> on success. <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> when <em class="parameter"><code>set</code></em>
-is not controllable or when there
-was no byte to read.</p>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> on success. <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> when when there was no byte to read or
+reading the byte failed. If there was no byte to read, and only then, errno
+will contain EWOULDBLOCK or EAGAIN. For all other values of errno this always signals a
+critical error.</p>
 </div>
 </div>
 <hr>
@@ -910,6 +917,8 @@
 1, meaning the control socket is set. After an equal amount of calls to
 <a class="link" href="gstreamer-GstPoll.html#gst-poll-read-control" title="gst_poll_read_control ()"><code class="function">gst_poll_read_control()</code></a> have been performed, calls to <a class="link" href="gstreamer-GstPoll.html#gst-poll-wait" title="gst_poll_wait ()"><code class="function">gst_poll_wait()</code></a> will
 block again until their timeout expired.</p>
+<p>This function only works for timer <a class="link" href="gstreamer-GstPoll.html#GstPoll" title="GstPoll"><span class="type">GstPoll</span></a> objects created with
+<a class="link" href="gstreamer-GstPoll.html#gst-poll-new-timer" title="gst_poll_new_timer ()"><code class="function">gst_poll_new_timer()</code></a>.</p>
 <div class="refsect3">
 <a name="gst-poll-write-control.parameters"></a><h4>Parameters</h4>
 <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -927,9 +936,9 @@
 </div>
 <div class="refsect3">
 <a name="gst-poll-write-control.returns"></a><h4>Returns</h4>
-<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> on success. <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> when <em class="parameter"><code>set</code></em>
-is not controllable or when the
-byte could not be written.</p>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> on success. <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> when when the byte could not be written.
+errno contains the detailed error code but will never be EAGAIN, EINTR or
+EWOULDBLOCK. <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> always signals a critical error.</p>
 </div>
 </div>
 </div>
diff --git a/docs/gst/html/gstreamer-GstStream.html b/docs/gst/html/gstreamer-GstStream.html
new file mode 100644
index 0000000..7aa66a9
--- /dev/null
+++ b/docs/gst/html/gstreamer-GstStream.html
@@ -0,0 +1,653 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GstStream: GStreamer 1.0 Core Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer 1.0 Core Reference Manual">
+<link rel="up" href="libgstreamer.html" title="GStreamer Core Library">
+<link rel="prev" href="GstSegment.html" title="GstSegment">
+<link rel="next" href="gstreamer-GstStreamCollection.html" title="GstStreamCollection">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#gstreamer-GstStream.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="libgstreamer.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="GstSegment.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gstreamer-GstStreamCollection.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gstreamer-GstStream"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gstreamer-GstStream.top_of_page"></a>GstStream</span></h2>
+<p>GstStream — Base class for stream objects</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gstreamer-GstStream.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="returnvalue">GstStream</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstStream.html#gst-stream-new" title="gst_stream_new ()">gst_stream_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="GstCaps.html" title="GstCaps"><span class="returnvalue">GstCaps</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstStream.html#gst-stream-get-caps" title="gst_stream_get_caps ()">gst_stream_get_caps</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="GstEvent.html#GstStreamFlags" title="enum GstStreamFlags"><span class="returnvalue">GstStreamFlags</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstStream.html#gst-stream-get-stream-flags" title="gst_stream_get_stream_flags ()">gst_stream_get_stream_flags</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstStream.html#gst-stream-get-stream-id" title="gst_stream_get_stream_id ()">gst_stream_get_stream_id</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gstreamer-GstStream.html#GstStreamType" title="enum GstStreamType"><span class="returnvalue">GstStreamType</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstStream.html#gst-stream-get-stream-type" title="gst_stream_get_stream_type ()">gst_stream_get_stream_type</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="GstTagList.html" title="GstTagList"><span class="returnvalue">GstTagList</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstStream.html#gst-stream-get-tags" title="gst_stream_get_tags ()">gst_stream_get_tags</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstStream.html#gst-stream-set-caps" title="gst_stream_set_caps ()">gst_stream_set_caps</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstStream.html#gst-stream-set-stream-flags" title="gst_stream_set_stream_flags ()">gst_stream_set_stream_flags</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstStream.html#gst-stream-set-stream-type" title="gst_stream_set_stream_type ()">gst_stream_set_stream_type</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstStream.html#gst-stream-set-tags" title="gst_stream_set_tags ()">gst_stream_set_tags</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstStream.html#gst-stream-type-get-name" title="gst_stream_type_get_name ()">gst_stream_type_get_name</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gstreamer-GstStream.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream">GstStream</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gstreamer-GstStream.html#GstStreamClass" title="struct GstStreamClass">GstStreamClass</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gstreamer-GstStream.html#GstStreamType" title="enum GstStreamType">GstStreamType</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gstreamer-GstStream.includes"></a><h2>Includes</h2>
+<pre class="synopsis">#include &lt;gst/gst.h&gt;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gstreamer-GstStream.description"></a><h2>Description</h2>
+<p>A <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> is a high-level object defining a stream of data which is, or
+can be, present in a <a class="link" href="GstPipeline.html" title="GstPipeline"><span class="type">GstPipeline</span></a>.</p>
+<p>It is defined by a unique identifier, a "Stream ID". A <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> does not
+automatically imply the stream is present within a pipeline or element.</p>
+<p>Any element that can introduce new streams in a pipeline should create the
+appropriate <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> object, and can convey that object via the
+<a class="link" href="GstEvent.html#GST-EVENT-STREAM-START:CAPS"><code class="literal">GST_EVENT_STREAM_START</code></a> event and/or the <a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a>.</p>
+<p>Elements that do not modify the nature of the stream can add extra information
+on it (such as enrich the <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a>, or <a class="link" href="GstTagList.html" title="GstTagList"><span class="type">GstTagList</span></a>). This is typically done
+by parsing elements.</p>
+</div>
+<div class="refsect1">
+<a name="gstreamer-GstStream.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="gst-stream-new"></a><h3>gst_stream_new ()</h3>
+<pre class="programlisting"><a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="returnvalue">GstStream</span></a> *
+gst_stream_new (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *stream_id</code></em>,
+                <em class="parameter"><code><a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>,
+                <em class="parameter"><code><a class="link" href="gstreamer-GstStream.html#GstStreamType" title="enum GstStreamType"><span class="type">GstStreamType</span></a> type</code></em>,
+                <em class="parameter"><code><a class="link" href="GstEvent.html#GstStreamFlags" title="enum GstStreamFlags"><span class="type">GstStreamFlags</span></a> flags</code></em>);</pre>
+<p>Create a new <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> for the given <em class="parameter"><code>stream_id</code></em>
+, <em class="parameter"><code>caps</code></em>
+, <em class="parameter"><code>type</code></em>
+
+and <em class="parameter"><code>flags</code></em>
+</p>
+<div class="refsect3">
+<a name="gst-stream-new.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>stream_id</p></td>
+<td class="parameter_description"><p> the id for the new stream. If <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>,
+a new one will be automatically generated. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>caps</p></td>
+<td class="parameter_description"><p> the <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> of the stream. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>type</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gstreamer-GstStream.html#GstStreamType" title="enum GstStreamType"><span class="type">GstStreamType</span></a> of the stream</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>the <a class="link" href="GstEvent.html#GstStreamFlags" title="enum GstStreamFlags"><span class="type">GstStreamFlags</span></a> of the stream</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-stream-new.returns"></a><h4>Returns</h4>
+<p> The new <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a></p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-stream-get-caps"></a><h3>gst_stream_get_caps ()</h3>
+<pre class="programlisting"><a class="link" href="GstCaps.html" title="GstCaps"><span class="returnvalue">GstCaps</span></a> *
+gst_stream_get_caps (<em class="parameter"><code><a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> *stream</code></em>);</pre>
+<p>Retrieve the caps for <em class="parameter"><code>stream</code></em>
+, if any</p>
+<div class="refsect3">
+<a name="gst-stream-get-caps.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>stream</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-stream-get-caps.returns"></a><h4>Returns</h4>
+<p> The <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> for <em class="parameter"><code>stream</code></em>
+. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-stream-get-stream-flags"></a><h3>gst_stream_get_stream_flags ()</h3>
+<pre class="programlisting"><a class="link" href="GstEvent.html#GstStreamFlags" title="enum GstStreamFlags"><span class="returnvalue">GstStreamFlags</span></a>
+gst_stream_get_stream_flags (<em class="parameter"><code><a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> *stream</code></em>);</pre>
+<p>Retrieve the current stream flags for <em class="parameter"><code>stream</code></em>
+</p>
+<div class="refsect3">
+<a name="gst-stream-get-stream-flags.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>stream</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-stream-get-stream-flags.returns"></a><h4>Returns</h4>
+<p> The <a class="link" href="GstEvent.html#GstStreamFlags" title="enum GstStreamFlags"><span class="type">GstStreamFlags</span></a> for <em class="parameter"><code>stream</code></em>
+</p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-stream-get-stream-id"></a><h3>gst_stream_get_stream_id ()</h3>
+<pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_stream_get_stream_id (<em class="parameter"><code><a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> *stream</code></em>);</pre>
+<p>Returns the stream ID of <em class="parameter"><code>stream</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-stream-get-stream-id.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>stream</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-stream-get-stream-id.returns"></a><h4>Returns</h4>
+<p> the stream ID of <em class="parameter"><code>stream</code></em>
+. Only valid
+during the lifetime of <em class="parameter"><code>stream</code></em>
+. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-stream-get-stream-type"></a><h3>gst_stream_get_stream_type ()</h3>
+<pre class="programlisting"><a class="link" href="gstreamer-GstStream.html#GstStreamType" title="enum GstStreamType"><span class="returnvalue">GstStreamType</span></a>
+gst_stream_get_stream_type (<em class="parameter"><code><a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> *stream</code></em>);</pre>
+<p>Retrieve the stream type for <em class="parameter"><code>stream</code></em>
+</p>
+<div class="refsect3">
+<a name="gst-stream-get-stream-type.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>stream</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-stream-get-stream-type.returns"></a><h4>Returns</h4>
+<p> The <a class="link" href="gstreamer-GstStream.html#GstStreamType" title="enum GstStreamType"><span class="type">GstStreamType</span></a> for <em class="parameter"><code>stream</code></em>
+</p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-stream-get-tags"></a><h3>gst_stream_get_tags ()</h3>
+<pre class="programlisting"><a class="link" href="GstTagList.html" title="GstTagList"><span class="returnvalue">GstTagList</span></a> *
+gst_stream_get_tags (<em class="parameter"><code><a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> *stream</code></em>);</pre>
+<p>Retrieve the tags for <em class="parameter"><code>stream</code></em>
+, if any</p>
+<div class="refsect3">
+<a name="gst-stream-get-tags.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>stream</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-stream-get-tags.returns"></a><h4>Returns</h4>
+<p> The <a class="link" href="GstTagList.html" title="GstTagList"><span class="type">GstTagList</span></a> for <em class="parameter"><code>stream</code></em>
+. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-stream-set-caps"></a><h3>gst_stream_set_caps ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_stream_set_caps (<em class="parameter"><code><a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> *stream</code></em>,
+                     <em class="parameter"><code><a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);</pre>
+<p>Set the caps for the <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a></p>
+<div class="refsect3">
+<a name="gst-stream-set-caps.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>stream</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>caps</p></td>
+<td class="parameter_description"><p> a <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-stream-set-stream-flags"></a><h3>gst_stream_set_stream_flags ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_stream_set_stream_flags (<em class="parameter"><code><a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> *stream</code></em>,
+                             <em class="parameter"><code><a class="link" href="GstEvent.html#GstStreamFlags" title="enum GstStreamFlags"><span class="type">GstStreamFlags</span></a> flags</code></em>);</pre>
+<p>Set the <em class="parameter"><code>flags</code></em>
+ for the <em class="parameter"><code>stream</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-stream-set-stream-flags.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>stream</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>the flags to set on <em class="parameter"><code>stream</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-stream-set-stream-type"></a><h3>gst_stream_set_stream_type ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_stream_set_stream_type (<em class="parameter"><code><a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> *stream</code></em>,
+                            <em class="parameter"><code><a class="link" href="gstreamer-GstStream.html#GstStreamType" title="enum GstStreamType"><span class="type">GstStreamType</span></a> stream_type</code></em>);</pre>
+<p>Set the stream type of <em class="parameter"><code>stream</code></em>
+</p>
+<div class="refsect3">
+<a name="gst-stream-set-stream-type.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>stream</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>stream_type</p></td>
+<td class="parameter_description"><p>the type to set on <em class="parameter"><code>stream</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-stream-set-tags"></a><h3>gst_stream_set_tags ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_stream_set_tags (<em class="parameter"><code><a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> *stream</code></em>,
+                     <em class="parameter"><code><a class="link" href="GstTagList.html" title="GstTagList"><span class="type">GstTagList</span></a> *tags</code></em>);</pre>
+<p>Set the tags for the <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a></p>
+<div class="refsect3">
+<a name="gst-stream-set-tags.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>stream</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>tags</p></td>
+<td class="parameter_description"><p> a <a class="link" href="GstTagList.html" title="GstTagList"><span class="type">GstTagList</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-stream-type-get-name"></a><h3>gst_stream_type_get_name ()</h3>
+<pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_stream_type_get_name (<em class="parameter"><code><a class="link" href="gstreamer-GstStream.html#GstStreamType" title="enum GstStreamType"><span class="type">GstStreamType</span></a> stype</code></em>);</pre>
+<p>Get a descriptive string for a given <a class="link" href="gstreamer-GstStream.html#GstStreamType" title="enum GstStreamType"><span class="type">GstStreamType</span></a></p>
+<div class="refsect3">
+<a name="gst-stream-type-get-name.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>stype</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-GstStream.html#GstStreamType" title="enum GstStreamType"><span class="type">GstStreamType</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-stream-type-get-name.returns"></a><h4>Returns</h4>
+<p> A string describing the stream type</p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gstreamer-GstStream.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstStream"></a><h3>struct GstStream</h3>
+<pre class="programlisting">struct GstStream {
+  GstObject object;
+
+  const gchar *stream_id;
+};
+</pre>
+<p>A high-level object representing a single stream. It might be backed, or
+not, by an actual flow of data in a pipeline (<a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a>).</p>
+<p>A <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> does not care about data changes (such as decoding, encoding,
+parsing,...) as long as the underlying data flow corresponds to the same
+high-level flow (ex: a certain audio track).</p>
+<p>A <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> contains all the information pertinent to a stream, such as
+stream-id, tags, caps, type, ...</p>
+<p>Elements can subclass a <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> for internal usage (to contain information
+pertinent to streams of data).</p>
+<div class="refsect3">
+<a name="GstStream.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> <em class="structfield"><code><a name="GstStream.object"></a>object</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstStream.stream-id"></a>stream_id</code></em>;</p></td>
+<td class="struct_member_description"><p>The Stream Identifier for this <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstStreamClass"></a><h3>struct GstStreamClass</h3>
+<pre class="programlisting">struct GstStreamClass {
+  GstObjectClass parent_class;
+};
+</pre>
+<p>GstStream class structure</p>
+<div class="refsect3">
+<a name="GstStreamClass.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody></tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstStreamType"></a><h3>enum GstStreamType</h3>
+<p><a class="link" href="gstreamer-GstStream.html#GstStreamType" title="enum GstStreamType"><span class="type">GstStreamType</span></a> describes a high level classification set for
+flows of data in <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> objects.</p>
+<div class="refsect3">
+<a name="GstStreamType.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-STREAM-TYPE-UNKNOWN:CAPS"></a>GST_STREAM_TYPE_UNKNOWN</p></td>
+<td class="enum_member_description">
+<p>The stream is of unknown (unclassified) type.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-STREAM-TYPE-AUDIO:CAPS"></a>GST_STREAM_TYPE_AUDIO</p></td>
+<td class="enum_member_description">
+<p>The stream is of audio data</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-STREAM-TYPE-VIDEO:CAPS"></a>GST_STREAM_TYPE_VIDEO</p></td>
+<td class="enum_member_description">
+<p>The stream carries video data</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-STREAM-TYPE-CONTAINER:CAPS"></a>GST_STREAM_TYPE_CONTAINER</p></td>
+<td class="enum_member_description">
+<p>The stream is a muxed container type</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-STREAM-TYPE-TEXT:CAPS"></a>GST_STREAM_TYPE_TEXT</p></td>
+<td class="enum_member_description">
+<p>The stream contains subtitle / subpicture data.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/gst/html/gstreamer-GstStreamCollection.html b/docs/gst/html/gstreamer-GstStreamCollection.html
new file mode 100644
index 0000000..2c515d7
--- /dev/null
+++ b/docs/gst/html/gstreamer-GstStreamCollection.html
@@ -0,0 +1,327 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GstStreamCollection: GStreamer 1.0 Core Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer 1.0 Core Reference Manual">
+<link rel="up" href="libgstreamer.html" title="GStreamer Core Library">
+<link rel="prev" href="gstreamer-GstStream.html" title="GstStream">
+<link rel="next" href="GstStructure.html" title="GstStructure">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#gstreamer-GstStreamCollection.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="libgstreamer.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gstreamer-GstStream.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="GstStructure.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gstreamer-GstStreamCollection"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gstreamer-GstStreamCollection.top_of_page"></a>GstStreamCollection</span></h2>
+<p>GstStreamCollection — Base class for collection of streams</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gstreamer-GstStreamCollection.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="returnvalue">GstStreamCollection</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstStreamCollection.html#gst-stream-collection-new" title="gst_stream_collection_new ()">gst_stream_collection_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstStreamCollection.html#gst-stream-collection-add-stream" title="gst_stream_collection_add_stream ()">gst_stream_collection_add_stream</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstStreamCollection.html#gst-stream-collection-get-upstream-id" title="gst_stream_collection_get_upstream_id ()">gst_stream_collection_get_upstream_id</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstStreamCollection.html#gst-stream-collection-get-size" title="gst_stream_collection_get_size ()">gst_stream_collection_get_size</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="returnvalue">GstStream</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstStreamCollection.html#gst-stream-collection-get-stream" title="gst_stream_collection_get_stream ()">gst_stream_collection_get_stream</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gstreamer-GstStreamCollection.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection">GstStreamCollection</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollectionClass" title="struct GstStreamCollectionClass">GstStreamCollectionClass</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gstreamer-GstStreamCollection.includes"></a><h2>Includes</h2>
+<pre class="synopsis">#include &lt;gst/gst.h&gt;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gstreamer-GstStreamCollection.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="gstreamer-GstStreamCollection.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="gst-stream-collection-new"></a><h3>gst_stream_collection_new ()</h3>
+<pre class="programlisting"><a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="returnvalue">GstStreamCollection</span></a> *
+gst_stream_collection_new (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *upstream_id</code></em>);</pre>
+<p>Create a new <a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a>.</p>
+<div class="refsect3">
+<a name="gst-stream-collection-new.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>upstream_id</p></td>
+<td class="parameter_description"><p> The stream id of the parent stream. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-stream-collection-new.returns"></a><h4>Returns</h4>
+<p> The new <a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a>.</p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-stream-collection-add-stream"></a><h3>gst_stream_collection_add_stream ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_stream_collection_add_stream (<em class="parameter"><code><a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a> *collection</code></em>,
+                                  <em class="parameter"><code><a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> *stream</code></em>);</pre>
+<p>Add the given <em class="parameter"><code>stream</code></em>
+ to the <em class="parameter"><code>collection</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-stream-collection-add-stream.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>collection</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>stream</p></td>
+<td class="parameter_description"><p> the <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> to add. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-stream-collection-add-stream.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the <em class="parameter"><code>stream</code></em>
+was properly added, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a></p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-stream-collection-get-upstream-id"></a><h3>gst_stream_collection_get_upstream_id ()</h3>
+<pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_stream_collection_get_upstream_id (<em class="parameter"><code><a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a> *collection</code></em>);</pre>
+<p>Returns the upstream id of the <em class="parameter"><code>collection</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-stream-collection-get-upstream-id.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>collection</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-stream-collection-get-upstream-id.returns"></a><h4>Returns</h4>
+<p> The upstream id. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-stream-collection-get-size"></a><h3>gst_stream_collection_get_size ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+gst_stream_collection_get_size (<em class="parameter"><code><a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a> *collection</code></em>);</pre>
+<p>Get the number of streams this collection contains</p>
+<div class="refsect3">
+<a name="gst-stream-collection-get-size.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>collection</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-stream-collection-get-size.returns"></a><h4>Returns</h4>
+<p> The number of streams that <em class="parameter"><code>collection</code></em>
+contains</p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-stream-collection-get-stream"></a><h3>gst_stream_collection_get_stream ()</h3>
+<pre class="programlisting"><a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="returnvalue">GstStream</span></a> *
+gst_stream_collection_get_stream (<em class="parameter"><code><a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a> *collection</code></em>,
+                                  <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> index</code></em>);</pre>
+<p>Retrieve the <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> with index <em class="parameter"><code>index</code></em>
+ from the collection.</p>
+<p>The caller should not modify the returned <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a></p>
+<div class="refsect3">
+<a name="gst-stream-collection-get-stream.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>collection</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>index</p></td>
+<td class="parameter_description"><p>Index of the stream to retrieve</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-stream-collection-get-stream.returns"></a><h4>Returns</h4>
+<p> A <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gstreamer-GstStreamCollection.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstStreamCollection"></a><h3>struct GstStreamCollection</h3>
+<pre class="programlisting">struct GstStreamCollection {
+  GstObject object;
+};
+</pre>
+<p>A collection of <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> that are available.</p>
+<p>A <a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a> will be provided by elements that can make those
+streams available. Applications can use the collection to show the user
+what streams are available by using <a class="link" href="gstreamer-GstStreamCollection.html#gst-stream-collection-get-stream" title="gst_stream_collection_get_stream ()"><code class="literal">gst_stream_collection_get_stream</code></a>()</p>
+<p>Once posted, a <a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a> is immutable. Updates are made by sending
+a new <a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a> message, which may or may not share some of
+the <a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream"><span class="type">GstStream</span></a> objects from the collection it replaces. The receiver can check
+the sender of a stream collection message to know which collection is
+obsoleted.</p>
+<p>Several elements in a pipeline can provide <a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection"><span class="type">GstStreamCollection</span></a>.</p>
+<p>Applications can activate streams from a collection by using the
+<a class="link" href="GstEvent.html#GST-EVENT-SELECT-STREAMS:CAPS"><span class="type">GST_EVENT_SELECT_STREAMS</span></a> event on a pipeline, bin or element.</p>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstStreamCollectionClass"></a><h3>struct GstStreamCollectionClass</h3>
+<pre class="programlisting">struct GstStreamCollectionClass {
+  GstObjectClass parent_class;
+
+  /* signals */
+  void  (*stream_notify)      (GstStreamCollection *collection, GstStream *stream, GParamSpec * pspec);
+};
+</pre>
+<p>GstStreamCollection class structure</p>
+<div class="refsect3">
+<a name="GstStreamCollectionClass.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody><tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstStreamCollectionClass.stream-notify"></a>stream_notify</code></em> ()</p></td>
+<td class="struct_member_description"><p>default signal handler for the stream-notify signal</p></td>
+<td class="struct_member_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/gst/html/gstreamer-GstVersion.html b/docs/gst/html/gstreamer-GstVersion.html
index 4866e27..1de00c2 100644
--- a/docs/gst/html/gstreamer-GstVersion.html
+++ b/docs/gst/html/gstreamer-GstVersion.html
@@ -136,14 +136,14 @@
 <hr>
 <div class="refsect2">
 <a name="GST-VERSION-MINOR:CAPS"></a><h3>GST_VERSION_MINOR</h3>
-<pre class="programlisting">#define GST_VERSION_MINOR (8)
+<pre class="programlisting">#define GST_VERSION_MINOR (9)
 </pre>
 <p>The minor version of GStreamer at compile time:</p>
 </div>
 <hr>
 <div class="refsect2">
 <a name="GST-VERSION-MICRO:CAPS"></a><h3>GST_VERSION_MICRO</h3>
-<pre class="programlisting">#define GST_VERSION_MICRO (3)
+<pre class="programlisting">#define GST_VERSION_MICRO (90)
 </pre>
 <p>The micro version of GStreamer at compile time:</p>
 </div>
diff --git a/docs/gst/html/gstreamer-hierarchy.html b/docs/gst/html/gstreamer-hierarchy.html
index fd2c829..b4701a4 100644
--- a/docs/gst/html/gstreamer-hierarchy.html
+++ b/docs/gst/html/gstreamer-hierarchy.html
@@ -70,10 +70,10 @@
     <span class="lineart">├──</span> <a class="link" href="GstContext.html" title="GstContext">GstContext</a>
     <span class="lineart">├──</span> <a class="link" href="GstDateTime.html" title="GstDateTime">GstDateTime</a>
     <span class="lineart">├──</span> <a class="link" href="GstTagList.html" title="GstTagList">GstTagList</a>
-    <span class="lineart">├──</span> <a class="link" href="GstToc.html" title="GstToc">GstToc</a>
-    <span class="lineart">├──</span> <a class="link" href="GstToc.html#GstTocEntry">GstTocEntry</a>
     <span class="lineart">├──</span> <a class="link" href="GstSegment.html" title="GstSegment">GstSegment</a>
     <span class="lineart">├──</span> <a class="link" href="GstAllocator.html#GstAllocationParams">GstAllocationParams</a>
+    <span class="lineart">├──</span> <a class="link" href="GstToc.html" title="GstToc">GstToc</a>
+    <span class="lineart">├──</span> <a class="link" href="GstToc.html#GstTocEntry">GstTocEntry</a>
     <span class="lineart">╰──</span> <a class="link" href="gstreamer-GstParse.html#GstParseContext">GstParseContext</a>
 </pre>
 </div>
diff --git a/docs/gst/html/index.html b/docs/gst/html/index.html
index 3dfcd25..51d801c 100644
--- a/docs/gst/html/index.html
+++ b/docs/gst/html/index.html
@@ -15,7 +15,7 @@
 <div>
 <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GStreamer 1.0 Core Reference Manual</p></th></tr></table></div>
 <div><p class="releaseinfo">
-      for GStreamer Core 1.0 (1.8.3)
+      for GStreamer Core 1.0 (1.9.90)
       The latest version of this documentation can be found on-line at
       <a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/</a>.
     </p></div>
@@ -178,6 +178,12 @@
                     in a media file.</span>
 </dt>
 <dt>
+<span class="refentrytitle"><a href="gstreamer-GstStream.html">GstStream</a></span><span class="refpurpose"> — Base class for stream objects</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gstreamer-GstStreamCollection.html">GstStreamCollection</a></span><span class="refpurpose"> — Base class for collection of streams</span>
+</dt>
+<dt>
 <span class="refentrytitle"><a href="GstStructure.html">GstStructure</a></span><span class="refpurpose"> — Generic structure containing fields of names and values</span>
 </dt>
 <dt>
diff --git a/docs/gst/html/ix01.html b/docs/gst/html/ix01.html
index 264a04c..3006378 100644
--- a/docs/gst/html/ix01.html
+++ b/docs/gst/html/ix01.html
@@ -151,6 +151,14 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstBin.html#GstBin-deep-element-added" title="The “deep-element-added” signal">GstBin::deep-element-added</a>, object signal in <a class="link" href="GstBin.html" title="GstBin">GstBin</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GstBin.html#GstBin-deep-element-removed" title="The “deep-element-removed” signal">GstBin::deep-element-removed</a>, object signal in <a class="link" href="GstBin.html" title="GstBin">GstBin</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstBin.html#GstBin-do-latency" title="The “do-latency” signal">GstBin::do-latency</a>, object signal in <a class="link" href="GstBin.html" title="GstBin">GstBin</a>
 </dt>
 <dd></dd>
@@ -415,6 +423,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstBuffer.html#gst-buffer-get-flags" title="gst_buffer_get_flags ()">gst_buffer_get_flags</a>, function in <a class="link" href="GstBuffer.html" title="GstBuffer">GstBuffer</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstBuffer.html#gst-buffer-get-max-memory" title="gst_buffer_get_max_memory ()">gst_buffer_get_max_memory</a>, function in <a class="link" href="GstBuffer.html" title="GstBuffer">GstBuffer</a>
 </dt>
 <dd></dd>
@@ -451,6 +463,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstBuffer.html#gst-buffer-has-flags" title="gst_buffer_has_flags ()">gst_buffer_has_flags</a>, function in <a class="link" href="GstBuffer.html" title="GstBuffer">GstBuffer</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstBuffer.html#gst-buffer-insert-memory" title="gst_buffer_insert_memory ()">gst_buffer_insert_memory</a>, function in <a class="link" href="GstBuffer.html" title="GstBuffer">GstBuffer</a>
 </dt>
 <dd></dd>
@@ -731,6 +747,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstBuffer.html#gst-buffer-set-flags" title="gst_buffer_set_flags ()">gst_buffer_set_flags</a>, function in <a class="link" href="GstBuffer.html" title="GstBuffer">GstBuffer</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstBuffer.html#gst-buffer-set-size" title="gst_buffer_set_size ()">gst_buffer_set_size</a>, function in <a class="link" href="GstBuffer.html" title="GstBuffer">GstBuffer</a>
 </dt>
 <dd></dd>
@@ -743,6 +763,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstBuffer.html#gst-buffer-unset-flags" title="gst_buffer_unset_flags ()">gst_buffer_unset_flags</a>, function in <a class="link" href="GstBuffer.html" title="GstBuffer">GstBuffer</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstBus.html#GstBus-struct" title="struct GstBus">GstBus</a>, struct in <a class="link" href="GstBus.html" title="GstBus">GstBus</a>
 </dt>
 <dd></dd>
@@ -2277,10 +2301,6 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gstreamer-GstConfig.html#GST-DISABLE-ALLOC-TRACE:CAPS" title="GST_DISABLE_ALLOC_TRACE">GST_DISABLE_ALLOC_TRACE</a>, macro in <a class="link" href="gstreamer-GstConfig.html" title="GstConfig">GstConfig</a>
-</dt>
-<dd></dd>
-<dt>
 <a class="link" href="gstreamer-GstConfig.html#GST-DISABLE-GST-DEBUG:CAPS" title="GST_DISABLE_GST_DEBUG">GST_DISABLE_GST_DEBUG</a>, macro in <a class="link" href="gstreamer-GstConfig.html" title="GstConfig">GstConfig</a>
 </dt>
 <dd></dd>
@@ -2296,10 +2316,6 @@
 <a class="link" href="gstreamer-GstConfig.html#GST-DISABLE-REGISTRY:CAPS" title="GST_DISABLE_REGISTRY">GST_DISABLE_REGISTRY</a>, macro in <a class="link" href="gstreamer-GstConfig.html" title="GstConfig">GstConfig</a>
 </dt>
 <dd></dd>
-<dt>
-<a class="link" href="gstreamer-GstConfig.html#GST-DISABLE-TRACE:CAPS" title="GST_DISABLE_TRACE">GST_DISABLE_TRACE</a>, macro in <a class="link" href="gstreamer-GstConfig.html" title="GstConfig">GstConfig</a>
-</dt>
-<dd></dd>
 <a name="idxE"></a><h3 class="title">E</h3>
 <dt>
 <a class="link" href="GstElement.html#GstElement-struct" title="struct GstElement">GstElement</a>, struct in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
@@ -2318,6 +2334,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstElement.html#GstElementCallAsyncFunc" title="GstElementCallAsyncFunc ()">GstElementCallAsyncFunc</a>, user_function in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstElement.html#GstElementClass" title="struct GstElementClass">GstElementClass</a>, struct in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
 </dt>
 <dd></dd>
@@ -2342,10 +2362,22 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstElement.html#gst-element-add-property-deep-notify-watch" title="gst_element_add_property_deep_notify_watch ()">gst_element_add_property_deep_notify_watch</a>, function in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GstElement.html#gst-element-add-property-notify-watch" title="gst_element_add_property_notify_watch ()">gst_element_add_property_notify_watch</a>, function in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstElement.html#GST-ELEMENT-BUS:CAPS" title="GST_ELEMENT_BUS()">GST_ELEMENT_BUS</a>, macro in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstElement.html#gst-element-call-async" title="gst_element_call_async ()">gst_element_call_async</a>, function in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstElement.html#gst-element-change-state" title="gst_element_change_state ()">gst_element_change_state</a>, function in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
 </dt>
 <dd></dd>
@@ -2402,6 +2434,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstElement.html#GST-ELEMENT-ERROR-WITH-DETAILS:CAPS" title="GST_ELEMENT_ERROR_WITH_DETAILS()">GST_ELEMENT_ERROR_WITH_DETAILS</a>, macro in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstElementFactory.html#gst-element-factory-can-sink-all-caps" title="gst_element_factory_can_sink_all_caps ()">gst_element_factory_can_sink_all_caps</a>, function in <a class="link" href="GstElementFactory.html" title="GstElementFactory">GstElementFactory</a>
 </dt>
 <dd></dd>
@@ -2570,6 +2606,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstElement.html#GST-ELEMENT-FLOW-ERROR:CAPS" title="GST_ELEMENT_FLOW_ERROR()">GST_ELEMENT_FLOW_ERROR</a>, macro in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstElement.html#gst-element-get-base-time" title="gst_element_get_base_time ()">gst_element_get_base_time</a>, function in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
 </dt>
 <dd></dd>
@@ -2634,6 +2674,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstElement.html#GST-ELEMENT-INFO-WITH-DETAILS:CAPS" title="GST_ELEMENT_INFO_WITH_DETAILS()">GST_ELEMENT_INFO_WITH_DETAILS</a>, macro in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstElement.html#GST-ELEMENT-IS-LOCKED-STATE:CAPS" title="GST_ELEMENT_IS_LOCKED_STATE()">GST_ELEMENT_IS_LOCKED_STATE</a>, macro in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
 </dt>
 <dd></dd>
@@ -2690,6 +2734,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstElement.html#gst-element-message-full-with-details" title="gst_element_message_full_with_details ()">gst_element_message_full_with_details</a>, function in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstElement.html#GST-ELEMENT-METADATA-AUTHOR:CAPS" title="GST_ELEMENT_METADATA_AUTHOR">GST_ELEMENT_METADATA_AUTHOR</a>, macro in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
 </dt>
 <dd></dd>
@@ -2766,6 +2814,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstElement.html#gst-element-remove-property-notify-watch" title="gst_element_remove_property_notify_watch ()">gst_element_remove_property_notify_watch</a>, function in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstElement.html#gst-element-request-pad" title="gst_element_request_pad ()">gst_element_request_pad</a>, function in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
 </dt>
 <dd></dd>
@@ -2850,6 +2902,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstElement.html#GST-ELEMENT-WARNING-WITH-DETAILS:CAPS" title="GST_ELEMENT_WARNING_WITH_DETAILS()">GST_ELEMENT_WARNING_WITH_DETAILS</a>, macro in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gstreamer-GstInfo.html#GST-ERROR:CAPS" title="GST_ERROR()">GST_ERROR</a>, macro in <a class="link" href="gstreamer-GstInfo.html" title="GstInfo">GstInfo</a>
 </dt>
 <dd></dd>
@@ -2990,6 +3046,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstEvent.html#gst-event-new-select-streams" title="gst_event_new_select_streams ()">gst_event_new_select_streams</a>, function in <a class="link" href="GstEvent.html" title="GstEvent">GstEvent</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstEvent.html#gst-event-new-sink-message" title="gst_event_new_sink_message ()">gst_event_new_sink_message</a>, function in <a class="link" href="GstEvent.html" title="GstEvent">GstEvent</a>
 </dt>
 <dd></dd>
@@ -2998,6 +3058,14 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstEvent.html#gst-event-new-stream-collection" title="gst_event_new_stream_collection ()">gst_event_new_stream_collection</a>, function in <a class="link" href="GstEvent.html" title="GstEvent">GstEvent</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GstEvent.html#gst-event-new-stream-group-done" title="gst_event_new_stream_group_done ()">gst_event_new_stream_group_done</a>, function in <a class="link" href="GstEvent.html" title="GstEvent">GstEvent</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstEvent.html#gst-event-new-stream-start" title="gst_event_new_stream_start ()">gst_event_new_stream_start</a>, function in <a class="link" href="GstEvent.html" title="GstEvent">GstEvent</a>
 </dt>
 <dd></dd>
@@ -3058,6 +3126,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstEvent.html#gst-event-parse-select-streams" title="gst_event_parse_select_streams ()">gst_event_parse_select_streams</a>, function in <a class="link" href="GstEvent.html" title="GstEvent">GstEvent</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstEvent.html#gst-event-parse-sink-message" title="gst_event_parse_sink_message ()">gst_event_parse_sink_message</a>, function in <a class="link" href="GstEvent.html" title="GstEvent">GstEvent</a>
 </dt>
 <dd></dd>
@@ -3066,10 +3138,22 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstEvent.html#gst-event-parse-stream" title="gst_event_parse_stream ()">gst_event_parse_stream</a>, function in <a class="link" href="GstEvent.html" title="GstEvent">GstEvent</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GstEvent.html#gst-event-parse-stream-collection" title="gst_event_parse_stream_collection ()">gst_event_parse_stream_collection</a>, function in <a class="link" href="GstEvent.html" title="GstEvent">GstEvent</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstEvent.html#gst-event-parse-stream-flags" title="gst_event_parse_stream_flags ()">gst_event_parse_stream_flags</a>, function in <a class="link" href="GstEvent.html" title="GstEvent">GstEvent</a>
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstEvent.html#gst-event-parse-stream-group-done" title="gst_event_parse_stream_group_done ()">gst_event_parse_stream_group_done</a>, function in <a class="link" href="GstEvent.html" title="GstEvent">GstEvent</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstEvent.html#gst-event-parse-stream-start" title="gst_event_parse_stream_start ()">gst_event_parse_stream_start</a>, function in <a class="link" href="GstEvent.html" title="GstEvent">GstEvent</a>
 </dt>
 <dd></dd>
@@ -3110,6 +3194,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstEvent.html#gst-event-set-stream" title="gst_event_set_stream ()">gst_event_set_stream</a>, function in <a class="link" href="GstEvent.html" title="GstEvent">GstEvent</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstEvent.html#gst-event-set-stream-flags" title="gst_event_set_stream_flags ()">gst_event_set_stream_flags</a>, function in <a class="link" href="GstEvent.html" title="GstEvent">GstEvent</a>
 </dt>
 <dd></dd>
@@ -3519,6 +3607,10 @@
 <dd></dd>
 <a name="idxM"></a><h3 class="title">M</h3>
 <dt>
+<a class="link" href="GstElement.html#gst-make-element-message-details" title="gst_make_element_message_details ()">gst_make_element_message_details</a>, function in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gstreamer-GstValue.html#GST-MAKE-FOURCC:CAPS" title="GST_MAKE_FOURCC()">GST_MAKE_FOURCC</a>, macro in <a class="link" href="gstreamer-GstValue.html" title="GstValue">GstValue</a>
 </dt>
 <dd></dd>
@@ -3699,10 +3791,18 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstMessage.html#gst-message-add-redirect-entry" title="gst_message_add_redirect_entry ()">gst_message_add_redirect_entry</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstMessage.html#gst-message-copy" title="gst_message_copy ()">gst_message_copy</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstMessage.html#gst-message-get-num-redirect-entries" title="gst_message_get_num_redirect_entries ()">gst_message_get_num_redirect_entries</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstMessage.html#gst-message-get-seqnum" title="gst_message_get_seqnum ()">gst_message_get_seqnum</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
 </dt>
 <dd></dd>
@@ -3779,6 +3879,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstMessage.html#gst-message-new-error-with-details" title="gst_message_new_error_with_details ()">gst_message_new_error_with_details</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstMessage.html#gst-message-new-have-context" title="gst_message_new_have_context ()">gst_message_new_have_context</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
 </dt>
 <dd></dd>
@@ -3787,6 +3891,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstMessage.html#gst-message-new-info-with-details" title="gst_message_new_info_with_details ()">gst_message_new_info_with_details</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstMessage.html#gst-message-new-latency" title="gst_message_new_latency ()">gst_message_new_latency</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
 </dt>
 <dd></dd>
@@ -3803,10 +3911,18 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstMessage.html#gst-message-new-property-notify" title="gst_message_new_property_notify ()">gst_message_new_property_notify</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstMessage.html#gst-message-new-qos" title="gst_message_new_qos ()">gst_message_new_qos</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstMessage.html#gst-message-new-redirect" title="gst_message_new_redirect ()">gst_message_new_redirect</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstMessage.html#gst-message-new-request-state" title="gst_message_new_request_state ()">gst_message_new_request_state</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
 </dt>
 <dd></dd>
@@ -3839,6 +3955,14 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstMessage.html#gst-message-new-streams-selected" title="gst_message_new_streams_selected ()">gst_message_new_streams_selected</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GstMessage.html#gst-message-new-stream-collection" title="gst_message_new_stream_collection ()">gst_message_new_stream_collection</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstMessage.html#gst-message-new-stream-start" title="gst_message_new_stream_start ()">gst_message_new_stream_start</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
 </dt>
 <dd></dd>
@@ -3863,6 +3987,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstMessage.html#gst-message-new-warning-with-details" title="gst_message_new_warning_with_details ()">gst_message_new_warning_with_details</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstMessage.html#gst-message-parse-async-done" title="gst_message_parse_async_done ()">gst_message_parse_async_done</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
 </dt>
 <dd></dd>
@@ -3899,6 +4027,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstMessage.html#gst-message-parse-error-details" title="gst_message_parse_error_details ()">gst_message_parse_error_details</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstMessage.html#gst-message-parse-group-id" title="gst_message_parse_group_id ()">gst_message_parse_group_id</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
 </dt>
 <dd></dd>
@@ -3911,6 +4043,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstMessage.html#gst-message-parse-info-details" title="gst_message_parse_info_details ()">gst_message_parse_info_details</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstMessage.html#gst-message-parse-new-clock" title="gst_message_parse_new_clock ()">gst_message_parse_new_clock</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
 </dt>
 <dd></dd>
@@ -3919,6 +4055,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstMessage.html#gst-message-parse-property-notify" title="gst_message_parse_property_notify ()">gst_message_parse_property_notify</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstMessage.html#gst-message-parse-qos" title="gst_message_parse_qos ()">gst_message_parse_qos</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
 </dt>
 <dd></dd>
@@ -3931,6 +4071,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstMessage.html#gst-message-parse-redirect-entry" title="gst_message_parse_redirect_entry ()">gst_message_parse_redirect_entry</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstMessage.html#gst-message-parse-request-state" title="gst_message_parse_request_state ()">gst_message_parse_request_state</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
 </dt>
 <dd></dd>
@@ -3959,6 +4103,14 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstMessage.html#gst-message-parse-streams-selected" title="gst_message_parse_streams_selected ()">gst_message_parse_streams_selected</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GstMessage.html#gst-message-parse-stream-collection" title="gst_message_parse_stream_collection ()">gst_message_parse_stream_collection</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstMessage.html#gst-message-parse-stream-status" title="gst_message_parse_stream_status ()">gst_message_parse_stream_status</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
 </dt>
 <dd></dd>
@@ -3979,6 +4131,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstMessage.html#gst-message-parse-warning-details" title="gst_message_parse_warning_details ()">gst_message_parse_warning_details</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstMessage.html#gst-message-ref" title="gst_message_ref ()">gst_message_ref</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
 </dt>
 <dd></dd>
@@ -4023,6 +4179,18 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstMessage.html#gst-message-streams-selected-add" title="gst_message_streams_selected_add ()">gst_message_streams_selected_add</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GstMessage.html#gst-message-streams-selected-get-size" title="gst_message_streams_selected_get_size ()">gst_message_streams_selected_get_size</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GstMessage.html#gst-message-streams-selected-get-stream" title="gst_message_streams_selected_get_stream ()">gst_message_streams_selected_get_stream</a>, function in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstMessage.html#GST-MESSAGE-TIMESTAMP:CAPS" title="GST_MESSAGE_TIMESTAMP()">GST_MESSAGE_TIMESTAMP</a>, macro in <a class="link" href="GstMessage.html" title="GstMessage">GstMessage</a>
 </dt>
 <dd></dd>
@@ -4730,6 +4898,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstPad.html#gst-pad-get-stream" title="gst_pad_get_stream ()">gst_pad_get_stream</a>, function in <a class="link" href="GstPad.html" title="GstPad">GstPad</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstPad.html#gst-pad-get-stream-id" title="gst_pad_get_stream_id ()">gst_pad_get_stream_id</a>, function in <a class="link" href="GstPad.html" title="GstPad">GstPad</a>
 </dt>
 <dd></dd>
@@ -4854,6 +5026,14 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstPad.html#gst-pad-link-maybe-ghosting" title="gst_pad_link_maybe_ghosting ()">gst_pad_link_maybe_ghosting</a>, function in <a class="link" href="GstPad.html" title="GstPad">GstPad</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GstPad.html#gst-pad-link-maybe-ghosting-full" title="gst_pad_link_maybe_ghosting_full ()">gst_pad_link_maybe_ghosting_full</a>, function in <a class="link" href="GstPad.html" title="GstPad">GstPad</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstPad.html#GST-PAD-LINK-SUCCESSFUL:CAPS" title="GST_PAD_LINK_SUCCESSFUL()">GST_PAD_LINK_SUCCESSFUL</a>, macro in <a class="link" href="GstPad.html" title="GstPad">GstPad</a>
 </dt>
 <dd></dd>
@@ -6709,6 +6889,22 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gstreamer-GstStream.html#GstStream" title="struct GstStream">GstStream</a>, struct in <a class="link" href="gstreamer-GstStream.html" title="GstStream">GstStream</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstStream.html#GstStreamClass" title="struct GstStreamClass">GstStreamClass</a>, struct in <a class="link" href="gstreamer-GstStream.html" title="GstStream">GstStream</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollection" title="struct GstStreamCollection">GstStreamCollection</a>, struct in <a class="link" href="gstreamer-GstStreamCollection.html" title="GstStreamCollection">GstStreamCollection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstStreamCollection.html#GstStreamCollectionClass" title="struct GstStreamCollectionClass">GstStreamCollectionClass</a>, struct in <a class="link" href="gstreamer-GstStreamCollection.html" title="GstStreamCollection">GstStreamCollection</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gstreamer-GstGError.html#GstStreamError" title="enum GstStreamError">GstStreamError</a>, enum in <a class="link" href="gstreamer-GstGError.html" title="GstGError">GstGError</a>
 </dt>
 <dd></dd>
@@ -6721,10 +6917,78 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gstreamer-GstStream.html#GstStreamType" title="enum GstStreamType">GstStreamType</a>, enum in <a class="link" href="gstreamer-GstStream.html" title="GstStream">GstStream</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstStreamCollection.html#gst-stream-collection-add-stream" title="gst_stream_collection_add_stream ()">gst_stream_collection_add_stream</a>, function in <a class="link" href="gstreamer-GstStreamCollection.html" title="GstStreamCollection">GstStreamCollection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstStreamCollection.html#gst-stream-collection-get-size" title="gst_stream_collection_get_size ()">gst_stream_collection_get_size</a>, function in <a class="link" href="gstreamer-GstStreamCollection.html" title="GstStreamCollection">GstStreamCollection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstStreamCollection.html#gst-stream-collection-get-stream" title="gst_stream_collection_get_stream ()">gst_stream_collection_get_stream</a>, function in <a class="link" href="gstreamer-GstStreamCollection.html" title="GstStreamCollection">GstStreamCollection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstStreamCollection.html#gst-stream-collection-get-upstream-id" title="gst_stream_collection_get_upstream_id ()">gst_stream_collection_get_upstream_id</a>, function in <a class="link" href="gstreamer-GstStreamCollection.html" title="GstStreamCollection">GstStreamCollection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstStreamCollection.html#gst-stream-collection-new" title="gst_stream_collection_new ()">gst_stream_collection_new</a>, function in <a class="link" href="gstreamer-GstStreamCollection.html" title="GstStreamCollection">GstStreamCollection</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gstreamer-GstGError.html#GST-STREAM-ERROR:CAPS" title="GST_STREAM_ERROR">GST_STREAM_ERROR</a>, macro in <a class="link" href="gstreamer-GstGError.html" title="GstGError">GstGError</a>
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gstreamer-GstStream.html#gst-stream-get-caps" title="gst_stream_get_caps ()">gst_stream_get_caps</a>, function in <a class="link" href="gstreamer-GstStream.html" title="GstStream">GstStream</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstStream.html#gst-stream-get-stream-flags" title="gst_stream_get_stream_flags ()">gst_stream_get_stream_flags</a>, function in <a class="link" href="gstreamer-GstStream.html" title="GstStream">GstStream</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstStream.html#gst-stream-get-stream-id" title="gst_stream_get_stream_id ()">gst_stream_get_stream_id</a>, function in <a class="link" href="gstreamer-GstStream.html" title="GstStream">GstStream</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstStream.html#gst-stream-get-stream-type" title="gst_stream_get_stream_type ()">gst_stream_get_stream_type</a>, function in <a class="link" href="gstreamer-GstStream.html" title="GstStream">GstStream</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstStream.html#gst-stream-get-tags" title="gst_stream_get_tags ()">gst_stream_get_tags</a>, function in <a class="link" href="gstreamer-GstStream.html" title="GstStream">GstStream</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstStream.html#gst-stream-new" title="gst_stream_new ()">gst_stream_new</a>, function in <a class="link" href="gstreamer-GstStream.html" title="GstStream">GstStream</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstStream.html#gst-stream-set-caps" title="gst_stream_set_caps ()">gst_stream_set_caps</a>, function in <a class="link" href="gstreamer-GstStream.html" title="GstStream">GstStream</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstStream.html#gst-stream-set-stream-flags" title="gst_stream_set_stream_flags ()">gst_stream_set_stream_flags</a>, function in <a class="link" href="gstreamer-GstStream.html" title="GstStream">GstStream</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstStream.html#gst-stream-set-stream-type" title="gst_stream_set_stream_type ()">gst_stream_set_stream_type</a>, function in <a class="link" href="gstreamer-GstStream.html" title="GstStream">GstStream</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstStream.html#gst-stream-set-tags" title="gst_stream_set_tags ()">gst_stream_set_tags</a>, function in <a class="link" href="gstreamer-GstStream.html" title="GstStream">GstStream</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstStream.html#gst-stream-type-get-name" title="gst_stream_type_get_name ()">gst_stream_type_get_name</a>, function in <a class="link" href="gstreamer-GstStream.html" title="GstStream">GstStream</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstStructure.html#GstStructure-struct" title="struct GstStructure">GstStructure</a>, struct in <a class="link" href="GstStructure.html" title="GstStructure">GstStructure</a>
 </dt>
 <dd></dd>
diff --git a/docs/gst/html/libgstreamer.html b/docs/gst/html/libgstreamer.html
index da73ecb..2824f7f 100644
--- a/docs/gst/html/libgstreamer.html
+++ b/docs/gst/html/libgstreamer.html
@@ -163,6 +163,12 @@
                     in a media file.</span>
 </dt>
 <dt>
+<span class="refentrytitle"><a href="gstreamer-GstStream.html">GstStream</a></span><span class="refpurpose"> — Base class for stream objects</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gstreamer-GstStreamCollection.html">GstStreamCollection</a></span><span class="refpurpose"> — Base class for collection of streams</span>
+</dt>
+<dt>
 <span class="refentrytitle"><a href="GstStructure.html">GstStructure</a></span><span class="refpurpose"> — Generic structure containing fields of names and values</span>
 </dt>
 <dt>
diff --git a/docs/libs/Makefile.in b/docs/libs/Makefile.in
index 89b4df7..4903aca 100644
--- a/docs/libs/Makefile.in
+++ b/docs/libs/Makefile.in
@@ -251,6 +251,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -258,17 +259,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -393,6 +391,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
@@ -905,7 +905,11 @@
 
 @ENABLE_GTK_DOC_TRUE@sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(expand_content_files)
 @ENABLE_GTK_DOC_TRUE@	@echo '  DOC   Building XML'
-@ENABLE_GTK_DOC_TRUE@	@gtkdoc-mkdb --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR)  --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) --output-format=xml $(MKDB_OPTIONS)
+@ENABLE_GTK_DOC_TRUE@	@_source_dir='' ;						\
+@ENABLE_GTK_DOC_TRUE@	for i in $(DOC_SOURCE_DIR) ; do					\
+@ENABLE_GTK_DOC_TRUE@	    _source_dir="$${_source_dir} --source-dir=$$i" ;	        \
+@ENABLE_GTK_DOC_TRUE@	done ;							        \
+@ENABLE_GTK_DOC_TRUE@	gtkdoc-mkdb --module=$(DOC_MODULE) $${_source_dir}  --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) --output-format=xml $(MKDB_OPTIONS)
 @ENABLE_GTK_DOC_TRUE@	@cp ../version.entities xml
 @ENABLE_GTK_DOC_TRUE@	@touch sgml-build.stamp
 
diff --git a/docs/libs/gstreamer-libs-sections.txt b/docs/libs/gstreamer-libs-sections.txt
index 09d0b11..a37b918 100644
--- a/docs/libs/gstreamer-libs-sections.txt
+++ b/docs/libs/gstreamer-libs-sections.txt
@@ -178,6 +178,11 @@
 gst_adapter_prev_dts
 gst_adapter_prev_pts_at_offset
 gst_adapter_prev_dts_at_offset
+gst_adapter_prev_offset
+gst_adapter_pts_at_discont
+gst_adapter_dts_at_discont
+gst_adapter_offset_at_discont
+gst_adapter_distance_from_discont
 gst_adapter_masked_scan_uint32
 gst_adapter_masked_scan_uint32_peek
 <SUBSECTION Standard>
diff --git a/docs/libs/html/GstAdapter.html b/docs/libs/html/GstAdapter.html
index 30656bf..b6a43a0 100644
--- a/docs/libs/html/GstAdapter.html
+++ b/docs/libs/html/GstAdapter.html
@@ -226,6 +226,46 @@
 </tr>
 <tr>
 <td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint64"><span class="returnvalue">guint64</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GstAdapter.html#gst-adapter-prev-offset" title="gst_adapter_prev_offset ()">gst_adapter_prev_offset</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="../html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GstAdapter.html#gst-adapter-pts-at-discont" title="gst_adapter_pts_at_discont ()">gst_adapter_pts_at_discont</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="../html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GstAdapter.html#gst-adapter-dts-at-discont" title="gst_adapter_dts_at_discont ()">gst_adapter_dts_at_discont</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint64"><span class="returnvalue">guint64</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GstAdapter.html#gst-adapter-offset-at-discont" title="gst_adapter_offset_at_discont ()">gst_adapter_offset_at_discont</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint64"><span class="returnvalue">guint64</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GstAdapter.html#gst-adapter-distance-from-discont" title="gst_adapter_distance_from_discont ()">gst_adapter_distance_from_discont</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
 <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gssize"><span class="returnvalue">gssize</span></a>
 </td>
 <td class="function_name">
@@ -362,6 +402,16 @@
 last seen timestamp and the amount of bytes since.  Additionally, the
 <a class="link" href="GstAdapter.html#gst-adapter-prev-pts-at-offset" title="gst_adapter_prev_pts_at_offset ()"><code class="function">gst_adapter_prev_pts_at_offset()</code></a> can be used to determine the last
 seen timestamp at a particular offset in the adapter.</p>
+<p>The adapter will also keep track of the offset of the buffers
+(<a href="../html/GstBuffer.html#GST-BUFFER-OFFSET:CAPS"><span class="type">GST_BUFFER_OFFSET</span></a>) that were pushed. The last seen offset before the
+current position can be queried with <a class="link" href="GstAdapter.html#gst-adapter-prev-offset" title="gst_adapter_prev_offset ()"><code class="function">gst_adapter_prev_offset()</code></a>. This function
+can optionally return the number of bytes between the start of the buffer
+that carried the offset and the current adapter position.</p>
+<p>Additionally the adapter also keeps track of the PTS, DTS and buffer offset
+at the last discontinuity, which can be retrieved with
+<a class="link" href="GstAdapter.html#gst-adapter-pts-at-discont" title="gst_adapter_pts_at_discont ()"><code class="function">gst_adapter_pts_at_discont()</code></a>, <a class="link" href="GstAdapter.html#gst-adapter-dts-at-discont" title="gst_adapter_dts_at_discont ()"><code class="function">gst_adapter_dts_at_discont()</code></a> and
+<a class="link" href="GstAdapter.html#gst-adapter-offset-at-discont" title="gst_adapter_offset_at_discont ()"><code class="function">gst_adapter_offset_at_discont()</code></a>. The number of bytes that were consumed
+since then can be queried with <a class="link" href="GstAdapter.html#gst-adapter-distance-from-discont" title="gst_adapter_distance_from_discont ()"><code class="function">gst_adapter_distance_from_discont()</code></a>.</p>
 <p>A last thing to note is that while <a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> is pretty optimized,
 merging buffers still might be an operation that requires a <code class="function">malloc()</code> and
 <code class="function">memcpy()</code> operation, and these operations are not the fastest. Because of
@@ -1329,6 +1379,138 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-adapter-prev-offset"></a><h3>gst_adapter_prev_offset ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint64"><span class="returnvalue">guint64</span></a>
+gst_adapter_prev_offset (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
+                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint64"><span class="type">guint64</span></a> *distance</code></em>);</pre>
+<p>Get the offset that was before the current byte in the adapter. When
+<em class="parameter"><code>distance</code></em>
+ is given, the amount of bytes between the offset and the current
+position is returned.</p>
+<p>The offset is reset to GST_BUFFER_OFFSET_NONE and the distance is set to 0
+when the adapter is first created or when it is cleared. This also means that
+before the first byte with an offset is removed from the adapter, the offset
+and distance returned are GST_BUFFER_OFFSET_NONE and 0 respectively.</p>
+<div class="refsect3">
+<a name="gst-adapter-prev-offset.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>adapter</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>distance</p></td>
+<td class="parameter_description"><p> pointer to a location for distance, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-adapter-prev-offset.returns"></a><h4>Returns</h4>
+<p> The previous seen offset.</p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-adapter-pts-at-discont"></a><h3>gst_adapter_pts_at_discont ()</h3>
+<pre class="programlisting"><a href="../html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>
+gst_adapter_pts_at_discont (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>);</pre>
+<p>Get the PTS that was on the last buffer with the GST_BUFFER_FLAG_DISCONT
+flag, or GST_CLOCK_TIME_NONE.</p>
+<div class="refsect3">
+<a name="gst-adapter-pts-at-discont.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>adapter</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-adapter-pts-at-discont.returns"></a><h4>Returns</h4>
+<p> The PTS at the last discont or GST_CLOCK_TIME_NONE.</p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-adapter-dts-at-discont"></a><h3>gst_adapter_dts_at_discont ()</h3>
+<pre class="programlisting"><a href="../html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>
+gst_adapter_dts_at_discont (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>);</pre>
+<p>Get the DTS that was on the last buffer with the GST_BUFFER_FLAG_DISCONT
+flag, or GST_CLOCK_TIME_NONE.</p>
+<div class="refsect3">
+<a name="gst-adapter-dts-at-discont.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>adapter</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-adapter-dts-at-discont.returns"></a><h4>Returns</h4>
+<p> The DTS at the last discont or GST_CLOCK_TIME_NONE.</p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-adapter-offset-at-discont"></a><h3>gst_adapter_offset_at_discont ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint64"><span class="returnvalue">guint64</span></a>
+gst_adapter_offset_at_discont (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>);</pre>
+<p>Get the offset that was on the last buffer with the GST_BUFFER_FLAG_DISCONT
+flag, or GST_BUFFER_OFFSET_NONE.</p>
+<div class="refsect3">
+<a name="gst-adapter-offset-at-discont.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>adapter</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-adapter-offset-at-discont.returns"></a><h4>Returns</h4>
+<p> The offset at the last discont or GST_BUFFER_OFFSET_NONE.</p>
+</div>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-adapter-distance-from-discont"></a><h3>gst_adapter_distance_from_discont ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint64"><span class="returnvalue">guint64</span></a>
+gst_adapter_distance_from_discont (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-adapter-masked-scan-uint32"></a><h3>gst_adapter_masked_scan_uint32 ()</h3>
 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gssize"><span class="returnvalue">gssize</span></a>
 gst_adapter_masked_scan_uint32 (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
diff --git a/docs/libs/html/GstBaseSink.html b/docs/libs/html/GstBaseSink.html
index fb24f09..16c2c6b 100644
--- a/docs/libs/html/GstBaseSink.html
+++ b/docs/libs/html/GstBaseSink.html
@@ -452,8 +452,7 @@
 12
 13
 14
-15
-16</pre></td>
+15</pre></td>
         <td class="listing_code"><pre class="programlisting"><span class="gtkdoc kwb">static void</span>
 <span class="function">my_element_class_init</span> <span class="gtkdoc opt">(</span>GstMyElementClass <span class="gtkdoc opt">*</span>klass<span class="gtkdoc opt">)</span>
 <span class="gtkdoc opt">{</span>
@@ -461,8 +460,7 @@
 
   <span class="gtkdoc slc">// sinktemplate should be a #GstStaticPadTemplate with direction</span>
   <span class="gtkdoc slc">// %GST_PAD_SINK and name &quot;sink&quot;</span>
-  <span class="function"><a href="../html/GstElement.html#gst-element-class-add-pad-template">gst_element_class_add_pad_template</a></span> <span class="gtkdoc opt">(</span>gstelement_class<span class="gtkdoc opt">,</span>
-      <span class="function"><a href="../html/GstPadTemplate.html#gst-static-pad-template-get">gst_static_pad_template_get</a></span> <span class="gtkdoc opt">(&amp;</span>sinktemplate<span class="gtkdoc opt">));</span>
+  <span class="function"><a href="../html/GstElement.html#gst-element-class-add-static-pad-template">gst_element_class_add_static_pad_template</a></span> <span class="gtkdoc opt">(</span>gstelement_class<span class="gtkdoc opt">, &amp;</span>sinktemplate<span class="gtkdoc opt">);</span>
 
   <span class="function"><a href="../html/GstElement.html#gst-element-class-set-static-metadata">gst_element_class_set_static_metadata</a></span> <span class="gtkdoc opt">(</span>gstelement_class<span class="gtkdoc opt">,</span>
       <span class="string">&quot;Sink name&quot;</span><span class="gtkdoc opt">,</span>
diff --git a/docs/libs/html/GstBaseSrc.html b/docs/libs/html/GstBaseSrc.html
index ceb3125..ab9d206 100644
--- a/docs/libs/html/GstBaseSrc.html
+++ b/docs/libs/html/GstBaseSrc.html
@@ -377,16 +377,14 @@
 11
 12
 13
-14
-15</pre></td>
+14</pre></td>
         <td class="listing_code"><pre class="programlisting"><span class="gtkdoc kwb">static void</span>
 <span class="function">my_element_class_init</span> <span class="gtkdoc opt">(</span>GstMyElementClass <span class="gtkdoc opt">*</span>klass<span class="gtkdoc opt">)</span>
 <span class="gtkdoc opt">{</span>
   GstElementClass <span class="gtkdoc opt">*</span>gstelement_class <span class="gtkdoc opt">=</span> <span class="function">GST_ELEMENT_CLASS</span> <span class="gtkdoc opt">(</span>klass<span class="gtkdoc opt">);</span>
   <span class="gtkdoc slc">// srctemplate should be a #GstStaticPadTemplate with direction</span>
   <span class="gtkdoc slc">// %GST_PAD_SRC and name &quot;src&quot;</span>
-  <span class="function"><a href="../html/GstElement.html#gst-element-class-add-pad-template">gst_element_class_add_pad_template</a></span> <span class="gtkdoc opt">(</span>gstelement_class<span class="gtkdoc opt">,</span>
-      <span class="function"><a href="../html/GstPadTemplate.html#gst-static-pad-template-get">gst_static_pad_template_get</a></span> <span class="gtkdoc opt">(&amp;</span>srctemplate<span class="gtkdoc opt">));</span>
+  <span class="function"><a href="../html/GstElement.html#gst-element-class-add-static-pad-template">gst_element_class_add_static_pad_template</a></span> <span class="gtkdoc opt">(</span>gstelement_class<span class="gtkdoc opt">, &amp;</span>srctemplate<span class="gtkdoc opt">);</span>
 
   <span class="function"><a href="../html/GstElement.html#gst-element-class-set-static-metadata">gst_element_class_set_static_metadata</a></span> <span class="gtkdoc opt">(</span>gstelement_class<span class="gtkdoc opt">,</span>
      <span class="string">&quot;Source name&quot;</span><span class="gtkdoc opt">,</span>
diff --git a/docs/libs/html/GstCollectPads.html b/docs/libs/html/GstCollectPads.html
index d7db6e7..e216319 100644
--- a/docs/libs/html/GstCollectPads.html
+++ b/docs/libs/html/GstCollectPads.html
@@ -1329,8 +1329,9 @@
 <div class="refsect3">
 <a name="gst-collect-pads-peek.returns"></a><h4>Returns</h4>
 <p> The buffer in <em class="parameter"><code>data</code></em>
-or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if no buffer is queued.
-should unref the buffer after usage.</p>
+or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if no
+buffer is queued. should unref the buffer after usage. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></p>
 </div>
 </div>
 <hr>
@@ -1370,9 +1371,9 @@
 <div class="refsect3">
 <a name="gst-collect-pads-pop.returns"></a><h4>Returns</h4>
 <p> The buffer in <em class="parameter"><code>data</code></em>
-or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if no buffer was
-queued. You should unref the buffer after usage. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if no
+buffer was queued. You should unref the buffer after usage. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></p>
 </div>
 </div>
 <hr>
@@ -1418,10 +1419,10 @@
 </div>
 <div class="refsect3">
 <a name="gst-collect-pads-read-buffer.returns"></a><h4>Returns</h4>
-<p> A sub buffer. The size of the buffer can be less that requested.
-A return of <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> signals that the pad is end-of-stream.
-Unref the buffer after use. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p> A sub buffer. The size of the buffer can
+be less that requested. A return of <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> signals that the pad is
+end-of-stream. Unref the buffer after use. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></p>
 </div>
 </div>
 <hr>
@@ -1468,9 +1469,10 @@
 </div>
 <div class="refsect3">
 <a name="gst-collect-pads-take-buffer.returns"></a><h4>Returns</h4>
-<p> A sub buffer. The size of the buffer can be less that requested.
-A return of <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> signals that the pad is end-of-stream.
-Unref the buffer after use.</p>
+<p> A sub buffer. The size of the buffer can
+be less that requested. A return of <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> signals that the pad is
+end-of-stream. Unref the buffer after use. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></p>
 </div>
 </div>
 <hr>
diff --git a/docs/libs/html/GstTestClock.html b/docs/libs/html/GstTestClock.html
index d06329e..9a0b0e4 100644
--- a/docs/libs/html/GstTestClock.html
+++ b/docs/libs/html/GstTestClock.html
@@ -172,11 +172,18 @@
 <col width="300px" class="properties_name">
 <col width="200px" class="properties_flags">
 </colgroup>
-<tbody><tr>
+<tbody>
+<tr>
+<td class="property_type"><a href="../html/GstSystemClock.html#GstClockType"><span class="type">GstClockType</span></a></td>
+<td class="property_name"><a class="link" href="GstTestClock.html#GstTestClock--clock-type" title="The “clock-type” property">clock-type</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
 <td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint64"><span class="type">guint64</span></a></td>
 <td class="property_name"><a class="link" href="GstTestClock.html#GstTestClock--start-time" title="The “start-time” property">start-time</a></td>
 <td class="property_flags">Read / Write / Construct Only</td>
-</tr></tbody>
+</tr>
+</tbody>
 </table></div>
 </div>
 <div class="refsect1">
@@ -990,6 +997,14 @@
 <div class="refsect1">
 <a name="GstTestClock.property-details"></a><h2>Property Details</h2>
 <div class="refsect2">
+<a name="GstTestClock--clock-type"></a><h3>The <code class="literal">“clock-type”</code> property</h3>
+<pre class="programlisting">  “clock-type”               <a href="../html/GstSystemClock.html#GstClockType"><span class="type">GstClockType</span></a></pre>
+<p>The kind of clock implementation to be reported by this clock.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: GST_CLOCK_TYPE_MONOTONIC</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="GstTestClock--start-time"></a><h3>The <code class="literal">“start-time”</code> property</h3>
 <pre class="programlisting">  “start-time”               <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint64"><span class="type">guint64</span></a></pre>
 <p>When a <a class="link" href="GstTestClock.html" title="GstTestClock"><span class="type">GstTestClock</span></a> is constructed it will have a certain start time set.
diff --git a/docs/libs/html/gstreamer-libs-1.0.devhelp2 b/docs/libs/html/gstreamer-libs-1.0.devhelp2
index bb1d73b..6265ef0 100644
--- a/docs/libs/html/gstreamer-libs-1.0.devhelp2
+++ b/docs/libs/html/gstreamer-libs-1.0.devhelp2
@@ -209,6 +209,11 @@
     <keyword type="function" name="gst_adapter_prev_dts ()" link="GstAdapter.html#gst-adapter-prev-dts"/>
     <keyword type="function" name="gst_adapter_prev_pts_at_offset ()" link="GstAdapter.html#gst-adapter-prev-pts-at-offset" since="1.2"/>
     <keyword type="function" name="gst_adapter_prev_dts_at_offset ()" link="GstAdapter.html#gst-adapter-prev-dts-at-offset" since="1.2"/>
+    <keyword type="function" name="gst_adapter_prev_offset ()" link="GstAdapter.html#gst-adapter-prev-offset" since="1.10"/>
+    <keyword type="function" name="gst_adapter_pts_at_discont ()" link="GstAdapter.html#gst-adapter-pts-at-discont" since="1.10"/>
+    <keyword type="function" name="gst_adapter_dts_at_discont ()" link="GstAdapter.html#gst-adapter-dts-at-discont" since="1.10"/>
+    <keyword type="function" name="gst_adapter_offset_at_discont ()" link="GstAdapter.html#gst-adapter-offset-at-discont" since="1.10"/>
+    <keyword type="function" name="gst_adapter_distance_from_discont ()" link="GstAdapter.html#gst-adapter-distance-from-discont"/>
     <keyword type="function" name="gst_adapter_masked_scan_uint32 ()" link="GstAdapter.html#gst-adapter-masked-scan-uint32"/>
     <keyword type="function" name="gst_adapter_masked_scan_uint32_peek ()" link="GstAdapter.html#gst-adapter-masked-scan-uint32-peek"/>
     <keyword type="struct" name="GstAdapter" link="GstAdapter.html#GstAdapter-struct"/>
@@ -786,6 +791,7 @@
     <keyword type="function" name="gst_test_clock_crank ()" link="GstTestClock.html#gst-test-clock-crank" since="1.8"/>
     <keyword type="struct" name="struct GstTestClock" link="GstTestClock.html#GstTestClock-struct"/>
     <keyword type="struct" name="struct GstTestClockClass" link="GstTestClock.html#GstTestClockClass" since="1.2"/>
+    <keyword type="property" name="The “clock-type” property" link="GstTestClock.html#GstTestClock--clock-type"/>
     <keyword type="property" name="The “start-time” property" link="GstTestClock.html#GstTestClock--start-time"/>
     <keyword type="constant" name="GST_BASE_PARSE_FRAME_FLAG_NONE" link="GstBaseParse.html#GST-BASE-PARSE-FRAME-FLAG-NONE:CAPS"/>
     <keyword type="constant" name="GST_BASE_PARSE_FRAME_FLAG_NEW_FRAME" link="GstBaseParse.html#GST-BASE-PARSE-FRAME-FLAG-NEW-FRAME:CAPS"/>
diff --git a/docs/libs/html/gstreamer-libs-GstFlowCombiner.html b/docs/libs/html/gstreamer-libs-GstFlowCombiner.html
index 5917acb..85916e0 100644
--- a/docs/libs/html/gstreamer-libs-GstFlowCombiner.html
+++ b/docs/libs/html/gstreamer-libs-GstFlowCombiner.html
@@ -317,7 +317,7 @@
 <a name="gst-flow-combiner-reset"></a><h3>gst_flow_combiner_reset ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>
 gst_flow_combiner_reset (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstFlowCombiner.html#GstFlowCombiner" title="GstFlowCombiner"><span class="type">GstFlowCombiner</span></a> *combiner</code></em>);</pre>
-<p>Removes all pads from a <a class="link" href="gstreamer-libs-GstFlowCombiner.html#GstFlowCombiner" title="GstFlowCombiner"><span class="type">GstFlowCombiner</span></a> and resets it to its initial state.</p>
+<p>Reset flow combiner and all pads to their initial state without removing pads.</p>
 <div class="refsect3">
 <a name="gst-flow-combiner-reset.parameters"></a><h4>Parameters</h4>
 <div class="informaltable"><table class="informaltable" width="100%" border="0">
diff --git a/docs/libs/html/gstreamer-libs-GstHarness.html b/docs/libs/html/gstreamer-libs-GstHarness.html
index 24acc86..d67df1f 100644
--- a/docs/libs/html/gstreamer-libs-GstHarness.html
+++ b/docs/libs/html/gstreamer-libs-GstHarness.html
@@ -2619,7 +2619,6 @@
 gst_harness_set_upstream_latency (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstHarness.html#GstHarness" title="struct GstHarness"><span class="type">GstHarness</span></a> *h</code></em>,
                                   <em class="parameter"><code><a href="../html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> latency</code></em>);</pre>
 <p>Sets the min latency reported by <a class="link" href="gstreamer-libs-GstHarness.html#GstHarness" title="struct GstHarness"><span class="type">GstHarness</span></a> when receiving a latency-query</p>
-<p>MT safe.</p>
 <div class="refsect3">
 <a name="gst-harness-set-upstream-latency.parameters"></a><h4>Parameters</h4>
 <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -2642,10 +2641,6 @@
 </tbody>
 </table></div>
 </div>
-<div class="refsect3">
-<a name="gst-harness-set-upstream-latency.returns"></a><h4>Returns</h4>
-<p> a <a href="../html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> with min latency</p>
-</div>
 <p class="since">Since: <a class="link" href="ix03.html#api-index-1.6">1.6</a></p>
 </div>
 <hr>
diff --git a/docs/libs/html/gstreamer-libs-GstTypeFindHelper.html b/docs/libs/html/gstreamer-libs-GstTypeFindHelper.html
index 508ceca..95b8b6f 100644
--- a/docs/libs/html/gstreamer-libs-GstTypeFindHelper.html
+++ b/docs/libs/html/gstreamer-libs-GstTypeFindHelper.html
@@ -280,7 +280,7 @@
 <td class="parameter_name"><p>size</p></td>
 <td class="parameter_description"><p> the size of <em class="parameter"><code>data</code></em>
 . </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for input. Default is transfer none."><span class="acronym">in</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for input. Default is transfer none."><span class="acronym">in</span></acronym>]</span></td>
 </tr>
 <tr>
 <td class="parameter_name"><p>prob</p></td>
diff --git a/docs/libs/html/index.html b/docs/libs/html/index.html
index fe09c3c..76a2ae1 100644
--- a/docs/libs/html/index.html
+++ b/docs/libs/html/index.html
@@ -15,7 +15,7 @@
 <div>
 <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GStreamer 1.0 Library Reference Manual</p></th></tr></table></div>
 <div><p class="releaseinfo">
-      for GStreamer Library 1.0 (1.8.3)
+      for GStreamer Library 1.0 (1.9.90)
       The latest version of this documentation can be found on-line at
       <a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/</a>.
     </p></div>
diff --git a/docs/libs/html/ix01.html b/docs/libs/html/ix01.html
index 0a15ac9..9873214 100644
--- a/docs/libs/html/ix01.html
+++ b/docs/libs/html/ix01.html
@@ -74,6 +74,14 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstAdapter.html#gst-adapter-distance-from-discont" title="gst_adapter_distance_from_discont ()">gst_adapter_distance_from_discont</a>, function in <a class="link" href="GstAdapter.html" title="GstAdapter">GstAdapter</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GstAdapter.html#gst-adapter-dts-at-discont" title="gst_adapter_dts_at_discont ()">gst_adapter_dts_at_discont</a>, function in <a class="link" href="GstAdapter.html" title="GstAdapter">GstAdapter</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstAdapter.html#gst-adapter-flush" title="gst_adapter_flush ()">gst_adapter_flush</a>, function in <a class="link" href="GstAdapter.html" title="GstAdapter">GstAdapter</a>
 </dt>
 <dd></dd>
@@ -110,6 +118,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstAdapter.html#gst-adapter-offset-at-discont" title="gst_adapter_offset_at_discont ()">gst_adapter_offset_at_discont</a>, function in <a class="link" href="GstAdapter.html" title="GstAdapter">GstAdapter</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstAdapter.html#gst-adapter-prev-dts" title="gst_adapter_prev_dts ()">gst_adapter_prev_dts</a>, function in <a class="link" href="GstAdapter.html" title="GstAdapter">GstAdapter</a>
 </dt>
 <dd></dd>
@@ -118,6 +130,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstAdapter.html#gst-adapter-prev-offset" title="gst_adapter_prev_offset ()">gst_adapter_prev_offset</a>, function in <a class="link" href="GstAdapter.html" title="GstAdapter">GstAdapter</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstAdapter.html#gst-adapter-prev-pts" title="gst_adapter_prev_pts ()">gst_adapter_prev_pts</a>, function in <a class="link" href="GstAdapter.html" title="GstAdapter">GstAdapter</a>
 </dt>
 <dd></dd>
@@ -126,6 +142,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstAdapter.html#gst-adapter-pts-at-discont" title="gst_adapter_pts_at_discont ()">gst_adapter_pts_at_discont</a>, function in <a class="link" href="GstAdapter.html" title="GstAdapter">GstAdapter</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstAdapter.html#gst-adapter-push" title="gst_adapter_push ()">gst_adapter_push</a>, function in <a class="link" href="GstAdapter.html" title="GstAdapter">GstAdapter</a>
 </dt>
 <dd></dd>
@@ -2847,6 +2867,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstTestClock.html#GstTestClock--clock-type" title="The “clock-type” property">GstTestClock:clock-type</a>, object property in <a class="link" href="GstTestClock.html" title="GstTestClock">GstTestClock</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstTestClock.html#GstTestClock--start-time" title="The “start-time” property">GstTestClock:start-time</a>, object property in <a class="link" href="GstTestClock.html" title="GstTestClock">GstTestClock</a>
 </dt>
 <dd></dd>
diff --git a/docs/manual/Makefile.in b/docs/manual/Makefile.in
index 0df1b64..512ba14 100644
--- a/docs/manual/Makefile.in
+++ b/docs/manual/Makefile.in
@@ -282,6 +282,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -289,17 +290,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -424,6 +422,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/docs/plugins/Makefile.in b/docs/plugins/Makefile.in
index ca4c517..7d44609 100644
--- a/docs/plugins/Makefile.in
+++ b/docs/plugins/Makefile.in
@@ -247,6 +247,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -254,17 +255,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -389,6 +387,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
@@ -984,9 +984,13 @@
 @ENABLE_GTK_DOC_TRUE@		$(top_srcdir)/common/plugins.xsl $$a > xml/`basename $$a`; done
 @ENABLE_GTK_DOC_TRUE@	@for f in $(EXAMPLE_CFILES); do \
 @ENABLE_GTK_DOC_TRUE@		$(PYTHON) $(top_srcdir)/common/c-to-xml.py $$f > xml/element-`basename $$f .c`.xml; done
-@ENABLE_GTK_DOC_TRUE@	@gtkdoc-mkdb \
+@ENABLE_GTK_DOC_TRUE@	@_source_dir='' ;						\
+@ENABLE_GTK_DOC_TRUE@	for i in $(DOC_SOURCE_DIR) ; do					\
+@ENABLE_GTK_DOC_TRUE@	    _source_dir="$${_source_dir} --source-dir=$$i" ;	        \
+@ENABLE_GTK_DOC_TRUE@	done ;								\
+@ENABLE_GTK_DOC_TRUE@	gtkdoc-mkdb \
 @ENABLE_GTK_DOC_TRUE@		--module=$(DOC_MODULE) \
-@ENABLE_GTK_DOC_TRUE@		--source-dir=$(DOC_SOURCE_DIR) \
+@ENABLE_GTK_DOC_TRUE@		$${_source_dir} \
 @ENABLE_GTK_DOC_TRUE@		 --expand-content-files="$(expand_content_files)" \
 @ENABLE_GTK_DOC_TRUE@		--main-sgml-file=$(srcdir)/$(DOC_MAIN_SGML_FILE) \
 @ENABLE_GTK_DOC_TRUE@		--output-format=xml \
diff --git a/docs/plugins/gstreamer-plugins.args b/docs/plugins/gstreamer-plugins.args
index b0fd4de..58d2650 100644
--- a/docs/plugins/gstreamer-plugins.args
+++ b/docs/plugins/gstreamer-plugins.args
@@ -144,7 +144,7 @@
 <RANGE>[0,100]</RANGE>
 <FLAGS>rw</FLAGS>
 <NICK>High percent</NICK>
-<BLURB>High threshold for buffering to finish. Only used if use-buffering is True.</BLURB>
+<BLURB>High threshold for buffering to finish. Only used if use-buffering is True (Deprecated: use high-watermark instead).</BLURB>
 <DEFAULT>99</DEFAULT>
 </ARG>
 
@@ -154,8 +154,8 @@
 <RANGE>[0,100]</RANGE>
 <FLAGS>rw</FLAGS>
 <NICK>Low percent</NICK>
-<BLURB>Low threshold for buffering to start. Only used if use-buffering is True.</BLURB>
-<DEFAULT>10</DEFAULT>
+<BLURB>Low threshold for buffering to start. Only used if use-buffering is True (Deprecated: use low-watermark instead).</BLURB>
+<DEFAULT>1</DEFAULT>
 </ARG>
 
 <ARG>
@@ -269,6 +269,26 @@
 </ARG>
 
 <ARG>
+<NAME>GstQueue2::high-watermark</NAME>
+<TYPE>gdouble</TYPE>
+<RANGE>[0,1]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>High watermark</NICK>
+<BLURB>High threshold for buffering to finish. Only used if use-buffering is True.</BLURB>
+<DEFAULT>0.99</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstQueue2::low-watermark</NAME>
+<TYPE>gdouble</TYPE>
+<RANGE>[0,1]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Low watermark</NICK>
+<BLURB>Low threshold for buffering to start. Only used if use-buffering is True.</BLURB>
+<DEFAULT>0.01</DEFAULT>
+</ARG>
+
+<ARG>
 <NAME>GstQueue::current-level-buffers</NAME>
 <TYPE>guint</TYPE>
 <RANGE></RANGE>
@@ -454,7 +474,7 @@
 <RANGE>[0,100]</RANGE>
 <FLAGS>rw</FLAGS>
 <NICK>High percent</NICK>
-<BLURB>High threshold for buffering to finish.</BLURB>
+<BLURB>High threshold for buffering to finish. Only used if use-buffering is True (Deprecated: use high-watermark instead).</BLURB>
 <DEFAULT>99</DEFAULT>
 </ARG>
 
@@ -464,8 +484,8 @@
 <RANGE>[0,100]</RANGE>
 <FLAGS>rw</FLAGS>
 <NICK>Low percent</NICK>
-<BLURB>Low threshold for buffering to start.</BLURB>
-<DEFAULT>10</DEFAULT>
+<BLURB>Low threshold for buffering to start. Only used if use-buffering is True (Deprecated: use low-watermark instead).</BLURB>
+<DEFAULT>1</DEFAULT>
 </ARG>
 
 <ARG>
@@ -539,6 +559,26 @@
 </ARG>
 
 <ARG>
+<NAME>GstMultiQueue::high-watermark</NAME>
+<TYPE>gdouble</TYPE>
+<RANGE>[0,1]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>High watermark</NICK>
+<BLURB>High threshold for buffering to finish. Only used if use-buffering is True.</BLURB>
+<DEFAULT>0.99</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMultiQueue::low-watermark</NAME>
+<TYPE>gdouble</TYPE>
+<RANGE>[0,1]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Low watermark</NICK>
+<BLURB>Low threshold for buffering to start. Only used if use-buffering is True.</BLURB>
+<DEFAULT>0.01</DEFAULT>
+</ARG>
+
+<ARG>
 <NAME>GstInputSelector::active-pad</NAME>
 <TYPE>GstPad*</TYPE>
 <RANGE></RANGE>
diff --git a/docs/plugins/gstreamer-plugins.hierarchy b/docs/plugins/gstreamer-plugins.hierarchy
index 480fce1..9c56b96 100644
--- a/docs/plugins/gstreamer-plugins.hierarchy
+++ b/docs/plugins/gstreamer-plugins.hierarchy
@@ -47,6 +47,7 @@
       GstTaskPool
       GstTracer
         GstLatencyTracer
+        GstLeaksTracer
         GstLogTracer
         GstRUsageTracer
         GstStatsTracer
diff --git a/docs/plugins/html/gstreamer-plugins-1.0.devhelp2 b/docs/plugins/html/gstreamer-plugins-1.0.devhelp2
index b5c58a1..b390403 100644
--- a/docs/plugins/html/gstreamer-plugins-1.0.devhelp2
+++ b/docs/plugins/html/gstreamer-plugins-1.0.devhelp2
@@ -128,6 +128,8 @@
     <keyword type="property" name="The “use-buffering” property" link="gstreamer-plugins-multiqueue.html#GstMultiQueue--use-buffering"/>
     <keyword type="property" name="The “unlinked-cache-time” property" link="gstreamer-plugins-multiqueue.html#GstMultiQueue--unlinked-cache-time"/>
     <keyword type="property" name="The “use-interleave” property" link="gstreamer-plugins-multiqueue.html#GstMultiQueue--use-interleave"/>
+    <keyword type="property" name="The “high-watermark” property" link="gstreamer-plugins-multiqueue.html#GstMultiQueue--high-watermark"/>
+    <keyword type="property" name="The “low-watermark” property" link="gstreamer-plugins-multiqueue.html#GstMultiQueue--low-watermark"/>
     <keyword type="signal" name="The “overrun” signal" link="gstreamer-plugins-multiqueue.html#GstMultiQueue-overrun"/>
     <keyword type="signal" name="The “underrun” signal" link="gstreamer-plugins-multiqueue.html#GstMultiQueue-underrun"/>
     <keyword type="struct" name="struct GstOutputSelector" link="gstreamer-plugins-output-selector.html#GstOutputSelector-struct"/>
@@ -152,6 +154,8 @@
     <keyword type="property" name="The “use-rate-estimate” property" link="gstreamer-plugins-queue2.html#GstQueue2--use-rate-estimate"/>
     <keyword type="property" name="The “avg-in-rate” property" link="gstreamer-plugins-queue2.html#GstQueue2--avg-in-rate"/>
     <keyword type="property" name="The “use-tags-bitrate” property" link="gstreamer-plugins-queue2.html#GstQueue2--use-tags-bitrate"/>
+    <keyword type="property" name="The “high-watermark” property" link="gstreamer-plugins-queue2.html#GstQueue2--high-watermark"/>
+    <keyword type="property" name="The “low-watermark” property" link="gstreamer-plugins-queue2.html#GstQueue2--low-watermark"/>
     <keyword type="signal" name="The “overrun” signal" link="gstreamer-plugins-queue2.html#GstQueue2-overrun"/>
     <keyword type="struct" name="struct GstQueue" link="gstreamer-plugins-queue.html#GstQueue-struct"/>
     <keyword type="enum" name="enum GstQueueLeaky" link="gstreamer-plugins-queue.html#GstQueueLeaky"/>
diff --git a/docs/plugins/html/gstreamer-plugins-multiqueue.html b/docs/plugins/html/gstreamer-plugins-multiqueue.html
index eda8063..cc52843 100644
--- a/docs/plugins/html/gstreamer-plugins-multiqueue.html
+++ b/docs/plugins/html/gstreamer-plugins-multiqueue.html
@@ -103,6 +103,16 @@
 <td class="property_name"><a class="link" href="gstreamer-plugins-multiqueue.html#GstMultiQueue--use-interleave" title="The “use-interleave” property">use-interleave</a></td>
 <td class="property_flags">Read / Write</td>
 </tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></td>
+<td class="property_name"><a class="link" href="gstreamer-plugins-multiqueue.html#GstMultiQueue--high-watermark" title="The “high-watermark” property">high-watermark</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></td>
+<td class="property_name"><a class="link" href="gstreamer-plugins-multiqueue.html#GstMultiQueue--low-watermark" title="The “low-watermark” property">low-watermark</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -234,6 +244,17 @@
   queues is filled.
   Both signals are emitted from the context of the streaming thread.
 </p>
+<p>
+  When using <a class="link" href="gstreamer-plugins-multiqueue.html#GstMultiQueue--sync-by-running-time" title="The “sync-by-running-time” property"><span class="type">“sync-by-running-time”</span></a> the unlinked streams will
+  be throttled by the highest running-time of linked streams. This allows
+  further relinking of those unlinked streams without them being in the
+  future (i.e. to achieve gapless playback).
+  When dealing with streams which have got different consumption requirements
+  downstream (ex: video decoders which will consume more buffer (in time) than
+  audio decoders), it is recommended to group streams of the same type
+  by using the pad "group-id" property. This will further throttle streams
+  in time within that group.
+</p>
 </div>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
@@ -369,7 +390,7 @@
 <p>Low threshold percent for buffering to start.</p>
 <p>Flags: Read / Write</p>
 <p>Allowed values: [0,100]</p>
-<p>Default value: 10</p>
+<p>Default value: 1</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -432,6 +453,26 @@
 <p>Flags: Read / Write</p>
 <p>Default value: FALSE</p>
 </div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiQueue--high-watermark"></a><h3>The <code class="literal">“high-watermark”</code> property</h3>
+<pre class="programlisting">  “high-watermark”           <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
+<p>High threshold watermark for buffering to finish.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,1]</p>
+<p>Default value: 0.99</p>
+<p class="since">Since: 1.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiQueue--low-watermark"></a><h3>The <code class="literal">“low-watermark”</code> property</h3>
+<pre class="programlisting">  “low-watermark”            <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
+<p>Low threshold watermark for buffering to start.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,1]</p>
+<p>Default value: 0.01</p>
+<p class="since">Since: 1.10</p>
+</div>
 </div>
 <div class="refsect1">
 <a name="gstreamer-plugins-multiqueue.signal-details"></a><h2>Signal Details</h2>
diff --git a/docs/plugins/html/gstreamer-plugins-plugin-coreelements.html b/docs/plugins/html/gstreamer-plugins-plugin-coreelements.html
index 86a8256..ceadef2 100644
--- a/docs/plugins/html/gstreamer-plugins-plugin-coreelements.html
+++ b/docs/plugins/html/gstreamer-plugins-plugin-coreelements.html
@@ -41,7 +41,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.8.3</td>
+<td>1.9.90</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gstreamer-plugins-queue2.html b/docs/plugins/html/gstreamer-plugins-queue2.html
index 7d3dcc6..c1f6b06 100644
--- a/docs/plugins/html/gstreamer-plugins-queue2.html
+++ b/docs/plugins/html/gstreamer-plugins-queue2.html
@@ -125,6 +125,16 @@
 <td class="property_name"><a class="link" href="gstreamer-plugins-queue2.html#GstQueue2--use-tags-bitrate" title="The “use-tags-bitrate” property">use-tags-bitrate</a></td>
 <td class="property_flags">Read / Write</td>
 </tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></td>
+<td class="property_name"><a class="link" href="gstreamer-plugins-queue2.html#GstQueue2--high-watermark" title="The “high-watermark” property">high-watermark</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></td>
+<td class="property_name"><a class="link" href="gstreamer-plugins-queue2.html#GstQueue2--low-watermark" title="The “low-watermark” property">low-watermark</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -305,7 +315,7 @@
 <div class="refsect2">
 <a name="GstQueue2--high-percent"></a><h3>The <code class="literal">“high-percent”</code> property</h3>
 <pre class="programlisting">  “high-percent”             <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
-<p>High threshold for buffering to finish. Only used if use-buffering is True.</p>
+<p>High threshold for buffering to finish. Only used if use-buffering is True (Deprecated: use high-watermark instead).</p>
 <p>Flags: Read / Write</p>
 <p>Allowed values: [0,100]</p>
 <p>Default value: 99</p>
@@ -314,10 +324,10 @@
 <div class="refsect2">
 <a name="GstQueue2--low-percent"></a><h3>The <code class="literal">“low-percent”</code> property</h3>
 <pre class="programlisting">  “low-percent”              <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
-<p>Low threshold for buffering to start. Only used if use-buffering is True.</p>
+<p>Low threshold for buffering to start. Only used if use-buffering is True (Deprecated: use low-watermark instead).</p>
 <p>Flags: Read / Write</p>
 <p>Allowed values: [0,100]</p>
-<p>Default value: 10</p>
+<p>Default value: 1</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -409,6 +419,24 @@
 <p>Flags: Read / Write</p>
 <p>Default value: FALSE</p>
 </div>
+<hr>
+<div class="refsect2">
+<a name="GstQueue2--high-watermark"></a><h3>The <code class="literal">“high-watermark”</code> property</h3>
+<pre class="programlisting">  “high-watermark”           <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
+<p>High threshold for buffering to finish. Only used if use-buffering is True.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,1]</p>
+<p>Default value: 0.99</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstQueue2--low-watermark"></a><h3>The <code class="literal">“low-watermark”</code> property</h3>
+<pre class="programlisting">  “low-watermark”            <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
+<p>Low threshold for buffering to start. Only used if use-buffering is True.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,1]</p>
+<p>Default value: 0.01</p>
+</div>
 </div>
 <div class="refsect1">
 <a name="gstreamer-plugins-queue2.signal-details"></a><h2>Signal Details</h2>
diff --git a/docs/plugins/html/index.html b/docs/plugins/html/index.html
index 2db4fb1..1dec7f3 100644
--- a/docs/plugins/html/index.html
+++ b/docs/plugins/html/index.html
@@ -15,7 +15,7 @@
 <div>
 <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GStreamer Core Plugins 1.0 Plugins Reference Manual</p></th></tr></table></div>
 <div><p class="releaseinfo">
-      for GStreamer Core Plugins 1.0 (1.8.3)
+      for GStreamer Core Plugins 1.0 (1.9.90)
       The latest version of this documentation can be found on-line at
       <a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-plugins/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-plugins/html/</a>.
     </p></div>
diff --git a/docs/plugins/inspect/plugin-coreelements.xml b/docs/plugins/inspect/plugin-coreelements.xml
index e447d00..8b17807 100644
--- a/docs/plugins/inspect/plugin-coreelements.xml
+++ b/docs/plugins/inspect/plugin-coreelements.xml
@@ -3,7 +3,7 @@
   <description>GStreamer core elements</description>
   <filename>../../plugins/elements/.libs/libgstcoreelements.so</filename>
   <basename>libgstcoreelements.so</basename>
-  <version>1.8.3</version>
+  <version>1.9.90</version>
   <license>LGPL</license>
   <source>gstreamer</source>
   <package>GStreamer source release</package>
diff --git a/docs/plugins/inspect/plugin-coretracers.xml b/docs/plugins/inspect/plugin-coretracers.xml
index e7df50f..c8b3d0f 100644
--- a/docs/plugins/inspect/plugin-coretracers.xml
+++ b/docs/plugins/inspect/plugin-coretracers.xml
@@ -3,7 +3,7 @@
   <description>GStreamer core tracers</description>
   <filename>../../plugins/tracers/.libs/libgstcoretracers.so</filename>
   <basename>libgstcoretracers.so</basename>
-  <version>1.8.3</version>
+  <version>1.9.90</version>
   <license>LGPL</license>
   <source>gstreamer</source>
   <package>GStreamer source release</package>
diff --git a/docs/pwg/Makefile.in b/docs/pwg/Makefile.in
index 68be98f..be1bb68 100644
--- a/docs/pwg/Makefile.in
+++ b/docs/pwg/Makefile.in
@@ -282,6 +282,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -289,17 +290,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -424,6 +422,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/docs/pwg/building-boiler.xml b/docs/pwg/building-boiler.xml
index 5d78123..251bf33 100644
--- a/docs/pwg/building-boiler.xml
+++ b/docs/pwg/building-boiler.xml
@@ -159,9 +159,6 @@
       file (although since the interface to the code is entirely defined by the
       plugin system, and doesn't depend on reading a header file, this is not
       crucial.)
-
-      The code here can be found in
-      <filename>examples/pwg/examplefilter/boiler/gstexamplefilter.h</filename>.
     </para>
 
     <example id="ex-boiler-examine-h">
diff --git a/docs/pwg/pwg.xml b/docs/pwg/pwg.xml
index 4f79709..52d729e 100644
--- a/docs/pwg/pwg.xml
+++ b/docs/pwg/pwg.xml
@@ -110,11 +110,6 @@
         reading the next part of the guide, <xref linkend="part-advanced"/>, you
         will be able to add even more functionality to your plugins.
       </para>
-      <para>
-        The example code used in this part of the guide can be found in
-        <filename class="directory">examples/pwg/examplefilter/</filename> in
-        your &GStreamer; directory.
-      </para>
     </partintro>
 
     &BUILDING_BOILER;
diff --git a/docs/slides/Makefile.in b/docs/slides/Makefile.in
index 9c3405e..d60ff9e 100644
--- a/docs/slides/Makefile.in
+++ b/docs/slides/Makefile.in
@@ -228,6 +228,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -235,17 +236,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -370,6 +368,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/docs/xsl/Makefile.in b/docs/xsl/Makefile.in
index a6d6a11..166c6b6 100644
--- a/docs/xsl/Makefile.in
+++ b/docs/xsl/Makefile.in
@@ -228,6 +228,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -235,17 +236,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -370,6 +368,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/gst/Makefile.am b/gst/Makefile.am
index 7b113e9..4fe947a 100644
--- a/gst/Makefile.am
+++ b/gst/Makefile.am
@@ -14,12 +14,6 @@
 GST_PARSE_LA = parse/libgstparse.la
 endif
 
-if GST_DISABLE_TRACE
-GST_TRACE_SRC =
-else
-GST_TRACE_SRC = gsttrace.c
-endif
-
 if GST_DISABLE_PLUGIN
 GST_PLUGIN_SRC =
 else
@@ -41,13 +35,11 @@
 # make variables for all generated source and header files to make the
 # distinction clear
 
-built_header_configure = gstversion.h
-built_sys_header_configure = gstconfig.h
+built_headers_configure = gstversion.h gstconfig.h
 built_header_make = gstenumtypes.h
 built_source_make = gstenumtypes.c
 
 EXTRA_libgstreamer_@GST_API_VERSION@_la_SOURCES = \
-	gsttrace.c \
 	gstregistrybinary.c
 
 
@@ -106,6 +98,8 @@
 	gstregistrychunks.c	\
 	gstsample.c		\
 	gstsegment.c		\
+	gststreamcollection.c	\
+	gststreams.c		\
 	gststructure.c		\
 	gstsystemclock.c	\
 	gsttaglist.c		\
@@ -114,7 +108,6 @@
 	gsttaskpool.c		\
 	gsttoc.c		\
 	gsttocsetter.c		\
-	$(GST_TRACE_SRC)	\
 	gsttracer.c		\
 	gsttracerfactory.c	\
 	gsttracerrecord.c		\
@@ -132,14 +125,13 @@
 
 # BUILT_SOURCES are built on make all/check/install before all other targets
 BUILT_SOURCES = \
-        $(built_header_configure)	\
-        $(built_sys_header_configure)	\
+        $(built_headers_configure)	\
         $(built_header_make)		\
         $(built_source_make)
 # CLEANFILES is for files generated by make
 CLEANFILES = $(built_header_make) $(built_source_make) $(as_dll_cleanfiles) *.gcno *.gcda *.gcov *.gcov.out
 # DISTCLEANFILES is for files generated by configure
-DISTCLEANFILES = $(built_header_configure) $(built_sys_header_configure)
+DISTCLEANFILES = $(built_headers_configure)
 
 libgstreamer_@GST_API_VERSION@_la_CFLAGS =		\
 	-D_GNU_SOURCE					\
@@ -214,6 +206,8 @@
 	gstquery.h		\
 	gstsample.h		\
 	gstsegment.h		\
+	gststreamcollection.h	\
+	gststreams.h		\
 	gststructure.h		\
 	gstsystemclock.h	\
 	gsttaglist.h		\
@@ -236,10 +230,7 @@
 libgstreamer_@GST_API_VERSION@include_HEADERS = $(gst_headers) math-compat.h
 
 nodist_libgstreamer_@GST_API_VERSION@include_HEADERS = \
-	$(built_header_configure) $(built_header_make)
-
-configexecincludedir = $(libdir)/gstreamer-@GST_API_VERSION@/include/gst
-nodist_configexecinclude_HEADERS = $(built_sys_header_configure)
+	$(built_headers_configure) $(built_header_make)
 
 noinst_HEADERS = 		\
 	gettext.h		\
@@ -251,7 +242,6 @@
 	gstquark.h		\
 	gstregistrybinary.h     \
 	gstregistrychunks.h     \
-	gsttrace.h		\
 	gsttracerutils.h		\
 	gst_private.h
 
diff --git a/gst/Makefile.in b/gst/Makefile.in
index 9f2de69..144d927 100644
--- a/gst/Makefile.in
+++ b/gst/Makefile.in
@@ -169,7 +169,6 @@
 am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" \
 	"$(DESTDIR)$(typelibsdir)" \
 	"$(DESTDIR)$(libgstreamer_@GST_API_VERSION@includedir)" \
-	"$(DESTDIR)$(configexecincludedir)" \
 	"$(DESTDIR)$(libgstreamer_@GST_API_VERSION@includedir)"
 LTLIBRARIES = $(lib_LTLIBRARIES)
 @GST_DISABLE_PARSE_FALSE@am__DEPENDENCIES_1 = parse/libgstparse.la
@@ -193,14 +192,14 @@
 	gstpadtemplate.c gstparamspecs.c gstpipeline.c gstplugin.c \
 	gstpluginfeature.c gstpluginloader.c gstpoll.c gstpreset.c \
 	gstprotection.c gstquark.c gstquery.c gstregistry.c \
-	gstregistrychunks.c gstsample.c gstsegment.c gststructure.c \
+	gstregistrychunks.c gstsample.c gstsegment.c \
+	gststreamcollection.c gststreams.c gststructure.c \
 	gstsystemclock.c gsttaglist.c gsttagsetter.c gsttask.c \
-	gsttaskpool.c gsttoc.c gsttocsetter.c gsttrace.c gsttracer.c \
+	gsttaskpool.c gsttoc.c gsttocsetter.c gsttracer.c \
 	gsttracerfactory.c gsttracerrecord.c gsttracerutils.c \
 	gsttypefind.c gsttypefindfactory.c gsturi.c gstutils.c \
 	gstvalue.c gstparse.c gstregistrybinary.c
-@GST_DISABLE_TRACE_FALSE@am__objects_1 = libgstreamer_@GST_API_VERSION@_la-gsttrace.lo
-@GST_DISABLE_REGISTRY_FALSE@am__objects_2 = libgstreamer_@GST_API_VERSION@_la-gstregistrybinary.lo
+@GST_DISABLE_REGISTRY_FALSE@am__objects_1 = libgstreamer_@GST_API_VERSION@_la-gstregistrybinary.lo
 am_libgstreamer_@GST_API_VERSION@_la_OBJECTS =  \
 	libgstreamer_@GST_API_VERSION@_la-gst.lo \
 	libgstreamer_@GST_API_VERSION@_la-gstobject.lo \
@@ -253,6 +252,8 @@
 	libgstreamer_@GST_API_VERSION@_la-gstregistrychunks.lo \
 	libgstreamer_@GST_API_VERSION@_la-gstsample.lo \
 	libgstreamer_@GST_API_VERSION@_la-gstsegment.lo \
+	libgstreamer_@GST_API_VERSION@_la-gststreamcollection.lo \
+	libgstreamer_@GST_API_VERSION@_la-gststreams.lo \
 	libgstreamer_@GST_API_VERSION@_la-gststructure.lo \
 	libgstreamer_@GST_API_VERSION@_la-gstsystemclock.lo \
 	libgstreamer_@GST_API_VERSION@_la-gsttaglist.lo \
@@ -261,7 +262,6 @@
 	libgstreamer_@GST_API_VERSION@_la-gsttaskpool.lo \
 	libgstreamer_@GST_API_VERSION@_la-gsttoc.lo \
 	libgstreamer_@GST_API_VERSION@_la-gsttocsetter.lo \
-	$(am__objects_1) \
 	libgstreamer_@GST_API_VERSION@_la-gsttracer.lo \
 	libgstreamer_@GST_API_VERSION@_la-gsttracerfactory.lo \
 	libgstreamer_@GST_API_VERSION@_la-gsttracerrecord.lo \
@@ -271,9 +271,9 @@
 	libgstreamer_@GST_API_VERSION@_la-gsturi.lo \
 	libgstreamer_@GST_API_VERSION@_la-gstutils.lo \
 	libgstreamer_@GST_API_VERSION@_la-gstvalue.lo \
-	libgstreamer_@GST_API_VERSION@_la-gstparse.lo $(am__objects_2)
-am__objects_3 = libgstreamer_@GST_API_VERSION@_la-gstenumtypes.lo
-nodist_libgstreamer_@GST_API_VERSION@_la_OBJECTS = $(am__objects_3)
+	libgstreamer_@GST_API_VERSION@_la-gstparse.lo $(am__objects_1)
+am__objects_2 = libgstreamer_@GST_API_VERSION@_la-gstenumtypes.lo
+nodist_libgstreamer_@GST_API_VERSION@_la_OBJECTS = $(am__objects_2)
 libgstreamer_@GST_API_VERSION@_la_OBJECTS =  \
 	$(am_libgstreamer_@GST_API_VERSION@_la_OBJECTS) \
 	$(nodist_libgstreamer_@GST_API_VERSION@_la_OBJECTS)
@@ -339,7 +339,6 @@
   esac
 DATA = $(gir_DATA) $(typelibs_DATA)
 HEADERS = $(libgstreamer_@GST_API_VERSION@include_HEADERS) \
-	$(nodist_configexecinclude_HEADERS) \
 	$(nodist_libgstreamer_@GST_API_VERSION@include_HEADERS) \
 	$(noinst_HEADERS)
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
@@ -470,6 +469,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -477,17 +477,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -612,6 +609,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
@@ -696,8 +695,6 @@
 @GST_DISABLE_PARSE_TRUE@SUBDIRS_PARSE = 
 @GST_DISABLE_PARSE_FALSE@GST_PARSE_LA = parse/libgstparse.la
 @GST_DISABLE_PARSE_TRUE@GST_PARSE_LA = 
-@GST_DISABLE_TRACE_FALSE@GST_TRACE_SRC = gsttrace.c
-@GST_DISABLE_TRACE_TRUE@GST_TRACE_SRC = 
 @GST_DISABLE_PLUGIN_FALSE@GST_PLUGIN_SRC = gstplugin.c
 @GST_DISABLE_PLUGIN_TRUE@GST_PLUGIN_SRC = 
 @GST_DISABLE_GST_DEBUG_FALSE@SUBDIRS_PRINTF = printf
@@ -709,12 +706,10 @@
 
 # make variables for all generated source and header files to make the
 # distinction clear
-built_header_configure = gstversion.h
-built_sys_header_configure = gstconfig.h
+built_headers_configure = gstversion.h gstconfig.h
 built_header_make = gstenumtypes.h
 built_source_make = gstenumtypes.c
 EXTRA_libgstreamer_@GST_API_VERSION@_la_SOURCES = \
-	gsttrace.c \
 	gstregistrybinary.c
 
 
@@ -772,6 +767,8 @@
 	gstregistrychunks.c	\
 	gstsample.c		\
 	gstsegment.c		\
+	gststreamcollection.c	\
+	gststreams.c		\
 	gststructure.c		\
 	gstsystemclock.c	\
 	gsttaglist.c		\
@@ -780,7 +777,6 @@
 	gsttaskpool.c		\
 	gsttoc.c		\
 	gsttocsetter.c		\
-	$(GST_TRACE_SRC)	\
 	gsttracer.c		\
 	gsttracerfactory.c	\
 	gsttracerrecord.c		\
@@ -799,8 +795,7 @@
 
 # BUILT_SOURCES are built on make all/check/install before all other targets
 BUILT_SOURCES = \
-        $(built_header_configure)	\
-        $(built_sys_header_configure)	\
+        $(built_headers_configure)	\
         $(built_header_make)		\
         $(built_source_make)
 
@@ -809,7 +804,7 @@
 	$(as_dll_cleanfiles) *.gcno *.gcda *.gcov *.gcov.out \
 	$(am__append_1)
 # DISTCLEANFILES is for files generated by configure
-DISTCLEANFILES = $(built_header_configure) $(built_sys_header_configure)
+DISTCLEANFILES = $(built_headers_configure)
 libgstreamer_@GST_API_VERSION@_la_CFLAGS = \
 	-D_GNU_SOURCE					\
 	-DGST_EXPORTS					\
@@ -882,6 +877,8 @@
 	gstquery.h		\
 	gstsample.h		\
 	gstsegment.h		\
+	gststreamcollection.h	\
+	gststreams.h		\
 	gststructure.h		\
 	gstsystemclock.h	\
 	gsttaglist.h		\
@@ -903,10 +900,8 @@
 
 libgstreamer_@GST_API_VERSION@include_HEADERS = $(gst_headers) math-compat.h
 nodist_libgstreamer_@GST_API_VERSION@include_HEADERS = \
-	$(built_header_configure) $(built_header_make)
+	$(built_headers_configure) $(built_header_make)
 
-configexecincludedir = $(libdir)/gstreamer-@GST_API_VERSION@/include/gst
-nodist_configexecinclude_HEADERS = $(built_sys_header_configure)
 noinst_HEADERS = \
 	gettext.h		\
 	glib-compat-private.h	\
@@ -917,7 +912,6 @@
 	gstquark.h		\
 	gstregistrybinary.h     \
 	gstregistrychunks.h     \
-	gsttrace.h		\
 	gsttracerutils.h		\
 	gst_private.h
 
@@ -1075,6 +1069,8 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstregistrychunks.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstsample.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstsegment.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gststreamcollection.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gststreams.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gststructure.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstsystemclock.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gsttaglist.Plo@am__quote@
@@ -1083,7 +1079,6 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gsttaskpool.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gsttoc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gsttocsetter.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gsttrace.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gsttracer.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gsttracerfactory.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gsttracerrecord.Plo@am__quote@
@@ -1475,6 +1470,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstreamer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstreamer_@GST_API_VERSION@_la-gstsegment.lo `test -f 'gstsegment.c' || echo '$(srcdir)/'`gstsegment.c
 
+libgstreamer_@GST_API_VERSION@_la-gststreamcollection.lo: gststreamcollection.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstreamer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstreamer_@GST_API_VERSION@_la-gststreamcollection.lo -MD -MP -MF $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gststreamcollection.Tpo -c -o libgstreamer_@GST_API_VERSION@_la-gststreamcollection.lo `test -f 'gststreamcollection.c' || echo '$(srcdir)/'`gststreamcollection.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gststreamcollection.Tpo $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gststreamcollection.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gststreamcollection.c' object='libgstreamer_@GST_API_VERSION@_la-gststreamcollection.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstreamer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstreamer_@GST_API_VERSION@_la-gststreamcollection.lo `test -f 'gststreamcollection.c' || echo '$(srcdir)/'`gststreamcollection.c
+
+libgstreamer_@GST_API_VERSION@_la-gststreams.lo: gststreams.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstreamer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstreamer_@GST_API_VERSION@_la-gststreams.lo -MD -MP -MF $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gststreams.Tpo -c -o libgstreamer_@GST_API_VERSION@_la-gststreams.lo `test -f 'gststreams.c' || echo '$(srcdir)/'`gststreams.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gststreams.Tpo $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gststreams.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gststreams.c' object='libgstreamer_@GST_API_VERSION@_la-gststreams.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstreamer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstreamer_@GST_API_VERSION@_la-gststreams.lo `test -f 'gststreams.c' || echo '$(srcdir)/'`gststreams.c
+
 libgstreamer_@GST_API_VERSION@_la-gststructure.lo: gststructure.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstreamer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstreamer_@GST_API_VERSION@_la-gststructure.lo -MD -MP -MF $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gststructure.Tpo -c -o libgstreamer_@GST_API_VERSION@_la-gststructure.lo `test -f 'gststructure.c' || echo '$(srcdir)/'`gststructure.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gststructure.Tpo $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gststructure.Plo
@@ -1531,13 +1540,6 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstreamer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstreamer_@GST_API_VERSION@_la-gsttocsetter.lo `test -f 'gsttocsetter.c' || echo '$(srcdir)/'`gsttocsetter.c
 
-libgstreamer_@GST_API_VERSION@_la-gsttrace.lo: gsttrace.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstreamer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstreamer_@GST_API_VERSION@_la-gsttrace.lo -MD -MP -MF $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gsttrace.Tpo -c -o libgstreamer_@GST_API_VERSION@_la-gsttrace.lo `test -f 'gsttrace.c' || echo '$(srcdir)/'`gsttrace.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gsttrace.Tpo $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gsttrace.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gsttrace.c' object='libgstreamer_@GST_API_VERSION@_la-gsttrace.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstreamer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstreamer_@GST_API_VERSION@_la-gsttrace.lo `test -f 'gsttrace.c' || echo '$(srcdir)/'`gsttrace.c
-
 libgstreamer_@GST_API_VERSION@_la-gsttracer.lo: gsttracer.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstreamer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstreamer_@GST_API_VERSION@_la-gsttracer.lo -MD -MP -MF $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gsttracer.Tpo -c -o libgstreamer_@GST_API_VERSION@_la-gsttracer.lo `test -f 'gsttracer.c' || echo '$(srcdir)/'`gsttracer.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gsttracer.Tpo $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gsttracer.Plo
@@ -1690,27 +1692,6 @@
 	@list='$(libgstreamer_@GST_API_VERSION@include_HEADERS)'; test -n "$(libgstreamer_@GST_API_VERSION@includedir)" || list=; \
 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
 	dir='$(DESTDIR)$(libgstreamer_@GST_API_VERSION@includedir)'; $(am__uninstall_files_from_dir)
-install-nodist_configexecincludeHEADERS: $(nodist_configexecinclude_HEADERS)
-	@$(NORMAL_INSTALL)
-	@list='$(nodist_configexecinclude_HEADERS)'; test -n "$(configexecincludedir)" || list=; \
-	if test -n "$$list"; then \
-	  echo " $(MKDIR_P) '$(DESTDIR)$(configexecincludedir)'"; \
-	  $(MKDIR_P) "$(DESTDIR)$(configexecincludedir)" || exit 1; \
-	fi; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  echo "$$d$$p"; \
-	done | $(am__base_list) | \
-	while read files; do \
-	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(configexecincludedir)'"; \
-	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(configexecincludedir)" || exit $$?; \
-	done
-
-uninstall-nodist_configexecincludeHEADERS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(nodist_configexecinclude_HEADERS)'; test -n "$(configexecincludedir)" || list=; \
-	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-	dir='$(DESTDIR)$(configexecincludedir)'; $(am__uninstall_files_from_dir)
 install-nodist_libgstreamer_@GST_API_VERSION@includeHEADERS: $(nodist_libgstreamer_@GST_API_VERSION@include_HEADERS)
 	@$(NORMAL_INSTALL)
 	@list='$(nodist_libgstreamer_@GST_API_VERSION@include_HEADERS)'; test -n "$(libgstreamer_@GST_API_VERSION@includedir)" || list=; \
@@ -1893,7 +1874,7 @@
 all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) all-local
 installdirs: installdirs-recursive
 installdirs-am:
-	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstreamer_@GST_API_VERSION@includedir)" "$(DESTDIR)$(configexecincludedir)" "$(DESTDIR)$(libgstreamer_@GST_API_VERSION@includedir)"; do \
+	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstreamer_@GST_API_VERSION@includedir)" "$(DESTDIR)$(libgstreamer_@GST_API_VERSION@includedir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
 install: $(BUILT_SOURCES)
@@ -1962,8 +1943,7 @@
 
 install-dvi-am:
 
-install-exec-am: install-libLTLIBRARIES \
-	install-nodist_configexecincludeHEADERS
+install-exec-am: install-libLTLIBRARIES
 
 install-html: install-html-recursive
 
@@ -2005,7 +1985,6 @@
 
 uninstall-am: uninstall-girDATA uninstall-libLTLIBRARIES \
 	uninstall-libgstreamer_@GST_API_VERSION@includeHEADERS \
-	uninstall-nodist_configexecincludeHEADERS \
 	uninstall-nodist_libgstreamer_@GST_API_VERSION@includeHEADERS \
 	uninstall-typelibsDATA
 
@@ -2022,7 +2001,7 @@
 	install-html install-html-am install-info install-info-am \
 	install-libLTLIBRARIES \
 	install-libgstreamer_@GST_API_VERSION@includeHEADERS \
-	install-man install-nodist_configexecincludeHEADERS \
+	install-man \
 	install-nodist_libgstreamer_@GST_API_VERSION@includeHEADERS \
 	install-pdf install-pdf-am install-ps install-ps-am \
 	install-strip install-typelibsDATA installcheck \
@@ -2032,7 +2011,6 @@
 	tags tags-am uninstall uninstall-am uninstall-girDATA \
 	uninstall-libLTLIBRARIES \
 	uninstall-libgstreamer_@GST_API_VERSION@includeHEADERS \
-	uninstall-nodist_configexecincludeHEADERS \
 	uninstall-nodist_libgstreamer_@GST_API_VERSION@includeHEADERS \
 	uninstall-typelibsDATA
 
diff --git a/gst/gst.c b/gst/gst.c
index 83b82d1..6c2953d 100644
--- a/gst/gst.c
+++ b/gst/gst.c
@@ -113,7 +113,6 @@
 #include <locale.h>             /* for LC_ALL */
 
 #include "gst.h"
-#include "gsttrace.h"
 
 #define GST_CAT_DEFAULT GST_CAT_GST_INIT
 
@@ -572,10 +571,6 @@
   llf = G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_ERROR | G_LOG_FLAG_FATAL;
   g_log_set_handler (g_log_domain_gstreamer, llf, debug_log_handler, NULL);
 
-#ifndef GST_DISABLE_TRACE
-  _priv_gst_alloc_trace_initialize ();
-#endif
-
   _priv_gst_mini_object_initialize ();
   _priv_gst_quarks_initialize ();
   _priv_gst_allocator_initialize ();
@@ -684,6 +679,7 @@
   g_type_class_ref (gst_lock_flags_get_type ());
   g_type_class_ref (gst_allocator_flags_get_type ());
   g_type_class_ref (gst_stream_flags_get_type ());
+  g_type_class_ref (gst_stream_type_get_type ());
 
   _priv_gst_event_initialize ();
   _priv_gst_buffer_initialize ();
@@ -691,9 +687,9 @@
   _priv_gst_sample_initialize ();
   _priv_gst_context_initialize ();
   _priv_gst_date_time_initialize ();
+  _priv_gst_value_initialize ();
   _priv_gst_tag_initialize ();
   _priv_gst_toc_initialize ();
-  _priv_gst_value_initialize ();
 
   g_type_class_ref (gst_param_spec_fraction_get_type ());
   gst_parse_context_get_type ();
@@ -763,8 +759,41 @@
   /* FIXME this is gross.  why don't debug have categories PluginFeatures? */
   for (g = list2; g; g = g_list_next (g)) {
     GstPlugin *plugin = GST_PLUGIN_CAST (g->data);
+    GList *features, *orig_features;
+
+    if (GST_OBJECT_FLAG_IS_SET (plugin, GST_PLUGIN_FLAG_BLACKLISTED))
+      continue;
 
     gst_plugin_load (plugin);
+    /* Now create one of each feature so the class_init functions
+     * are called, as that's where most debug categories are
+     * registered. FIXME: If debug categories were a plugin feature,
+     * this would be unneeded */
+    orig_features = features =
+        gst_registry_get_feature_list_by_plugin (gst_registry_get (),
+        gst_plugin_get_name (plugin));
+    while (features) {
+      GstPluginFeature *feature;
+
+      if (G_UNLIKELY (features->data == NULL))
+        goto next;
+
+      feature = GST_PLUGIN_FEATURE (features->data);
+      if (GST_IS_ELEMENT_FACTORY (feature)) {
+        GstElementFactory *factory;
+        GstElement *e;
+
+        factory = GST_ELEMENT_FACTORY (feature);
+        e = gst_element_factory_create (factory, NULL);
+        if (e)
+          gst_object_unref (e);
+      }
+
+    next:
+      features = g_list_next (features);
+    }
+
+    gst_plugin_feature_list_free (orig_features);
   }
   g_list_free (list2);
 
@@ -963,10 +992,6 @@
     GST_DEBUG ("already deinitialized");
     return;
   }
-#ifndef GST_DISABLE_GST_DEBUG
-  _priv_gst_tracing_deinit ();
-#endif
-
   g_thread_pool_set_max_unused_threads (0);
   bin_class = GST_BIN_CLASS (g_type_class_peek (gst_bin_get_type ()));
   if (bin_class->pool != NULL) {
@@ -990,11 +1015,18 @@
   gst_object_unref (clock);
 
   _priv_gst_registry_cleanup ();
+  _priv_gst_allocator_cleanup ();
 
-#ifndef GST_DISABLE_TRACE
-  _priv_gst_alloc_trace_deinit ();
+  /* We want to destroy tracers as late as possible for the leaks tracer
+   * but still need to keep the caps system alive as it may have to use
+   * gst_caps_to_string() to display leaked caps. */
+#ifndef GST_DISABLE_GST_DEBUG
+  _priv_gst_tracing_deinit ();
 #endif
 
+  _priv_gst_caps_features_cleanup ();
+  _priv_gst_caps_cleanup ();
+
   g_type_class_unref (g_type_class_peek (gst_object_get_type ()));
   g_type_class_unref (g_type_class_peek (gst_pad_get_type ()));
   g_type_class_unref (g_type_class_peek (gst_element_factory_get_type ()));
@@ -1083,6 +1115,7 @@
   g_type_class_unref (g_type_class_peek (gst_pad_probe_return_get_type ()));
   g_type_class_unref (g_type_class_peek (gst_segment_flags_get_type ()));
   g_type_class_unref (g_type_class_peek (gst_scheduling_flags_get_type ()));
+  g_type_class_unref (g_type_class_peek (gst_stream_type_get_type ()));
 
   g_type_class_unref (g_type_class_peek (gst_control_binding_get_type ()));
   g_type_class_unref (g_type_class_peek (gst_control_source_get_type ()));
diff --git a/gst/gst.h b/gst/gst.h
index 5a5cde6..0b07f41 100644
--- a/gst/gst.h
+++ b/gst/gst.h
@@ -58,6 +58,7 @@
 #include <gst/gstmeta.h>
 #include <gst/gstminiobject.h>
 #include <gst/gstobject.h>
+#include <gst/gststreamcollection.h>
 #include <gst/gstpad.h>
 #include <gst/gstparamspecs.h>
 #include <gst/gstpipeline.h>
@@ -69,6 +70,7 @@
 #include <gst/gstregistry.h>
 #include <gst/gstsample.h>
 #include <gst/gstsegment.h>
+#include <gst/gststreams.h>
 #include <gst/gststructure.h>
 #include <gst/gstsystemclock.h>
 #include <gst/gsttaglist.h>
diff --git a/gst/gst_private.h b/gst/gst_private.h
index ba24b6a..049142c 100644
--- a/gst/gst_private.h
+++ b/gst/gst_private.h
@@ -38,6 +38,9 @@
 #include <stdlib.h>
 #include <string.h>
 
+/* Needed for GST_EXPORT */
+#include "gst/gstconfig.h"
+
 /* Needed for GstRegistry * */
 #include "gstregistry.h"
 #include "gststructure.h"
@@ -127,6 +130,14 @@
 G_GNUC_INTERNAL  void  _priv_gst_toc_initialize (void);
 G_GNUC_INTERNAL  void  _priv_gst_date_time_initialize (void);
 
+/* cleanup functions called from gst_deinit(). */
+G_GNUC_INTERNAL  void  _priv_gst_allocator_cleanup (void);
+G_GNUC_INTERNAL  void  _priv_gst_caps_features_cleanup (void);
+G_GNUC_INTERNAL  void  _priv_gst_caps_cleanup (void);
+
+/* called from gst_task_cleanup_all(). */
+G_GNUC_INTERNAL  void  _priv_gst_element_cleanup (void);
+
 /* Private registry functions */
 G_GNUC_INTERNAL
 gboolean _priv_gst_registry_remove_cache_plugins (GstRegistry *registry);
diff --git a/gst/gstallocator.c b/gst/gstallocator.c
index c6763e1..df983d9 100644
--- a/gst/gstallocator.c
+++ b/gst/gstallocator.c
@@ -536,7 +536,11 @@
 static void
 gst_allocator_sysmem_finalize (GObject * obj)
 {
-  g_warning ("The default memory allocator was freed!");
+  /* Don't raise warnings if we are shutting down */
+  if (_default_allocator)
+    g_warning ("The default memory allocator was freed!");
+
+  ((GObjectClass *) gst_allocator_sysmem_parent_class)->finalize (obj);
 }
 
 static void
@@ -573,7 +577,8 @@
 _priv_gst_allocator_initialize (void)
 {
   g_rw_lock_init (&lock);
-  allocators = g_hash_table_new (g_str_hash, g_str_equal);
+  allocators = g_hash_table_new_full (g_str_hash, g_str_equal, NULL,
+      gst_object_unref);
 
 #ifdef HAVE_GETPAGESIZE
 #ifdef MEMORY_ALIGNMENT_PAGESIZE
@@ -592,6 +597,18 @@
   _default_allocator = gst_object_ref (_sysmem_allocator);
 }
 
+void
+_priv_gst_allocator_cleanup (void)
+{
+  gst_object_unref (_sysmem_allocator);
+  _sysmem_allocator = NULL;
+
+  gst_object_unref (_default_allocator);
+  _default_allocator = NULL;
+
+  g_clear_pointer (&allocators, g_hash_table_unref);
+}
+
 /**
  * gst_memory_new_wrapped:
  * @flags: #GstMemoryFlags
diff --git a/gst/gstbin.c b/gst/gstbin.c
index 9601b8e..820488b 100644
--- a/gst/gstbin.c
+++ b/gst/gstbin.c
@@ -197,11 +197,11 @@
 
   gboolean posted_eos;
   gboolean posted_playing;
+  GstElementFlags suppressed_flags;
 };
 
 typedef struct
 {
-  GstBin *bin;
   guint32 cookie;
   GstState pending;
 } BinContinueData;
@@ -221,11 +221,15 @@
 static void bin_handle_async_done (GstBin * bin, GstStateChangeReturn ret,
     gboolean flag_pending, GstClockTime running_time);
 static void bin_handle_async_start (GstBin * bin);
-static void bin_push_state_continue (BinContinueData * data);
+static void bin_push_state_continue (GstBin * bin, BinContinueData * data);
 static void bin_do_eos (GstBin * bin);
 
 static gboolean gst_bin_add_func (GstBin * bin, GstElement * element);
 static gboolean gst_bin_remove_func (GstBin * bin, GstElement * element);
+static void gst_bin_deep_element_added_func (GstBin * bin, GstBin * sub_bin,
+    GstElement * element);
+static void gst_bin_deep_element_removed_func (GstBin * bin, GstBin * sub_bin,
+    GstElement * element);
 static void gst_bin_update_context (GstBin * bin, GstContext * context);
 static void gst_bin_update_context_unlocked (GstBin * bin,
     GstContext * context);
@@ -249,7 +253,7 @@
 
 static void bin_remove_messages (GstBin * bin, GstObject * src,
     GstMessageType types);
-static void gst_bin_continue_func (BinContinueData * data);
+static void gst_bin_continue_func (GstBin * bin, BinContinueData * data);
 static gint bin_element_is_sink (GstElement * child, GstBin * bin);
 static gint bin_element_is_src (GstElement * child, GstBin * bin);
 
@@ -261,6 +265,8 @@
   ELEMENT_ADDED,
   ELEMENT_REMOVED,
   DO_LATENCY,
+  DEEP_ELEMENT_ADDED,
+  DEEP_ELEMENT_REMOVED,
   LAST_SIGNAL
 };
 
@@ -358,7 +364,6 @@
 {
   GObjectClass *gobject_class;
   GstElementClass *gstelement_class;
-  GError *err;
 
   gobject_class = (GObjectClass *) klass;
   gstelement_class = (GstElementClass *) klass;
@@ -403,6 +408,36 @@
       G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (GstBinClass, element_removed), NULL,
       NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 1, GST_TYPE_ELEMENT);
   /**
+   * GstBin::deep-element-added:
+   * @bin: the #GstBin
+   * @sub_bin: the #GstBin the element was added to
+   * @element: the #GstElement that was added to @sub_bin
+   *
+   * Will be emitted after the element was added to sub_bin.
+   *
+   * Since: 1.10
+   */
+  gst_bin_signals[DEEP_ELEMENT_ADDED] =
+      g_signal_new ("deep-element-added", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (GstBinClass, deep_element_added),
+      NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 2, GST_TYPE_BIN,
+      GST_TYPE_ELEMENT);
+  /**
+   * GstBin::deep-element-removed:
+   * @bin: the #GstBin
+   * @sub_bin: the #GstBin the element was removed from
+   * @element: the #GstElement that was removed from @sub_bin
+   *
+   * Will be emitted after the element was removed from sub_bin.
+   *
+   * Since: 1.10
+   */
+  gst_bin_signals[DEEP_ELEMENT_REMOVED] =
+      g_signal_new ("deep-element-removed", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (GstBinClass, deep_element_removed),
+      NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 2, GST_TYPE_BIN,
+      GST_TYPE_ELEMENT);
+  /**
    * GstBin::do-latency:
    * @bin: the #GstBin
    *
@@ -469,15 +504,10 @@
   klass->remove_element = GST_DEBUG_FUNCPTR (gst_bin_remove_func);
   klass->handle_message = GST_DEBUG_FUNCPTR (gst_bin_handle_message_func);
 
-  klass->do_latency = GST_DEBUG_FUNCPTR (gst_bin_do_latency_func);
+  klass->deep_element_added = gst_bin_deep_element_added_func;
+  klass->deep_element_removed = gst_bin_deep_element_removed_func;
 
-  GST_DEBUG ("creating bin thread pool");
-  err = NULL;
-  klass->pool =
-      g_thread_pool_new ((GFunc) gst_bin_continue_func, NULL, -1, FALSE, &err);
-  if (err != NULL) {
-    g_critical ("could not alloc threadpool %s", err->message);
-  }
+  klass->do_latency = GST_DEBUG_FUNCPTR (gst_bin_do_latency_func);
 }
 
 static void
@@ -514,7 +544,7 @@
   GstClock **provided_clock_p = &bin->provided_clock;
   GstElement **clock_provider_p = &bin->clock_provider;
 
-  GST_CAT_DEBUG_OBJECT (GST_CAT_REFCOUNTING, object, "dispose");
+  GST_CAT_DEBUG_OBJECT (GST_CAT_REFCOUNTING, object, "%p dispose", object);
 
   GST_OBJECT_LOCK (object);
   gst_object_replace ((GstObject **) child_bus_p, NULL);
@@ -954,7 +984,8 @@
 
     if (message_check (message, &find) == 0) {
       GST_DEBUG_OBJECT (GST_MESSAGE_SRC (message),
-          "deleting message %p of types 0x%08x", message, types);
+          "deleting message %p of type %s (types 0x%08x)", message,
+          GST_MESSAGE_TYPE_NAME (message), types);
       bin->messages = g_list_delete_link (bin->messages, walk);
       gst_message_unref (message);
     } else {
@@ -1083,6 +1114,53 @@
   }
 }
 
+static void
+bin_deep_iterator_foreach (const GValue * item, gpointer user_data)
+{
+  GQueue *queue = user_data;
+
+  g_queue_push_tail (queue, g_value_dup_object (item));
+}
+
+static void
+gst_bin_do_deep_add_remove (GstBin * bin, gint sig_id, const gchar * sig_name,
+    GstElement * element)
+{
+  g_signal_emit (bin, sig_id, 0, bin, element);
+
+  /* When removing a bin, emit deep-element-* for everything in the bin too */
+  if (GST_IS_BIN (element)) {
+    GstIterator *it;
+    GstIteratorResult ires;
+    GQueue elements = G_QUEUE_INIT;
+
+    GST_LOG_OBJECT (bin, "Recursing into bin %" GST_PTR_FORMAT " for %s",
+        element, sig_name);
+    it = gst_bin_iterate_recurse (GST_BIN_CAST (element));
+    do {
+      ires = gst_iterator_foreach (it, bin_deep_iterator_foreach, &elements);
+      if (ires != GST_ITERATOR_DONE) {
+        g_queue_foreach (&elements, (GFunc) g_object_unref, NULL);
+        g_queue_clear (&elements);
+      }
+    } while (ires == GST_ITERATOR_RESYNC);
+    if (ires != GST_ITERATOR_ERROR) {
+      GstElement *e;
+
+      while ((e = g_queue_pop_head (&elements))) {
+        GstObject *parent = gst_object_get_parent (GST_OBJECT_CAST (e));
+
+        GST_LOG_OBJECT (bin, "calling %s for element %" GST_PTR_FORMAT
+            " in bin %" GST_PTR_FORMAT, sig_name, e, parent);
+        g_signal_emit (bin, sig_id, 0, parent, e);
+        gst_object_unref (parent);
+        g_object_unref (e);
+      }
+    }
+    gst_iterator_free (it);
+  }
+}
+
 /* vmethod that adds an element to a bin
  *
  * MT safe
@@ -1129,23 +1207,25 @@
     goto had_parent;
 
   /* if we add a sink we become a sink */
-  if (is_sink) {
+  if (is_sink && !(bin->priv->suppressed_flags & GST_ELEMENT_FLAG_SINK)) {
     GST_CAT_DEBUG_OBJECT (GST_CAT_PARENTAGE, bin, "element \"%s\" was sink",
         elem_name);
     GST_OBJECT_FLAG_SET (bin, GST_ELEMENT_FLAG_SINK);
   }
-  if (is_source) {
+  if (is_source && !(bin->priv->suppressed_flags & GST_ELEMENT_FLAG_SOURCE)) {
     GST_CAT_DEBUG_OBJECT (GST_CAT_PARENTAGE, bin, "element \"%s\" was source",
         elem_name);
     GST_OBJECT_FLAG_SET (bin, GST_ELEMENT_FLAG_SOURCE);
   }
-  if (provides_clock) {
+  if (provides_clock
+      && !(bin->priv->suppressed_flags & GST_ELEMENT_FLAG_PROVIDE_CLOCK)) {
     GST_DEBUG_OBJECT (bin, "element \"%s\" can provide a clock", elem_name);
     clock_message =
         gst_message_new_clock_provide (GST_OBJECT_CAST (element), NULL, TRUE);
     GST_OBJECT_FLAG_SET (bin, GST_ELEMENT_FLAG_PROVIDE_CLOCK);
   }
-  if (requires_clock) {
+  if (requires_clock
+      && !(bin->priv->suppressed_flags & GST_ELEMENT_FLAG_REQUIRE_CLOCK)) {
     GST_DEBUG_OBJECT (bin, "element \"%s\" requires a clock", elem_name);
     GST_OBJECT_FLAG_SET (bin, GST_ELEMENT_FLAG_REQUIRE_CLOCK);
   }
@@ -1298,6 +1378,9 @@
   gst_child_proxy_child_added ((GstChildProxy *) bin, (GObject *) element,
       elem_name);
 
+  gst_bin_do_deep_add_remove (bin, gst_bin_signals[DEEP_ELEMENT_ADDED],
+      "deep-element-added", element);
+
   g_free (elem_name);
 
   return TRUE;
@@ -1328,6 +1411,105 @@
 }
 
 /**
+ * gst_bin_set_suppressed_flags:
+ * @bin: a #GstBin
+ * @flags: the #GstElementFlags to suppress
+ *
+ * Suppress the given flags on the bin. #GstElementFlags of a
+ * child element are propagated when it is added to the bin.
+ * When suppressed flags are set, those specified flags will
+ * not be propagated to the bin.
+ *
+ * MT safe.
+ *
+ * Since: 1.10
+ */
+void
+gst_bin_set_suppressed_flags (GstBin * bin, GstElementFlags flags)
+{
+  g_return_if_fail (GST_IS_BIN (bin));
+
+  GST_OBJECT_LOCK (bin);
+  bin->priv->suppressed_flags = bin->priv->suppressed_flags | flags;
+  GST_OBJECT_UNLOCK (bin);
+
+  GST_DEBUG_OBJECT (bin, "Set suppressed flags(0x%x) to bin '%s'", flags,
+      GST_ELEMENT_NAME (bin));
+}
+
+/**
+ * gst_bin_get_suppressed_flags:
+ * @bin: a #GstBin
+ *
+ * Return the suppressed flags of the bin.
+ *
+ * MT safe.
+ *
+ * Returns: the bin's suppressed #GstElementFlags.
+ *
+ * Since: 1.10
+ */
+GstElementFlags
+gst_bin_get_suppressed_flags (GstBin * bin)
+{
+  GstElementFlags res;
+
+  g_return_val_if_fail (GST_IS_BIN (bin), 0);
+
+  GST_OBJECT_LOCK (bin);
+  res = bin->priv->suppressed_flags;
+  GST_OBJECT_UNLOCK (bin);
+
+  return res;
+}
+
+/* signal vfunc, will be called when a new element was added */
+static void
+gst_bin_deep_element_added_func (GstBin * bin, GstBin * sub_bin,
+    GstElement * child)
+{
+  GstBin *parent_bin;
+
+  parent_bin = (GstBin *) gst_object_get_parent (GST_OBJECT_CAST (bin));
+  if (parent_bin == NULL) {
+    GST_LOG_OBJECT (bin, "no parent, reached top-level");
+    return;
+  }
+
+  GST_LOG_OBJECT (parent_bin, "emitting deep-element-added for element "
+      "%" GST_PTR_FORMAT " which has just been added to %" GST_PTR_FORMAT,
+      sub_bin, child);
+
+  g_signal_emit (parent_bin, gst_bin_signals[DEEP_ELEMENT_ADDED], 0, sub_bin,
+      child);
+
+  gst_object_unref (parent_bin);
+}
+
+/* signal vfunc, will be called when an element was removed */
+static void
+gst_bin_deep_element_removed_func (GstBin * bin, GstBin * sub_bin,
+    GstElement * child)
+{
+  GstBin *parent_bin;
+
+  parent_bin = (GstBin *) gst_object_get_parent (GST_OBJECT_CAST (bin));
+  if (parent_bin == NULL) {
+    GST_LOG_OBJECT (bin, "no parent, reached top-level");
+    return;
+  }
+
+  GST_LOG_OBJECT (parent_bin, "emitting deep-element-removed for element "
+      "%" GST_PTR_FORMAT " which has just been removed from %" GST_PTR_FORMAT,
+      sub_bin, child);
+
+  g_signal_emit (parent_bin, gst_bin_signals[DEEP_ELEMENT_REMOVED], 0, sub_bin,
+      child);
+
+  gst_object_unref (parent_bin);
+}
+
+/**
  * gst_bin_add:
  * @bin: a #GstBin
  * @element: (transfer full): the #GstElement to add
@@ -1483,22 +1665,26 @@
   if (!GST_BIN_IS_NO_RESYNC (bin))
     bin->priv->structure_cookie++;
 
-  if (is_sink && !othersink) {
+  if (is_sink && !othersink
+      && !(bin->priv->suppressed_flags & GST_ELEMENT_FLAG_SINK)) {
     /* we're not a sink anymore */
     GST_DEBUG_OBJECT (bin, "we removed the last sink");
     GST_OBJECT_FLAG_UNSET (bin, GST_ELEMENT_FLAG_SINK);
   }
-  if (is_source && !othersource) {
+  if (is_source && !othersource
+      && !(bin->priv->suppressed_flags & GST_ELEMENT_FLAG_SOURCE)) {
     /* we're not a source anymore */
     GST_DEBUG_OBJECT (bin, "we removed the last source");
     GST_OBJECT_FLAG_UNSET (bin, GST_ELEMENT_FLAG_SOURCE);
   }
-  if (provides_clock && !otherprovider) {
+  if (provides_clock && !otherprovider
+      && !(bin->priv->suppressed_flags & GST_ELEMENT_FLAG_PROVIDE_CLOCK)) {
     /* we're not a clock provider anymore */
     GST_DEBUG_OBJECT (bin, "we removed the last clock provider");
     GST_OBJECT_FLAG_UNSET (bin, GST_ELEMENT_FLAG_PROVIDE_CLOCK);
   }
-  if (requires_clock && !otherrequirer) {
+  if (requires_clock && !otherrequirer
+      && !(bin->priv->suppressed_flags & GST_ELEMENT_FLAG_REQUIRE_CLOCK)) {
     /* we're not a clock requirer anymore */
     GST_DEBUG_OBJECT (bin, "we removed the last clock requirer");
     GST_OBJECT_FLAG_UNSET (bin, GST_ELEMENT_FLAG_REQUIRE_CLOCK);
@@ -1633,6 +1819,9 @@
   gst_child_proxy_child_removed ((GstChildProxy *) bin, (GObject *) element,
       elem_name);
 
+  gst_bin_do_deep_add_remove (bin, gst_bin_signals[DEEP_ELEMENT_REMOVED],
+      "deep-element-removed", element);
+
   g_free (elem_name);
   /* element is really out of our control now */
   gst_object_unref (element);
@@ -1946,14 +2135,24 @@
 } GstBinSortIterator;
 
 static void
+copy_to_queue (gpointer data, gpointer user_data)
+{
+  GstElement *element = data;
+  GQueue *queue = user_data;
+
+  gst_object_ref (element);
+  g_queue_push_tail (queue, element);
+}
+
+static void
 gst_bin_sort_iterator_copy (const GstBinSortIterator * it,
     GstBinSortIterator * copy)
 {
   GHashTableIter iter;
   gpointer key, value;
 
-  copy->queue = it->queue;
-  g_queue_foreach (&copy->queue, (GFunc) gst_object_ref, NULL);
+  g_queue_init (&copy->queue);
+  g_queue_foreach ((GQueue *) & it->queue, copy_to_queue, &copy->queue);
 
   copy->bin = gst_object_ref (it->bin);
   if (it->best)
@@ -3025,13 +3224,11 @@
  * their state, this function will attempt to bring the bin to the next state.
  */
 static void
-gst_bin_continue_func (BinContinueData * data)
+gst_bin_continue_func (GstBin * bin, BinContinueData * data)
 {
-  GstBin *bin;
   GstState current, next, pending;
   GstStateChange transition;
 
-  bin = data->bin;
   pending = data->pending;
 
   GST_DEBUG_OBJECT (bin, "waiting for state lock");
@@ -3065,8 +3262,6 @@
   GST_STATE_UNLOCK (bin);
   GST_DEBUG_OBJECT (bin, "state continue done");
 
-  gst_object_unref (bin);
-  g_slice_free (BinContinueData, data);
   return;
 
 interrupted:
@@ -3074,8 +3269,6 @@
     GST_OBJECT_UNLOCK (bin);
     GST_STATE_UNLOCK (bin);
     GST_DEBUG_OBJECT (bin, "state continue aborted due to intervening change");
-    gst_object_unref (bin);
-    g_slice_free (BinContinueData, data);
     return;
   }
 }
@@ -3095,17 +3288,18 @@
 }
 
 static void
-bin_push_state_continue (BinContinueData * data)
+free_bin_continue_data (BinContinueData * data)
 {
-  GstBinClass *klass;
-  GstBin *bin;
+  g_slice_free (BinContinueData, data);
+}
 
-  /* ref was taken */
-  bin = data->bin;
-  klass = GST_BIN_GET_CLASS (bin);
-
+static void
+bin_push_state_continue (GstBin * bin, BinContinueData * data)
+{
   GST_DEBUG_OBJECT (bin, "pushing continue on thread pool");
-  g_thread_pool_push (klass->pool, data, NULL);
+  gst_element_call_async (GST_ELEMENT_CAST (bin),
+      (GstElementCallAsyncFunc) gst_bin_continue_func, data,
+      (GDestroyNotify) free_bin_continue_data);
 }
 
 /* an element started an async state change, if we were not busy with a state
@@ -3268,8 +3462,6 @@
 
     cont = g_slice_new (BinContinueData);
 
-    /* ref to the bin */
-    cont->bin = gst_object_ref (bin);
     /* cookie to detect concurrent state change */
     cont->cookie = GST_ELEMENT_CAST (bin)->state_cookie;
     /* pending target state */
@@ -3300,7 +3492,7 @@
   if (cont) {
     /* toplevel, start continue state */
     GST_DEBUG_OBJECT (bin, "all async-done, starting state continue");
-    bin_push_state_continue (cont);
+    bin_push_state_continue (bin, cont);
   } else {
     GST_DEBUG_OBJECT (bin, "state change complete");
     GST_STATE_BROADCAST (bin);
diff --git a/gst/gstbin.h b/gst/gstbin.h
index c8ffeff..04afa2d 100644
--- a/gst/gstbin.h
+++ b/gst/gstbin.h
@@ -147,12 +147,18 @@
  * The @handle_message method can be overridden to implement custom
  * message handling.  @handle_message takes ownership of the message, just like
  * #gst_element_post_message.
+ *
+ * The @element_added_deep vfunc will be called when a new element has been
+ * added to any bin inside this bin, so it will also be called if a new child
+ * was added to a sub-bin of this bin. #GstBin implementations that override
+ * this message should chain up to the parent class implementation so the
+ * element-added-deep signal is emitted on all parents.
  */
 struct _GstBinClass {
   GstElementClass parent_class;
 
   /*< private >*/
-  GThreadPool  *pool;
+  GThreadPool  *pool; /* deprecated */
 
   /* signals */
   void		(*element_added)	(GstBin *bin, GstElement *child);
@@ -169,8 +175,13 @@
   /* signal */
   gboolean	(*do_latency)           (GstBin *bin);
 
+  /*< public >*/
+  /* signal */
+  void          (*deep_element_added)   (GstBin *bin, GstBin *sub_bin, GstElement *child);
+  void          (*deep_element_removed) (GstBin *bin, GstBin *sub_bin, GstElement *child);
+
   /*< private >*/
-  gpointer _gst_reserved[GST_PADDING];
+  gpointer _gst_reserved[GST_PADDING-2];
 };
 
 GType		gst_bin_get_type		(void);
@@ -197,6 +208,9 @@
 /* latency */
 gboolean        gst_bin_recalculate_latency      (GstBin * bin);
 
+/* set and get suppressed flags */
+void            gst_bin_set_suppressed_flags (GstBin * bin, GstElementFlags flags);
+GstElementFlags gst_bin_get_suppressed_flags (GstBin * bin);
 
 #ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
 G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstBin, gst_object_unref)
diff --git a/gst/gstbuffer.c b/gst/gstbuffer.c
index 7eb3472..14a8825 100644
--- a/gst/gstbuffer.c
+++ b/gst/gstbuffer.c
@@ -306,6 +306,77 @@
   GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_TAG_MEMORY);
 }
 
+/**
+ * gst_buffer_get_flags:
+ * @buffer: a #GstBuffer
+ *
+ * Get the #GstBufferFlags flags set on this buffer.
+ *
+ * Returns: the flags set on this buffer.
+ *
+ * Since: 1.10
+ */
+GstBufferFlags
+gst_buffer_get_flags (GstBuffer * buffer)
+{
+  return (GstBufferFlags) GST_BUFFER_FLAGS (buffer);
+}
+
+/**
+ * gst_buffer_flag_is_set:
+ * @buffer: a #GstBuffer
+ * @flags: the #GstBufferFlags flag to check.
+ *
+ * Gives the status of a specific flag on a buffer.
+ *
+ * Returns: %TRUE if all flags in @flags are found on @buffer.
+ *
+ * Since: 1.10
+ */
+gboolean
+gst_buffer_has_flags (GstBuffer * buffer, GstBufferFlags flags)
+{
+  return GST_BUFFER_FLAG_IS_SET (buffer, flags);
+}
+
+/**
+ * gst_buffer_set_flags:
+ * @buffer: a #GstBuffer
+ * @flags: the #GstBufferFlags to set.
+ *
+ * Sets one or more buffer flags on a buffer.
+ *
+ * Returns: %TRUE if @flags were successfully set on buffer.
+ *
+ * Since: 1.10
+ */
+gboolean
+gst_buffer_set_flags (GstBuffer * buffer, GstBufferFlags flags)
+{
+  GST_BUFFER_FLAG_SET (buffer, flags);
+  return TRUE;
+}
+
+/**
+ * gst_buffer_unset_flags:
+ * @buffer: a #GstBuffer
+ * @flags: the #GstBufferFlags to clear
+ *
+ * Clears one or more buffer flags.
+ *
+ * Returns: true if @flags is successfully cleared from buffer.
+ *
+ * Since: 1.10
+ */
+gboolean
+gst_buffer_unset_flags (GstBuffer * buffer, GstBufferFlags flags)
+{
+  GST_BUFFER_FLAG_UNSET (buffer, flags);
+  return TRUE;
+}
+
+
+
 /* transfer full for return and transfer none for @mem */
 static inline GstMemory *
 _memory_get_exclusive_reference (GstMemory * mem)
@@ -902,7 +973,7 @@
  * Get the amount of memory blocks that this buffer has. This amount is never
  * larger than what gst_buffer_get_max_memory() returns.
  *
- * Returns: (transfer full): the amount of memory block in this buffer.
+ * Returns: the number of memory blocks this buffer is made of.
  */
 guint
 gst_buffer_n_memory (GstBuffer * buffer)
@@ -2091,11 +2162,17 @@
 
   /* create a new slice */
   size = ITEM_SIZE (info);
-  item = g_slice_alloc (size);
+  /* We warn in gst_meta_register() about metas without
+   * init function but let's play safe here and prevent
+   * uninitialized memory
+   */
+  if (!info->init_func)
+    item = g_slice_alloc0 (size);
+  else
+    item = g_slice_alloc (size);
   result = &item->meta;
   result->info = info;
   result->flags = GST_META_FLAG_NONE;
-
   GST_CAT_DEBUG (GST_CAT_BUFFER,
       "alloc metadata %p (%s) of size %" G_GSIZE_FORMAT, result,
       g_type_name (info->type), info->size);
diff --git a/gst/gstbuffer.h b/gst/gstbuffer.h
index 4d72471..41ddbb6 100644
--- a/gst/gstbuffer.h
+++ b/gst/gstbuffer.h
@@ -332,6 +332,13 @@
                                             gsize size, gpointer *dest,
                                             gsize *dest_size);
 
+GstBufferFlags gst_buffer_get_flags        (GstBuffer * buffer);
+gboolean       gst_buffer_has_flags        (GstBuffer * buffer, GstBufferFlags flags);
+gboolean       gst_buffer_set_flags        (GstBuffer * buffer, GstBufferFlags flags);
+gboolean       gst_buffer_unset_flags      (GstBuffer * buffer, GstBufferFlags flags);
+
+
+
 /* refcounting */
 /**
  * gst_buffer_ref:
diff --git a/gst/gstbufferpool.c b/gst/gstbufferpool.c
index a54b42d..133859d 100644
--- a/gst/gstbufferpool.c
+++ b/gst/gstbufferpool.c
@@ -80,6 +80,12 @@
 
 #include "gstbufferpool.h"
 
+#ifdef G_OS_WIN32
+#  ifndef EWOULDBLOCK
+#  define EWOULDBLOCK EAGAIN    /* This is just to placate gcc */
+#  endif
+#endif /* G_OS_WIN32 */
+
 GST_DEBUG_CATEGORY_STATIC (gst_buffer_pool_debug);
 #define GST_CAT_DEFAULT gst_buffer_pool_debug
 
@@ -170,9 +176,9 @@
   gst_allocation_params_init (&priv->params);
   gst_buffer_pool_config_set_allocator (priv->config, priv->allocator,
       &priv->params);
-  /* 1 control write for flushing */
+  /* 1 control write for flushing - the flush token */
   gst_poll_write_control (priv->poll);
-  /* 1 control write for marking that we are not waiting for poll */
+  /* 1 control write for marking that we are not waiting for poll - the wait token */
   gst_poll_write_control (priv->poll);
 
   GST_DEBUG_OBJECT (pool, "created");
@@ -187,7 +193,7 @@
   pool = GST_BUFFER_POOL_CAST (object);
   priv = pool->priv;
 
-  GST_DEBUG_OBJECT (pool, "finalize");
+  GST_DEBUG_OBJECT (pool, "%p finalize", pool);
 
   gst_buffer_pool_set_active (pool, FALSE);
   gst_atomic_queue_unref (priv->queue);
@@ -390,7 +396,17 @@
 
   /* clear the pool */
   while ((buffer = gst_atomic_queue_pop (priv->queue))) {
-    gst_poll_read_control (priv->poll);
+    while (!gst_poll_read_control (priv->poll)) {
+      if (errno == EWOULDBLOCK) {
+        /* We put the buffer into the queue but did not finish writing control
+         * yet, let's wait a bit and retry */
+        g_thread_yield ();
+        continue;
+      } else {
+        /* Critical error but GstPoll already complained */
+        break;
+      }
+    }
     do_free_buffer (pool, buffer);
   }
   return priv->cur_buffers == 0;
@@ -431,6 +447,7 @@
 
   if (flushing) {
     g_atomic_int_set (&pool->flushing, 1);
+    /* Write the flush token to wake up any waiters */
     gst_poll_write_control (priv->poll);
 
     if (pclass->flush_start)
@@ -439,7 +456,19 @@
     if (pclass->flush_stop)
       pclass->flush_stop (pool);
 
-    gst_poll_read_control (priv->poll);
+    while (!gst_poll_read_control (priv->poll)) {
+      if (errno == EWOULDBLOCK) {
+        /* This should not really happen unless flushing and unflushing
+         * happens on different threads. Let's wait a bit to get back flush
+         * token from the thread that was setting it to flushing */
+        g_thread_yield ();
+        continue;
+      } else {
+        /* Critical error but GstPoll already complained */
+        break;
+      }
+    }
+
     g_atomic_int_set (&pool->flushing, 0);
   }
 }
@@ -1080,7 +1109,17 @@
     /* try to get a buffer from the queue */
     *buffer = gst_atomic_queue_pop (priv->queue);
     if (G_LIKELY (*buffer)) {
-      gst_poll_read_control (priv->poll);
+      while (!gst_poll_read_control (priv->poll)) {
+        if (errno == EWOULDBLOCK) {
+          /* We put the buffer into the queue but did not finish writing control
+           * yet, let's wait a bit and retry */
+          g_thread_yield ();
+          continue;
+        } else {
+          /* Critical error but GstPoll already complained */
+          break;
+        }
+      }
       result = GST_FLOW_OK;
       GST_LOG_OBJECT (pool, "acquired buffer %p", *buffer);
       break;
@@ -1105,10 +1144,33 @@
 
     /* now we release the control socket, we wait for a buffer release or
      * flushing */
-    gst_poll_read_control (pool->priv->poll);
-    GST_LOG_OBJECT (pool, "waiting for free buffers or flushing");
-    gst_poll_wait (priv->poll, GST_CLOCK_TIME_NONE);
-    gst_poll_write_control (pool->priv->poll);
+    if (!gst_poll_read_control (pool->priv->poll)) {
+      if (errno == EWOULDBLOCK) {
+        /* This means that we have two threads trying to allocate buffers
+         * already, and the other one already got the wait token. This
+         * means that we only have to wait for the poll now and not write the
+         * token afterwards: we will be woken up once the other thread is
+         * woken up and that one will write the wait token it removed */
+        GST_LOG_OBJECT (pool, "waiting for free buffers or flushing");
+        gst_poll_wait (priv->poll, GST_CLOCK_TIME_NONE);
+      } else {
+        /* This is a critical error, GstPoll already gave a warning */
+        result = GST_FLOW_ERROR;
+        break;
+      }
+    } else {
+      /* We're the first thread waiting, we got the wait token and have to
+       * write it again later 
+       * OR
+       * We're a second thread and just consumed the flush token and block all
+       * other threads, in which case we must not wait and give it back
+       * immediately */
+      if (!GST_BUFFER_POOL_IS_FLUSHING (pool)) {
+        GST_LOG_OBJECT (pool, "waiting for free buffers or flushing");
+        gst_poll_wait (priv->poll, GST_CLOCK_TIME_NONE);
+      }
+      gst_poll_write_control (pool->priv->poll);
+    }
   }
 
   return result;
diff --git a/gst/gstbus.c b/gst/gstbus.c
index b8c2995..f94c18c 100644
--- a/gst/gstbus.c
+++ b/gst/gstbus.c
@@ -79,6 +79,12 @@
 #include "gstbus.h"
 #include "glib-compat-private.h"
 
+#ifdef G_OS_WIN32
+#  ifndef EWOULDBLOCK
+#  define EWOULDBLOCK EAGAIN    /* This is just to placate gcc */
+#  endif
+#endif /* G_OS_WIN32 */
+
 #define GST_CAT_DEFAULT GST_CAT_BUS
 /* bus signals */
 enum
@@ -515,8 +521,24 @@
         gst_atomic_queue_length (bus->priv->queue));
 
     while ((message = gst_atomic_queue_pop (bus->priv->queue))) {
-      if (bus->priv->poll)
-        gst_poll_read_control (bus->priv->poll);
+      if (bus->priv->poll) {
+        while (!gst_poll_read_control (bus->priv->poll)) {
+          if (errno == EWOULDBLOCK) {
+            /* Retry, this can happen if pushing to the queue has finished,
+             * popping here succeeded but writing control did not finish
+             * before we got to this line. */
+            /* Give other threads the chance to do something */
+            g_thread_yield ();
+            continue;
+          } else {
+            /* This is a real error and means that either the bus is in an
+             * inconsistent state, or the GstPoll is invalid. GstPoll already
+             * prints a critical warning about this, no need to do that again
+             * ourselves */
+            break;
+          }
+        }
+      }
 
       GST_DEBUG_OBJECT (bus, "got message %p, %s from %s, type mask is %u",
           message, GST_MESSAGE_TYPE_NAME (message),
diff --git a/gst/gstcaps.c b/gst/gstcaps.c
index e2145b3..7c68129 100644
--- a/gst/gstcaps.c
+++ b/gst/gstcaps.c
@@ -145,6 +145,15 @@
       G_TYPE_STRING, gst_caps_transform_to_string);
 }
 
+void
+_priv_gst_caps_cleanup (void)
+{
+  gst_caps_unref (_gst_caps_any);
+  _gst_caps_any = NULL;
+  gst_caps_unref (_gst_caps_none);
+  _gst_caps_none = NULL;
+}
+
 GstCapsFeatures *
 __gst_caps_get_features_unchecked (const GstCaps * caps, guint idx)
 {
@@ -414,6 +423,9 @@
 
     *caps = gst_caps_from_string (string);
 
+    /* Caps generated from static caps are usually leaked */
+    GST_MINI_OBJECT_FLAG_SET (*caps, GST_MINI_OBJECT_FLAG_MAY_BE_LEAKED);
+
     /* convert to string */
     if (G_UNLIKELY (*caps == NULL))
       g_critical ("Could not convert static caps \"%s\"", string);
diff --git a/gst/gstcapsfeatures.c b/gst/gstcapsfeatures.c
index ea06f0c..95e4bae 100644
--- a/gst/gstcapsfeatures.c
+++ b/gst/gstcapsfeatures.c
@@ -105,6 +105,18 @@
       &static_caps_features_parent_refcount);
 }
 
+void
+_priv_gst_caps_features_cleanup (void)
+{
+  gst_caps_features_set_parent_refcount (_gst_caps_features_any, NULL);
+  gst_caps_features_free (_gst_caps_features_any);
+  _gst_caps_features_any = NULL;
+  gst_caps_features_set_parent_refcount
+      (_gst_caps_features_memory_system_memory, NULL);
+  gst_caps_features_free (_gst_caps_features_memory_system_memory);
+  _gst_caps_features_memory_system_memory = NULL;
+}
+
 gboolean
 gst_is_caps_features (gconstpointer obj)
 {
diff --git a/gst/gstclock.c b/gst/gstclock.c
index 7e9be2f..395fe76 100644
--- a/gst/gstclock.c
+++ b/gst/gstclock.c
@@ -108,12 +108,6 @@
 #include "gstutils.h"
 #include "glib-compat-private.h"
 
-#ifndef GST_DISABLE_TRACE
-/* #define GST_WITH_ALLOC_TRACE */
-#include "gsttrace.h"
-static GstAllocTrace *_gst_clock_entry_trace;
-#endif
-
 /* #define DEBUGGING_ENABLED */
 
 #define DEFAULT_WINDOW_SIZE             32
@@ -246,9 +240,9 @@
   GstClockEntry *entry;
 
   entry = g_slice_new (GstClockEntry);
-#ifndef GST_DISABLE_TRACE
-  _gst_alloc_trace_new (_gst_clock_entry_trace, entry);
-#endif
+
+  /* FIXME: add tracer hook for struct allocations such as clock entries */
+
   GST_CAT_DEBUG_OBJECT (GST_CAT_CLOCK, clock,
       "created entry %p, time %" GST_TIME_FORMAT, entry, GST_TIME_ARGS (time));
 
@@ -358,9 +352,8 @@
   if (entry->destroy_data)
     entry->destroy_data (entry->user_data);
 
-#ifndef GST_DISABLE_TRACE
-  _gst_alloc_trace_free (_gst_clock_entry_trace, id);
-#endif
+  /* FIXME: add tracer hook for struct allocations such as clock entries */
+
   g_slice_free (GstClockEntry, id);
 }
 
@@ -680,10 +673,6 @@
 {
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 
-#ifndef GST_DISABLE_TRACE
-  _gst_clock_entry_trace = _gst_alloc_trace_register ("GstClockEntry", -1);
-#endif
-
   gobject_class->dispose = gst_clock_dispose;
   gobject_class->finalize = gst_clock_finalize;
   gobject_class->set_property = gst_clock_set_property;
@@ -1474,7 +1463,7 @@
   {
     /* no valid regression has been done, ignore the result then */
     GST_CLOCK_SLAVE_UNLOCK (clock);
-    return TRUE;
+    return FALSE;
   }
 }
 
diff --git a/gst/gstconfig.h.in b/gst/gstconfig.h.in
index 8460281..c2e8361 100644
--- a/gst/gstconfig.h.in
+++ b/gst/gstconfig.h.in
@@ -55,11 +55,8 @@
 #if 0
 #define GST_DISABLE_GST_DEBUG 1
 #define GST_DISABLE_PARSE 1
-#define GST_DISABLE_TRACE 1
-#define GST_DISABLE_ALLOC_TRACE 1
 #define GST_DISABLE_REGISTRY 1
 #define GST_DISABLE_PLUGIN 1
-#define GST_HAVE_GLIB_2_8 1
 #endif
 
 /***** default padding of structures *****/
@@ -86,22 +83,6 @@
 @GST_DISABLE_PARSE_DEFINE@
 
 /**
- * GST_DISABLE_TRACE:
- *
- * Configures the inclusion of a resource tracing facility
- * (seems to be unused)
- */
-@GST_DISABLE_TRACE_DEFINE@
-
-/**
- * GST_DISABLE_ALLOC_TRACE:
- *
- * Configures the use of a memory tracer based on the resource tracer
- * if TRACE is disabled, ALLOC_TRACE is disabled as well
- */
-@GST_DISABLE_ALLOC_TRACE_DEFINE@
-
-/**
  * GST_DISABLE_REGISTRY:
  *
  * Configures the use of the plugin registry.
@@ -114,8 +95,22 @@
 /* Configures the use of external plugins */
 @GST_DISABLE_PLUGIN_DEFINE@
 
-/* whether or not the CPU supports unaligned access */
-@GST_HAVE_UNALIGNED_ACCESS_DEFINE@
+/* Whether or not the CPU supports unaligned access
+ * The macros used are defined consistently by GCC, Clang, MSVC, Sun, and ICC
+ *
+ * References:
+ * https://sourceforge.net/p/predef/wiki/Architectures/
+ * https://msdn.microsoft.com/en-us/library/b0084kay.aspx
+ * http://docs.oracle.com/cd/E19205-01/820-4155/c++_faq.html#Vers6
+ * https://software.intel.com/en-us/node/583402
+ */
+#if defined(__alpha__) || defined(__arm__) || defined(__aarch64__) || defined(__bfin) || defined(__hppa__) || defined(__mips__) || defined(__sh__) || defined(__SH4__) || defined(__sparc__) || defined(__sparc) || defined(__ia64__) || defined(_M_ALPHA) || defined(_M_ARM) || defined(_M_IA64)
+#  define GST_HAVE_UNALIGNED_ACCESS 0
+#elif defined(__i386__) || defined(__i386) || defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__ppc__) || defined(__ppc64__) || defined(__powerpc__) || defined(__powerpc64__) || defined(__m68k__) || defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) || defined(__s390__) || defined(__s390x__) || defined(__zarch__)
+#  define GST_HAVE_UNALIGNED_ACCESS 1
+#else
+#  error "Could not detect architecture; don't know whether it supports unaligned access! Please file a bug."
+#endif
 
 /**
  * GST_EXPORT:
@@ -133,20 +128,30 @@
  * On Windows, this exports the plugin definition from the DLL.
  * On other platforms, this gets defined as a no-op.
  */
-#ifdef _MSC_VER
-#define GST_PLUGIN_EXPORT __declspec(dllexport) extern
-#ifdef GST_EXPORTS
-#define GST_EXPORT __declspec(dllexport) extern
+/* Only use __declspec(dllexport/import) when we have been built with MSVC or
+ * the user is linking to us with MSVC. The only remaining case is when we were
+ * built with MinGW and are linking with MinGW in which case we rely on the
+ * linker to auto-export/import symbols. Of course all this is only used when
+ * not linking statically.
+ *
+ * NOTE: To link to GStreamer statically on Windows, you must define
+ * GST_STATIC_COMPILATION or the prototypes will cause the compiler to search
+ * for the symbol inside a DLL.
+ */
+#if (@GSTCONFIG_BUILT_WITH_MSVC@ || defined(_MSC_VER)) && !defined(GST_STATIC_COMPILATION)
+# define GST_PLUGIN_EXPORT __declspec(dllexport)
+# ifdef GST_EXPORTS
+#  define GST_EXPORT __declspec(dllexport)
+# else
+#  define GST_EXPORT __declspec(dllimport) extern
+# endif
 #else
-#define GST_EXPORT __declspec(dllimport) extern
-#endif
-#else /* not _MSC_VER */
-#define GST_PLUGIN_EXPORT
-#if (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
-#define GST_EXPORT extern __attribute__ ((visibility ("default")))
-#else
-#define GST_EXPORT extern
-#endif
+# define GST_PLUGIN_EXPORT
+# if (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
+#  define GST_EXPORT extern __attribute__ ((visibility ("default")))
+# else
+#  define GST_EXPORT extern
+# endif
 #endif
 
 #endif /* __GST_CONFIG_H__ */
diff --git a/gst/gstdebugutils.c b/gst/gstdebugutils.c
index 4464883..9555a44 100644
--- a/gst/gstdebugutils.c
+++ b/gst/gstdebugutils.c
@@ -132,7 +132,59 @@
       g_value_init (&value, property->value_type);
       g_object_get_property (G_OBJECT (object), property->name, &value);
       if (!(g_param_value_defaults (property, &value))) {
-        tmp = g_strdup_value_contents (&value);
+        /* we need to serialise enums and flags ourselves to make sure the
+         * enum/flag nick is used and not the enum/flag name, which would be the
+         * C header enum/flag for public enums/flags, but for element-specific
+         * enums/flags we abuse the name field for the property description,
+         * and we don't want to print that in the dot file. The nick will
+         * always work, and it's also shorter. */
+        if (G_VALUE_HOLDS_ENUM (&value)) {
+          GEnumClass *e_class = g_type_class_ref (G_VALUE_TYPE (&value));
+          gint idx, e_val;
+
+          tmp = NULL;
+          e_val = g_value_get_enum (&value);
+          for (idx = 0; idx < e_class->n_values; ++idx) {
+            if (e_class->values[idx].value == e_val) {
+              tmp = g_strdup (e_class->values[idx].value_nick);
+              break;
+            }
+          }
+          if (tmp == NULL) {
+            g_value_unset (&value);
+            continue;
+          }
+        } else if (G_VALUE_HOLDS_FLAGS (&value)) {
+          GFlagsClass *f_class = g_type_class_ref (G_VALUE_TYPE (&value));
+          GFlagsValue *vals = f_class->values;
+          GString *s = NULL;
+          guint idx, flags_left;
+
+          s = g_string_new (NULL);
+
+          /* we assume the values are sorted from lowest to highest value */
+          flags_left = g_value_get_flags (&value);
+          idx = f_class->n_values;
+          while (idx > 0) {
+            --idx;
+            if (vals[idx].value != 0
+                && (flags_left & vals[idx].value) == vals[idx].value) {
+              if (s->len > 0)
+                g_string_prepend_c (s, '+');
+              g_string_prepend (s, vals[idx].value_nick);
+              flags_left -= vals[idx].value;
+              if (flags_left == 0)
+                break;
+            }
+          }
+
+          if (s->len == 0)
+            g_string_assign (s, "(none)");
+
+          tmp = g_string_free (s, FALSE);
+        } else {
+          tmp = g_strdup_value_contents (&value);
+        }
         value_str = g_strescape (tmp, NULL);
         g_free (tmp);
 
diff --git a/gst/gstdevice.c b/gst/gstdevice.c
index 55f5604..678fe14 100644
--- a/gst/gstdevice.c
+++ b/gst/gstdevice.c
@@ -195,7 +195,7 @@
  * @name: (allow-none): name of new element, or %NULL to automatically
  * create a unique name.
  *
- * Creates the element with all of the required paramaters set to use
+ * Creates the element with all of the required parameters set to use
  * this device.
  *
  * Returns: (transfer full): a new #GstElement configured to use this device
diff --git a/gst/gstdevicemonitor.c b/gst/gstdevicemonitor.c
index 0d31eb0..d03a813 100644
--- a/gst/gstdevicemonitor.c
+++ b/gst/gstdevicemonitor.c
@@ -49,12 +49,14 @@
  *          name = gst_device_get_display_name (device);
  *          g_print("Device added: %s\n", name);
  *          g_free (name);
+ *          gst_object_unref (device);
  *          break;
  *        case GST_MESSAGE_DEVICE_REMOVED:
  *          gst_message_parse_device_removed (message, &device);
  *          name = gst_device_get_display_name (device);
  *          g_print("Device removed: %s\n", name);
  *          g_free (name);
+ *          gst_object_unref (device);
  *          break;
  *        default:
  *          break;
diff --git a/gst/gstdeviceprovider.c b/gst/gstdeviceprovider.c
index 363b1b8..e7972bb 100644
--- a/gst/gstdeviceprovider.c
+++ b/gst/gstdeviceprovider.c
@@ -74,7 +74,6 @@
 static void gst_device_provider_class_init (GstDeviceProviderClass * klass);
 static void gst_device_provider_init (GstDeviceProvider * element);
 static void gst_device_provider_base_class_init (gpointer g_class);
-static void gst_device_provider_base_class_finalize (gpointer g_class);
 static void gst_device_provider_dispose (GObject * object);
 static void gst_device_provider_finalize (GObject * object);
 
@@ -90,7 +89,7 @@
     static const GTypeInfo element_info = {
       sizeof (GstDeviceProviderClass),
       gst_device_provider_base_class_init,
-      gst_device_provider_base_class_finalize,
+      NULL,                     /* base_class_finalize */
       (GClassInitFunc) gst_device_provider_class_init,
       NULL,
       NULL,
@@ -127,14 +126,6 @@
 }
 
 static void
-gst_device_provider_base_class_finalize (gpointer g_class)
-{
-  GstDeviceProviderClass *klass = GST_DEVICE_PROVIDER_CLASS (g_class);
-
-  gst_structure_free (klass->metadata);
-}
-
-static void
 gst_device_provider_class_init (GstDeviceProviderClass * klass)
 {
   GObjectClass *gobject_class = (GObjectClass *) klass;
diff --git a/gst/gstdeviceproviderfactory.c b/gst/gstdeviceproviderfactory.c
index a28a0bd..305e214 100644
--- a/gst/gstdeviceproviderfactory.c
+++ b/gst/gstdeviceproviderfactory.c
@@ -275,8 +275,10 @@
     goto no_type;
 
   device_provider = g_atomic_pointer_get (&newfactory->provider);
-  if (device_provider)
+  if (device_provider) {
+    gst_object_unref (factory);
     return gst_object_ref (device_provider);
+  }
 
   /* create an instance of the device provider, cast so we don't assert on NULL
    * also set name as early as we can
@@ -292,8 +294,12 @@
    * an device provider at the same moment
    */
   oclass = GST_DEVICE_PROVIDER_GET_CLASS (device_provider);
-  if (!g_atomic_pointer_compare_and_exchange (&oclass->factory, NULL, factory))
+  if (!g_atomic_pointer_compare_and_exchange (&oclass->factory, NULL, factory)) {
     gst_object_unref (factory);
+  } else {
+    /* This ref will never be dropped as the class is never destroyed */
+    GST_OBJECT_FLAG_SET (factory, GST_OBJECT_FLAG_MAY_BE_LEAKED);
+  }
 
   gst_object_ref_sink (device_provider);
 
diff --git a/gst/gstelement.c b/gst/gstelement.c
index 60b4425..dc76fac 100644
--- a/gst/gstelement.c
+++ b/gst/gstelement.c
@@ -118,7 +118,6 @@
 static void gst_element_class_init (GstElementClass * klass);
 static void gst_element_init (GstElement * element);
 static void gst_element_base_class_init (gpointer g_class);
-static void gst_element_base_class_finalize (gpointer g_class);
 
 static void gst_element_constructed (GObject * object);
 static void gst_element_dispose (GObject * object);
@@ -147,9 +146,13 @@
     * gst_element_class_get_request_pad_template (GstElementClass *
     element_class, const gchar * name);
 
+static void gst_element_call_async_func (gpointer data, gpointer user_data);
+
 static GstObjectClass *parent_class = NULL;
 static guint gst_element_signals[LAST_SIGNAL] = { 0 };
 
+static GThreadPool *gst_element_pool = NULL;
+
 /* this is used in gstelementfactory.c:gst_element_register() */
 GQuark __gst_elementclass_factory = 0;
 
@@ -163,7 +166,7 @@
     static const GTypeInfo element_info = {
       sizeof (GstElementClass),
       gst_element_base_class_init,
-      gst_element_base_class_finalize,
+      NULL,                     /* base_class_finalize */
       (GClassInitFunc) gst_element_class_init,
       NULL,
       NULL,
@@ -184,6 +187,21 @@
 }
 
 static void
+gst_element_setup_thread_pool (void)
+{
+  GError *err = NULL;
+
+  GST_DEBUG ("creating element thread pool");
+  gst_element_pool =
+      g_thread_pool_new ((GFunc) gst_element_call_async_func, NULL, -1, FALSE,
+      &err);
+  if (err != NULL) {
+    g_critical ("could not alloc threadpool %s", err->message);
+    g_clear_error (&err);
+  }
+}
+
+static void
 gst_element_class_init (GstElementClass * klass)
 {
   GObjectClass *gobject_class;
@@ -247,6 +265,8 @@
   klass->set_context = GST_DEBUG_FUNCPTR (gst_element_set_context_default);
 
   klass->elementfactory = NULL;
+
+  gst_element_setup_thread_pool ();
 }
 
 static void
@@ -282,17 +302,6 @@
 }
 
 static void
-gst_element_base_class_finalize (gpointer g_class)
-{
-  GstElementClass *klass = GST_ELEMENT_CLASS (g_class);
-
-  g_list_foreach (klass->padtemplates, (GFunc) gst_object_unref, NULL);
-  g_list_free (klass->padtemplates);
-
-  gst_structure_free (klass->metadata);
-}
-
-static void
 gst_element_init (GstElement * element)
 {
   GST_STATE (element) = GST_STATE_NULL;
@@ -1810,7 +1819,7 @@
 }
 
 /**
- * gst_element_message_full:
+ * gst_element_message_full_with_details:
  * @element:  a #GstElement to send message from
  * @type:     the #GstMessageType
  * @domain:   the GStreamer GError domain this message belongs to
@@ -1824,18 +1833,20 @@
  * @file:     the source code file where the error was generated
  * @function: the source code function where the error was generated
  * @line:     the source code line where the error was generated
+ * @structure:(transfer full): optional details structure
  *
  * Post an error, warning or info message on the bus from inside an element.
  *
  * @type must be of #GST_MESSAGE_ERROR, #GST_MESSAGE_WARNING or
  * #GST_MESSAGE_INFO.
  *
- * MT safe.
+ * Since: 1.10
  */
-void gst_element_message_full
+void gst_element_message_full_with_details
     (GstElement * element, GstMessageType type,
     GQuark domain, gint code, gchar * text,
-    gchar * debug, const gchar * file, const gchar * function, gint line)
+    gchar * debug, const gchar * file, const gchar * function, gint line,
+    GstStructure * structure)
 {
   GError *gerror = NULL;
   gchar *name;
@@ -1882,20 +1893,24 @@
   switch (type) {
     case GST_MESSAGE_ERROR:
       message =
-          gst_message_new_error (GST_OBJECT_CAST (element), gerror, sent_debug);
+          gst_message_new_error_with_details (GST_OBJECT_CAST (element), gerror,
+          sent_debug, structure);
       break;
     case GST_MESSAGE_WARNING:
-      message = gst_message_new_warning (GST_OBJECT_CAST (element), gerror,
-          sent_debug);
+      message =
+          gst_message_new_warning_with_details (GST_OBJECT_CAST (element),
+          gerror, sent_debug, structure);
       break;
     case GST_MESSAGE_INFO:
-      message = gst_message_new_info (GST_OBJECT_CAST (element), gerror,
-          sent_debug);
+      message =
+          gst_message_new_info_with_details (GST_OBJECT_CAST (element), gerror,
+          sent_debug, structure);
       break;
     default:
       g_assert_not_reached ();
       break;
   }
+
   gst_element_post_message (element, message);
 
   GST_CAT_INFO_OBJECT (GST_CAT_ERROR_SYSTEM, element, "posted %s message: %s",
@@ -1908,6 +1923,38 @@
 }
 
 /**
+ * gst_element_message_full:
+ * @element:  a #GstElement to send message from
+ * @type:     the #GstMessageType
+ * @domain:   the GStreamer GError domain this message belongs to
+ * @code:     the GError code belonging to the domain
+ * @text:     (allow-none) (transfer full): an allocated text string to be used
+ *            as a replacement for the default message connected to code,
+ *            or %NULL
+ * @debug:    (allow-none) (transfer full): an allocated debug message to be
+ *            used as a replacement for the default debugging information,
+ *            or %NULL
+ * @file:     the source code file where the error was generated
+ * @function: the source code function where the error was generated
+ * @line:     the source code line where the error was generated
+ *
+ * Post an error, warning or info message on the bus from inside an element.
+ *
+ * @type must be of #GST_MESSAGE_ERROR, #GST_MESSAGE_WARNING or
+ * #GST_MESSAGE_INFO.
+ *
+ * MT safe.
+ */
+void gst_element_message_full
+    (GstElement * element, GstMessageType type,
+    GQuark domain, gint code, gchar * text,
+    gchar * debug, const gchar * file, const gchar * function, gint line)
+{
+  gst_element_message_full_with_details (element, type, domain, code, text,
+      debug, file, function, line, NULL);
+}
+
+/**
  * gst_element_is_locked_state:
  * @element: a #GstElement.
  *
@@ -2944,7 +2991,7 @@
 
   oclass = GST_ELEMENT_GET_CLASS (element);
 
-  GST_CAT_INFO_OBJECT (GST_CAT_REFCOUNTING, element, "dispose");
+  GST_CAT_INFO_OBJECT (GST_CAT_REFCOUNTING, element, "%p dispose", element);
 
   if (GST_STATE (element) != GST_STATE_NULL)
     goto not_null;
@@ -2989,7 +3036,8 @@
   g_list_free_full (element->contexts, (GDestroyNotify) gst_context_unref);
   GST_OBJECT_UNLOCK (element);
 
-  GST_CAT_INFO_OBJECT (GST_CAT_REFCOUNTING, element, "parent class dispose");
+  GST_CAT_INFO_OBJECT (GST_CAT_REFCOUNTING, element, "%p parent class dispose",
+      element);
 
   G_OBJECT_CLASS (parent_class)->dispose (object);
 
@@ -3020,12 +3068,13 @@
 {
   GstElement *element = GST_ELEMENT_CAST (object);
 
-  GST_CAT_INFO_OBJECT (GST_CAT_REFCOUNTING, element, "finalize");
+  GST_CAT_INFO_OBJECT (GST_CAT_REFCOUNTING, element, "%p finalize", element);
 
   g_cond_clear (&element->state_cond);
   g_rec_mutex_clear (&element->state_lock);
 
-  GST_CAT_INFO_OBJECT (GST_CAT_REFCOUNTING, element, "finalize parent");
+  GST_CAT_INFO_OBJECT (GST_CAT_REFCOUNTING, element, "%p finalize parent",
+      element);
 
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
@@ -3243,3 +3292,204 @@
 
   return ret;
 }
+
+static void
+gst_element_property_post_notify_msg (GstElement * element, GObject * obj,
+    GParamSpec * pspec, gboolean include_value)
+{
+  GValue val = G_VALUE_INIT;
+  GValue *v;
+
+  GST_LOG_OBJECT (element, "property '%s' of object %" GST_PTR_FORMAT " has "
+      "changed, posting message with%s value", pspec->name, obj,
+      include_value ? "" : "out");
+
+  if (include_value && (pspec->flags & G_PARAM_READABLE) != 0) {
+    g_value_init (&val, pspec->value_type);
+    g_object_get_property (obj, pspec->name, &val);
+    v = &val;
+  } else {
+    v = NULL;
+  }
+  gst_element_post_message (element,
+      gst_message_new_property_notify (GST_OBJECT_CAST (obj), pspec->name, v));
+}
+
+static void
+gst_element_property_deep_notify_cb (GstElement * element, GObject * prop_obj,
+    GParamSpec * pspec, gpointer user_data)
+{
+  gboolean include_value = GPOINTER_TO_INT (user_data);
+
+  gst_element_property_post_notify_msg (element, prop_obj, pspec,
+      include_value);
+}
+
+static void
+gst_element_property_notify_cb (GObject * obj, GParamSpec * pspec,
+    gpointer user_data)
+{
+  gboolean include_value = GPOINTER_TO_INT (user_data);
+
+  gst_element_property_post_notify_msg (GST_ELEMENT_CAST (obj), obj, pspec,
+      include_value);
+}
+
+/**
+ * gst_element_add_property_notify_watch:
+ * @element: a #GstElement to watch for property changes
+ * @property_name: (allow-none): name of property to watch for changes, or
+ *     NULL to watch all properties
+ * @include_value: whether to include the new property value in the message
+ *
+ * Returns: a watch id, which can be used in connection with
+ *     gst_element_remove_property_notify_watch() to remove the watch again.
+ *
+ * Since: 1.10
+ */
+gulong
+gst_element_add_property_notify_watch (GstElement * element,
+    const gchar * property_name, gboolean include_value)
+{
+  const gchar *sep;
+  gchar *signal_name;
+  gulong id;
+
+  g_return_val_if_fail (GST_IS_ELEMENT (element), 0);
+
+  sep = (property_name != NULL) ? "::" : NULL;
+  signal_name = g_strconcat ("notify", sep, property_name, NULL);
+  id = g_signal_connect (element, signal_name,
+      G_CALLBACK (gst_element_property_notify_cb),
+      GINT_TO_POINTER (include_value));
+  g_free (signal_name);
+
+  return id;
+}
+
+/**
+ * gst_element_add_property_deep_notify_watch:
+ * @element: a #GstElement to watch (recursively) for property changes
+ * @property_name: (allow-none): name of property to watch for changes, or
+ *     NULL to watch all properties
+ * @include_value: whether to include the new property value in the message
+ *
+ * Returns: a watch id, which can be used in connection with
+ *     gst_element_remove_property_notify_watch() to remove the watch again.
+ *
+ * Since: 1.10
+ */
+gulong
+gst_element_add_property_deep_notify_watch (GstElement * element,
+    const gchar * property_name, gboolean include_value)
+{
+  const gchar *sep;
+  gchar *signal_name;
+  gulong id;
+
+  g_return_val_if_fail (GST_IS_ELEMENT (element), 0);
+
+  sep = (property_name != NULL) ? "::" : NULL;
+  signal_name = g_strconcat ("deep-notify", sep, property_name, NULL);
+  id = g_signal_connect (element, signal_name,
+      G_CALLBACK (gst_element_property_deep_notify_cb),
+      GINT_TO_POINTER (include_value));
+  g_free (signal_name);
+
+  return id;
+}
+
+/**
+ * gst_element_remove_property_notify_watch:
+ * @element: a #GstElement being watched for property changes
+ * @watch_id: watch id to remove
+ *
+ * Since: 1.10
+ */
+void
+gst_element_remove_property_notify_watch (GstElement * element, gulong watch_id)
+{
+  g_signal_handler_disconnect (element, watch_id);
+}
+
+typedef struct
+{
+  GstElement *element;
+  GstElementCallAsyncFunc func;
+  gpointer user_data;
+  GDestroyNotify destroy_notify;
+} GstElementCallAsyncData;
+
+static void
+gst_element_call_async_func (gpointer data, gpointer user_data)
+{
+  GstElementCallAsyncData *async_data = data;
+
+  async_data->func (async_data->element, async_data->user_data);
+  if (async_data->destroy_notify)
+    async_data->destroy_notify (async_data->user_data);
+  gst_object_unref (async_data->element);
+  g_free (async_data);
+}
+
+/**
+ * gst_element_call_async:
+ * @element: a #GstElement
+ * @func: Function to call asynchronously from another thread
+ * @user_data: Data to pass to @func
+ * @destroy_notify: GDestroyNotify for @user_data
+ *
+ * Calls @func from another thread and passes @user_data to it. This is to be
+ * used for cases when a state change has to be performed from a streaming
+ * thread, directly via gst_element_set_state() or indirectly e.g. via SEEK
+ * events.
+ *
+ * Calling those functions directly from the streaming thread will cause
+ * deadlocks in many situations, as they might involve waiting for the
+ * streaming thread to shut down from this very streaming thread.
+ *
+ * MT safe.
+ *
+ * Since: 1.10
+ */
+void
+gst_element_call_async (GstElement * element, GstElementCallAsyncFunc func,
+    gpointer user_data, GDestroyNotify destroy_notify)
+{
+  GstElementCallAsyncData *async_data;
+
+  g_return_if_fail (GST_IS_ELEMENT (element));
+
+  async_data = g_new0 (GstElementCallAsyncData, 1);
+  async_data->element = gst_object_ref (element);
+  async_data->func = func;
+  async_data->user_data = user_data;
+  async_data->destroy_notify = destroy_notify;
+
+  g_thread_pool_push (gst_element_pool, async_data, NULL);
+}
+
+void
+_priv_gst_element_cleanup (void)
+{
+  if (gst_element_pool) {
+    g_thread_pool_free (gst_element_pool, FALSE, TRUE);
+    gst_element_setup_thread_pool ();
+  }
+}
+
+GstStructure *
+gst_make_element_message_details (const char *name, ...)
+{
+  GstStructure *structure;
+  va_list varargs;
+
+  if (name == NULL)
+    return NULL;
+
+  va_start (varargs, name);
+  structure = gst_structure_new_valist ("details", name, varargs);
+  va_end (varargs);
+
+  return structure;
+}
diff --git a/gst/gstelement.h b/gst/gstelement.h
index f4bed31..6dae510 100644
--- a/gst/gstelement.h
+++ b/gst/gstelement.h
@@ -399,6 +399,60 @@
  */
 #define GST_ELEMENT_START_TIME(elem)            (GST_ELEMENT_CAST(elem)->start_time)
 
+GstStructure *gst_make_element_message_details (const char *name, ...);
+#define GST_ELEMENT_MESSAGE_MAKE_DETAILS(args) gst_make_element_message_details args
+
+/**
+ * GST_ELEMENT_FLOW_ERROR:
+ * @el:           the element that generates the error
+ * @flow_return:  the GstFlowReturn leading to that ERROR message
+ *
+ * Utility function that elements can use in case they encountered a fatal
+ * data processing error due to wrong flow processing.
+ *
+ * Since: 1.10
+ */
+#define GST_ELEMENT_FLOW_ERROR(el,flow_return)  \
+G_STMT_START {                                                          \
+  GST_ELEMENT_ERROR_WITH_DETAILS (el, STREAM, FAILED, \
+      ("Internal data stream error."), \
+      ("streaming stopped, reason %s (%d)", gst_flow_get_name (flow_return), flow_return), \
+      ("flow-return", G_TYPE_INT, flow_return, NULL));\
+} G_STMT_END
+
+/**
+ * GST_ELEMENT_ERROR_WITH_DETAILS:
+ * @el:     the element that generates the error
+ * @domain: like CORE, LIBRARY, RESOURCE or STREAM (see #gstreamer-GstGError)
+ * @code:   error code defined for that domain (see #gstreamer-GstGError)
+ * @text:   the message to display (format string and args enclosed in
+            parentheses)
+ * @debug:  debugging information for the message (format string and args
+            enclosed in parentheses)
+ * @args    optional name, type, value triplets, which will be stored
+ *          in the associated GstStructure. NULL terminator required.
+ *          Must be enclosed within parentheses.
+ *
+ * Utility function that elements can use in case they encountered a fatal
+ * data processing error. The pipeline will post an error message and the
+ * application will be requested to stop further media processing.
+ *
+ * Since: 1.10
+ */
+#define GST_ELEMENT_ERROR_WITH_DETAILS(el,domain,code,text,debug,args)  \
+G_STMT_START {                                                          \
+  gchar *__txt = _gst_element_error_printf text;                        \
+  gchar *__dbg = _gst_element_error_printf debug;                       \
+  if (__txt)                                                            \
+    GST_WARNING_OBJECT (el, "error: %s", __txt);                        \
+  if (__dbg)                                                            \
+    GST_WARNING_OBJECT (el, "error: %s", __dbg);                        \
+  gst_element_message_full_with_details (GST_ELEMENT(el),               \
+    GST_MESSAGE_ERROR, GST_ ## domain ## _ERROR,                        \
+      GST_ ## domain ## _ERROR_ ## code, __txt, __dbg, __FILE__,        \
+      GST_FUNCTION, __LINE__, GST_ELEMENT_MESSAGE_MAKE_DETAILS(args));  \
+} G_STMT_END
+
 /**
  * GST_ELEMENT_ERROR:
  * @el:     the element that generates the error
@@ -413,7 +467,7 @@
  * data processing error. The pipeline will post an error message and the
  * application will be requested to stop further media processing.
  */
-#define GST_ELEMENT_ERROR(el, domain, code, text, debug)                \
+#define GST_ELEMENT_ERROR(el,domain,code,text,debug)                    \
 G_STMT_START {                                                          \
   gchar *__txt = _gst_element_error_printf text;                        \
   gchar *__dbg = _gst_element_error_printf debug;                       \
@@ -421,9 +475,43 @@
     GST_WARNING_OBJECT (el, "error: %s", __txt);                        \
   if (__dbg)                                                            \
     GST_WARNING_OBJECT (el, "error: %s", __dbg);                        \
-  gst_element_message_full (GST_ELEMENT(el), GST_MESSAGE_ERROR,         \
-    GST_ ## domain ## _ERROR, GST_ ## domain ## _ERROR_ ## code,        \
-    __txt, __dbg, __FILE__, GST_FUNCTION, __LINE__);                    \
+  gst_element_message_full (GST_ELEMENT(el),                            \
+    GST_MESSAGE_ERROR, GST_ ## domain ## _ERROR,                        \
+      GST_ ## domain ## _ERROR_ ## code, __txt, __dbg, __FILE__,        \
+      GST_FUNCTION, __LINE__);                                          \
+} G_STMT_END
+
+/**
+ * GST_ELEMENT_WARNING_WITH_DETAILS:
+ * @el:     the element that generates the warning
+ * @domain: like CORE, LIBRARY, RESOURCE or STREAM (see #gstreamer-GstGError)
+ * @code:   error code defined for that domain (see #gstreamer-GstGError)
+ * @text:   the message to display (format string and args enclosed in
+            parentheses)
+ * @debug:  debugging information for the message (format string and args
+            enclosed in parentheses)
+ * @args    optional name, type, value triplets, which will be stored
+ *          in the associated GstStructure. NULL terminator required.
+ *          Must be enclosed within parentheses.
+ *
+ * Utility function that elements can use in case they encountered a non-fatal
+ * data processing problem. The pipeline will post a warning message and the
+ * application will be informed.
+ *
+ * Since: 1.10
+ */
+#define GST_ELEMENT_WARNING_WITH_DETAILS(el, domain, code, text, debug, args)\
+G_STMT_START {                                                          \
+  gchar *__txt = _gst_element_error_printf text;                        \
+  gchar *__dbg = _gst_element_error_printf debug;                       \
+  if (__txt)                                                            \
+    GST_WARNING_OBJECT (el, "warning: %s", __txt);                      \
+  if (__dbg)                                                            \
+    GST_WARNING_OBJECT (el, "warning: %s", __dbg);                      \
+  gst_element_message_full_with_details (GST_ELEMENT(el),               \
+    GST_MESSAGE_WARNING, GST_ ## domain ## _ERROR,                      \
+    GST_ ## domain ## _ERROR_ ## code, __txt, __dbg, __FILE__,          \
+    GST_FUNCTION, __LINE__, GST_ELEMENT_MESSAGE_MAKE_DETAILS(args));    \
 } G_STMT_END
 
 /**
@@ -448,9 +536,46 @@
     GST_WARNING_OBJECT (el, "warning: %s", __txt);                      \
   if (__dbg)                                                            \
     GST_WARNING_OBJECT (el, "warning: %s", __dbg);                      \
-  gst_element_message_full (GST_ELEMENT(el), GST_MESSAGE_WARNING,       \
-    GST_ ## domain ## _ERROR, GST_ ## domain ## _ERROR_ ## code,        \
-  __txt, __dbg, __FILE__, GST_FUNCTION, __LINE__);                      \
+  gst_element_message_full (GST_ELEMENT(el),                            \
+    GST_MESSAGE_WARNING, GST_ ## domain ## _ERROR,                      \
+    GST_ ## domain ## _ERROR_ ## code, __txt, __dbg, __FILE__,          \
+    GST_FUNCTION, __LINE__);                                            \
+} G_STMT_END
+
+/**
+ * GST_ELEMENT_INFO_WITH_DETAILS:
+ * @el:     the element that generates the information
+ * @domain: like CORE, LIBRARY, RESOURCE or STREAM (see #gstreamer-GstGError)
+ * @code:   error code defined for that domain (see #gstreamer-GstGError)
+ * @text:   the message to display (format string and args enclosed in
+            parentheses)
+ * @debug:  debugging information for the message (format string and args
+            enclosed in parentheses)
+ * @args    optional name, type, value triplets, which will be stored
+ *          in the associated GstStructure. NULL terminator required.
+ *          Must be enclosed within parentheses.
+ *
+ * Utility function that elements can use in case they want to inform
+ * the application of something noteworthy that is not an error.
+ * The pipeline will post a info message and the
+ * application will be informed.
+ * Optional name, type, value triplets may be supplied, and will be stored
+ * in the associated GstStructure. NULL terminator required.
+ *
+ * Since: 1.10
+ */
+#define GST_ELEMENT_INFO_WITH_DETAILS(el, domain, code, text, debug, args)   \
+G_STMT_START {                                                          \
+  gchar *__txt = _gst_element_error_printf text;                        \
+  gchar *__dbg = _gst_element_error_printf debug;                       \
+  if (__txt)                                                            \
+    GST_INFO_OBJECT (el, "info: %s", __txt);                            \
+  if (__dbg)                                                            \
+    GST_INFO_OBJECT (el, "info: %s", __dbg);                            \
+  gst_element_message_full_with_details (GST_ELEMENT(el),               \
+    GST_MESSAGE_INFO, GST_ ## domain ## _ERROR,                         \
+    GST_ ## domain ## _ERROR_ ## code, __txt, __dbg, __FILE__,          \
+    GST_FUNCTION, __LINE__, GST_ELEMENT_MESSAGE_MAKE_DETAILS(args));    \
 } G_STMT_END
 
 /**
@@ -476,9 +601,10 @@
     GST_INFO_OBJECT (el, "info: %s", __txt);                            \
   if (__dbg)                                                            \
     GST_INFO_OBJECT (el, "info: %s", __dbg);                            \
-  gst_element_message_full (GST_ELEMENT(el), GST_MESSAGE_INFO,          \
-    GST_ ## domain ## _ERROR, GST_ ## domain ## _ERROR_ ## code,        \
-  __txt, __dbg, __FILE__, GST_FUNCTION, __LINE__);                      \
+  gst_element_message_full (GST_ELEMENT(el),                            \
+    GST_MESSAGE_INFO, GST_ ## domain ## _ERROR,                         \
+    GST_ ## domain ## _ERROR_ ## code, __txt, __dbg, __FILE__,          \
+    GST_FUNCTION, __LINE__);                                            \
 } G_STMT_END
 
 /* the state change mutexes and conds */
@@ -798,6 +924,12 @@
                                                          gchar * debug, const gchar * file,
                                                          const gchar * function, gint line);
 
+void                    gst_element_message_full_with_details (GstElement * element, GstMessageType type,
+                                                         GQuark domain, gint code, gchar * text,
+                                                         gchar * debug, const gchar * file,
+                                                         const gchar * function, gint line,
+                                                         GstStructure * structure);
+
 /* state management */
 gboolean                gst_element_is_locked_state     (GstElement *element);
 gboolean                gst_element_set_locked_state    (GstElement *element, gboolean locked_state);
@@ -816,9 +948,28 @@
                                                          GstStateChangeReturn ret);
 void                    gst_element_lost_state          (GstElement * element);
 
+typedef void          (*GstElementCallAsyncFunc)        (GstElement * element,
+                                                         gpointer     user_data);
+
+void                    gst_element_call_async          (GstElement * element,
+                                                         GstElementCallAsyncFunc func, gpointer user_data,
+                                                         GDestroyNotify destroy_notify);
+
 /* factory management */
 GstElementFactory*      gst_element_get_factory         (GstElement *element);
 
+/* utility functions */
+gulong                  gst_element_add_property_notify_watch (GstElement  * element,
+                                                               const gchar * property_name,
+                                                               gboolean      include_value);
+
+gulong                  gst_element_add_property_deep_notify_watch (GstElement  * element,
+                                                                    const gchar * property_name,
+                                                                    gboolean      include_value);
+
+void                    gst_element_remove_property_notify_watch (GstElement * element,
+                                                                  gulong       watch_id);
+
 #ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
 G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstElement, gst_object_unref)
 #endif
diff --git a/gst/gstelementfactory.c b/gst/gstelementfactory.c
index 22d420f..8cc4dc6 100644
--- a/gst/gstelementfactory.c
+++ b/gst/gstelementfactory.c
@@ -386,6 +386,9 @@
   if (!g_atomic_pointer_compare_and_exchange (&oclass->elementfactory, NULL,
           factory))
     gst_object_unref (factory);
+  else
+    /* This ref will never be dropped as the class is never destroyed */
+    GST_OBJECT_FLAG_SET (factory, GST_OBJECT_FLAG_MAY_BE_LEAKED);
 
   GST_DEBUG ("created element \"%s\"", GST_OBJECT_NAME (factory));
 
diff --git a/gst/gstevent.c b/gst/gstevent.c
index e0e0ea6..e691dfb 100644
--- a/gst/gstevent.c
+++ b/gst/gstevent.c
@@ -104,7 +104,9 @@
   {GST_EVENT_UNKNOWN, "unknown", 0},
   {GST_EVENT_FLUSH_START, "flush-start", 0},
   {GST_EVENT_FLUSH_STOP, "flush-stop", 0},
+  {GST_EVENT_SELECT_STREAMS, "select-streams", 0},
   {GST_EVENT_STREAM_START, "stream-start", 0},
+  {GST_EVENT_STREAM_COLLECTION, "stream-collection", 0},
   {GST_EVENT_CAPS, "caps", 0},
   {GST_EVENT_SEGMENT, "segment", 0},
   {GST_EVENT_TAG, "tag", 0},
@@ -128,6 +130,7 @@
   {GST_EVENT_CUSTOM_DOWNSTREAM_STICKY, "custom-downstream-sticky", 0},
   {GST_EVENT_CUSTOM_BOTH, "custom-both", 0},
   {GST_EVENT_CUSTOM_BOTH_OOB, "custom-both-oob", 0},
+  {GST_EVENT_STREAM_GROUP_DONE, "stream-group-done", 0},
 
   {0, NULL, 0}
 };
@@ -576,6 +579,132 @@
 }
 
 /**
+ * gst_event_new_select_streams:
+ * @streams: (element-type gchar) (transfer none): the list of streams to
+ * activate
+ *
+ * Allocate a new select-streams event.
+ *
+ * The select-streams event requests the specified @streams to be activated.
+ *
+ * The list of @streams corresponds to the "Stream ID" of each stream to be
+ * activated. Those ID can be obtained via the #GstStream objects present
+ * in #GST_EVENT_STREAM_START, #GST_EVENT_STREAM_COLLECTION or 
+ * #GST_MESSSAGE_STREAM_COLLECTION.
+ *
+ * Returns: (transfer full): a new select-streams event.
+ *
+ * Since: 1.10
+ */
+GstEvent *
+gst_event_new_select_streams (GList * streams)
+{
+  GstEvent *event;
+  GValue val = G_VALUE_INIT;
+  GstStructure *struc;
+  GList *tmpl;
+
+  GST_CAT_INFO (GST_CAT_EVENT, "Creating new select-streams event");
+  struc = gst_structure_new_id_empty (GST_QUARK (EVENT_SELECT_STREAMS));
+  g_value_init (&val, GST_TYPE_LIST);
+  /* Fill struc with streams */
+  for (tmpl = streams; tmpl; tmpl = tmpl->next) {
+    GValue strval = G_VALUE_INIT;
+    const gchar *str = (const gchar *) tmpl->data;
+    g_value_init (&strval, G_TYPE_STRING);
+    g_value_set_string (&strval, str);
+    gst_value_list_append_and_take_value (&val, &strval);
+  }
+  gst_structure_id_take_value (struc, GST_QUARK (STREAMS), &val);
+  event = gst_event_new_custom (GST_EVENT_SELECT_STREAMS, struc);
+
+  return event;
+}
+
+/**
+ * gst_event_parse_select_streams:
+ * @event: The event to parse
+ * @streams: (out) (element-type gchar) (transfer full): the streams
+ *
+ * Parse the SELECT_STREAMS event and retrieve the contained streams.
+ *
+ * Since: 1.10
+ */
+void
+gst_event_parse_select_streams (GstEvent * event, GList ** streams)
+{
+  GstStructure *structure;
+  GList *res = NULL;
+
+  g_return_if_fail (GST_IS_EVENT (event));
+  g_return_if_fail (GST_EVENT_TYPE (event) == GST_EVENT_SELECT_STREAMS);
+
+  structure = GST_EVENT_STRUCTURE (event);
+  if (G_LIKELY (streams)) {
+    const GValue *vlist =
+        gst_structure_id_get_value (structure, GST_QUARK (STREAMS));
+    guint i, sz = gst_value_list_get_size (vlist);
+    for (i = 0; i < sz; i++) {
+      const GValue *strv = gst_value_list_get_value (vlist, i);
+      res = g_list_append (res, g_value_dup_string (strv));
+    }
+    *streams = res;
+  }
+}
+
+
+/**
+ * gst_event_new_stream_group_done:
+ * @group_id: the group id of the stream group which is ending
+ *
+ * Create a new Stream Group Done event. The stream-group-done event can
+ * only travel downstream synchronized with the buffer flow. Elements
+ * that receive the event on a pad should handle it mostly like EOS,
+ * and emit any data or pending buffers that would depend on more data
+ * arriving and unblock, since there won't be any more data.
+ *
+ * This event is followed by EOS at some point in the future, and is
+ * generally used when switching pads - to unblock downstream so that
+ * new pads can be exposed before sending EOS on the existing pads.
+ *
+ * Returns: (transfer full): the new stream-group-done event.
+ *
+ * Since: 1.10
+ */
+GstEvent *
+gst_event_new_stream_group_done (guint group_id)
+{
+  GstStructure *s;
+
+  s = gst_structure_new_id (GST_QUARK (EVENT_STREAM_GROUP_DONE),
+      GST_QUARK (GROUP_ID), G_TYPE_UINT, group_id, NULL);
+
+  return gst_event_new_custom (GST_EVENT_STREAM_GROUP_DONE, s);
+}
+
+/**
+ * gst_event_parse_stream_group_done:
+ * @event: a stream-group-done event.
+ * @group_id: (out): address of variable to store the group id into
+ *
+ * Parse a stream-group-done @event and store the result in the given
+ * @group_id location.
+ *
+ * Since: 1.10
+ */
+void
+gst_event_parse_stream_group_done (GstEvent * event, guint * group_id)
+{
+  g_return_if_fail (event != NULL);
+  g_return_if_fail (GST_EVENT_TYPE (event) == GST_EVENT_STREAM_GROUP_DONE);
+
+  if (group_id) {
+    gst_structure_id_get (GST_EVENT_STRUCTURE (event),
+        GST_QUARK (GROUP_ID), G_TYPE_UINT, group_id, NULL);
+  }
+}
+
+/**
  * gst_event_new_eos:
  *
  * Create a new EOS event. The eos event can only travel downstream
@@ -1508,6 +1637,48 @@
 }
 
 /**
+ * gst_event_set_stream:
+ * @event: a stream-start event
+ * @stream: (transfer none): the stream object to set
+ *
+ * Set the @stream on the stream-start @event 
+ *
+ * Since: 1.10
+ */
+void
+gst_event_set_stream (GstEvent * event, GstStream * stream)
+{
+  g_return_if_fail (event != NULL);
+  g_return_if_fail (GST_EVENT_TYPE (event) == GST_EVENT_STREAM_START);
+  g_return_if_fail (gst_event_is_writable (event));
+
+  gst_structure_id_set (GST_EVENT_STRUCTURE (event),
+      GST_QUARK (STREAM), GST_TYPE_STREAM, stream, NULL);
+}
+
+/**
+ * gst_event_parse_stream:
+ * @event: a stream-start event
+ * @stream: (out) (transfer full): adress of variable to store the stream
+ *
+ * Parse a stream-start @event and extract the #GstStream from it.
+ *
+ * Since: 1.10
+ */
+void
+gst_event_parse_stream (GstEvent * event, GstStream ** stream)
+{
+  g_return_if_fail (event != NULL);
+  g_return_if_fail (GST_EVENT_TYPE (event) == GST_EVENT_STREAM_START);
+
+  if (stream) {
+    gst_structure_id_get (GST_EVENT_STRUCTURE (event),
+        GST_QUARK (STREAM), GST_TYPE_STREAM, stream, NULL);
+  }
+
+}
+
+/**
  * gst_event_set_stream_flags:
  * @event: a stream-start event
  * @flags: the stream flags to set
@@ -1596,6 +1767,63 @@
 }
 
 /**
+ * gst_event_new_stream_collection:
+ * @collection: Active collection for this data flow
+ *
+ * Create a new STREAM_COLLECTION event. The stream collection event can only
+ * travel downstream synchronized with the buffer flow.
+ *
+ * Source elements, demuxers and other elements that manage collections
+ * of streams and post #GstStreamCollection messages on the bus also send
+ * this event downstream on each pad involved in the collection, so that
+ * activation of a new collection can be tracked through the downstream
+ * data flow.
+ *
+ * Returns: (transfer full): the new STREAM_COLLECTION event.
+ *
+ * Since: 1.10
+ */
+GstEvent *
+gst_event_new_stream_collection (GstStreamCollection * collection)
+{
+  GstStructure *s;
+
+  g_return_val_if_fail (collection != NULL, NULL);
+  g_return_val_if_fail (GST_IS_STREAM_COLLECTION (collection), NULL);
+
+  s = gst_structure_new_id (GST_QUARK (EVENT_STREAM_COLLECTION),
+      GST_QUARK (COLLECTION), GST_TYPE_STREAM_COLLECTION, collection, NULL);
+
+  return gst_event_new_custom (GST_EVENT_STREAM_COLLECTION, s);
+}
+
+/**
+ * gst_event_parse_stream_collection:
+ * @event: a stream-collection event
+ * @collection: (out): pointer to store the collection
+ *
+ * Retrieve new #GstStreamCollection from STREAM_COLLECTION event @event.
+ *
+ * Since: 1.10
+ */
+void
+gst_event_parse_stream_collection (GstEvent * event,
+    GstStreamCollection ** collection)
+{
+  const GstStructure *structure;
+
+  g_return_if_fail (event != NULL);
+  g_return_if_fail (GST_EVENT_TYPE (event) == GST_EVENT_STREAM_COLLECTION);
+
+  structure = gst_event_get_structure (event);
+
+  if (collection) {
+    gst_structure_id_get (structure,
+        GST_QUARK (COLLECTION), GST_TYPE_STREAM_COLLECTION, collection, NULL);
+  }
+}
+
+/**
  * gst_event_new_toc:
  * @toc: (transfer none): #GstToc structure.
  * @updated: whether @toc was updated or not.
diff --git a/gst/gstevent.h b/gst/gstevent.h
index e20c820..e7dbb25 100644
--- a/gst/gstevent.h
+++ b/gst/gstevent.h
@@ -79,6 +79,7 @@
  *                 from the pipeline and unblock all streaming threads.
  * @GST_EVENT_FLUSH_STOP: Stop a flush operation. This event resets the
  *                 running-time of the pipeline.
+ * @GST_EVENT_SELECT_STREAMS: A request to select one or more streams (Since 1.10)
  * @GST_EVENT_STREAM_START: Event to mark the start of a new stream. Sent before any
  *                 other serialized event and only sent at the start of a new stream,
  *                 not after flushing seeks.
@@ -87,14 +88,19 @@
  *                 segment events contains information for clipping buffers and
  *                 converting buffer timestamps to running-time and
  *                 stream-time.
+ * @GST_EVENT_STREAM_COLLECTION: A new #GstStreamCollection is available (Since 1.10)
  * @GST_EVENT_TAG: A new set of metadata tags has been found in the stream.
  * @GST_EVENT_BUFFERSIZE: Notification of buffering requirements. Currently not
  *                 used yet.
  * @GST_EVENT_SINK_MESSAGE: An event that sinks turn into a message. Used to
  *                          send messages that should be emitted in sync with
  *                          rendering.
+ * @GST_EVENT_STREAM_GROUP_DONE: Indicates that there is no more data for
+ *                 the stream group ID in the message. Sent before EOS
+ *                 in some instances and should be handled mostly the same. (Since 1.10)
  * @GST_EVENT_EOS: End-Of-Stream. No more data is to be expected to follow
- *                 without a SEGMENT event.
+ *                 without either a STREAM_START event, or a FLUSH_STOP and a SEGMENT
+ *                 event.
  * @GST_EVENT_SEGMENT_DONE: Marks the end of a segment playback.
  * @GST_EVENT_GAP: Marks a gap in the datastream.
  * @GST_EVENT_TOC: An event which indicates that a new table of contents (TOC)
@@ -144,9 +150,11 @@
   GST_EVENT_STREAM_START          = GST_EVENT_MAKE_TYPE (40, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY)),
   GST_EVENT_CAPS                  = GST_EVENT_MAKE_TYPE (50, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY)),
   GST_EVENT_SEGMENT               = GST_EVENT_MAKE_TYPE (70, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY)),
+  GST_EVENT_STREAM_COLLECTION     = GST_EVENT_MAKE_TYPE (75, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY) | FLAG(STICKY_MULTI)),
   GST_EVENT_TAG                   = GST_EVENT_MAKE_TYPE (80, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY) | FLAG(STICKY_MULTI)),
   GST_EVENT_BUFFERSIZE            = GST_EVENT_MAKE_TYPE (90, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY)),
   GST_EVENT_SINK_MESSAGE          = GST_EVENT_MAKE_TYPE (100, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY) | FLAG(STICKY_MULTI)),
+  GST_EVENT_STREAM_GROUP_DONE     = GST_EVENT_MAKE_TYPE (105, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY)),
   GST_EVENT_EOS                   = GST_EVENT_MAKE_TYPE (110, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY)),
   GST_EVENT_TOC                   = GST_EVENT_MAKE_TYPE (120, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY) | FLAG(STICKY_MULTI)),
   GST_EVENT_PROTECTION            = GST_EVENT_MAKE_TYPE (130, FLAG (DOWNSTREAM) | FLAG (SERIALIZED) | FLAG (STICKY) | FLAG (STICKY_MULTI)),
@@ -163,6 +171,7 @@
   GST_EVENT_STEP                  = GST_EVENT_MAKE_TYPE (230, FLAG(UPSTREAM)),
   GST_EVENT_RECONFIGURE           = GST_EVENT_MAKE_TYPE (240, FLAG(UPSTREAM)),
   GST_EVENT_TOC_SELECT            = GST_EVENT_MAKE_TYPE (250, FLAG(UPSTREAM)),
+  GST_EVENT_SELECT_STREAMS        = GST_EVENT_MAKE_TYPE (260, FLAG(UPSTREAM)),
 
   /* custom events start here */
   GST_EVENT_CUSTOM_UPSTREAM          = GST_EVENT_MAKE_TYPE (270, FLAG(UPSTREAM)),
@@ -174,6 +183,30 @@
 } GstEventType;
 #undef FLAG
 
+/**
+ * GstStreamFlags:
+ * @GST_STREAM_FLAG_NONE: This stream has no special attributes
+ * @GST_STREAM_FLAG_SPARSE: This stream is a sparse stream (e.g. a subtitle
+ *    stream), data may flow only in irregular intervals with large gaps in
+ *    between.
+ * @GST_STREAM_FLAG_SELECT: This stream should be selected by default. This
+ *    flag may be used by demuxers to signal that a stream should be selected
+ *    by default in a playback scenario.
+ * @GST_STREAM_FLAG_UNSELECT: This stream should not be selected by default.
+ *    This flag may be used by demuxers to signal that a stream should not
+ *    be selected by default in a playback scenario, but only if explicitly
+ *    selected by the user (e.g. an audio track for the hard of hearing or
+ *    a director's commentary track).
+ *
+ * Since: 1.2
+ */
+typedef enum {
+  GST_STREAM_FLAG_NONE,
+  GST_STREAM_FLAG_SPARSE       = (1 << 0),
+  GST_STREAM_FLAG_SELECT       = (1 << 1),
+  GST_STREAM_FLAG_UNSELECT     = (1 << 2)
+} GstStreamFlags;
+
 #include <gst/gstminiobject.h>
 #include <gst/gstformat.h>
 #include <gst/gstobject.h>
@@ -355,29 +388,6 @@
   GST_QOS_TYPE_THROTTLE        = 2
 } GstQOSType;
 
-/**
- * GstStreamFlags:
- * @GST_STREAM_FLAG_NONE: This stream has no special attributes
- * @GST_STREAM_FLAG_SPARSE: This stream is a sparse stream (e.g. a subtitle
- *    stream), data may flow only in irregular intervals with large gaps in
- *    between.
- * @GST_STREAM_FLAG_SELECT: This stream should be selected by default. This
- *    flag may be used by demuxers to signal that a stream should be selected
- *    by default in a playback scenario.
- * @GST_STREAM_FLAG_UNSELECT: This stream should not be selected by default.
- *    This flag may be used by demuxers to signal that a stream should not
- *    be selected by default in a playback scenario, but only if explicitly
- *    selected by the user (e.g. an audio track for the hard of hearing or
- *    a director's commentary track).
- *
- * Since: 1.2
- */
-typedef enum {
-  GST_STREAM_FLAG_NONE,
-  GST_STREAM_FLAG_SPARSE       = (1 << 0),
-  GST_STREAM_FLAG_SELECT       = (1 << 1),
-  GST_STREAM_FLAG_UNSELECT     = (1 << 2)
-} GstStreamFlags;
 
 /**
  * GstEvent:
@@ -467,6 +477,8 @@
 /* Stream start event */
 GstEvent *      gst_event_new_stream_start      (const gchar *stream_id) G_GNUC_MALLOC;
 void            gst_event_parse_stream_start    (GstEvent *event, const gchar **stream_id);
+void            gst_event_set_stream		(GstEvent *event, GstStream *stream);
+void            gst_event_parse_stream		(GstEvent *event, GstStream **stream);
 
 void            gst_event_set_stream_flags      (GstEvent *event, GstStreamFlags flags);
 void            gst_event_parse_stream_flags    (GstEvent *event, GstStreamFlags *flags);
@@ -480,6 +492,18 @@
 GstEvent *      gst_event_new_flush_stop        (gboolean reset_time) G_GNUC_MALLOC;
 void            gst_event_parse_flush_stop      (GstEvent *event, gboolean *reset_time);
 
+/* Stream collection event */
+GstEvent *      gst_event_new_stream_collection   (GstStreamCollection *collection) G_GNUC_MALLOC;
+void            gst_event_parse_stream_collection (GstEvent *event, GstStreamCollection **collection);
+
+/* select streams event */
+GstEvent *      gst_event_new_select_streams    (GList *streams);
+void            gst_event_parse_select_streams  (GstEvent *event, GList **streams);
+
+/* stream-group-done event */
+GstEvent *      gst_event_new_stream_group_done (const guint group_id) G_GNUC_MALLOC;
+void            gst_event_parse_stream_group_done (GstEvent *event, guint *group_id);
+
 /* EOS event */
 GstEvent *      gst_event_new_eos               (void) G_GNUC_MALLOC;
 
diff --git a/gst/gstghostpad.c b/gst/gstghostpad.c
index 96703ed..0489432 100644
--- a/gst/gstghostpad.c
+++ b/gst/gstghostpad.c
@@ -819,7 +819,7 @@
  * is unlinked and links to the new target are established. if @newtarget is
  * %NULL the target will be cleared.
  *
- * Returns: (transfer full): %TRUE if the new target could be set. This function
+ * Returns: %TRUE if the new target could be set. This function
  *     can return %FALSE when the internal pads could not be linked.
  */
 gboolean
diff --git a/gst/gstinfo.c b/gst/gstinfo.c
index 8bfa33b..75b5e4c 100644
--- a/gst/gstinfo.c
+++ b/gst/gstinfo.c
@@ -253,6 +253,9 @@
 static GMutex __log_func_mutex;
 static GSList *__log_functions = NULL;
 
+/* whether to add the default log function in gst_init() */
+static gboolean add_default_log_func = TRUE;
+
 #define PRETTY_TAGS_DEFAULT  TRUE
 static gboolean pretty_tags = PRETTY_TAGS_DEFAULT;
 
@@ -296,20 +299,24 @@
   const gchar *env;
   FILE *log_file;
 
-  env = g_getenv ("GST_DEBUG_FILE");
-  if (env != NULL && *env != '\0') {
-    if (strcmp (env, "-") == 0) {
-      log_file = stdout;
-    } else {
-      log_file = g_fopen (env, "w");
-      if (log_file == NULL) {
-        g_printerr ("Could not open log file '%s' for writing: %s\n", env,
-            g_strerror (errno));
-        log_file = stderr;
+  if (add_default_log_func) {
+    env = g_getenv ("GST_DEBUG_FILE");
+    if (env != NULL && *env != '\0') {
+      if (strcmp (env, "-") == 0) {
+        log_file = stdout;
+      } else {
+        log_file = g_fopen (env, "w");
+        if (log_file == NULL) {
+          g_printerr ("Could not open log file '%s' for writing: %s\n", env,
+              g_strerror (errno));
+          log_file = stderr;
+        }
       }
+    } else {
+      log_file = stderr;
     }
-  } else {
-    log_file = stderr;
+
+    gst_debug_add_log_function (gst_debug_log_default, log_file, NULL);
   }
 
   __gst_printf_pointer_extension_set_func
@@ -321,8 +328,6 @@
   _GST_CAT_DEBUG = _gst_debug_category_new ("GST_DEBUG",
       GST_DEBUG_BOLD | GST_DEBUG_FG_YELLOW, "debugging subsystem");
 
-  gst_debug_add_log_function (gst_debug_log_default, log_file, NULL);
-
   /* FIXME: add descriptions here */
   GST_CAT_GST_INIT = _gst_debug_category_new ("GST_INIT",
       GST_DEBUG_BOLD | GST_DEBUG_FG_RED, NULL);
@@ -1248,7 +1253,8 @@
 
 /**
  * gst_debug_remove_log_function:
- * @func: (scope call): the log function to remove
+ * @func: (scope call) (allow-none): the log function to remove, or %NULL to
+ *     remove the default log function
  *
  * Removes all registered instances of the given logging functions.
  *
@@ -1265,9 +1271,18 @@
   removals =
       gst_debug_remove_with_compare_func
       (gst_debug_compare_log_function_by_func, (gpointer) func);
-  if (gst_is_initialized ())
+
+  if (gst_is_initialized ()) {
     GST_DEBUG ("removed log function %p %d times from log function list", func,
         removals);
+  } else {
+    /* If the default log function is removed before gst_init() was called,
+     * set a flag so we don't add it in gst_init() later */
+    if (func == gst_debug_log_default) {
+      add_default_log_func = FALSE;
+      ++removals;
+    }
+  }
 
   return removals;
 }
diff --git a/gst/gstinfo.h b/gst/gstinfo.h
index 3b7ccd5..d2fd7e4 100644
--- a/gst/gstinfo.h
+++ b/gst/gstinfo.h
@@ -262,7 +262,15 @@
 /**
  * GST_PTR_FORMAT:
  *
- * printf format type used to debug GStreamer types.
+ * printf format type used to debug GStreamer types. You can use this in
+ * combination with GStreamer's debug logging system as well as the functions
+ * gst_info_vasprintf(), gst_info_strdup_vprintf() and gst_info_strdup_printf()
+ * to pretty-print the following types: #GstCaps, #GstStructure,
+ * #GstCapsFeatures, #GstTagList, #GstDateTime, #GstBuffer, #GstBufferList,
+ * #GstMessage, #GstEvent, #GstQuery, #GstContext, #GstPad, #GstObject. All
+ * #GObject types will be printed as typename plus pointer, and everything
+ * else will simply be printed as pointer address.
+ *
  * This can only be used on types whose size is >= sizeof(gpointer).
  */
 #define GST_PTR_FORMAT     "p\aA"
@@ -270,7 +278,10 @@
 /**
  * GST_SEGMENT_FORMAT:
  *
- * printf format type used to debug GStreamer segments.
+ * printf format type used to debug GStreamer segments. You can use this in
+ * combination with GStreamer's debug logging system as well as the functions
+ * gst_info_vasprintf(), gst_info_strdup_vprintf() and gst_info_strdup_printf()
+ * to pretty-print #GstSegment structures.
  * This can only be used on pointers to GstSegment structures.
  */
 #define GST_SEGMENT_FORMAT "p\aB"
@@ -404,9 +415,11 @@
 
 #ifndef GST_DISABLE_GST_DEBUG
 
+/* cast to void * avoids a warning with gcc 6
+ * see https://bugzilla.gnome.org/show_bug.cgi?id=764526 */
 #define gst_debug_add_log_function(func,data,notify) \
 G_STMT_START{                                        \
-  if (func == gst_debug_log_default) {               \
+  if (func == (void *) gst_debug_log_default) {               \
     gst_debug_add_log_function(NULL,data,notify);    \
   } else {                                           \
     gst_debug_add_log_function(func,data,notify);    \
@@ -414,7 +427,7 @@
 }G_STMT_END
 
 #define gst_debug_remove_log_function(func)   \
-    (func == gst_debug_log_default) ?         \
+    (func == (void *) gst_debug_log_default) ?         \
         gst_debug_remove_log_function(NULL) : \
         gst_debug_remove_log_function(func)
 
diff --git a/gst/gstiterator.c b/gst/gstiterator.c
index 77f0c02..b15b202 100644
--- a/gst/gstiterator.c
+++ b/gst/gstiterator.c
@@ -607,6 +607,8 @@
   GValue item = { 0, };
   GstIteratorResult result;
 
+  g_return_val_if_fail (it != NULL, GST_ITERATOR_ERROR);
+
   while (1) {
     result = gst_iterator_next (it, &item);
     switch (result) {
@@ -625,7 +627,13 @@
   }
 
 fold_done:
+
+#if GLIB_CHECK_VERSION (2, 48, 0)
   g_value_unset (&item);
+#else
+  if (item.g_type != 0)
+    g_value_unset (&item);
+#endif
 
   return result;
 }
diff --git a/gst/gstmemory.h b/gst/gstmemory.h
index 5d6edec..9ea1fa6 100644
--- a/gst/gstmemory.h
+++ b/gst/gstmemory.h
@@ -216,7 +216,7 @@
  *
  * Initializer for #GstMapInfo
  */
-#define GST_MAP_INFO_INIT { NULL, 0, NULL, 0, 0, {0, }, {0, }}
+#define GST_MAP_INFO_INIT { NULL, (GstMapFlags) 0, NULL, 0, 0, { NULL, NULL, NULL, NULL}, {NULL, NULL, NULL, NULL}}
 
 /**
  * GstMemoryMapFunction:
@@ -351,13 +351,13 @@
 #define        gst_memory_make_writable(m) GST_MEMORY_CAST (gst_mini_object_make_writable (GST_MINI_OBJECT_CAST (m)))
 
 /* retrieving data */
-GstMemory *    gst_memory_make_mapped  (GstMemory *mem, GstMapInfo *info, GstMapFlags flags);
+GstMemory *    gst_memory_make_mapped  (GstMemory *mem, GstMapInfo *info, GstMapFlags flags) G_GNUC_WARN_UNUSED_RESULT;
 gboolean       gst_memory_map          (GstMemory *mem, GstMapInfo *info, GstMapFlags flags);
 void           gst_memory_unmap        (GstMemory *mem, GstMapInfo *info);
 
 /* copy and subregions */
-GstMemory *    gst_memory_copy         (GstMemory *mem, gssize offset, gssize size);
-GstMemory *    gst_memory_share        (GstMemory *mem, gssize offset, gssize size);
+GstMemory *    gst_memory_copy         (GstMemory *mem, gssize offset, gssize size) G_GNUC_WARN_UNUSED_RESULT;
+GstMemory *    gst_memory_share        (GstMemory *mem, gssize offset, gssize size) G_GNUC_WARN_UNUSED_RESULT;
 
 /* span memory */
 gboolean       gst_memory_is_span      (GstMemory *mem1, GstMemory *mem2, gsize *offset);
diff --git a/gst/gstmessage.c b/gst/gstmessage.c
index 299ecfb..815485f 100644
--- a/gst/gstmessage.c
+++ b/gst/gstmessage.c
@@ -52,6 +52,7 @@
 #include "gsttaglist.h"
 #include "gstutils.h"
 #include "gstquark.h"
+#include "gstvalue.h"
 
 
 typedef struct
@@ -105,9 +106,15 @@
   {GST_MESSAGE_HAVE_CONTEXT, "have-context", 0},
   {GST_MESSAGE_DEVICE_ADDED, "device-added", 0},
   {GST_MESSAGE_DEVICE_REMOVED, "device-removed", 0},
+  {GST_MESSAGE_PROPERTY_NOTIFY, "property-notify", 0},
+  {GST_MESSAGE_STREAM_COLLECTION, "stream-collection", 0},
+  {GST_MESSAGE_STREAMS_SELECTED, "streams-selected", 0},
+  {GST_MESSAGE_REDIRECT, "redirect", 0},
   {0, NULL, 0}
 };
 
+static GQuark details_quark = 0;
+
 GType _gst_message_type = 0;
 GST_DEFINE_MINI_OBJECT_TYPE (GstMessage, gst_message);
 
@@ -122,6 +129,7 @@
     message_quarks[i].quark =
         g_quark_from_static_string (message_quarks[i].name);
   }
+  details_quark = g_quark_from_static_string ("details");
 
   _gst_message_type = gst_message_get_type ();
 }
@@ -385,6 +393,45 @@
 }
 
 /**
+ * gst_message_new_error_with_details:
+ * @src: (transfer none) (allow-none): The object originating the message.
+ * @error: (transfer none): The GError for this message.
+ * @debug: A debugging string.
+ * @details: (transfer full): (allow-none): A GstStructure with details
+ *
+ * Create a new error message. The message will copy @error and
+ * @debug. This message is posted by element when a fatal event
+ * occurred. The pipeline will probably (partially) stop. The application
+ * receiving this message should stop the pipeline.
+ *
+ * Returns: (transfer full): the new error message.
+ *
+ * Since: 1.10
+ */
+GstMessage *
+gst_message_new_error_with_details (GstObject * src, GError * error,
+    const gchar * debug, GstStructure * details)
+{
+  GstMessage *message;
+  GstStructure *structure;
+
+  structure = gst_structure_new_id (GST_QUARK (MESSAGE_ERROR),
+      GST_QUARK (GERROR), G_TYPE_ERROR, error,
+      GST_QUARK (DEBUG), G_TYPE_STRING, debug, NULL);
+  message = gst_message_new_custom (GST_MESSAGE_ERROR, src, structure);
+  if (details) {
+    GValue v = G_VALUE_INIT;
+
+    g_value_init (&v, GST_TYPE_STRUCTURE);
+    g_value_take_boxed (&v, details);
+    gst_structure_id_take_value (GST_MESSAGE_STRUCTURE (message), details_quark,
+        &v);
+  }
+
+  return message;
+}
+
+/**
  * gst_message_new_error:
  * @src: (transfer none) (allow-none): The object originating the message.
  * @error: (transfer none): The GError for this message.
@@ -402,13 +449,70 @@
 GstMessage *
 gst_message_new_error (GstObject * src, GError * error, const gchar * debug)
 {
+  return gst_message_new_error_with_details (src, error, debug, NULL);
+}
+
+/**
+ * gst_message_parse_error_details:
+ * @message: The message object
+ * @structure: (out): A pointer to the returned details
+ *
+ * Returns the optional details structure, may be NULL if none.
+ * The returned structure must not be freed.
+ *
+ * Since: 1.10
+ */
+void
+gst_message_parse_error_details (GstMessage * message,
+    const GstStructure ** structure)
+{
+  const GValue *v;
+
+  g_return_if_fail (GST_IS_MESSAGE (message));
+  g_return_if_fail (GST_MESSAGE_TYPE (message) == GST_MESSAGE_ERROR);
+  g_return_if_fail (structure != NULL);
+
+  *structure = NULL;
+  v = gst_structure_id_get_value (GST_MESSAGE_STRUCTURE (message),
+      details_quark);
+  if (v) {
+    *structure = g_value_get_boxed (v);
+  }
+}
+
+/**
+ * gst_message_new_warning_with_details:
+ * @src: (transfer none) (allow-none): The object originating the message.
+ * @error: (transfer none): The GError for this message.
+ * @debug: A debugging string.
+ * @details: (transfer full): (allow-none): A GstStructure with details
+ *
+ * Create a new warning message. The message will make copies of @error and
+ * @debug.
+ *
+ * Returns: (transfer full): the new warning message.
+ *
+ * Since: 1.10
+ */
+GstMessage *
+gst_message_new_warning_with_details (GstObject * src, GError * error,
+    const gchar * debug, GstStructure * details)
+{
   GstMessage *message;
   GstStructure *structure;
 
-  structure = gst_structure_new_id (GST_QUARK (MESSAGE_ERROR),
+  structure = gst_structure_new_id (GST_QUARK (MESSAGE_WARNING),
       GST_QUARK (GERROR), G_TYPE_ERROR, error,
       GST_QUARK (DEBUG), G_TYPE_STRING, debug, NULL);
-  message = gst_message_new_custom (GST_MESSAGE_ERROR, src, structure);
+  message = gst_message_new_custom (GST_MESSAGE_WARNING, src, structure);
+  if (details) {
+    GValue v = G_VALUE_INIT;
+
+    g_value_init (&v, GST_TYPE_STRUCTURE);
+    g_value_take_boxed (&v, details);
+    gst_structure_id_take_value (GST_MESSAGE_STRUCTURE (message), details_quark,
+        &v);
+  }
 
   return message;
 }
@@ -422,20 +526,77 @@
  * Create a new warning message. The message will make copies of @error and
  * @debug.
  *
- * Returns: (transfer full): The new warning message.
+ * Returns: (transfer full): the new warning message.
  *
  * MT safe.
  */
 GstMessage *
 gst_message_new_warning (GstObject * src, GError * error, const gchar * debug)
 {
+  return gst_message_new_warning_with_details (src, error, debug, NULL);
+}
+
+/**
+ * gst_message_parse_warning_details:
+ * @message: The message object
+ * @structure: (out): A pointer to the returned details structure
+ *
+ * Returns the optional details structure, may be NULL if none
+ * The returned structure must not be freed.
+ *
+ * Since: 1.10
+ */
+void
+gst_message_parse_warning_details (GstMessage * message,
+    const GstStructure ** structure)
+{
+  const GValue *v;
+
+  g_return_if_fail (GST_IS_MESSAGE (message));
+  g_return_if_fail (GST_MESSAGE_TYPE (message) == GST_MESSAGE_WARNING);
+  g_return_if_fail (structure != NULL);
+
+  *structure = NULL;
+  v = gst_structure_id_get_value (GST_MESSAGE_STRUCTURE (message),
+      details_quark);
+  if (v) {
+    *structure = g_value_get_boxed (v);
+  }
+}
+
+/**
+ * gst_message_new_info_with_details:
+ * @src: (transfer none) (allow-none): The object originating the message.
+ * @error: (transfer none): The GError for this message.
+ * @debug: A debugging string.
+ * @details: (transfer full): (allow-none): A GstStructure with details
+ *
+ * Create a new info message. The message will make copies of @error and
+ * @debug.
+ *
+ * Returns: (transfer full): the new warning message.
+ *
+ * Since: 1.10
+ */
+GstMessage *
+gst_message_new_info_with_details (GstObject * src, GError * error,
+    const gchar * debug, GstStructure * details)
+{
   GstMessage *message;
   GstStructure *structure;
 
-  structure = gst_structure_new_id (GST_QUARK (MESSAGE_WARNING),
+  structure = gst_structure_new_id (GST_QUARK (MESSAGE_INFO),
       GST_QUARK (GERROR), G_TYPE_ERROR, error,
       GST_QUARK (DEBUG), G_TYPE_STRING, debug, NULL);
-  message = gst_message_new_custom (GST_MESSAGE_WARNING, src, structure);
+  message = gst_message_new_custom (GST_MESSAGE_INFO, src, structure);
+  if (details) {
+    GValue v = G_VALUE_INIT;
+
+    g_value_init (&v, GST_TYPE_STRUCTURE);
+    g_value_take_boxed (&v, details);
+    gst_structure_id_take_value (GST_MESSAGE_STRUCTURE (message), details_quark,
+        &v);
+  }
 
   return message;
 }
@@ -449,22 +610,42 @@
  * Create a new info message. The message will make copies of @error and
  * @debug.
  *
- * MT safe.
- *
  * Returns: (transfer full): the new info message.
+ *
+ * MT safe.
  */
 GstMessage *
 gst_message_new_info (GstObject * src, GError * error, const gchar * debug)
 {
-  GstMessage *message;
-  GstStructure *structure;
+  return gst_message_new_info_with_details (src, error, debug, NULL);
+}
 
-  structure = gst_structure_new_id (GST_QUARK (MESSAGE_INFO),
-      GST_QUARK (GERROR), G_TYPE_ERROR, error,
-      GST_QUARK (DEBUG), G_TYPE_STRING, debug, NULL);
-  message = gst_message_new_custom (GST_MESSAGE_INFO, src, structure);
+/**
+ * gst_message_parse_info_details:
+ * @message: The message object
+ * @structure: (out): A pointer to the returned details structure
+ *
+ * Returns the optional details structure, may be NULL if none
+ * The returned structure must not be freed.
+ *
+ * Since: 1.10
+ */
+void
+gst_message_parse_info_details (GstMessage * message,
+    const GstStructure ** structure)
+{
+  const GValue *v;
 
-  return message;
+  g_return_if_fail (GST_IS_MESSAGE (message));
+  g_return_if_fail (GST_MESSAGE_TYPE (message) == GST_MESSAGE_INFO);
+  g_return_if_fail (structure != NULL);
+
+  *structure = NULL;
+  v = gst_structure_id_get_value (GST_MESSAGE_STRUCTURE (message),
+      details_quark);
+  if (v) {
+    *structure = g_value_get_boxed (v);
+  }
 }
 
 /**
@@ -826,10 +1007,7 @@
  * Create a new duration changed message. This message is posted by elements
  * that know the duration of a stream when the duration changes. This message
  * is received by bins and is used to calculate the total duration of a
- * pipeline. Elements may post a duration message with a duration of
- * GST_CLOCK_TIME_NONE to indicate that the duration has changed and the 
- * cached duration should be discarded. The new duration can then be 
- * retrieved via a query.
+ * pipeline.
  *
  * Returns: (transfer full): The new duration-changed message.
  *
@@ -2379,7 +2557,7 @@
 /**
  * gst_message_parse_device_added:
  * @message: a #GstMessage of type %GST_MESSAGE_DEVICE_ADDED
- * @device: (out) (allow-none) (transfer none): A location where to store a
+ * @device: (out) (allow-none) (transfer full): A location where to store a
  *  pointer to the new #GstDevice, or %NULL
  * 
  * Parses a device-added message. The device-added message is produced by
@@ -2431,7 +2609,7 @@
 /**
  * gst_message_parse_device_removed:
  * @message: a #GstMessage of type %GST_MESSAGE_DEVICE_REMOVED
- * @device: (out) (allow-none) (transfer none): A location where to store a
+ * @device: (out) (allow-none) (transfer full): A location where to store a
  *  pointer to the removed #GstDevice, or %NULL
  *
  * Parses a device-removed message. The device-removed message is produced by
@@ -2450,3 +2628,515 @@
     gst_structure_id_get (GST_MESSAGE_STRUCTURE (message),
         GST_QUARK (DEVICE), GST_TYPE_DEVICE, device, NULL);
 }
+
+/**
+ * gst_message_new_property_notify:
+ * @src: The #GstObject whose property changed (may or may not be a #GstElement)
+ * @property_name: name of the property that changed
+ * @val: (allow-none) (transfer full): new property value, or %NULL
+ *
+ * Returns: a newly allocated #GstMessage
+ *
+ * Since: 1.10
+ */
+GstMessage *
+gst_message_new_property_notify (GstObject * src, const gchar * property_name,
+    GValue * val)
+{
+  GstStructure *structure;
+  GValue name_val = G_VALUE_INIT;
+
+  g_return_val_if_fail (property_name != NULL, NULL);
+
+  structure = gst_structure_new_id_empty (GST_QUARK (MESSAGE_PROPERTY_NOTIFY));
+  g_value_init (&name_val, G_TYPE_STRING);
+  /* should already be interned, but let's make sure */
+  g_value_set_static_string (&name_val, g_intern_string (property_name));
+  gst_structure_id_take_value (structure, GST_QUARK (PROPERTY_NAME), &name_val);
+  if (val != NULL)
+    gst_structure_id_take_value (structure, GST_QUARK (PROPERTY_VALUE), val);
+
+  return gst_message_new_custom (GST_MESSAGE_PROPERTY_NOTIFY, src, structure);
+}
+
+/**
+ * gst_message_parse_property_notify:
+ * @message: a #GstMessage of type %GST_MESSAGE_PROPERTY_NOTIFY
+ * @object: (out) (allow-none) (transfer none): location where to store a
+ *     pointer to the object whose property got changed, or %NULL
+ * @property_name: (out) (allow-none): return location for the name of the
+ *     property that got changed, or %NULL
+ * @property_value: (out) (allow-none): return location for the new value of
+ *     the property that got changed, or %NULL. This will only be set if the
+ *     property notify watch was told to include the value when it was set up
+ *
+ * Parses a property-notify message. These will be posted on the bus only
+ * when set up with gst_element_add_property_notify_watch() or
+ * gst_element_add_property_deep_notify_watch().
+ *
+ * Since: 1.10
+ */
+void
+gst_message_parse_property_notify (GstMessage * message, GstObject ** object,
+    const gchar ** property_name, const GValue ** property_value)
+{
+  const GstStructure *s = GST_MESSAGE_STRUCTURE (message);
+
+  g_return_if_fail (GST_IS_MESSAGE (message));
+  g_return_if_fail (GST_MESSAGE_TYPE (message) == GST_MESSAGE_PROPERTY_NOTIFY);
+
+  if (object)
+    *object = GST_MESSAGE_SRC (message);
+
+  if (property_name) {
+    const GValue *name_value;
+
+    name_value = gst_structure_id_get_value (s, GST_QUARK (PROPERTY_NAME));
+    *property_name = g_value_get_string (name_value);
+  }
+
+  if (property_value)
+    *property_value =
+        gst_structure_id_get_value (s, GST_QUARK (PROPERTY_VALUE));
+}
+
+/**
+ * gst_message_new_stream_collection:
+ * @src: The #GstObject that created the message
+ * @collection: (transfer none): The #GstStreamCollection
+ *
+ * Creates a new stream-collection message. The message is used to announce new
+ * #GstStreamCollection
+ *
+ * Returns: a newly allocated #GstMessage
+ *
+ * Since: 1.10
+ */
+GstMessage *
+gst_message_new_stream_collection (GstObject * src,
+    GstStreamCollection * collection)
+{
+  GstMessage *message;
+  GstStructure *structure;
+
+  g_return_val_if_fail (collection != NULL, NULL);
+  g_return_val_if_fail (GST_IS_STREAM_COLLECTION (collection), NULL);
+
+  structure =
+      gst_structure_new_id (GST_QUARK (MESSAGE_STREAM_COLLECTION),
+      GST_QUARK (COLLECTION), GST_TYPE_STREAM_COLLECTION, collection, NULL);
+  message =
+      gst_message_new_custom (GST_MESSAGE_STREAM_COLLECTION, src, structure);
+
+  return message;
+}
+
+/**
+ * gst_message_parse_stream_collection:
+ * @message: a #GstMessage of type %GST_MESSAGE_STREAM_COLLECTION
+ * @collection: (out) (allow-none) (transfer full): A location where to store a
+ *  pointer to the #GstStreamCollection, or %NULL
+ *
+ * Parses a stream-collection message. 
+ *
+ * Since: 1.10
+ */
+void
+gst_message_parse_stream_collection (GstMessage * message,
+    GstStreamCollection ** collection)
+{
+  g_return_if_fail (GST_IS_MESSAGE (message));
+  g_return_if_fail (GST_MESSAGE_TYPE (message) ==
+      GST_MESSAGE_STREAM_COLLECTION);
+
+  if (collection)
+    gst_structure_id_get (GST_MESSAGE_STRUCTURE (message),
+        GST_QUARK (COLLECTION), GST_TYPE_STREAM_COLLECTION, collection, NULL);
+}
+
+/**
+ * gst_message_new_streams_selected:
+ * @src: The #GstObject that created the message
+ * @collection: (transfer none): The #GstStreamCollection
+ *
+ * Creates a new steams-selected message. The message is used to announce
+ * that an array of streams has been selected. This is generally in response
+ * to a #GST_EVENT_SELECT_STREAMS event, or when an element (such as decodebin3)
+ * makes an initial selection of streams.
+ *
+ * The message also contains the #GstStreamCollection to which the various streams
+ * belong to.
+ *
+ * Users of gst_message_new_streams_selected() can add the selected streams with
+ * gst_message_streams_selected_add().
+ *
+ * Returns: a newly allocated #GstMessage
+ *
+ * Since: 1.10
+ */
+GstMessage *
+gst_message_new_streams_selected (GstObject * src,
+    GstStreamCollection * collection)
+{
+  GstMessage *message;
+  GstStructure *structure;
+  GValue val = G_VALUE_INIT;
+
+  g_return_val_if_fail (collection != NULL, NULL);
+  g_return_val_if_fail (GST_IS_STREAM_COLLECTION (collection), NULL);
+
+  structure =
+      gst_structure_new_id (GST_QUARK (MESSAGE_STREAMS_SELECTED),
+      GST_QUARK (COLLECTION), GST_TYPE_STREAM_COLLECTION, collection, NULL);
+  g_value_init (&val, GST_TYPE_ARRAY);
+  gst_structure_id_take_value (structure, GST_QUARK (STREAMS), &val);
+  message =
+      gst_message_new_custom (GST_MESSAGE_STREAMS_SELECTED, src, structure);
+
+  return message;
+}
+
+/**
+ * gst_message_streams_selected_get_size:
+ * @message: a #GstMessage of type %GST_MESSAGE_STREAMS_SELECTED
+ *
+ * Returns the number of streams contained in the @message.
+ *
+ * Returns: The number of streams contained within.
+ *
+ * Since: 1.10
+ */
+guint
+gst_message_streams_selected_get_size (GstMessage * msg)
+{
+  const GValue *val;
+
+  g_return_val_if_fail (GST_IS_MESSAGE (msg), 0);
+  g_return_val_if_fail (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_STREAMS_SELECTED,
+      0);
+
+  val =
+      gst_structure_id_get_value (GST_MESSAGE_STRUCTURE (msg),
+      GST_QUARK (STREAMS));
+  return gst_value_array_get_size (val);
+}
+
+/**
+ * gst_message_streams_selected_add:
+ * @message: a #GstMessage of type %GST_MESSAGE_STREAMS_SELECTED
+ * @stream: (transfer none): a #GstStream to add to @message
+ *
+ * Adds the @stream to the @message.
+ *
+ * Since: 1.10
+ */
+void
+gst_message_streams_selected_add (GstMessage * msg, GstStream * stream)
+{
+  GValue *val;
+  GValue to_add = G_VALUE_INIT;
+
+  g_return_if_fail (GST_IS_MESSAGE (msg));
+  g_return_if_fail (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_STREAMS_SELECTED);
+  g_return_if_fail (GST_IS_STREAM (stream));
+
+  val =
+      (GValue *) gst_structure_id_get_value (GST_MESSAGE_STRUCTURE (msg),
+      GST_QUARK (STREAMS));
+  g_value_init (&to_add, GST_TYPE_STREAM);
+  g_value_set_object (&to_add, stream);
+  gst_value_array_append_and_take_value (val, &to_add);
+}
+
+/**
+ * gst_message_streams_selected_get_stream:
+ * @message: a #GstMessage of type %GST_MESSAGE_STREAMS_SELECTED
+ * @idx: Index of the stream to retrieve
+ *
+ * Retrieves the #GstStream with index @index from the @message.
+ *
+ * Returns: (transfer full): A #GstStream
+ *
+ * Since: 1.10
+ */
+GstStream *
+gst_message_streams_selected_get_stream (GstMessage * msg, guint idx)
+{
+  const GValue *streams, *val;
+
+  g_return_val_if_fail (GST_IS_MESSAGE (msg), NULL);
+  g_return_val_if_fail (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_STREAMS_SELECTED,
+      NULL);
+
+  streams =
+      gst_structure_id_get_value (GST_MESSAGE_STRUCTURE (msg),
+      GST_QUARK (STREAMS));
+  val = gst_value_array_get_value (streams, idx);
+  if (val) {
+    return (GstStream *) g_value_dup_object (val);
+  }
+
+  return NULL;
+}
+
+/**
+ * gst_message_parse_streams_selected:
+ * @message: a #GstMessage of type %GST_MESSAGE_STREAMS_SELECTED
+ * @collection: (out) (allow-none) (transfer full): A location where to store a
+ *  pointer to the #GstStreamCollection, or %NULL
+ *
+ * Parses a streams-selected message. 
+ *
+ * Since: 1.10
+ */
+void
+gst_message_parse_streams_selected (GstMessage * message,
+    GstStreamCollection ** collection)
+{
+  g_return_if_fail (GST_IS_MESSAGE (message));
+  g_return_if_fail (GST_MESSAGE_TYPE (message) == GST_MESSAGE_STREAMS_SELECTED);
+
+  if (collection)
+    gst_structure_id_get (GST_MESSAGE_STRUCTURE (message),
+        GST_QUARK (COLLECTION), GST_TYPE_STREAM_COLLECTION, collection, NULL);
+}
+
+/**
+ * gst_message_new_redirect:
+ * @src: The #GstObject whose property changed (may or may not be a #GstElement)
+ * @location: (transfer none): location string for the new entry
+ * @tag_list: (transfer full) (allow-none): tag list for the new entry
+ * @entry_struct: (transfer full) (allow-none): structure for the new entry
+ *
+ * Creates a new redirect message and adds a new entry to it. Redirect messages
+ * are posted when an element detects that the actual data has to be retrieved
+ * from a different location. This is useful if such a redirection cannot be
+ * handled inside a source element, for example when HTTP 302/303 redirects
+ * return a non-HTTP URL.
+ *
+ * The redirect message can hold multiple entries. The first one is added
+ * when the redirect message is created, with the given location, tag_list,
+ * entry_struct arguments. Use gst_message_add_redirect_entry() to add more
+ * entries.
+ *
+ * Each entry has a location, a tag list, and a structure. All of these are
+ * optional. The tag list and structure are useful for additional metadata,
+ * such as bitrate statistics for the given location.
+ *
+ * By default, message recipients should treat entries in the order they are
+ * stored. The recipient should therefore try entry #0 first, and if this
+ * entry is not acceptable or working, try entry #1 etc. Senders must make
+ * sure that they add entries in this order. However, recipients are free to
+ * ignore the order and pick an entry that is "best" for them. One example
+ * would be a recipient that scans the entries for the one with the highest
+ * bitrate tag.
+ *
+ * The specified location string is copied. However, ownership over the tag
+ * list and structure are transferred to the message.
+ *
+ * Returns: a newly allocated #GstMessage
+ *
+ * Since: 1.10
+ */
+GstMessage *
+gst_message_new_redirect (GstObject * src, const gchar * location,
+    GstTagList * tag_list, const GstStructure * entry_struct)
+{
+  GstStructure *structure;
+  GstMessage *message;
+  GValue entry_locations_gvalue = G_VALUE_INIT;
+  GValue entry_taglists_gvalue = G_VALUE_INIT;
+  GValue entry_structures_gvalue = G_VALUE_INIT;
+
+  g_return_val_if_fail (location != NULL, NULL);
+
+  g_value_init (&entry_locations_gvalue, GST_TYPE_LIST);
+  g_value_init (&entry_taglists_gvalue, GST_TYPE_LIST);
+  g_value_init (&entry_structures_gvalue, GST_TYPE_LIST);
+
+  structure = gst_structure_new_id_empty (GST_QUARK (MESSAGE_REDIRECT));
+  gst_structure_id_take_value (structure, GST_QUARK (REDIRECT_ENTRY_LOCATIONS),
+      &entry_locations_gvalue);
+  gst_structure_id_take_value (structure, GST_QUARK (REDIRECT_ENTRY_TAGLISTS),
+      &entry_taglists_gvalue);
+  gst_structure_id_take_value (structure, GST_QUARK (REDIRECT_ENTRY_STRUCTURES),
+      &entry_structures_gvalue);
+
+  message = gst_message_new_custom (GST_MESSAGE_REDIRECT, src, structure);
+  g_assert (message != NULL);
+
+  gst_message_add_redirect_entry (message, location, tag_list, entry_struct);
+
+  return message;
+}
+
+/**
+ * gst_message_add_redirect_entry:
+ * @message: a #GstMessage of type %GST_MESSAGE_REDIRECT
+ * @location: (transfer none): location string for the new entry
+ * @tag_list: (transfer full) (allow-none): tag list for the new entry
+ * @entry_struct: (transfer full) (allow-none): structure for the new entry
+ *
+ * Creates and appends a new entry.
+ *
+ * The specified location string is copied. However, ownership over the tag
+ * list and structure are transferred to the message.
+ *
+ * Since: 1.10
+ */
+void
+gst_message_add_redirect_entry (GstMessage * message, const gchar * location,
+    GstTagList * tag_list, const GstStructure * entry_struct)
+{
+  GValue val = G_VALUE_INIT;
+  GstStructure *structure;
+  GValue *entry_locations_gvalue;
+  GValue *entry_taglists_gvalue;
+  GValue *entry_structures_gvalue;
+
+  g_return_if_fail (location != NULL);
+  g_return_if_fail (GST_IS_MESSAGE (message));
+  g_return_if_fail (GST_MESSAGE_TYPE (message) == GST_MESSAGE_REDIRECT);
+
+  structure = GST_MESSAGE_STRUCTURE (message);
+
+  entry_locations_gvalue =
+      (GValue *) gst_structure_id_get_value (structure,
+      GST_QUARK (REDIRECT_ENTRY_LOCATIONS));
+  g_return_if_fail (GST_VALUE_HOLDS_LIST (entry_locations_gvalue));
+  entry_taglists_gvalue =
+      (GValue *) gst_structure_id_get_value (structure,
+      GST_QUARK (REDIRECT_ENTRY_TAGLISTS));
+  g_return_if_fail (GST_VALUE_HOLDS_LIST (entry_taglists_gvalue));
+  entry_structures_gvalue =
+      (GValue *) gst_structure_id_get_value (structure,
+      GST_QUARK (REDIRECT_ENTRY_STRUCTURES));
+  g_return_if_fail (GST_VALUE_HOLDS_LIST (entry_structures_gvalue));
+
+  g_value_init (&val, G_TYPE_STRING);
+  if (location)
+    g_value_set_string (&val, location);
+  gst_value_list_append_and_take_value (entry_locations_gvalue, &val);
+
+  g_value_init (&val, GST_TYPE_TAG_LIST);
+  if (tag_list)
+    g_value_take_boxed (&val, tag_list);
+  gst_value_list_append_and_take_value (entry_taglists_gvalue, &val);
+
+  g_value_init (&val, GST_TYPE_STRUCTURE);
+  if (entry_struct)
+    g_value_take_boxed (&val, entry_struct);
+  gst_value_list_append_and_take_value (entry_structures_gvalue, &val);
+}
+
+/**
+ * gst_message_parse_redirect_entry:
+ * @message: a #GstMessage of type %GST_MESSAGE_REDIRECT
+ * @entry_index: index of the entry to parse
+ * @location: (out) (transfer none) (allow-none): return location for
+ *     the pointer to the entry's location string, or %NULL
+ * @tag_list: (out) (transfer none) (allow-none): return location for
+ *     the pointer to the entry's tag list, or %NULL
+ * @entry_struct: (out) (transfer none) (allow-none): return location
+ *     for the pointer to the entry's structure, or %NULL
+ *
+ * Parses the location and/or structure from the entry with the given index.
+ * The index must be between 0 and gst_message_get_num_redirect_entries() - 1.
+ * Returned pointers are valid for as long as this message exists.
+ *
+ * Since: 1.10
+ */
+void
+gst_message_parse_redirect_entry (GstMessage * message, gsize entry_index,
+    const gchar ** location, GstTagList ** tag_list,
+    const GstStructure ** entry_struct)
+{
+  const GValue *val;
+  GstStructure *structure;
+  const GValue *entry_locations_gvalue;
+  const GValue *entry_taglists_gvalue;
+  const GValue *entry_structures_gvalue;
+
+  g_return_if_fail (GST_IS_MESSAGE (message));
+  g_return_if_fail (GST_MESSAGE_TYPE (message) == GST_MESSAGE_REDIRECT);
+
+  if (G_UNLIKELY (!location && !tag_list && !entry_struct))
+    return;
+
+  structure = GST_MESSAGE_STRUCTURE (message);
+
+  entry_locations_gvalue =
+      gst_structure_id_get_value (structure,
+      GST_QUARK (REDIRECT_ENTRY_LOCATIONS));
+  g_return_if_fail (GST_VALUE_HOLDS_LIST (entry_locations_gvalue));
+  entry_taglists_gvalue =
+      gst_structure_id_get_value (structure,
+      GST_QUARK (REDIRECT_ENTRY_TAGLISTS));
+  g_return_if_fail (GST_VALUE_HOLDS_LIST (entry_taglists_gvalue));
+  entry_structures_gvalue =
+      gst_structure_id_get_value (structure,
+      GST_QUARK (REDIRECT_ENTRY_STRUCTURES));
+  g_return_if_fail (GST_VALUE_HOLDS_LIST (entry_structures_gvalue));
+
+  if (location) {
+    val = gst_value_list_get_value (entry_locations_gvalue, entry_index);
+    g_return_if_fail (val != NULL);
+    *location = g_value_get_string (val);
+  }
+
+  if (tag_list) {
+    val = gst_value_list_get_value (entry_taglists_gvalue, entry_index);
+    g_return_if_fail (val != NULL);
+    *tag_list = (GstTagList *) g_value_get_boxed (val);
+  }
+
+  if (entry_struct) {
+    val = gst_value_list_get_value (entry_structures_gvalue, entry_index);
+    g_return_if_fail (val != NULL);
+    *entry_struct = (const GstStructure *) g_value_get_boxed (val);
+  }
+}
+
+/**
+ * gst_message_get_num_redirect_entries:
+ * @message: a #GstMessage of type %GST_MESSAGE_REDIRECT
+ *
+ * Returns: the number of entries stored in the message
+ *
+ * Since: 1.10
+ */
+gsize
+gst_message_get_num_redirect_entries (GstMessage * message)
+{
+  GstStructure *structure;
+  const GValue *entry_locations_gvalue;
+  const GValue *entry_taglists_gvalue;
+  const GValue *entry_structures_gvalue;
+  gsize size;
+
+  g_return_val_if_fail (GST_IS_MESSAGE (message), 0);
+  g_return_val_if_fail (GST_MESSAGE_TYPE (message) == GST_MESSAGE_REDIRECT, 0);
+
+  structure = GST_MESSAGE_STRUCTURE (message);
+
+  entry_locations_gvalue =
+      gst_structure_id_get_value (structure,
+      GST_QUARK (REDIRECT_ENTRY_LOCATIONS));
+  g_return_val_if_fail (GST_VALUE_HOLDS_LIST (entry_locations_gvalue), 0);
+  entry_taglists_gvalue =
+      gst_structure_id_get_value (structure,
+      GST_QUARK (REDIRECT_ENTRY_TAGLISTS));
+  g_return_val_if_fail (GST_VALUE_HOLDS_LIST (entry_taglists_gvalue), 0);
+  entry_structures_gvalue =
+      gst_structure_id_get_value (structure,
+      GST_QUARK (REDIRECT_ENTRY_STRUCTURES));
+  g_return_val_if_fail (GST_VALUE_HOLDS_LIST (entry_structures_gvalue), 0);
+
+  size = gst_value_list_get_size (entry_locations_gvalue);
+
+  g_return_val_if_fail ((size ==
+          gst_value_list_get_size (entry_structures_gvalue))
+      && (size == gst_value_list_get_size (entry_taglists_gvalue)), 0);
+
+  return size;
+}
diff --git a/gst/gstmessage.h b/gst/gstmessage.h
index 1ea4085..68213eb 100644
--- a/gst/gstmessage.h
+++ b/gst/gstmessage.h
@@ -108,6 +108,15 @@
  *     a #GstDeviceProvider (Since 1.4)
  * @GST_MESSAGE_DEVICE_REMOVED: Message indicating a #GstDevice was removed
  *     from a #GstDeviceProvider (Since 1.4)
+ * @GST_MESSAGE_PROPERTY_NOTIFY: Message indicating a #GObject property has
+ *     changed (Since 1.10)
+ * @GST_MESSAGE_STREAM_COLLECTION: Message indicating a new #GstStreamCollection
+ *     is available (Since 1.10)
+ * @GST_MESSAGE_STREAMS_SELECTED: Message indicating the active selection of
+ *     #GstStreams has changed (Since 1.10)
+ * @GST_MESSAGE_REDIRECT: Message indicating to request the application to
+ *     try to play the given URL(s). Useful if for example a HTTP 302/303
+ *     response is received with a non-HTTP URL inside. (Since 1.10)
  * @GST_MESSAGE_ANY: mask for all of the above messages.
  *
  * The different message types that are available.
@@ -156,6 +165,10 @@
   GST_MESSAGE_EXTENDED          = (1 << 31),
   GST_MESSAGE_DEVICE_ADDED      = GST_MESSAGE_EXTENDED + 1,
   GST_MESSAGE_DEVICE_REMOVED    = GST_MESSAGE_EXTENDED + 2,
+  GST_MESSAGE_PROPERTY_NOTIFY   = GST_MESSAGE_EXTENDED + 3,
+  GST_MESSAGE_STREAM_COLLECTION = GST_MESSAGE_EXTENDED + 4,
+  GST_MESSAGE_STREAMS_SELECTED  = GST_MESSAGE_EXTENDED + 5,
+  GST_MESSAGE_REDIRECT          = GST_MESSAGE_EXTENDED + 6,
   GST_MESSAGE_ANY               = (gint) (0xffffffff)
 } GstMessageType;
 
@@ -167,6 +180,7 @@
 #include <gst/gstquery.h>
 #include <gst/gsttoc.h>
 #include <gst/gstdevice.h>
+#include <gst/gststreamcollection.h>
 
 GST_EXPORT GType _gst_message_type;
 
@@ -435,15 +449,21 @@
 /* ERROR */
 
 GstMessage *    gst_message_new_error           (GstObject * src, GError * error, const gchar * debug) G_GNUC_MALLOC;
+GstMessage *    gst_message_new_error_with_details (GstObject * src, GError * error, const gchar * debug, GstStructure * details) G_GNUC_MALLOC;
 void            gst_message_parse_error         (GstMessage *message, GError **gerror, gchar **debug);
+void            gst_message_parse_error_details (GstMessage *message, const GstStructure **structure);
 
 /* WARNING */
 GstMessage *    gst_message_new_warning         (GstObject * src, GError * error, const gchar * debug) G_GNUC_MALLOC;
+GstMessage *    gst_message_new_warning_with_details (GstObject * src, GError * error, const gchar * debug, GstStructure * details) G_GNUC_MALLOC;
 void            gst_message_parse_warning       (GstMessage *message, GError **gerror, gchar **debug);
+void            gst_message_parse_warning_details (GstMessage *message, const GstStructure **structure);
 
 /* INFO */
 GstMessage *    gst_message_new_info            (GstObject * src, GError * error, const gchar * debug) G_GNUC_MALLOC;
+GstMessage *    gst_message_new_info_with_details (GstObject * src, GError * error, const gchar * debug, GstStructure * details) G_GNUC_MALLOC;
 void            gst_message_parse_info          (GstMessage *message, GError **gerror, gchar **debug);
+void            gst_message_parse_info_details  (GstMessage *message, const GstStructure **structure);
 
 /* TAG */
 GstMessage *    gst_message_new_tag             (GstObject * src, GstTagList * tag_list) G_GNUC_MALLOC;
@@ -592,6 +612,26 @@
 GstMessage *    gst_message_new_device_removed    (GstObject * src, GstDevice * device) G_GNUC_MALLOC;
 void            gst_message_parse_device_removed  (GstMessage * message, GstDevice ** device);
 
+/* PROPERTY_NOTIFY */
+GstMessage *    gst_message_new_property_notify   (GstObject * src, const gchar * property_name, GValue * val) G_GNUC_MALLOC;
+void            gst_message_parse_property_notify (GstMessage * message, GstObject ** object, const gchar ** property_name, const GValue ** property_value);
+
+/* STREAM_COLLECTION */
+GstMessage *    gst_message_new_stream_collection   (GstObject * src, GstStreamCollection * collection) G_GNUC_MALLOC;
+void            gst_message_parse_stream_collection (GstMessage *message, GstStreamCollection **collection);
+
+/* STREAMS_SELECTED */
+GstMessage *    gst_message_new_streams_selected (GstObject *src, GstStreamCollection *collection);
+void            gst_message_streams_selected_add (GstMessage *message, GstStream *stream);
+void            gst_message_parse_streams_selected (GstMessage * message, GstStreamCollection **collection);
+guint           gst_message_streams_selected_get_size (GstMessage * message);
+GstStream      *gst_message_streams_selected_get_stream (GstMessage *message, guint idx);
+
+/* REDIRECT */
+GstMessage *    gst_message_new_redirect             (GstObject * src, const gchar * location, GstTagList * tag_list, const GstStructure * entry_struct) G_GNUC_MALLOC;
+void            gst_message_add_redirect_entry       (GstMessage * message, const gchar * location, GstTagList * tag_list, const GstStructure * entry_struct);
+void            gst_message_parse_redirect_entry     (GstMessage * message, gsize entry_index, const gchar ** location, GstTagList ** tag_list, const GstStructure ** entry_struct);
+gsize           gst_message_get_num_redirect_entries (GstMessage * message);
 
 #ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
 G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstMessage, gst_message_unref)
diff --git a/gst/gstmeta.c b/gst/gstmeta.c
index 1269c56..daa26ca 100644
--- a/gst/gstmeta.c
+++ b/gst/gstmeta.c
@@ -172,6 +172,10 @@
   g_return_val_if_fail (impl != NULL, NULL);
   g_return_val_if_fail (size != 0, NULL);
 
+  if (init_func == NULL)
+    g_critical ("Registering meta implementation '%s' without init function",
+        impl);
+
   /* first try to register the implementation name. It's possible
    * that this fails because it was already registered. Don't warn,
    * glib did this for us already. */
diff --git a/gst/gstminiobject.c b/gst/gstminiobject.c
index 4812f31..db571ab 100644
--- a/gst/gstminiobject.c
+++ b/gst/gstminiobject.c
@@ -57,11 +57,6 @@
 #include "gst/gstinfo.h"
 #include <gobject/gvaluecollector.h>
 
-#ifndef GST_DISABLE_TRACE
-#include "gsttrace.h"
-static GstAllocTrace *_gst_mini_object_trace;
-#endif
-
 /* Mutex used for weak referencing */
 G_LOCK_DEFINE_STATIC (qdata_mutex);
 static GQuark weak_ref_quark;
@@ -93,10 +88,6 @@
 _priv_gst_mini_object_initialize (void)
 {
   weak_ref_quark = g_quark_from_static_string ("GstMiniObjectWeakRefQuark");
-
-#ifndef GST_DISABLE_TRACE
-  _gst_mini_object_trace = _gst_alloc_trace_register ("GstMiniObject", 0);
-#endif
 }
 
 /**
@@ -129,9 +120,7 @@
   mini_object->n_qdata = 0;
   mini_object->qdata = NULL;
 
-#ifndef GST_DISABLE_TRACE
-  _gst_alloc_trace_new (_gst_mini_object_trace, mini_object);
-#endif
+  GST_TRACER_MINI_OBJECT_CREATED (mini_object);
 }
 
 /**
@@ -460,9 +449,7 @@
         call_finalize_notify (mini_object);
         g_free (mini_object->qdata);
       }
-#ifndef GST_DISABLE_TRACE
-      _gst_alloc_trace_free (_gst_mini_object_trace, mini_object);
-#endif
+      GST_TRACER_MINI_OBJECT_DESTROYED (mini_object);
       if (mini_object->free)
         mini_object->free (mini_object);
     }
@@ -631,7 +618,8 @@
   if ((i = find_notify (object, weak_ref_quark, TRUE, notify, data)) != -1) {
     remove_notify (object, i);
   } else {
-    g_warning ("%s: couldn't find weak ref %p(%p)", G_STRFUNC, notify, data);
+    g_warning ("%s: couldn't find weak ref %p (object:%p data:%p)", G_STRFUNC,
+        notify, object, data);
   }
   G_UNLOCK (qdata_mutex);
 }
diff --git a/gst/gstminiobject.h b/gst/gstminiobject.h
index 15556fb..88eb080 100644
--- a/gst/gstminiobject.h
+++ b/gst/gstminiobject.h
@@ -124,6 +124,9 @@
  * gst_mini_object_lock() and gst_mini_object_unlock().
  * @GST_MINI_OBJECT_FLAG_LOCK_READONLY: the object is permanently locked in
  * READONLY mode. Only read locks can be performed on the object.
+ * @GST_MINI_OBJECT_FLAG_MAY_BE_LEAKED: the object is expected to stay alive
+ * even after gst_deinit() has been called and so should be ignored by leak
+ * detection tools. (Since 1.10)
  * @GST_MINI_OBJECT_FLAG_LAST: first flag that can be used by subclasses.
  *
  * Flags for the mini object
@@ -132,6 +135,7 @@
 {
   GST_MINI_OBJECT_FLAG_LOCKABLE      = (1 << 0),
   GST_MINI_OBJECT_FLAG_LOCK_READONLY = (1 << 1),
+  GST_MINI_OBJECT_FLAG_MAY_BE_LEAKED = (1 << 2),
   /* padding */
   GST_MINI_OBJECT_FLAG_LAST          = (1 << 4)
 } GstMiniObjectFlags;
@@ -237,10 +241,10 @@
 void            gst_mini_object_unlock          (GstMiniObject *object, GstLockFlags flags);
 
 gboolean        gst_mini_object_is_writable     (const GstMiniObject *mini_object);
-GstMiniObject * gst_mini_object_make_writable	(GstMiniObject *mini_object);
+GstMiniObject * gst_mini_object_make_writable	(GstMiniObject *mini_object) G_GNUC_WARN_UNUSED_RESULT;
 
 /* copy */
-GstMiniObject * gst_mini_object_copy		(const GstMiniObject *mini_object) G_GNUC_MALLOC;
+GstMiniObject * gst_mini_object_copy		(const GstMiniObject *mini_object) G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT;
 
 
 void            gst_mini_object_set_qdata       (GstMiniObject *object, GQuark quark,
@@ -251,7 +255,7 @@
 
 gboolean        gst_mini_object_replace         (GstMiniObject **olddata, GstMiniObject *newdata);
 gboolean        gst_mini_object_take            (GstMiniObject **olddata, GstMiniObject *newdata);
-GstMiniObject * gst_mini_object_steal           (GstMiniObject **olddata);
+GstMiniObject * gst_mini_object_steal           (GstMiniObject **olddata) G_GNUC_WARN_UNUSED_RESULT;
 
 /**
  * GST_DEFINE_MINI_OBJECT_TYPE:
diff --git a/gst/gstobject.c b/gst/gstobject.c
index 1f58c8d..2e75086 100644
--- a/gst/gstobject.c
+++ b/gst/gstobject.c
@@ -101,11 +101,6 @@
 #include "gstparamspecs.h"
 #include "gstutils.h"
 
-#ifndef GST_DISABLE_TRACE
-#include "gsttrace.h"
-static GstAllocTrace *_gst_object_trace;
-#endif
-
 #define DEBUG_REFCOUNT
 
 /* Object signals and args */
@@ -154,15 +149,18 @@
 G_DEFINE_ABSTRACT_TYPE (GstObject, gst_object, G_TYPE_INITIALLY_UNOWNED);
 
 static void
+gst_object_constructed (GObject * object)
+{
+  GST_TRACER_OBJECT_CREATED (GST_OBJECT_CAST (object));
+
+  ((GObjectClass *) gst_object_parent_class)->constructed (object);
+}
+
+static void
 gst_object_class_init (GstObjectClass * klass)
 {
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 
-#ifndef GST_DISABLE_TRACE
-  _gst_object_trace =
-      _gst_alloc_trace_register (g_type_name (GST_TYPE_OBJECT), -2);
-#endif
-
   gobject_class->set_property = gst_object_set_property;
   gobject_class->get_property = gst_object_get_property;
 
@@ -208,6 +206,7 @@
   gobject_class->dispatch_properties_changed
       = GST_DEBUG_FUNCPTR (gst_object_dispatch_properties_changed);
 
+  gobject_class->constructed = gst_object_constructed;
   gobject_class->dispose = gst_object_dispose;
   gobject_class->finalize = gst_object_finalize;
 }
@@ -220,10 +219,6 @@
   object->name = NULL;
   GST_CAT_TRACE_OBJECT (GST_CAT_REFCOUNTING, object, "%p new", object);
 
-#ifndef GST_DISABLE_TRACE
-  _gst_alloc_trace_new (_gst_object_trace, object);
-#endif
-
   object->flags = 0;
 
   object->control_rate = 100 * GST_MSECOND;
@@ -366,7 +361,7 @@
   GstObject *self = (GstObject *) object;
   GstObject *parent;
 
-  GST_CAT_TRACE_OBJECT (GST_CAT_REFCOUNTING, object, "dispose");
+  GST_CAT_TRACE_OBJECT (GST_CAT_REFCOUNTING, object, "%p dispose", object);
 
   GST_OBJECT_LOCK (object);
   if ((parent = GST_OBJECT_PARENT (object)))
@@ -408,16 +403,14 @@
 {
   GstObject *gstobject = GST_OBJECT_CAST (object);
 
-  GST_CAT_TRACE_OBJECT (GST_CAT_REFCOUNTING, object, "finalize");
+  GST_CAT_TRACE_OBJECT (GST_CAT_REFCOUNTING, object, "%p finalize", object);
 
   g_signal_handlers_destroy (object);
 
   g_free (gstobject->name);
   g_mutex_clear (&gstobject->lock);
 
-#ifndef GST_DISABLE_TRACE
-  _gst_alloc_trace_free (_gst_object_trace, object);
-#endif
+  GST_TRACER_OBJECT_DESTROYED (gstobject);
 
   ((GObjectClass *) gst_object_parent_class)->finalize (object);
 }
@@ -623,10 +616,8 @@
     GST_OBJECT_UNLOCK (object);
     result = gst_object_set_name_default (object);
   }
-  /* FIXME-0.11: this misses a g_object_notify (object, "name"); unless called
-   * from gst_object_set_property.
-   * Ideally remove such custom setters (or make it static).
-   */
+
+  g_object_notify (G_OBJECT (object), "name");
   return result;
 
   /* error */
diff --git a/gst/gstobject.h b/gst/gstobject.h
index ad033e8..1ca6063 100644
--- a/gst/gstobject.h
+++ b/gst/gstobject.h
@@ -41,12 +41,16 @@
 
 /**
  * GstObjectFlags:
+ * @GST_OBJECT_FLAG_MAY_BE_LEAKED: the object is expected to stay alive even
+ * after gst_deinit() has been called and so should be ignored by leak
+ * detection tools. (Since 1.10)
  * @GST_OBJECT_FLAG_LAST: subclasses can add additional flags starting from this flag
  *
  * The standard flags that an gstobject may have.
  */
 typedef enum
 {
+  GST_OBJECT_FLAG_MAY_BE_LEAKED = (1 << 0),
   /* padding */
   GST_OBJECT_FLAG_LAST = (1<<4)
 } GstObjectFlags;
diff --git a/gst/gstpad.c b/gst/gstpad.c
index e52313c..cd9fff1 100644
--- a/gst/gstpad.c
+++ b/gst/gstpad.c
@@ -643,8 +643,8 @@
 {
   gint64 offset;
 
-  GST_DEBUG_OBJECT (pad, "apply pad offset %" GST_TIME_FORMAT,
-      GST_TIME_ARGS (pad->offset));
+  GST_DEBUG_OBJECT (pad, "apply pad offset %" GST_STIME_FORMAT,
+      GST_STIME_ARGS (pad->offset));
 
   if (GST_EVENT_TYPE (event) == GST_EVENT_SEGMENT) {
     GstSegment segment;
@@ -699,7 +699,7 @@
   GstPad *pad = GST_PAD_CAST (object);
   GstPad *peer;
 
-  GST_CAT_DEBUG_OBJECT (GST_CAT_REFCOUNTING, pad, "dispose");
+  GST_CAT_DEBUG_OBJECT (GST_CAT_REFCOUNTING, pad, "%p dispose", pad);
 
   /* unlink the peer pad */
   if ((peer = gst_pad_get_peer (pad))) {
@@ -3184,6 +3184,7 @@
 /* Default latency implementation */
 typedef struct
 {
+  guint count;
   gboolean live;
   GstClockTime min, max;
 } LatencyFoldData;
@@ -3215,7 +3216,8 @@
     GST_LOG_OBJECT (pad, "got latency live:%s min:%" G_GINT64_FORMAT
         " max:%" G_GINT64_FORMAT, live ? "true" : "false", min, max);
 
-    if (live) {
+    /* FIXME : Why do we only take values into account if it's live ? */
+    if (live || fold_data->count == 0) {
       if (min > fold_data->min)
         fold_data->min = min;
 
@@ -3224,8 +3226,9 @@
       else if (max < fold_data->max)
         fold_data->max = max;
 
-      fold_data->live = TRUE;
+      fold_data->live = live;
     }
+    fold_data->count += 1;
   } else if (peer) {
     GST_DEBUG_OBJECT (pad, "latency query failed");
     g_value_set_boolean (ret, FALSE);
@@ -3256,6 +3259,7 @@
   g_value_init (&ret, G_TYPE_BOOLEAN);
 
 retry:
+  fold_data.count = 0;
   fold_data.live = FALSE;
   fold_data.min = 0;
   fold_data.max = GST_CLOCK_TIME_NONE;
@@ -3417,13 +3421,25 @@
   type = info->type;
   original_data = info->data;
 
-  /* one of the data types for non-idle probes */
-  if ((type & GST_PAD_PROBE_TYPE_IDLE) == 0
-      && (flags & _PAD_PROBE_TYPE_ALL_BOTH_AND_FLUSH & type) == 0)
-    goto no_match;
   /* one of the scheduling types */
   if ((flags & GST_PAD_PROBE_TYPE_SCHEDULING & type) == 0)
     goto no_match;
+
+  if (type & GST_PAD_PROBE_TYPE_PUSH) {
+    /* one of the data types for non-idle probes */
+    if ((type & GST_PAD_PROBE_TYPE_IDLE) == 0
+        && (flags & _PAD_PROBE_TYPE_ALL_BOTH_AND_FLUSH & type) == 0)
+      goto no_match;
+  } else if (type & GST_PAD_PROBE_TYPE_PULL) {
+    /* one of the data types for non-idle probes */
+    if ((type & GST_PAD_PROBE_TYPE_BLOCKING) == 0
+        && (flags & _PAD_PROBE_TYPE_ALL_BOTH_AND_FLUSH & type) == 0)
+      goto no_match;
+  } else {
+    /* Type must have PULL or PUSH probe types */
+    g_assert_not_reached ();
+  }
+
   /* one of the blocking types must match */
   if ((type & GST_PAD_PROBE_TYPE_BLOCKING) &&
       (flags & GST_PAD_PROBE_TYPE_BLOCKING & type) == 0)
@@ -3740,7 +3756,8 @@
     goto done;
 
   pad->offset = offset;
-  GST_DEBUG_OBJECT (pad, "changed offset to %" G_GINT64_FORMAT, offset);
+  GST_DEBUG_OBJECT (pad, "changed offset to %" GST_STIME_FORMAT,
+      GST_STIME_ARGS (offset));
 
   /* resend all sticky events with updated offset on next buffer push */
   events_foreach (pad, mark_event_not_received, NULL);
@@ -5018,8 +5035,9 @@
   /* Unset the EOS flag when received STREAM_START event, so pad can
    * store sticky event and then push it later */
   if (type == GST_EVENT_STREAM_START) {
-    GST_LOG_OBJECT (pad, "Removing pending EOS events");
+    GST_LOG_OBJECT (pad, "Removing pending EOS and StreamGroupDone events");
     remove_event_by_type (pad, GST_EVENT_EOS);
+    remove_event_by_type (pad, GST_EVENT_STREAM_GROUP_DONE);
     GST_OBJECT_FLAG_UNSET (pad, GST_PAD_FLAG_EOS);
   }
 
@@ -5115,7 +5133,7 @@
 /**
  * gst_pad_store_sticky_event:
  * @pad: a #GstPad
- * @event: a #GstEvent
+ * @event: (transfer none): a #GstEvent
  *
  * Store the sticky @event on @pad
  *
@@ -5185,6 +5203,7 @@
       /* Remove sticky EOS events */
       GST_LOG_OBJECT (pad, "Removing pending EOS events");
       remove_event_by_type (pad, GST_EVENT_EOS);
+      remove_event_by_type (pad, GST_EVENT_STREAM_GROUP_DONE);
       remove_event_by_type (pad, GST_EVENT_SEGMENT);
       GST_OBJECT_FLAG_UNSET (pad, GST_PAD_FLAG_EOS);
       pad->ABI.abi.last_flowret = GST_FLOW_OK;
@@ -5509,6 +5528,7 @@
       /* Remove pending EOS events */
       GST_LOG_OBJECT (pad, "Removing pending EOS and SEGMENT events");
       remove_event_by_type (pad, GST_EVENT_EOS);
+      remove_event_by_type (pad, GST_EVENT_STREAM_GROUP_DONE);
       remove_event_by_type (pad, GST_EVENT_SEGMENT);
       GST_OBJECT_FLAG_UNSET (pad, GST_PAD_FLAG_EOS);
       pad->ABI.abi.last_flowret = GST_FLOW_OK;
@@ -5536,6 +5556,7 @@
           /* Remove sticky EOS events */
           GST_LOG_OBJECT (pad, "Removing pending EOS events");
           remove_event_by_type (pad, GST_EVENT_EOS);
+          remove_event_by_type (pad, GST_EVENT_STREAM_GROUP_DONE);
           GST_OBJECT_FLAG_UNSET (pad, GST_PAD_FLAG_EOS);
           break;
         default:
diff --git a/gst/gstpadtemplate.c b/gst/gstpadtemplate.c
index a7789d4..4c834bb 100644
--- a/gst/gstpadtemplate.c
+++ b/gst/gstpadtemplate.c
@@ -51,7 +51,7 @@
  *
  * A padtemplate can be used to create a pad (see gst_pad_new_from_template()
  * or gst_pad_new_from_static_template ()) or to add to an element class
- * (see gst_element_class_add_pad_template ()).
+ * (see gst_element_class_add_static_pad_template ()).
  *
  * The following code example shows the code to create a pad from a padtemplate.
  * |[<!-- language="C" -->
@@ -82,8 +82,7 @@
  *   {
  *     GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
  *
- *     gst_element_class_add_pad_template (gstelement_class,
- *         gst_static_pad_template_get (&amp;my_template));
+ *     gst_element_class_add_static_pad_template (gstelement_class, &amp;my_template);
  *   }
  * ]|
  */
@@ -201,6 +200,8 @@
 static void
 gst_pad_template_init (GstPadTemplate * templ)
 {
+  /* GstPadTemplate objects are usually leaked */
+  GST_OBJECT_FLAG_SET (templ, GST_OBJECT_FLAG_MAY_BE_LEAKED);
 }
 
 static void
@@ -396,6 +397,9 @@
       break;
     case PROP_CAPS:
       GST_PAD_TEMPLATE_CAPS (object) = g_value_dup_boxed (value);
+      /* GstPadTemplate are usually leaked so are their caps */
+      GST_MINI_OBJECT_FLAG_SET (GST_PAD_TEMPLATE_CAPS (object),
+          GST_MINI_OBJECT_FLAG_MAY_BE_LEAKED);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
diff --git a/gst/gstparse.c b/gst/gstparse.c
index a85fcf0..329578e 100644
--- a/gst/gstparse.c
+++ b/gst/gstparse.c
@@ -306,7 +306,9 @@
  *
  * Returns: (transfer floating): a new element on success, %NULL on failure. If
  *    more than one toplevel element is specified by the @pipeline_description,
- *    all elements are put into a #GstPipeline, which then is returned.
+ *    all elements are put into a #GstPipeline, which then is returned (unless
+ *    the GST_PARSE_FLAG_PLACE_IN_BIN flag is set, in which case they are put
+ *    in a #GstBin instead).
  */
 GstElement *
 gst_parse_launch_full (const gchar * pipeline_description,
diff --git a/gst/gstparse.h b/gst/gstparse.h
index 44912f0..55f28eb 100644
--- a/gst/gstparse.h
+++ b/gst/gstparse.h
@@ -70,6 +70,9 @@
  *      in some cases)
  * @GST_PARSE_FLAG_NO_SINGLE_ELEMENT_BINS: If a bin only has a single element,
  *     just return the element.
+ * @GST_PARSE_FLAG_PLACE_IN_BIN: If more than one toplevel element is described
+ *     by the pipeline description string, put them in a #GstBin instead of a
+ *     #GstPipeline. (Since 1.10)
  *
  * Parsing options.
  */
@@ -77,7 +80,8 @@
 {
   GST_PARSE_FLAG_NONE = 0,
   GST_PARSE_FLAG_FATAL_ERRORS = (1 << 0),
-  GST_PARSE_FLAG_NO_SINGLE_ELEMENT_BINS = (1 << 1)
+  GST_PARSE_FLAG_NO_SINGLE_ELEMENT_BINS = (1 << 1),
+  GST_PARSE_FLAG_PLACE_IN_BIN = (1 << 2)
 } GstParseFlags;
 
 #define GST_TYPE_PARSE_CONTEXT (gst_parse_context_get_type())
diff --git a/gst/gstpipeline.c b/gst/gstpipeline.c
index a258c34..554ff6e 100644
--- a/gst/gstpipeline.c
+++ b/gst/gstpipeline.c
@@ -243,7 +243,7 @@
   GstPipeline *pipeline = GST_PIPELINE (object);
   GstClock **clock_p = &pipeline->fixed_clock;
 
-  GST_CAT_DEBUG_OBJECT (GST_CAT_REFCOUNTING, pipeline, "dispose");
+  GST_CAT_DEBUG_OBJECT (GST_CAT_REFCOUNTING, pipeline, "%p dispose", pipeline);
 
   /* clear and unref any fixed clock */
   gst_object_replace ((GstObject **) clock_p, NULL);
diff --git a/gst/gstpoll.c b/gst/gstpoll.c
index 04165a5..23bceab 100644
--- a/gst/gstpoll.c
+++ b/gst/gstpoll.c
@@ -84,6 +84,12 @@
 #include <sys/socket.h>
 #endif
 
+#ifdef G_OS_WIN32
+#  ifndef EWOULDBLOCK
+#  define EWOULDBLOCK EAGAIN    /* This is just to placate gcc */
+#  endif
+#endif /* G_OS_WIN32 */
+
 /* OS/X needs this because of bad headers */
 #include <string.h>
 
@@ -133,7 +139,6 @@
   GArray *active_fds;
 
 #ifndef G_OS_WIN32
-  gchar buf[1];
   GstPollFD control_read_fd;
   GstPollFD control_write_fd;
 #else
@@ -167,11 +172,104 @@
 #define MARK_REBUILD(s)     (g_atomic_int_set(&(s)->rebuild, 1))
 
 #ifndef G_OS_WIN32
-#define WAKE_EVENT(s)       (write ((s)->control_write_fd.fd, "W", 1) == 1)
-#define RELEASE_EVENT(s)    (read ((s)->control_read_fd.fd, (s)->buf, 1) == 1)
+
+static gboolean
+wake_event (GstPoll * set)
+{
+  ssize_t num_written;
+  while ((num_written = write (set->control_write_fd.fd, "W", 1)) != 1) {
+    if (num_written == -1 && errno != EAGAIN && errno != EINTR) {
+      g_critical ("%p: failed to wake event: %s", set, strerror (errno));
+      return FALSE;
+    }
+  }
+  return TRUE;
+}
+
+static gboolean
+release_event (GstPoll * set)
+{
+  gchar buf[1] = { '\0' };
+  ssize_t num_read;
+  while ((num_read = read (set->control_read_fd.fd, buf, 1)) != 1) {
+    if (num_read == -1 && errno != EAGAIN && errno != EINTR) {
+      g_critical ("%p: failed to release event: %s", set, strerror (errno));
+      return FALSE;
+    }
+  }
+  return TRUE;
+}
+
 #else
-#define WAKE_EVENT(s)       (SetLastError (0), SetEvent ((s)->wakeup_event), errno = GetLastError () == NO_ERROR ? 0 : EACCES, errno == 0 ? 1 : 0)
-#define RELEASE_EVENT(s)    (ResetEvent ((s)->wakeup_event))
+
+static void
+format_last_error (gchar * buf, size_t buf_len)
+{
+  DWORD flags = FORMAT_MESSAGE_FROM_SYSTEM;
+  LPCVOID src = NULL;
+  DWORD lang = 0;
+  DWORD id;
+  id = GetLastError ();
+  FormatMessage (flags, src, id, lang, buf, (DWORD) buf_len, NULL);
+  SetLastError (id);
+}
+
+static gboolean
+wake_event (GstPoll * set)
+{
+  SetLastError (0);
+  errno = 0;
+  if (!SetEvent (set->wakeup_event)) {
+    gchar msg[1024] = "<unknown>";
+    format_last_error (msg, sizeof (msg));
+    g_critical ("%p: failed to set wakup_event: %s", set, msg);
+    errno = EBADF;
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
+static gboolean
+release_event (GstPoll * set)
+{
+  DWORD status;
+  SetLastError (0);
+  errno = 0;
+  if (status = WaitForSingleObject (set->wakeup_event, INFINITE)) {
+    const gchar *reason = "unknown";
+    gchar msg[1024] = "<unknown>";
+    switch (status) {
+      case WAIT_ABANDONED:
+        reason = "WAIT_ABANDONED";
+        break;
+      case WAIT_TIMEOUT:
+        reason = "WAIT_TIMEOUT";
+        break;
+      case WAIT_FAILED:
+        format_last_error (msg, sizeof (msg));
+        reason = msg;
+        break;
+      default:
+        reason = "other";
+        break;
+    }
+    g_critical ("%p: failed to block on wakup_event: %s", set, reason);
+    errno = EBADF;
+    return FALSE;
+  }
+
+  if (!ResetEvent (set->wakeup_event)) {
+    gchar msg[1024] = "<unknown>";
+    format_last_error (msg, sizeof (msg));
+    g_critical ("%p: failed to reset wakup_event: %s", set, msg);
+    errno = EBADF;
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
 #endif
 
 /* the poll/select call is also performed on a control socket, that way
@@ -181,26 +279,50 @@
 {
   gboolean result = TRUE;
 
-  if (g_atomic_int_add (&set->control_pending, 1) == 0) {
+  /* makes testing control_pending and WAKE_EVENT() atomic. */
+  g_mutex_lock (&set->lock);
+
+  if (set->control_pending == 0) {
     /* raise when nothing pending */
     GST_LOG ("%p: raise", set);
-    result = WAKE_EVENT (set);
+    result = wake_event (set);
   }
+
+  if (result) {
+    set->control_pending++;
+  }
+
+  g_mutex_unlock (&set->lock);
+
   return result;
 }
 
-/* note how bad things can happen when the 2 threads both raise and release the
- * wakeup. This is however not a problem because you must always pair a raise
- * with a release */
 static inline gboolean
 release_wakeup (GstPoll * set)
 {
-  gboolean result = TRUE;
+  gboolean result = FALSE;
 
-  if (g_atomic_int_dec_and_test (&set->control_pending)) {
-    GST_LOG ("%p: release", set);
-    result = RELEASE_EVENT (set);
+  /* makes testing/modifying control_pending and RELEASE_EVENT() atomic. */
+  g_mutex_lock (&set->lock);
+
+  if (set->control_pending > 0) {
+    /* release, only if this was the last pending. */
+    if (set->control_pending == 1) {
+      GST_LOG ("%p: release", set);
+      result = release_event (set);
+    } else {
+      result = TRUE;
+    }
+
+    if (result) {
+      set->control_pending--;
+    }
+  } else {
+    errno = EWOULDBLOCK;
   }
+
+  g_mutex_unlock (&set->lock);
+
   return result;
 }
 
@@ -209,21 +331,20 @@
 {
   gint old;
 
-  while (TRUE) {
-    if (!(old = g_atomic_int_get (&set->control_pending)))
-      /* nothing pending, just exit */
-      break;
+  /* makes testing control_pending and RELEASE_EVENT() atomic. */
+  g_mutex_lock (&set->lock);
 
-    /* try to remove all pending control messages */
-    if (g_atomic_int_compare_and_exchange (&set->control_pending, old, 0)) {
-      /* we managed to remove all messages, read the control socket */
-      if (RELEASE_EVENT (set))
-        break;
-      else
-        /* retry again until we read it successfully */
-        g_atomic_int_add (&set->control_pending, 1);
+  if ((old = set->control_pending) > 0) {
+    GST_LOG ("%p: releasing %d", set, old);
+    if (release_event (set)) {
+      set->control_pending = 0;
+    } else {
+      old = 0;
     }
   }
+
+  g_mutex_unlock (&set->lock);
+
   return old;
 }
 
@@ -568,9 +689,6 @@
     if (socketpair (PF_UNIX, SOCK_STREAM, 0, control_sock) < 0)
       goto no_socket_pair;
 
-    fcntl (control_sock[0], F_SETFL, O_NONBLOCK);
-    fcntl (control_sock[1], F_SETFL, O_NONBLOCK);
-
     nset->control_read_fd.fd = control_sock[0];
     nset->control_write_fd.fd = control_sock[1];
 
@@ -592,6 +710,7 @@
   MARK_REBUILD (nset);
 
   nset->controllable = controllable;
+  nset->control_pending = 0;
 
   return nset;
 
@@ -1434,12 +1553,16 @@
  * gst_poll_wait() will be affected by gst_poll_restart() and
  * gst_poll_set_flushing().
  *
+ * This function only works for non-timer #GstPoll objects created with
+ * gst_poll_new().
+ *
  * Returns: %TRUE if the controllability of @set could be updated.
  */
 gboolean
 gst_poll_set_controllable (GstPoll * set, gboolean controllable)
 {
   g_return_val_if_fail (set != NULL, FALSE);
+  g_return_val_if_fail (!set->timer, FALSE);
 
   GST_LOG ("%p: controllable : %d", set, controllable);
 
@@ -1456,11 +1579,15 @@
  * used after adding or removing descriptors to @set.
  *
  * If @set is not controllable, then this call will have no effect.
+ *
+ * This function only works for non-timer #GstPoll objects created with
+ * gst_poll_new().
  */
 void
 gst_poll_restart (GstPoll * set)
 {
   g_return_if_fail (set != NULL);
+  g_return_if_fail (!set->timer);
 
   if (set->controllable && GET_WAITING (set) > 0) {
     /* we are controllable and waiting, wake up the waiter. The socket will be
@@ -1478,11 +1605,15 @@
  * to gst_poll_wait() will return -1, with errno set to EBUSY.
  *
  * Unsetting the flushing state will restore normal operation of @set.
+ *
+ * This function only works for non-timer #GstPoll objects created with
+ * gst_poll_new().
  */
 void
 gst_poll_set_flushing (GstPoll * set, gboolean flushing)
 {
   g_return_if_fail (set != NULL);
+  g_return_if_fail (!set->timer);
 
   GST_LOG ("%p: flushing: %d", set, flushing);
 
@@ -1510,8 +1641,12 @@
  * gst_poll_read_control() have been performed, calls to gst_poll_wait() will
  * block again until their timeout expired.
  *
- * Returns: %TRUE on success. %FALSE when @set is not controllable or when the
- * byte could not be written.
+ * This function only works for timer #GstPoll objects created with
+ * gst_poll_new_timer().
+ *
+ * Returns: %TRUE on success. %FALSE when when the byte could not be written.
+ * errno contains the detailed error code but will never be EAGAIN, EINTR or
+ * EWOULDBLOCK. %FALSE always signals a critical error.
  */
 gboolean
 gst_poll_write_control (GstPoll * set)
@@ -1531,11 +1666,14 @@
  * @set: a #GstPoll.
  *
  * Read a byte from the control socket of the controllable @set.
- * This function is mostly useful for timer #GstPoll objects created with
- * gst_poll_new_timer(). 
  *
- * Returns: %TRUE on success. %FALSE when @set is not controllable or when there
- * was no byte to read.
+ * This function only works for timer #GstPoll objects created with
+ * gst_poll_new_timer().
+ *
+ * Returns: %TRUE on success. %FALSE when when there was no byte to read or
+ * reading the byte failed. If there was no byte to read, and only then, errno
+ * will contain EWOULDBLOCK or EAGAIN. For all other values of errno this always signals a
+ * critical error.
  */
 gboolean
 gst_poll_read_control (GstPoll * set)
diff --git a/gst/gstpoll.h b/gst/gstpoll.h
index 8bf64fd..ef6dcea 100644
--- a/gst/gstpoll.h
+++ b/gst/gstpoll.h
@@ -88,7 +88,7 @@
 void            gst_poll_set_flushing     (GstPoll *set, gboolean flushing);
 
 gboolean        gst_poll_write_control    (GstPoll *set);
-gboolean        gst_poll_read_control     (GstPoll *set);
+gboolean        gst_poll_read_control     (GstPoll *set) G_GNUC_WARN_UNUSED_RESULT;
 
 G_END_DECLS
 
diff --git a/gst/gstquark.c b/gst/gstquark.c
index cf5c766..4500cc6 100644
--- a/gst/gstquark.c
+++ b/gst/gstquark.c
@@ -70,7 +70,12 @@
   "GstMessageNeedContext", "GstMessageHaveContext", "context", "context-type",
   "GstMessageStreamStart", "group-id", "uri-redirection",
   "GstMessageDeviceAdded", "GstMessageDeviceRemoved", "device",
-  "uri-redirection-permanent"
+  "uri-redirection-permanent", "GstMessagePropertyNotify", "property-name",
+  "property-value", "streams", "GstEventSelectStreams",
+  "GstMessageStreamCollection", "collection", "stream", "stream-collection",
+  "GstMessageStreamsSelected", "GstMessageRedirect", "redirect-entry-locations",
+  "redirect-entry-taglists", "redirect-entry-structures",
+  "GstEventStreamGroupDone"
 };
 
 GQuark _priv_gst_quark_table[GST_QUARK_MAX];
diff --git a/gst/gstquark.h b/gst/gstquark.h
index b8daeb0..e41466b 100644
--- a/gst/gstquark.h
+++ b/gst/gstquark.h
@@ -202,7 +202,22 @@
   GST_QUARK_MESSAGE_DEVICE_REMOVED = 171,
   GST_QUARK_DEVICE = 172,
   GST_QUARK_URI_REDIRECTION_PERMANENT = 173,
-  GST_QUARK_MAX = 174
+  GST_QUARK_MESSAGE_PROPERTY_NOTIFY = 174,
+  GST_QUARK_PROPERTY_NAME = 175,
+  GST_QUARK_PROPERTY_VALUE = 176,
+  GST_QUARK_STREAMS = 177,
+  GST_QUARK_EVENT_SELECT_STREAMS = 178,
+  GST_QUARK_MESSAGE_STREAM_COLLECTION = 179,
+  GST_QUARK_COLLECTION = 180,
+  GST_QUARK_STREAM = 181,
+  GST_QUARK_EVENT_STREAM_COLLECTION = 182,
+  GST_QUARK_MESSAGE_STREAMS_SELECTED = 183,
+  GST_QUARK_MESSAGE_REDIRECT = 184,
+  GST_QUARK_REDIRECT_ENTRY_LOCATIONS = 185,
+  GST_QUARK_REDIRECT_ENTRY_TAGLISTS = 186,
+  GST_QUARK_REDIRECT_ENTRY_STRUCTURES = 187,
+  GST_QUARK_EVENT_STREAM_GROUP_DONE = 188,
+  GST_QUARK_MAX = 189
 } GstQuarkId;
 
 extern GQuark _priv_gst_quark_table[GST_QUARK_MAX];
diff --git a/gst/gstquery.c b/gst/gstquery.c
index 63ad182..769ccaa 100644
--- a/gst/gstquery.c
+++ b/gst/gstquery.c
@@ -221,7 +221,7 @@
  * when done with it. A position query is used to query the current position
  * of playback in the streams, in some format.
  *
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
  *
  * Returns: (transfer full): a new #GstQuery
  */
@@ -300,7 +300,7 @@
  * Use gst_query_unref() when done with it. A duration query will give the
  * total length of the stream.
  *
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
  *
  * Returns: (transfer full): a new #GstQuery
  */
@@ -377,7 +377,7 @@
  * by sinks to compensate for additional latency introduced by elements in the
  * pipeline.
  *
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
  *
  * Returns: (transfer full): a #GstQuery
  */
@@ -390,7 +390,7 @@
   structure = gst_structure_new_id (GST_QUARK (QUERY_LATENCY),
       GST_QUARK (LIVE), G_TYPE_BOOLEAN, FALSE,
       GST_QUARK (MIN_LATENCY), G_TYPE_UINT64, G_GUINT64_CONSTANT (0),
-      GST_QUARK (MAX_LATENCY), G_TYPE_UINT64, G_GUINT64_CONSTANT (-1), NULL);
+      GST_QUARK (MAX_LATENCY), G_TYPE_UINT64, GST_CLOCK_TIME_NONE, NULL);
 
   query = gst_query_new_custom (GST_QUERY_LATENCY, structure);
 
@@ -462,7 +462,7 @@
  * when done with it. A convert query is used to ask for a conversion between
  * one format and another.
  *
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
  *
  * Returns: (transfer full): a #GstQuery
  */
@@ -557,7 +557,7 @@
  * when done with it. A segment query is used to discover information about the
  * currently configured segment for playback.
  *
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
  *
  * Returns: (transfer full): a new #GstQuery
  */
@@ -660,7 +660,7 @@
  * Constructs a new custom query object. Use gst_query_unref()
  * when done with it.
  *
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
  *
  * Returns: (transfer full): a new #GstQuery
  */
@@ -743,7 +743,7 @@
  * Constructs a new query object for querying seeking properties of
  * the stream.
  *
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
  *
  * Returns: (transfer full): a new #GstQuery
  */
@@ -859,7 +859,7 @@
  * Constructs a new query object for querying formats of
  * the stream.
  *
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
  *
  * Returns: (transfer full): a new #GstQuery
  */
@@ -1019,7 +1019,7 @@
  * Constructs a new query object for querying the buffering status of
  * a stream.
  *
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
  *
  * Returns: (transfer full): a new #GstQuery
  */
@@ -1351,7 +1351,7 @@
  * when done with it. An URI query is used to query the current URI
  * that is used by the source or sink.
  *
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
  *
  * Returns: (transfer full): a new #GstQuery
  */
@@ -1521,7 +1521,7 @@
  *
  * Constructs a new query object for querying the allocation properties.
  *
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
  *
  * Returns: (transfer full): a new #GstQuery
  */
@@ -1549,6 +1549,9 @@
  * Parse an allocation query, writing the requested caps in @caps and
  * whether a pool is needed in @need_pool, if the respective parameters
  * are non-%NULL.
+ *
+ * Pool details can be retrieved using gst_query_get_n_allocation_pools() and
+ * gst_query_parse_nth_allocation_pool().
  */
 void
 gst_query_parse_allocation (GstQuery * query, GstCaps ** caps,
@@ -1586,7 +1589,7 @@
  * gst_query_add_allocation_pool:
  * @query: A valid #GstQuery of type GST_QUERY_ALLOCATION.
  * @pool: (transfer none) (allow-none): the #GstBufferPool
- * @size: the size
+ * @size: the buffer size
  * @min_buffers: the min buffers
  * @max_buffers: the max buffers
  *
@@ -1616,7 +1619,6 @@
   g_array_append_val (array, ap);
 }
 
-
 /**
  * gst_query_get_n_allocation_pools:
  * @query: a GST_QUERY_ALLOCATION type query #GstQuery
@@ -1646,7 +1648,7 @@
  * @query: A valid #GstQuery of type GST_QUERY_ALLOCATION.
  * @index: index to parse
  * @pool: (out) (allow-none) (transfer full): the #GstBufferPool
- * @size: (out) (allow-none): the size
+ * @size: (out) (allow-none): the buffer size
  * @min_buffers: (out) (allow-none): the min buffers
  * @max_buffers: (out) (allow-none): the max buffers
  *
@@ -2096,7 +2098,7 @@
  *
  * Constructs a new query object for querying the scheduling properties.
  *
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
  *
  * Returns: (transfer full): a new #GstQuery
  */
@@ -2315,7 +2317,7 @@
  *
  * Constructs a new query object for querying if @caps are accepted.
  *
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
  *
  * Returns: (transfer full): a new #GstQuery
  */
@@ -2418,7 +2420,7 @@
  * @filter should be returned from the CAPS query. Specifying a filter might
  * greatly reduce the amount of processing an element needs to do.
  *
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
  *
  * Returns: (transfer full): a new #GstQuery
  */
@@ -2516,7 +2518,7 @@
  *
  * Constructs a new query object for querying the drain state.
  *
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
  *
  * Returns: (transfer full): a new #GstQuery
  */
@@ -2538,7 +2540,7 @@
  *
  * Constructs a new query object for querying the pipeline-local context.
  *
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
  *
  * Returns: (transfer full): a new #GstQuery
  *
diff --git a/gst/gstregistry.c b/gst/gstregistry.c
index 090f814..541e31c 100644
--- a/gst/gstregistry.c
+++ b/gst/gstregistry.c
@@ -148,6 +148,7 @@
   GList *plugins;
   GList *features;
 
+  guint n_plugins;
 #if 0
   GList *paths;
 #endif
@@ -271,6 +272,7 @@
 
   plugins = registry->priv->plugins;
   registry->priv->plugins = NULL;
+  registry->priv->n_plugins = 0;
 
   GST_DEBUG_OBJECT (registry, "registry finalize");
   p = plugins;
@@ -465,6 +467,7 @@
       }
       registry->priv->plugins =
           g_list_remove (registry->priv->plugins, existing_plugin);
+      --registry->priv->n_plugins;
       if (G_LIKELY (existing_plugin->basename))
         g_hash_table_remove (registry->priv->basename_hash,
             existing_plugin->basename);
@@ -476,6 +479,8 @@
       plugin, GST_STR_NULL (plugin->filename));
 
   registry->priv->plugins = g_list_prepend (registry->priv->plugins, plugin);
+  ++registry->priv->n_plugins;
+
   if (G_LIKELY (plugin->basename))
     g_hash_table_replace (registry->priv->basename_hash, plugin->basename,
         plugin);
@@ -541,6 +546,7 @@
 
   GST_OBJECT_LOCK (registry);
   registry->priv->plugins = g_list_remove (registry->priv->plugins, plugin);
+  --registry->priv->n_plugins;
   if (G_LIKELY (plugin->basename))
     g_hash_table_remove (registry->priv->basename_hash, plugin->basename);
   gst_registry_remove_features_for_plugin_unlocked (registry, plugin);
@@ -657,26 +663,30 @@
 gst_registry_plugin_filter (GstRegistry * registry,
     GstPluginFilter filter, gboolean first, gpointer user_data)
 {
-  GList *list = NULL;
+  GstPlugin **plugins;
+  GList *walk, *list = NULL;
+  guint n_plugins, i;
 
   g_return_val_if_fail (GST_IS_REGISTRY (registry), NULL);
 
   GST_OBJECT_LOCK (registry);
-  {
-    const GList *walk;
+  n_plugins = registry->priv->n_plugins;
+  plugins = g_newa (GstPlugin *, n_plugins + 1);
+  for (walk = registry->priv->plugins, i = 0; walk != NULL; walk = walk->next)
+    plugins[i++] = gst_object_ref (walk->data);
+  GST_OBJECT_UNLOCK (registry);
 
-    for (walk = registry->priv->plugins; walk != NULL; walk = walk->next) {
-      GstPlugin *plugin = walk->data;
+  for (i = 0; i < n_plugins; ++i) {
+    if (filter == NULL || filter (plugins[i], user_data)) {
+      list = g_list_prepend (list, gst_object_ref (plugins[i]));
 
-      if (filter == NULL || filter (plugin, user_data)) {
-        list = g_list_prepend (list, gst_object_ref (plugin));
-
-        if (first)
-          break;
-      }
+      if (first)
+        break;
     }
   }
-  GST_OBJECT_UNLOCK (registry);
+
+  for (i = 0; i < n_plugins; ++i)
+    gst_object_unref (plugins[i]);
 
   return list;
 }
@@ -830,26 +840,30 @@
 gst_registry_feature_filter (GstRegistry * registry,
     GstPluginFeatureFilter filter, gboolean first, gpointer user_data)
 {
-  GList *list = NULL;
+  GstPluginFeature **features;
+  GList *walk, *list = NULL;
+  guint n_features, i;
 
   g_return_val_if_fail (GST_IS_REGISTRY (registry), NULL);
 
   GST_OBJECT_LOCK (registry);
-  {
-    const GList *walk;
+  n_features = g_hash_table_size (registry->priv->feature_hash);
+  features = g_newa (GstPluginFeature *, n_features + 1);
+  for (walk = registry->priv->features, i = 0; walk != NULL; walk = walk->next)
+    features[i++] = gst_object_ref (walk->data);
+  GST_OBJECT_UNLOCK (registry);
 
-    for (walk = registry->priv->features; walk != NULL; walk = walk->next) {
-      GstPluginFeature *feature = walk->data;
+  for (i = 0; i < n_features; ++i) {
+    if (filter == NULL || filter (features[i], user_data)) {
+      list = g_list_prepend (list, gst_object_ref (features[i]));
 
-      if (filter == NULL || filter (feature, user_data)) {
-        list = g_list_prepend (list, gst_object_ref (feature));
-
-        if (first)
-          break;
-      }
+      if (first)
+        break;
     }
   }
-  GST_OBJECT_UNLOCK (registry);
+
+  for (i = 0; i < n_features; ++i)
+    gst_object_unref (features[i]);
 
   return list;
 }
@@ -1533,6 +1547,7 @@
       GST_DEBUG_OBJECT (registry, "removing cached plugin \"%s\"",
           GST_STR_NULL (plugin->filename));
       registry->priv->plugins = g_list_delete_link (registry->priv->plugins, g);
+      --registry->priv->n_plugins;
       if (G_LIKELY (plugin->basename))
         g_hash_table_remove (registry->priv->basename_hash, plugin->basename);
       gst_registry_remove_features_for_plugin_unlocked (registry, plugin);
diff --git a/gst/gststreamcollection.c b/gst/gststreamcollection.c
new file mode 100644
index 0000000..8e848de
--- /dev/null
+++ b/gst/gststreamcollection.c
@@ -0,0 +1,335 @@
+/* GStreamer
+ *
+ * Copyright (C) 2015 Centricular Ltd
+ *  @author: Edward Hervey <edward@centricular.com>
+ *  @author: Jan Schmidt <jan@centricular.com>
+ *
+ * gststreams.c: GstStreamCollection object and methods
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ * MT safe.
+ */
+
+/**
+ * SECTION:gststreamcollection
+ * @short_description: Base class for collection of streams
+ *
+ * Since: 1.10
+ */
+
+#include "gst_private.h"
+
+#include "gstenumtypes.h"
+#include "gstevent.h"
+#include "gststreamcollection.h"
+
+GST_DEBUG_CATEGORY_STATIC (stream_collection_debug);
+#define GST_CAT_DEFAULT stream_collection_debug
+
+#define GST_STREAM_COLLECTION_GET_PRIVATE(obj)  \
+   (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_STREAM_COLLECTION, GstStreamCollectionPrivate))
+
+struct _GstStreamCollectionPrivate
+{
+  /* Maybe switch this to a GArray if performance is
+   * ever an issue? */
+  GQueue *streams;
+};
+
+/* stream signals and properties */
+enum
+{
+  SIG_STREAM_NOTIFY,
+  LAST_SIGNAL
+};
+
+enum
+{
+  PROP_0,
+  PROP_UPSTREAM_ID,
+  PROP_LAST
+};
+
+static guint gst_stream_collection_signals[LAST_SIGNAL] = { 0 };
+
+static void gst_stream_collection_dispose (GObject * object);
+
+static void gst_stream_collection_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_stream_collection_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+static void
+proxy_stream_notify_cb (GstStream * stream, GParamSpec * pspec,
+    GstStreamCollection * collection);
+
+#define _do_init				\
+{ \
+  GST_DEBUG_CATEGORY_INIT (stream_collection_debug, "streamcollection", GST_DEBUG_BOLD, \
+      "debugging info for the stream collection objects"); \
+  \
+}
+
+#define gst_stream_collection_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstStreamCollection, gst_stream_collection,
+    GST_TYPE_OBJECT, _do_init);
+
+static void
+gst_stream_collection_class_init (GstStreamCollectionClass * klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = (GObjectClass *) klass;
+
+  g_type_class_add_private (klass, sizeof (GstStreamCollectionPrivate));
+
+  gobject_class->set_property = gst_stream_collection_set_property;
+  gobject_class->get_property = gst_stream_collection_get_property;
+
+  /**
+   * GstStream:upstream-id:
+   *
+   * stream-id
+   */
+  g_object_class_install_property (gobject_class, PROP_UPSTREAM_ID,
+      g_param_spec_string ("upstream-id", "Upstream ID",
+          "The stream ID of the parent stream",
+          NULL,
+          G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstStream::stream-notify:
+   * @collection: a #GstStreamCollection
+   * @prop_stream: the #GstStream that originated the signal
+   * @prop: the property that changed
+   *
+   * The stream notify signal is used to be notified of property changes to
+   * streams within the collection.
+   */
+  gst_stream_collection_signals[SIG_STREAM_NOTIFY] =
+      g_signal_new ("stream-notify", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE | G_SIGNAL_DETAILED |
+      G_SIGNAL_NO_HOOKS, G_STRUCT_OFFSET (GstStreamCollectionClass,
+          stream_notify), NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE,
+      2, GST_TYPE_STREAM, G_TYPE_PARAM);
+
+  gobject_class->dispose = gst_stream_collection_dispose;
+}
+
+static void
+gst_stream_collection_init (GstStreamCollection * collection)
+{
+  collection->priv = GST_STREAM_COLLECTION_GET_PRIVATE (collection);
+  collection->priv->streams = g_queue_new ();
+}
+
+static void
+release_gst_stream (GstStream * stream, GstStreamCollection * collection)
+{
+  g_signal_handlers_disconnect_by_func (stream,
+      proxy_stream_notify_cb, collection);
+  gst_object_unref (stream);
+}
+
+static void
+gst_stream_collection_dispose (GObject * object)
+{
+  GstStreamCollection *collection = GST_STREAM_COLLECTION_CAST (object);
+
+  if (collection->upstream_id) {
+    g_free (collection->upstream_id);
+    collection->upstream_id = NULL;
+  }
+
+  if (collection->priv->streams) {
+    g_queue_foreach (collection->priv->streams,
+        (GFunc) release_gst_stream, collection);
+    g_queue_free (collection->priv->streams);
+    collection->priv->streams = NULL;
+  }
+
+  G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+/**
+ * gst_stream_collection_new:
+ * @upstream_id: (allow-none): The stream id of the parent stream
+ *
+ * Create a new #GstStreamCollection.
+ *
+ * Returns: The new #GstStreamCollection.
+ *
+ * Since: 1.10
+ */
+GstStreamCollection *
+gst_stream_collection_new (const gchar * upstream_id)
+{
+  return g_object_new (GST_TYPE_STREAM_COLLECTION, "upstream-id", upstream_id,
+      NULL);
+}
+
+static void
+gst_stream_collection_set_upstream_id (GstStreamCollection * collection,
+    const gchar * upstream_id)
+{
+  g_return_if_fail (collection->upstream_id == NULL);
+
+  /* Upstream ID should only be set once on construction, but let's
+   * not leak in case someone does something silly */
+  if (collection->upstream_id)
+    g_free (collection->upstream_id);
+
+  if (upstream_id)
+    collection->upstream_id = g_strdup (upstream_id);
+}
+
+/**
+ * gst_stream_collection_get_upstream_id:
+ * @collection: a #GstStreamCollection
+ *
+ * Returns the upstream id of the @collection.
+ *
+ * Returns: (transfer none): The upstream id
+ *
+ * Since: 1.10
+ */
+const gchar *
+gst_stream_collection_get_upstream_id (GstStreamCollection * collection)
+{
+  const gchar *res;
+
+  res = collection->upstream_id;
+
+  return res;
+}
+
+static void
+gst_stream_collection_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstStreamCollection *collection;
+
+  collection = GST_STREAM_COLLECTION_CAST (object);
+
+  switch (prop_id) {
+    case PROP_UPSTREAM_ID:
+      gst_stream_collection_set_upstream_id (collection,
+          g_value_get_string (value));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_stream_collection_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstStreamCollection *collection;
+
+  collection = GST_STREAM_COLLECTION_CAST (object);
+
+  switch (prop_id) {
+    case PROP_UPSTREAM_ID:
+      g_value_set_string (value,
+          gst_stream_collection_get_upstream_id (collection));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+proxy_stream_notify_cb (GstStream * stream, GParamSpec * pspec,
+    GstStreamCollection * collection)
+{
+  GST_DEBUG_OBJECT (collection, "Stream %" GST_PTR_FORMAT " updated %s",
+      stream, pspec->name);
+  g_signal_emit (collection, gst_stream_collection_signals[SIG_STREAM_NOTIFY],
+      g_quark_from_string (pspec->name), stream, pspec);
+}
+
+/**
+ * gst_stream_collection_add_stream:
+ * @collection: a #GstStreamCollection
+ * @stream: (transfer full): the #GstStream to add
+ *
+ * Add the given @stream to the @collection.
+ *
+ * Returns: %TRUE if the @stream was properly added, else %FALSE
+ *
+ * Since: 1.10
+ */
+gboolean
+gst_stream_collection_add_stream (GstStreamCollection * collection,
+    GstStream * stream)
+{
+  g_return_val_if_fail (GST_IS_STREAM_COLLECTION (collection), FALSE);
+  g_return_val_if_fail (GST_IS_STREAM (stream), FALSE);
+  g_return_val_if_fail (collection->priv->streams, FALSE);
+
+  GST_DEBUG_OBJECT (collection, "Adding stream %" GST_PTR_FORMAT, stream);
+
+  g_queue_push_tail (collection->priv->streams, stream);
+  g_signal_connect (stream, "notify", (GCallback) proxy_stream_notify_cb,
+      collection);
+
+  return TRUE;
+}
+
+/**
+ * gst_stream_collection_get_size:
+ * @collection: a #GstStreamCollection
+ *
+ * Get the number of streams this collection contains
+ *
+ * Returns: The number of streams that @collection contains
+ *
+ * Since: 1.10
+ */
+guint
+gst_stream_collection_get_size (GstStreamCollection * collection)
+{
+  g_return_val_if_fail (GST_IS_STREAM_COLLECTION (collection), 0);
+  g_return_val_if_fail (collection->priv->streams, 0);
+
+  return g_queue_get_length (collection->priv->streams);
+}
+
+/**
+ * gst_stream_collection_get_stream:
+ * @collection: a #GstStreamCollection
+ * @index: Index of the stream to retrieve
+ *
+ * Retrieve the #GstStream with index @index from the collection.
+ *
+ * The caller should not modify the returned #GstStream
+ *
+ * Returns: (transfer none): A #GstStream
+ *
+ * Since: 1.10
+ */
+GstStream *
+gst_stream_collection_get_stream (GstStreamCollection * collection, guint index)
+{
+  g_return_val_if_fail (GST_IS_STREAM_COLLECTION (collection), NULL);
+  g_return_val_if_fail (collection->priv->streams, NULL);
+
+  return g_queue_peek_nth (collection->priv->streams, index);
+}
diff --git a/gst/gststreamcollection.h b/gst/gststreamcollection.h
new file mode 100644
index 0000000..49734bd
--- /dev/null
+++ b/gst/gststreamcollection.h
@@ -0,0 +1,108 @@
+/* GStreamer
+ * Copyright (C) 2015 Centricular Ltd
+ *  @author: Edward Hervey <edward@centricular.com>
+ *  @author: Jan Schmidt <jan@centricular.com>
+ *
+ * gststreams.h : Header for GstStreamCollection subsystem
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+
+#ifndef __GST_STREAM_COLLECTION_H__
+#define __GST_STREAM_COLLECTION_H__
+
+#include <gst/gstobject.h>
+#include <gst/gststreams.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_STREAM_COLLECTION             (gst_stream_collection_get_type ())
+#define GST_IS_STREAM_COLLECTION(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_STREAM_COLLECTION))
+#define GST_IS_STREAM_COLLECTION_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_STREAM_COLLECTION))
+#define GST_STREAM_COLLECTION_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_STREAM_COLLECTION, GstStreamCollectionClass))
+#define GST_STREAM_COLLECTION(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_STREAM_COLLECTION, GstStreamCollection))
+#define GST_STREAM_COLLECTION_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_STREAM_COLLECTION, GstStreamCollectionClass))
+#define GST_STREAM_COLLECTION_CAST(obj)        ((GstStreamCollection*)(obj))
+
+typedef struct _GstStreamCollection GstStreamCollection;
+typedef struct _GstStreamCollectionClass GstStreamCollectionClass;
+typedef struct _GstStreamCollectionPrivate GstStreamCollectionPrivate;
+
+/**
+ * GstStreamCollection:
+ *
+ * A collection of #GstStream that are available.
+ *
+ * A #GstStreamCollection will be provided by elements that can make those
+ * streams available. Applications can use the collection to show the user
+ * what streams are available by using %gst_stream_collection_get_stream()
+ *
+ * Once posted, a #GstStreamCollection is immutable. Updates are made by sending
+ * a new #GstStreamCollection message, which may or may not share some of
+ * the #GstStream objects from the collection it replaces. The receiver can check
+ * the sender of a stream collection message to know which collection is
+ * obsoleted.
+ *
+ * Several elements in a pipeline can provide #GstStreamCollection.
+ *
+ * Applications can activate streams from a collection by using the
+ * #GST_EVENT_SELECT_STREAMS event on a pipeline, bin or element.
+ *
+ * Since: 1.10
+ */
+struct _GstStreamCollection {
+  GstObject object;
+
+  /*< private >*/
+  gchar *upstream_id;
+  GstStreamCollectionPrivate *priv;
+
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+/**
+ * GstStreamCollectionClass:
+ * @parent_class: the parent class structure
+ * @stream_notify: default signal handler for the stream-notify signal
+ *
+ * GstStreamCollection class structure
+ */
+struct _GstStreamCollectionClass {
+  GstObjectClass parent_class;
+
+  /* signals */
+  void  (*stream_notify)      (GstStreamCollection *collection, GstStream *stream, GParamSpec * pspec);
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+GType gst_stream_collection_get_type (void);
+
+GstStreamCollection *gst_stream_collection_new (const gchar *upstream_id);
+
+const gchar *gst_stream_collection_get_upstream_id (GstStreamCollection *collection);
+
+guint gst_stream_collection_get_size (GstStreamCollection *collection);
+GstStream *gst_stream_collection_get_stream (GstStreamCollection *collection, guint index);
+
+gboolean gst_stream_collection_add_stream (GstStreamCollection *collection,
+                                           GstStream *stream);
+
+G_END_DECLS
+
+#endif /* __GST_STREAM_COLLECTION_H__ */
diff --git a/gst/gststreams.c b/gst/gststreams.c
new file mode 100644
index 0000000..28741d8
--- /dev/null
+++ b/gst/gststreams.c
@@ -0,0 +1,544 @@
+/* GStreamer
+ *
+ * Copyright (C) 2015 Centricular Ltd
+ *  @author: Edward Hervey <edward@centricular.com>
+ *  @author: Jan Schmidt <jan@centricular.com>
+ *
+ * gststreams.c: GstStream and GstStreamCollection object and methods
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ * MT safe.
+ */
+
+/**
+ * SECTION:gststreams
+ * @short_description: Base class for stream objects
+ *
+ * A #GstStream is a high-level object defining a stream of data which is, or
+ * can be, present in a #GstPipeline.
+ *
+ * It is defined by a unique identifier, a "Stream ID". A #GstStream does not
+ * automatically imply the stream is present within a pipeline or element.
+ *
+ * Any element that can introduce new streams in a pipeline should create the
+ * appropriate #GstStream object, and can convey that object via the
+ * %GST_EVENT_STREAM_START event and/or the #GstStreamCollection.
+ *
+ * Elements that do not modify the nature of the stream can add extra information
+ * on it (such as enrich the #GstCaps, or #GstTagList). This is typically done
+ * by parsing elements.
+ *
+ * Since: 1.10
+ */
+
+#include "gst_private.h"
+
+#include "gstenumtypes.h"
+#include "gstevent.h"
+#include "gststreams.h"
+
+GST_DEBUG_CATEGORY_STATIC (streams_debug);
+#define GST_CAT_DEFAULT streams_debug
+
+#define GST_STREAM_GET_PRIVATE(obj)  \
+   (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_STREAM, GstStreamPrivate))
+
+struct _GstStreamPrivate
+{
+  GstStreamFlags flags;
+  GstStreamType type;
+  GstTagList *tags;
+  GstCaps *caps;
+};
+
+/* stream signals and properties */
+enum
+{
+  LAST_SIGNAL
+};
+
+enum
+{
+  PROP_0,
+  PROP_STREAM_ID,
+  PROP_STREAM_FLAGS,
+  PROP_STREAM_TYPE,
+  PROP_TAGS,
+  PROP_CAPS,
+  PROP_LAST
+};
+
+static GParamSpec *gst_stream_pspecs[PROP_LAST] = { 0 };
+
+#if 0
+static guint gst_stream_signals[LAST_SIGNAL] = { 0 };
+#endif
+
+static void gst_stream_finalize (GObject * object);
+
+static void gst_stream_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_stream_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+#define _do_init				\
+{ \
+  GST_DEBUG_CATEGORY_INIT (streams_debug, "streams", GST_DEBUG_BOLD, \
+      "debugging info for the stream and stream collection objects"); \
+  \
+}
+
+#define gst_stream_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstStream, gst_stream, GST_TYPE_OBJECT, _do_init);
+
+static void
+gst_stream_class_init (GstStreamClass * klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = (GObjectClass *) klass;
+
+  g_type_class_add_private (klass, sizeof (GstStreamPrivate));
+
+  gobject_class->set_property = gst_stream_set_property;
+  gobject_class->get_property = gst_stream_get_property;
+
+  /**
+   * GstStream:stream-id:
+   *
+   * The unique identifier of the #GstStream. Can only be set at construction
+   * time.
+   */
+  g_object_class_install_property (gobject_class, PROP_STREAM_ID,
+      g_param_spec_string ("stream-id", "Stream ID",
+          "The stream ID of the stream",
+          NULL,
+          G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstStream:flags:
+   *
+   * The #GstStreamFlags of the #GstStream. Can only be set at construction time.
+   **/
+  gst_stream_pspecs[PROP_STREAM_FLAGS] =
+      g_param_spec_flags ("stream-flags", "Stream Flags", "The stream flags",
+      GST_TYPE_STREAM_FLAGS, GST_STREAM_FLAG_NONE,
+      G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
+  g_object_class_install_property (gobject_class, PROP_STREAM_FLAGS,
+      gst_stream_pspecs[PROP_STREAM_FLAGS]);
+
+  /**
+   * GstStream:stream-type:
+   *
+   * The #GstStreamType of the #GstStream. Can only be set at construction time.
+   **/
+  gst_stream_pspecs[PROP_STREAM_TYPE] =
+      g_param_spec_flags ("stream-type", "Stream Type", "The type of stream",
+      GST_TYPE_STREAM_TYPE, GST_STREAM_TYPE_UNKNOWN,
+      G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
+  g_object_class_install_property (gobject_class, PROP_STREAM_TYPE,
+      gst_stream_pspecs[PROP_STREAM_TYPE]);
+
+  /**
+   * GstStream:caps:
+   *
+   * The #GstCaps of the #GstStream.
+   **/
+  gst_stream_pspecs[PROP_CAPS] =
+      g_param_spec_boxed ("caps", "Caps", "The caps of the stream",
+      GST_TYPE_CAPS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+  g_object_class_install_property (gobject_class, PROP_CAPS,
+      gst_stream_pspecs[PROP_CAPS]);
+
+  /**
+   * GstStream:tags:
+   *
+   * The #GstTagList of the #GstStream.
+   **/
+  gst_stream_pspecs[PROP_TAGS] =
+      g_param_spec_boxed ("tags", "Tags", "The tags of the stream",
+      GST_TYPE_TAG_LIST, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+  g_object_class_install_property (gobject_class, PROP_TAGS,
+      gst_stream_pspecs[PROP_TAGS]);
+
+  gobject_class->finalize = gst_stream_finalize;
+}
+
+static void
+gst_stream_init (GstStream * stream)
+{
+  stream->priv = GST_STREAM_GET_PRIVATE (stream);
+  stream->priv->type = GST_STREAM_TYPE_UNKNOWN;
+}
+
+static void
+gst_stream_finalize (GObject * object)
+{
+  GstStream *stream = GST_STREAM_CAST (object);
+
+  gst_mini_object_replace ((GstMiniObject **) & stream->priv->tags,
+      (GstMiniObject *) NULL);
+  gst_caps_replace (&stream->priv->caps, NULL);
+  g_free ((gchar *) stream->stream_id);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+/**
+ * gst_stream_new:
+ * @stream_id: (allow-none): the id for the new stream. If %NULL,
+ * a new one will be automatically generated
+ * @caps: (allow-none) (transfer none): the #GstCaps of the stream
+ * @type: the #GstStreamType of the stream
+ * @flags: the #GstStreamFlags of the stream
+ *
+ * Create a new #GstStream for the given @stream_id, @caps, @type
+ * and @flags
+ *
+ * Returns: The new #GstStream
+ *
+ * Since: 1.10
+ */
+GstStream *
+gst_stream_new (const gchar * stream_id, GstCaps * caps, GstStreamType type,
+    GstStreamFlags flags)
+{
+  return g_object_new (GST_TYPE_STREAM, "stream-id", stream_id, "caps", caps,
+      "stream-type", type, "stream-flags", flags, NULL);
+}
+
+static void
+gst_stream_set_stream_id (GstStream * stream, const gchar * stream_id)
+{
+  GST_OBJECT_LOCK (stream);
+  g_assert (stream->stream_id == NULL);
+  if (stream_id)
+    stream->stream_id = g_strdup (stream_id);
+  else {
+    /* Create a randoom stream_id if NULL */
+    GST_FIXME_OBJECT (stream, "Creating random stream-id, consider "
+        "implementing a deterministic way of creating a stream-id");
+    stream->stream_id =
+        g_strdup_printf ("%08x%08x%08x%08x", g_random_int (), g_random_int (),
+        g_random_int (), g_random_int ());
+  }
+
+  GST_OBJECT_UNLOCK (stream);
+}
+
+/**
+ * gst_stream_get_stream_id:
+ * @stream: a #GstStream
+ *
+ * Returns the stream ID of @stream.
+ *
+ * Returns: (transfer none) (nullable): the stream ID of @stream. Only valid
+ * during the lifetime of @stream.
+ *
+ * Since: 1.10
+ */
+const gchar *
+gst_stream_get_stream_id (GstStream * stream)
+{
+  return stream->stream_id;
+}
+
+/**
+ * gst_stream_set_stream_flags:
+ * @stream: a #GstStream
+ * @flags: the flags to set on @stream
+ *
+ * Set the @flags for the @stream.
+ *
+ * Since: 1.10
+ */
+void
+gst_stream_set_stream_flags (GstStream * stream, GstStreamFlags flags)
+{
+  GST_OBJECT_LOCK (stream);
+  stream->priv->flags = flags;
+  GST_OBJECT_UNLOCK (stream);
+
+  g_object_notify_by_pspec (G_OBJECT (stream),
+      gst_stream_pspecs[PROP_STREAM_FLAGS]);
+}
+
+/**
+ * gst_stream_get_stream_flags:
+ * @stream: a #GstStream
+ *
+ * Retrieve the current stream flags for @stream
+ *
+ * Returns: The #GstStreamFlags for @stream
+ *
+ * Since: 1.10
+ */
+GstStreamFlags
+gst_stream_get_stream_flags (GstStream * stream)
+{
+  GstStreamFlags res;
+
+  GST_OBJECT_LOCK (stream);
+  res = stream->priv->flags;
+  GST_OBJECT_UNLOCK (stream);
+
+  return res;
+}
+
+/**
+ * gst_stream_set_stream_type:
+ * @stream: a #GstStream
+ * @stream_type: the type to set on @stream
+ *
+ * Set the stream type of @stream
+ *
+ * Since: 1.10
+ */
+void
+gst_stream_set_stream_type (GstStream * stream, GstStreamType stream_type)
+{
+  GST_OBJECT_LOCK (stream);
+  stream->priv->type = stream_type;
+  GST_OBJECT_UNLOCK (stream);
+
+  g_object_notify_by_pspec (G_OBJECT (stream),
+      gst_stream_pspecs[PROP_STREAM_TYPE]);
+}
+
+/**
+ * gst_stream_get_stream_type:
+ * @stream: a #GstStream
+ *
+ * Retrieve the stream type for @stream
+ *
+ * Returns: The #GstStreamType for @stream
+ *
+ * Since: 1.10
+ */
+GstStreamType
+gst_stream_get_stream_type (GstStream * stream)
+{
+  GstStreamType res;
+
+  GST_OBJECT_LOCK (stream);
+  res = stream->priv->type;
+  GST_OBJECT_UNLOCK (stream);
+
+  return res;
+}
+
+/**
+ * gst_stream_set_tags:
+ * @stream: a #GstStream
+ * @tags: (transfer none) (allow-none): a #GstTagList
+ *
+ * Set the tags for the #GstStream
+ *
+ * Since: 1.10
+ */
+void
+gst_stream_set_tags (GstStream * stream, GstTagList * tags)
+{
+  gboolean notify = FALSE;
+
+  GST_OBJECT_LOCK (stream);
+  if (stream->priv->tags == NULL || tags == NULL
+      || !gst_tag_list_is_equal (stream->priv->tags, tags)) {
+    gst_mini_object_replace ((GstMiniObject **) & stream->priv->tags,
+        (GstMiniObject *) tags);
+    notify = TRUE;
+  }
+  GST_OBJECT_UNLOCK (stream);
+
+  if (notify)
+    g_object_notify_by_pspec (G_OBJECT (stream), gst_stream_pspecs[PROP_TAGS]);
+}
+
+/**
+ * gst_stream_get_tags:
+ * @stream: a #GstStream
+ *
+ * Retrieve the tags for @stream, if any
+ *
+ * Returns: (transfer full) (nullable): The #GstTagList for @stream
+ *
+ * Since: 1.10
+ */
+GstTagList *
+gst_stream_get_tags (GstStream * stream)
+{
+  GstTagList *res = NULL;
+
+  GST_OBJECT_LOCK (stream);
+  if (stream->priv->tags)
+    res = gst_tag_list_ref (stream->priv->tags);
+  GST_OBJECT_UNLOCK (stream);
+
+  return res;
+}
+
+/**
+ * gst_stream_set_caps:
+ * @stream: a #GstStream
+ * @caps: (transfer none) (allow-none): a #GstCaps
+ *
+ * Set the caps for the #GstStream
+ *
+ * Since: 1.10
+ */
+void
+gst_stream_set_caps (GstStream * stream, GstCaps * caps)
+{
+  gboolean notify = FALSE;
+
+  GST_OBJECT_LOCK (stream);
+  if (stream->priv->caps == NULL || (caps
+          && !gst_caps_is_equal (stream->priv->caps, caps))) {
+    gst_caps_replace (&stream->priv->caps, caps);
+    notify = TRUE;
+  }
+  GST_OBJECT_UNLOCK (stream);
+
+  if (notify)
+    g_object_notify_by_pspec (G_OBJECT (stream), gst_stream_pspecs[PROP_CAPS]);
+}
+
+
+/**
+ * gst_stream_get_caps:
+ * @stream: a #GstStream
+ *
+ * Retrieve the caps for @stream, if any
+ *
+ * Returns: (transfer full) (nullable): The #GstCaps for @stream
+ *
+ * Since: 1.10
+ */
+GstCaps *
+gst_stream_get_caps (GstStream * stream)
+{
+  GstCaps *res = NULL;
+
+  GST_OBJECT_LOCK (stream);
+  if (stream->priv->caps)
+    res = gst_caps_ref (stream->priv->caps);
+  GST_OBJECT_UNLOCK (stream);
+
+  return res;
+}
+
+static void
+gst_stream_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstStream *stream;
+
+  stream = GST_STREAM_CAST (object);
+
+  switch (prop_id) {
+    case PROP_STREAM_ID:
+      gst_stream_set_stream_id (stream, g_value_get_string (value));
+      break;
+    case PROP_STREAM_FLAGS:
+      GST_OBJECT_LOCK (stream);
+      stream->priv->flags = g_value_get_flags (value);
+      GST_OBJECT_UNLOCK (stream);
+      break;
+    case PROP_STREAM_TYPE:
+      GST_OBJECT_LOCK (stream);
+      stream->priv->type = g_value_get_flags (value);
+      GST_OBJECT_UNLOCK (stream);
+      break;
+    case PROP_TAGS:
+      GST_OBJECT_LOCK (stream);
+      gst_mini_object_replace ((GstMiniObject **) & stream->priv->tags,
+          (GstMiniObject *) g_value_get_boxed (value));
+      GST_OBJECT_UNLOCK (stream);
+      break;
+    case PROP_CAPS:
+      GST_OBJECT_LOCK (stream);
+      gst_mini_object_replace ((GstMiniObject **) & stream->priv->caps,
+          (GstMiniObject *) g_value_get_boxed (value));
+      GST_OBJECT_UNLOCK (stream);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_stream_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstStream *stream;
+
+  stream = GST_STREAM_CAST (object);
+
+  switch (prop_id) {
+    case PROP_STREAM_ID:
+      g_value_set_string (value, gst_stream_get_stream_id (stream));
+      break;
+    case PROP_STREAM_FLAGS:
+      g_value_set_flags (value, gst_stream_get_stream_flags (stream));
+      break;
+    case PROP_STREAM_TYPE:
+      g_value_set_flags (value, gst_stream_get_stream_type (stream));
+      break;
+    case PROP_TAGS:
+      g_value_take_boxed (value, gst_stream_get_tags (stream));
+      break;
+    case PROP_CAPS:
+      g_value_take_boxed (value, gst_stream_get_caps (stream));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+/**
+ * gst_stream_type_get_name:
+ * @stype: a #GstStreamType
+ *
+ * Get a descriptive string for a given #GstStreamType
+ *
+ * Returns: A string describing the stream type
+ *
+ * Since: 1.10
+ */
+const gchar *
+gst_stream_type_get_name (GstStreamType stype)
+{
+  /* FIXME : Make this more flexible */
+  switch (stype) {
+    case GST_STREAM_TYPE_UNKNOWN:
+      return "unknown";
+    case GST_STREAM_TYPE_AUDIO:
+      return "audio";
+    case GST_STREAM_TYPE_VIDEO:
+      return "video";
+    case GST_STREAM_TYPE_CONTAINER:
+      return "container";
+    case GST_STREAM_TYPE_TEXT:
+      return "text";
+    default:
+      return NULL;
+  }
+
+  return NULL;
+}
diff --git a/gst/gststreams.h b/gst/gststreams.h
new file mode 100644
index 0000000..a82d81f
--- /dev/null
+++ b/gst/gststreams.h
@@ -0,0 +1,131 @@
+/* GStreamer
+ * Copyright (C) 2015 Centricular Ltd
+ *  @author: Edward Hervey <edward@centricular.com>
+ *  @author: Jan Schmidt <jan@centricular.com>
+ *
+ * gststreams.h : Header for GstStream subsystem
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+
+#ifndef __GST_STREAMS_H__
+#define __GST_STREAMS_H__
+
+#include <gst/gstobject.h>
+#include <gst/gstevent.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_STREAM             (gst_stream_get_type ())
+#define GST_IS_STREAM(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_STREAM))
+#define GST_IS_STREAM_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_STREAM))
+#define GST_STREAM_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_STREAM, GstStreamClass))
+#define GST_STREAM(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_STREAM, GstStream))
+#define GST_STREAM_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_STREAM, GstStreamClass))
+#define GST_STREAM_CAST(obj)        ((GstStream*)(obj))
+
+/**
+ * GstStreamType:
+ * @GST_STREAM_TYPE_UNKNOWN: The stream is of unknown (unclassified) type.
+ * @GST_STREAM_TYPE_AUDIO: The stream is of audio data
+ * @GST_STREAM_TYPE_VIDEO: The stream carries video data
+ * @GST_STREAM_TYPE_CONTAINER: The stream is a muxed container type
+ * @GST_STREAM_TYPE_TEXT: The stream contains subtitle / subpicture data.
+ *
+ * #GstStreamType describes a high level classification set for
+ * flows of data in #GstStream objects.
+ */
+typedef enum {
+  GST_STREAM_TYPE_UNKNOWN   = 1 << 0,
+  GST_STREAM_TYPE_AUDIO     = 1 << 1,
+  GST_STREAM_TYPE_VIDEO     = 1 << 2,
+  GST_STREAM_TYPE_CONTAINER = 1 << 3,
+  GST_STREAM_TYPE_TEXT      = 1 << 4
+} GstStreamType;
+
+
+typedef struct _GstStream GstStream;
+typedef struct _GstStreamClass GstStreamClass;
+typedef struct _GstStreamPrivate GstStreamPrivate;
+
+/**
+ * GstStream:
+ * @stream_id: The Stream Identifier for this #GstStream
+ * 
+ * A high-level object representing a single stream. It might be backed, or
+ * not, by an actual flow of data in a pipeline (#GstPad).
+ *
+ * A #GstStream does not care about data changes (such as decoding, encoding,
+ * parsing,...) as long as the underlying data flow corresponds to the same
+ * high-level flow (ex: a certain audio track).
+ *
+ * A #GstStream contains all the information pertinent to a stream, such as
+ * stream-id, tags, caps, type, ...
+ *
+ * Elements can subclass a #GstStream for internal usage (to contain information
+ * pertinent to streams of data).
+ */
+struct _GstStream {
+  GstObject object;
+
+  /*< public >*/
+  const gchar *stream_id;
+
+  /*< private >*/
+  GstStreamPrivate *priv;
+
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+/**
+ * GstStreamClass:
+ * @parent_class: the parent class structure
+ *
+ * GstStream class structure
+ */
+struct _GstStreamClass {
+  GstObjectClass parent_class;
+  
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+GType     gst_stream_get_type (void);
+
+GstStream *gst_stream_new            (const gchar *stream_id,
+				      GstCaps *caps,
+				      GstStreamType type,
+				      GstStreamFlags flags);
+
+const gchar *gst_stream_get_stream_id (GstStream *stream);
+
+void           gst_stream_set_stream_flags (GstStream *stream, GstStreamFlags flags);
+GstStreamFlags gst_stream_get_stream_flags (GstStream *stream);
+
+void          gst_stream_set_stream_type (GstStream *stream, GstStreamType stream_type);
+GstStreamType gst_stream_get_stream_type (GstStream *stream);
+
+void        gst_stream_set_tags (GstStream *stream, GstTagList *tags);
+GstTagList *gst_stream_get_tags (GstStream *stream);
+
+void     gst_stream_set_caps (GstStream *stream, GstCaps *caps);
+GstCaps *gst_stream_get_caps (GstStream *stream);
+
+const gchar *gst_stream_type_get_name (GstStreamType stype);
+G_END_DECLS
+
+#endif /* __GST_STREAMS_H__ */
diff --git a/gst/gststructure.c b/gst/gststructure.c
index 3c705f3..581b00e 100644
--- a/gst/gststructure.c
+++ b/gst/gststructure.c
@@ -1978,6 +1978,8 @@
   } else if (g_type_is_a (type, G_TYPE_ENUM)
       || g_type_is_a (type, G_TYPE_FLAGS)) {
     g_string_append (s, "%i");
+  } else if (type == G_TYPE_POINTER) {
+    g_string_append_len (s, "%p", 2);
   } else {
     GST_WARNING ("unhandled type: %s", g_type_name (type));
     g_string_append (s, "%" GST_WRAPPED_PTR_FORMAT);
diff --git a/gst/gstsystemclock.c b/gst/gstsystemclock.c
index 2f152ca..dbdecff 100644
--- a/gst/gstsystemclock.c
+++ b/gst/gstsystemclock.c
@@ -374,14 +374,18 @@
   g_return_if_fail (sysclock->priv->wakeup_count > 0);
 
   sysclock->priv->wakeup_count--;
-  if (sysclock->priv->wakeup_count == 0) {
-    /* read the control socket byte when we removed the last wakeup count */
-    GST_CAT_DEBUG (GST_CAT_CLOCK, "reading control");
-    while (!gst_poll_read_control (sysclock->priv->timer)) {
-      g_warning ("gstsystemclock: read control failed, trying again\n");
+  GST_CAT_DEBUG (GST_CAT_CLOCK, "reading control");
+  while (!gst_poll_read_control (sysclock->priv->timer)) {
+    if (errno == EWOULDBLOCK) {
+      /* Try again and give other threads the chance to do something */
+      g_thread_yield ();
+      continue;
+    } else {
+      /* Critical error, GstPoll will have printed a critical warning already */
+      break;
     }
-    GST_SYSTEM_CLOCK_BROADCAST (sysclock);
   }
+  GST_SYSTEM_CLOCK_BROADCAST (sysclock);
   GST_CAT_DEBUG (GST_CAT_CLOCK, "wakeup count %d",
       sysclock->priv->wakeup_count);
 }
@@ -389,22 +393,8 @@
 static void
 gst_system_clock_add_wakeup (GstSystemClock * sysclock)
 {
-  /* only write the control socket for the first wakeup */
-  if (sysclock->priv->wakeup_count == 0) {
-    GST_CAT_DEBUG (GST_CAT_CLOCK, "writing control");
-    while (!gst_poll_write_control (sysclock->priv->timer)) {
-      if (errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR) {
-        g_warning
-            ("gstsystemclock: write control failed in wakeup_async, trying again: %d:%s\n",
-            errno, g_strerror (errno));
-      } else {
-        g_critical
-            ("gstsystemclock: write control failed in wakeup_async: %d:%s\n",
-            errno, g_strerror (errno));
-        return;
-      }
-    }
-  }
+  GST_CAT_DEBUG (GST_CAT_CLOCK, "writing control");
+  gst_poll_write_control (sysclock->priv->timer);
   sysclock->priv->wakeup_count++;
   GST_CAT_DEBUG (GST_CAT_CLOCK, "wakeup count %d",
       sysclock->priv->wakeup_count);
diff --git a/gst/gsttask.c b/gst/gsttask.c
index 0d2f523..d8f17a7 100644
--- a/gst/gsttask.c
+++ b/gst/gsttask.c
@@ -163,6 +163,8 @@
     gst_object_unref (klass->pool);
   }
   klass->pool = gst_task_pool_new ();
+  /* Classes are never destroyed so this ref will never be dropped */
+  GST_OBJECT_FLAG_SET (klass->pool, GST_OBJECT_FLAG_MAY_BE_LEAKED);
   gst_task_pool_prepare (klass->pool, NULL);
   g_mutex_unlock (&pool_lock);
 }
@@ -384,6 +386,9 @@
   if ((klass = g_type_class_peek (GST_TYPE_TASK))) {
     init_klass_pool (klass);
   }
+
+  /* GstElement owns a GThreadPool */
+  _priv_gst_element_cleanup ();
 }
 
 /**
diff --git a/gst/gsttrace.c b/gst/gsttrace.c
deleted file mode 100644
index 7cb0a3d..0000000
--- a/gst/gsttrace.c
+++ /dev/null
@@ -1,219 +0,0 @@
-/* GStreamer
- * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
- *                    2000 Wim Taymans <wtay@chello.be>
- *
- * gsttrace.c: Tracing functions (deprecated)
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <stdio.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <string.h>
-#include <errno.h>
-
-#if defined (_MSC_VER) && _MSC_VER >= 1400
-# include <io.h>
-#endif
-
-#include "gst_private.h"
-#include "gstinfo.h"
-
-#include "gsttrace.h"
-
-GMutex _gst_trace_mutex;
-
-/* global flags */
-static GstAllocTraceFlags _gst_trace_flags = GST_ALLOC_TRACE_NONE;
-
-/* list of registered tracers */
-static GList *_gst_alloc_tracers = NULL;
-
-static void
-_at_exit (void)
-{
-  if (_gst_trace_flags)
-    _priv_gst_alloc_trace_dump ();
-}
-
-void
-_priv_gst_alloc_trace_initialize (void)
-{
-  const gchar *trace;
-
-  trace = g_getenv ("GST_TRACE");
-  if (trace != NULL) {
-    const GDebugKey keys[] = {
-      {"live", GST_ALLOC_TRACE_LIVE},
-      {"mem-live", GST_ALLOC_TRACE_MEM_LIVE},
-    };
-    _gst_trace_flags = g_parse_debug_string (trace, keys, G_N_ELEMENTS (keys));
-    atexit (_at_exit);
-  }
-
-  g_mutex_init (&_gst_trace_mutex);
-}
-
-void
-_priv_gst_alloc_trace_deinit (void)
-{
-  g_mutex_clear (&_gst_trace_mutex);
-}
-
-/**
- * _priv_gst_alloc_trace_register:
- * @name: the name of the new alloc trace object.
- * @offset: the offset in the object where a GType an be found. -1 when the
- * object has no gtype.
- *
- * Register an get a handle to a GstAllocTrace object that
- * can be used to trace memory allocations.
- *
- * Returns: A handle to a GstAllocTrace.
- */
-GstAllocTrace *
-_priv_gst_alloc_trace_register (const gchar * name, goffset offset)
-{
-  GstAllocTrace *trace;
-
-  g_return_val_if_fail (name, NULL);
-
-  trace = g_slice_new (GstAllocTrace);
-  trace->name = g_strdup (name);
-  trace->live = 0;
-  trace->mem_live = NULL;
-  trace->flags = _gst_trace_flags;
-  trace->offset = offset;
-
-  _gst_alloc_tracers = g_list_prepend (_gst_alloc_tracers, trace);
-
-  return trace;
-}
-
-static gint
-compare_func (GstAllocTrace * a, GstAllocTrace * b)
-{
-  return strcmp (a->name, b->name);
-}
-
-static GList *
-gst_alloc_trace_list_sorted (void)
-{
-  GList *ret;
-
-  ret = g_list_sort (g_list_copy (_gst_alloc_tracers),
-      (GCompareFunc) compare_func);
-
-  return ret;
-}
-
-static void
-gst_alloc_trace_print (const GstAllocTrace * trace)
-{
-  GSList *mem_live;
-
-  g_return_if_fail (trace != NULL);
-
-  if (trace->flags & GST_ALLOC_TRACE_LIVE) {
-    g_print ("%-22.22s : %d\n", trace->name, trace->live);
-  } else {
-    g_print ("%-22.22s : (no live count)\n", trace->name);
-  }
-
-  if (trace->flags & GST_ALLOC_TRACE_MEM_LIVE) {
-    mem_live = trace->mem_live;
-
-    while (mem_live) {
-      gpointer data = mem_live->data;
-      const gchar *type_name;
-      gchar *extra = NULL;
-      gint refcount = -1;
-
-      if (trace->offset == -2) {
-        if (G_IS_OBJECT (data)) {
-          type_name = G_OBJECT_TYPE_NAME (data);
-          refcount = G_OBJECT (data)->ref_count;
-        } else
-          type_name = "<invalid>";
-      } else if (trace->offset == -1) {
-        type_name = "<unknown>";
-      } else {
-        GType type;
-
-        type = G_STRUCT_MEMBER (GType, data, trace->offset);
-        type_name = g_type_name (type);
-
-        if (type == GST_TYPE_CAPS) {
-          extra = gst_caps_to_string (data);
-        } else if (type == GST_TYPE_EVENT) {
-          const GstStructure *s = gst_event_get_structure (data);
-
-          if (s == NULL)
-            extra = g_strdup_printf ("%s", GST_EVENT_TYPE_NAME (data));
-          else
-            extra = gst_structure_to_string (s);
-        } else if (type == GST_TYPE_MESSAGE) {
-          const GstStructure *s = gst_message_get_structure (data);
-
-          if (s == NULL)
-            extra = g_strdup_printf ("%s", GST_MESSAGE_TYPE_NAME (data));
-          else
-            extra = gst_structure_to_string (s);
-        }
-        refcount = GST_MINI_OBJECT_REFCOUNT_VALUE (data);
-      }
-
-      if (extra) {
-        g_print ("  %-20.20s : (%d) %p (\"%s\")\n", type_name, refcount, data,
-            extra);
-        g_free (extra);
-      } else
-        g_print ("  %-20.20s : (%d) %p\n", type_name, refcount, data);
-
-      mem_live = mem_live->next;
-    }
-  }
-}
-
-/**
- * _priv_gst_alloc_trace_dump:
- *
- * Print the status of all registered alloc trace objects.
- */
-void
-_priv_gst_alloc_trace_dump (void)
-{
-  GList *orig, *walk;
-
-  orig = walk = gst_alloc_trace_list_sorted ();
-
-  while (walk) {
-    GstAllocTrace *trace = (GstAllocTrace *) walk->data;
-
-    gst_alloc_trace_print (trace);
-
-    walk = g_list_next (walk);
-  }
-
-  g_list_free (orig);
-}
diff --git a/gst/gsttrace.h b/gst/gsttrace.h
deleted file mode 100644
index 33ff633..0000000
--- a/gst/gsttrace.h
+++ /dev/null
@@ -1,146 +0,0 @@
-/* GStreamer
- * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
- *                    2000 Wim Taymans <wtay@chello.be>
- *
- * gsttrace.h: Header for tracing functions (deprecated)
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-
-#ifndef __GST_TRACE_H__
-#define __GST_TRACE_H__
-
-#include <glib.h>
-#include <gst/gstconfig.h>
-
-G_BEGIN_DECLS
-
-/**
- * GstAllocTraceFlags:
- * @GST_ALLOC_TRACE_NONE: No tracing specified or desired.
- * @GST_ALLOC_TRACE_LIVE: Trace number of non-freed memory.
- * @GST_ALLOC_TRACE_MEM_LIVE: Trace pointers of unfreed memory.
- *
- * Flags indicating which tracing feature to enable.
- */
-typedef enum {
-  GST_ALLOC_TRACE_NONE      = 0,
-  GST_ALLOC_TRACE_LIVE      = (1 << 0),
-  GST_ALLOC_TRACE_MEM_LIVE  = (1 << 1)
-} GstAllocTraceFlags;
-
-typedef struct _GstAllocTrace   GstAllocTrace;
-
-/**
- * GstAllocTrace:
- * @name: The name of the tracing object
- * @flags: Flags for this object
- * @offset: offset of the GType
- * @live: counter for live memory
- * @mem_live: list with pointers to unfreed memory
- *
- * The main tracing object
- */
-struct _GstAllocTrace {
-  gchar         *name;
-  gint           flags;
-
-  goffset        offset;
-  gint           live;
-  GSList        *mem_live;
-};
-
-#ifndef GST_DISABLE_TRACE
-
-GST_EXPORT GMutex       _gst_trace_mutex;
-
-void                    _priv_gst_alloc_trace_initialize (void);
-void                    _priv_gst_alloc_trace_deinit     (void);
-GstAllocTrace*          _priv_gst_alloc_trace_register   (const gchar *name, goffset offset);
-
-void                    _priv_gst_alloc_trace_dump       (void);
-
-#ifndef GST_DISABLE_ALLOC_TRACE
-/**
- * gst_alloc_trace_register:
- * @name: The name of the tracer object
- *
- * Register a new alloc tracer with the given name
- */
-#define _gst_alloc_trace_register(name,offset) _priv_gst_alloc_trace_register (name,offset)
-
-#define _gst_alloc_trace_dump                  _priv_gst_alloc_trace_dump
-
-/**
- * gst_alloc_trace_new:
- * @trace: The tracer to use
- * @mem: The memory allocated
- *
- * Use the tracer to trace a new memory allocation
- */
-#define _gst_alloc_trace_new(trace, mem)           \
-G_STMT_START {                                          \
-  if (G_UNLIKELY ((trace)->flags)) {                    \
-    g_mutex_lock (&_gst_trace_mutex);            \
-    if ((trace)->flags & GST_ALLOC_TRACE_LIVE)          \
-      (trace)->live++;                                  \
-    if ((trace)->flags & GST_ALLOC_TRACE_MEM_LIVE)      \
-      (trace)->mem_live =                               \
-        g_slist_prepend ((trace)->mem_live, mem);       \
-    g_mutex_unlock (&_gst_trace_mutex);          \
-  }                                                     \
-} G_STMT_END
-
-/**
- * gst_alloc_trace_free:
- * @trace: The tracer to use
- * @mem: The memory that is freed
- *
- * Trace a memory free operation
- */
-#define _gst_alloc_trace_free(trace, mem)                \
-G_STMT_START {                                          \
-  if (G_UNLIKELY ((trace)->flags)) {                    \
-    g_mutex_lock (&_gst_trace_mutex);            \
-    if ((trace)->flags & GST_ALLOC_TRACE_LIVE)          \
-      (trace)->live--;                                  \
-    if ((trace)->flags & GST_ALLOC_TRACE_MEM_LIVE)      \
-      (trace)->mem_live =                               \
-        g_slist_remove ((trace)->mem_live, mem);        \
-    g_mutex_unlock (&_gst_trace_mutex);          \
-  }                                                     \
-} G_STMT_END
-
-#else
-#define _gst_alloc_trace_register(name) (NULL)
-#define _gst_alloc_trace_new(trace, mem)
-#define _gst_alloc_trace_free(trace, mem)
-#define _gst_alloc_trace_dump()
-#endif
-
-#else /* GST_DISABLE_TRACE */
-
-#define _gst_alloc_trace_register(name, offset)  (NULL)
-#define _gst_alloc_trace_new(trace, mem)
-#define _gst_alloc_trace_free(trace, mem)
-#define _gst_alloc_trace_dump()
-
-#endif /* GST_DISABLE_TRACE */
-
-G_END_DECLS
-
-#endif /* __GST_TRACE_H__ */
diff --git a/gst/gsttracerutils.c b/gst/gsttracerutils.c
index 3088b06..d46deff 100644
--- a/gst/gsttracerutils.c
+++ b/gst/gsttracerutils.c
@@ -19,9 +19,7 @@
  * Boston, MA 02110-1301, USA.
  */
 
-/**
- * SECTION:gsttracerutils
- * @short_description: Tracing subsystem
+/* Tracing subsystem:
  *
  * The tracing subsystem provides hooks in the core library and API for modules
  * to attach to them.
@@ -55,7 +53,9 @@
   "element-new", "element-add-pad", "element-remove-pad",
   "bin-add-pre", "bin-add-post", "bin-remove-pre", "bin-remove-post",
   "pad-link-pre", "pad-link-post", "pad-unlink-pre", "pad-unlink-post",
-  "element-change-state-pre", "element-change-state-post"
+  "element-change-state-pre", "element-change-state-post",
+  "mini-object-created", "mini-object-destroyed", "object-created",
+  "object-destroyed",
 };
 
 GQuark _priv_gst_tracer_quark_table[GST_TRACER_QUARK_MAX];
diff --git a/gst/gsttracerutils.h b/gst/gsttracerutils.h
index 64cc14c..e61d66d 100644
--- a/gst/gsttracerutils.h
+++ b/gst/gsttracerutils.h
@@ -27,6 +27,7 @@
 #include <glib-object.h>
 #include <gst/gstconfig.h>
 #include <gst/gstbin.h>
+#include <gst/gstutils.h>
 
 G_BEGIN_DECLS
 
@@ -70,6 +71,10 @@
   GST_TRACER_QUARK_HOOK_PAD_UNLINK_POST,
   GST_TRACER_QUARK_HOOK_ELEMENT_CHANGE_STATE_PRE,
   GST_TRACER_QUARK_HOOK_ELEMENT_CHANGE_STATE_POST,
+  GST_TRACER_QUARK_HOOK_MINI_OBJECT_CREATED,
+  GST_TRACER_QUARK_HOOK_MINI_OBJECT_DESTROYED,
+  GST_TRACER_QUARK_HOOK_OBJECT_CREATED,
+  GST_TRACER_QUARK_HOOK_OBJECT_DESTROYED,
   GST_TRACER_QUARK_MAX
 } GstTracerQuarkId;
 
@@ -555,6 +560,69 @@
     GstTracerHookPadUnlinkPost, (GST_TRACER_ARGS, srcpad, sinkpad, result)); \
 }G_STMT_END
 
+/**
+ * GstTracerHookMiniObjectCreated:
+ * @self: the tracer instance
+ * @ts: the current timestamp
+ * @object: the mini object being created
+ *
+ * Hook called when a #GstMiniObject is created named "mini-object-created".
+ */
+typedef void (*GstTracerHookMiniObjectCreated) (GObject *self, GstClockTime ts,
+    GstMiniObject *object);
+#define GST_TRACER_MINI_OBJECT_CREATED(object) G_STMT_START{ \
+  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_MINI_OBJECT_CREATED), \
+    GstTracerHookMiniObjectCreated, (GST_TRACER_ARGS, object)); \
+}G_STMT_END
+
+/**
+ * GstTracerHookMiniObjectDestroyed:
+ * @self: the tracer instance
+ * @ts: the current timestamp
+ * @object: the mini object being destroyed
+ *
+ * Hook called when a #GstMiniObject is being destroyed named
+ * "mini-object-destroyed".
+ */
+typedef void (*GstTracerHookMiniObjectDestroyed) (GObject *self, GstClockTime ts,
+    GstMiniObject *object);
+#define GST_TRACER_MINI_OBJECT_DESTROYED(object) G_STMT_START{ \
+  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_MINI_OBJECT_DESTROYED), \
+    GstTracerHookMiniObjectDestroyed, (GST_TRACER_ARGS, object)); \
+}G_STMT_END
+
+/**
+ * GstTracerHookObjectCreated:
+ * @self: the tracer instance
+ * @ts: the current timestamp
+ * @object: the object being created
+ *
+ * Hook called when a #GstObject is created named "object-created".
+ */
+typedef void (*GstTracerHookObjectCreated) (GObject *self, GstClockTime ts,
+    GstObject *object);
+#define GST_TRACER_OBJECT_CREATED(object) G_STMT_START{ \
+  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_OBJECT_CREATED), \
+    GstTracerHookObjectCreated, (GST_TRACER_ARGS, object)); \
+}G_STMT_END
+
+/**
+ * GstTracerHookObjectDestroyed:
+ * @self: the tracer instance
+ * @ts: the current timestamp
+ * @object: the object being destroyed
+ *
+ * Hook called when a #GstObject is being destroyed named
+ * "object-destroyed".
+ */
+typedef void (*GstTracerHookObjectDestroyed) (GObject *self, GstClockTime ts,
+    GstObject *object);
+#define GST_TRACER_OBJECT_DESTROYED(object) G_STMT_START{ \
+  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_OBJECT_DESTROYED), \
+    GstTracerHookObjectDestroyed, (GST_TRACER_ARGS, object)); \
+}G_STMT_END
+
+
 #else /* !GST_DISABLE_GST_TRACER_HOOKS */
 
 #define GST_TRACER_PAD_PUSH_PRE(pad, buffer)
@@ -584,6 +652,10 @@
 #define GST_TRACER_PAD_LINK_POST(srcpad, sinkpad, res)
 #define GST_TRACER_PAD_UNLINK_PRE(srcpad, sinkpad)
 #define GST_TRACER_PAD_UNLINK_POST(srcpad, sinkpad, res)
+#define GST_TRACER_MINI_OBJECT_CREATED(object)
+#define GST_TRACER_MINI_OBJECT_DESTROYED(object)
+#define GST_TRACER_OBJECT_CREATED(object)
+#define GST_TRACER_OBJECT_DESTROYED(object)
 
 #endif /* GST_DISABLE_GST_TRACER_HOOKS */
 
diff --git a/gst/gsturi.c b/gst/gsturi.c
index 4ad7d3d..d87d4db 100644
--- a/gst/gsturi.c
+++ b/gst/gsturi.c
@@ -1556,7 +1556,7 @@
         if (eoh == NULL || eoh > eoa) {
           GST_DEBUG ("Unable to parse the host part of the URI '%s'.",
               orig_uri);
-          _gst_uri_free (uri_obj);
+          gst_uri_unref (uri_obj);
           return NULL;
         }
         reoh = eoh + 1;
@@ -1576,7 +1576,7 @@
         if (uri[0] != ':' || strspn (uri + 1, "0123456789") != eoa - uri - 1) {
           GST_DEBUG ("Unable to parse host/port part of the URI '%s'.",
               orig_uri);
-          _gst_uri_free (uri_obj);
+          gst_uri_unref (uri_obj);
           return NULL;
         }
         /* otherwise treat port as unsigned decimal number */
diff --git a/gst/gsturi.h b/gst/gsturi.h
index 6e1504c..7e0f0b3 100644
--- a/gst/gsturi.h
+++ b/gst/gsturi.h
@@ -209,11 +209,11 @@
 gboolean gst_uri_equal                 (const GstUri * first,
                                         const GstUri * second);
 GstUri * gst_uri_join                  (GstUri * base_uri,
-                                        GstUri * ref_uri);
+                                        GstUri * ref_uri) G_GNUC_WARN_UNUSED_RESULT;
 gchar *  gst_uri_join_strings          (const gchar * base_uri,
                                         const gchar * ref_uri) G_GNUC_MALLOC;
 gboolean gst_uri_is_writable           (const GstUri * uri);
-GstUri * gst_uri_make_writable         (GstUri * uri);
+GstUri * gst_uri_make_writable         (GstUri * uri) G_GNUC_WARN_UNUSED_RESULT;
 gchar *  gst_uri_to_string             (const GstUri * uri) G_GNUC_MALLOC;
 gboolean gst_uri_is_normalized         (const GstUri * uri);
 gboolean gst_uri_normalize             (GstUri * uri);
diff --git a/gst/gstutils.c b/gst/gstutils.c
index a26bde6..e1265a0 100644
--- a/gst/gstutils.c
+++ b/gst/gstutils.c
@@ -1389,20 +1389,20 @@
   gpad = gst_ghost_pad_new (name, pad);
   g_free (name);
 
-  GST_STATE_LOCK (e);
-  gst_element_get_state (e, &current, &next, 0);
+  GST_STATE_LOCK (parent);
+  gst_element_get_state (GST_ELEMENT (parent), &current, &next, 0);
 
-  if (current > GST_STATE_READY || next == GST_STATE_PAUSED)
+  if (current > GST_STATE_READY || next >= GST_STATE_PAUSED)
     gst_pad_set_active (gpad, TRUE);
 
   if (!gst_element_add_pad ((GstElement *) parent, gpad)) {
     g_warning ("Pad named %s already exists in element %s\n",
         GST_OBJECT_NAME (gpad), GST_OBJECT_NAME (parent));
     gst_object_unref ((GstObject *) gpad);
-    GST_STATE_UNLOCK (e);
+    GST_STATE_UNLOCK (parent);
     return NULL;
   }
-  GST_STATE_UNLOCK (e);
+  GST_STATE_UNLOCK (parent);
 
   return gpad;
 }
@@ -1520,6 +1520,65 @@
   return ret;
 }
 
+/**
+ * gst_pad_link_maybe_ghosting_full:
+ * @src: a #GstPad
+ * @sink: a #GstPad
+ * @flags: some #GstPadLinkCheck flags
+ *
+ * Links @src to @sink, creating any #GstGhostPad's in between as necessary.
+ *
+ * This is a convenience function to save having to create and add intermediate
+ * #GstGhostPad's as required for linking across #GstBin boundaries.
+ *
+ * If @src or @sink pads don't have parent elements or do not share a common
+ * ancestor, the link will fail.
+ *
+ * Calling gst_pad_link_maybe_ghosting_full() with
+ * @flags == %GST_PAD_LINK_CHECK_DEFAULT is the recommended way of linking
+ * pads with safety checks applied.
+ *
+ * Returns: whether the link succeeded.
+ *
+ * Since: 1.10
+ */
+gboolean
+gst_pad_link_maybe_ghosting_full (GstPad * src, GstPad * sink,
+    GstPadLinkCheck flags)
+{
+  g_return_val_if_fail (GST_IS_PAD (src), FALSE);
+  g_return_val_if_fail (GST_IS_PAD (sink), FALSE);
+
+  return pad_link_maybe_ghosting (src, sink, flags);
+}
+
+/**
+ * gst_pad_link_maybe_ghosting:
+ * @src: a #GstPad
+ * @sink: a #GstPad
+ *
+ * Links @src to @sink, creating any #GstGhostPad's in between as necessary.
+ *
+ * This is a convenience function to save having to create and add intermediate
+ * #GstGhostPad's as required for linking across #GstBin boundaries.
+ *
+ * If @src or @sink pads don't have parent elements or do not share a common
+ * ancestor, the link will fail.
+ *
+ * Returns: whether the link succeeded.
+ *
+ * Since: 1.10
+ */
+gboolean
+gst_pad_link_maybe_ghosting (GstPad * src, GstPad * sink)
+{
+  g_return_val_if_fail (GST_IS_PAD (src), FALSE);
+  g_return_val_if_fail (GST_IS_PAD (sink), FALSE);
+
+  return gst_pad_link_maybe_ghosting_full (src, sink,
+      GST_PAD_LINK_CHECK_DEFAULT);
+}
+
 static void
 release_and_unref_pad (GstElement * element, GstPad * pad, gboolean requestpad)
 {
@@ -2356,7 +2415,7 @@
   g_return_val_if_fail (seek_pos >= 0, FALSE);
 
   return gst_element_seek (element, 1.0, format, seek_flags,
-      GST_SEEK_TYPE_SET, seek_pos, GST_SEEK_TYPE_NONE, 0);
+      GST_SEEK_TYPE_SET, seek_pos, GST_SEEK_TYPE_SET, GST_CLOCK_TIME_NONE);
 }
 
 /**
@@ -3935,6 +3994,41 @@
 }
 
 /**
+ * gst_pad_get_stream:
+ * @pad: A source #GstPad
+ *
+ * Returns the current #GstStream for the @pad, or %NULL if none has been
+ * set yet, i.e. the pad has not received a stream-start event yet.
+ *
+ * This is a convenience wrapper around gst_pad_get_sticky_event() and
+ * gst_event_parse_stream().
+ *
+ * Returns: (nullable) (transfer full): the current #GstStream for @pad, or %NULL.
+ *     unref the returned stream when no longer needed.
+ *
+ * Since: 1.10
+ */
+GstStream *
+gst_pad_get_stream (GstPad * pad)
+{
+  GstStream *stream = NULL;
+  GstEvent *event;
+
+  g_return_val_if_fail (GST_IS_PAD (pad), NULL);
+
+  event = gst_pad_get_sticky_event (pad, GST_EVENT_STREAM_START, 0);
+  if (event != NULL) {
+    gst_event_parse_stream (event, &stream);
+    gst_event_unref (event);
+    GST_LOG_OBJECT (pad, "pad has stream object %p", stream);
+  } else {
+    GST_DEBUG_OBJECT (pad, "pad has not received a stream-start event yet");
+  }
+
+  return stream;
+}
+
+/**
  * gst_util_group_id_next:
  *
  * Return a constantly incrementing group id.
diff --git a/gst/gstutils.h b/gst/gstutils.h
index 457a76a..9360c53 100644
--- a/gst/gstutils.h
+++ b/gst/gstutils.h
@@ -924,6 +924,11 @@
 GstCaps *               gst_pad_query_caps              (GstPad *pad, GstCaps *filter);
 gboolean                gst_pad_query_accept_caps       (GstPad *pad, GstCaps *caps);
 
+gboolean                gst_pad_link_maybe_ghosting      (GstPad            *src,
+                                                          GstPad            *sink);
+gboolean                gst_pad_link_maybe_ghosting_full (GstPad            *src,
+                                                          GstPad            *sink,
+                                                          GstPadLinkCheck   flags);
 
 gboolean                gst_pad_peer_query_position     (GstPad *pad, GstFormat format, gint64 *cur);
 gboolean                gst_pad_peer_query_duration     (GstPad *pad, GstFormat format, gint64 *duration);
@@ -937,6 +942,7 @@
 gchar *                 gst_pad_create_stream_id_printf_valist (GstPad * pad, GstElement * parent, const gchar *stream_id, va_list var_args) G_GNUC_PRINTF (3, 0) G_GNUC_MALLOC;
 
 gchar *                 gst_pad_get_stream_id           (GstPad * pad);
+GstStream *             gst_pad_get_stream              (GstPad * pad);
 
 /* bin functions */
 void                    gst_bin_add_many                (GstBin *bin, GstElement *element_1, ...) G_GNUC_NULL_TERMINATED;
diff --git a/gst/gstvalue.c b/gst/gstvalue.c
index b9f76de..6c96bfb 100644
--- a/gst/gstvalue.c
+++ b/gst/gstvalue.c
@@ -4951,6 +4951,20 @@
   if (type1 == GST_TYPE_LIST || type2 == GST_TYPE_LIST)
     return TRUE;
 
+  if (G_UNLIKELY (GST_VALUE_HOLDS_FLAG_SET (value1) &&
+          GST_VALUE_HOLDS_FLAG_SET (value2))) {
+    GType type1, type2, flagset_type;
+
+    type1 = G_VALUE_TYPE (value1);
+    type2 = G_VALUE_TYPE (value2);
+    flagset_type = GST_TYPE_FLAG_SET;
+
+    /* Allow intersection with the generic FlagSet type, on one
+     * side, but not 2 different subtypes - that makes no sense */
+    if (type1 == type2 || type1 == flagset_type || type2 == flagset_type)
+      return TRUE;
+  }
+
   /* check registered intersect functions */
   len = gst_value_intersect_funcs->len;
   for (i = 0; i < len; i++) {
diff --git a/gst/parse/Makefile.am b/gst/parse/Makefile.am
index bb873aa..844349a 100644
--- a/gst/parse/Makefile.am
+++ b/gst/parse/Makefile.am
@@ -14,7 +14,7 @@
 nodist_libgstparse_la_SOURCES = lex.priv_gst_parse_yy.c grammar.tab.c grammar.tag.h parse_lex.h
 CLEANFILES += grammar.tab.c lex.priv_gst_parse_yy.c
 
-libgstparse_la_CFLAGS = $(GST_ALL_CFLAGS) -DYYMALLOC=g_malloc -DYYFREE=g_free
+libgstparse_la_CFLAGS = $(GST_ALL_CFLAGS) -DGST_EXPORTS -DYYMALLOC=g_malloc -DYYFREE=g_free
 libgstparse_la_LIBADD = $(GST_ALL_LIBS)
 
 noinst_HEADERS = types.h
diff --git a/gst/parse/Makefile.in b/gst/parse/Makefile.in
index 366d0db..d13c7ad 100644
--- a/gst/parse/Makefile.in
+++ b/gst/parse/Makefile.in
@@ -287,6 +287,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -294,17 +295,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -429,6 +427,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
@@ -522,7 +522,7 @@
 
 # uncomment these lines to _NOT_ dist the generated sources
 nodist_libgstparse_la_SOURCES = lex.priv_gst_parse_yy.c grammar.tab.c grammar.tag.h parse_lex.h
-libgstparse_la_CFLAGS = $(GST_ALL_CFLAGS) -DYYMALLOC=g_malloc -DYYFREE=g_free
+libgstparse_la_CFLAGS = $(GST_ALL_CFLAGS) -DGST_EXPORTS -DYYMALLOC=g_malloc -DYYFREE=g_free
 libgstparse_la_LIBADD = $(GST_ALL_LIBS)
 noinst_HEADERS = types.h
 all: all-am
diff --git a/gst/parse/grammar.y b/gst/parse/grammar.y
index 49c3170..3f1a8bc 100644
--- a/gst/parse/grammar.y
+++ b/gst/parse/grammar.y
@@ -333,7 +333,7 @@
        GstElement *bin;
 
        bin = gst_parse_bin_from_description_full (set->value_str, TRUE, NULL,
-           GST_PARSE_FLAG_NO_SINGLE_ELEMENT_BINS, NULL);
+           GST_PARSE_FLAG_NO_SINGLE_ELEMENT_BINS | GST_PARSE_FLAG_PLACE_IN_BIN, NULL);
        if (bin) {
          g_value_set_object (&v, bin);
          got_value = TRUE;
@@ -429,7 +429,7 @@
        GstElement *bin;
 
        bin = gst_parse_bin_from_description_full (pos, TRUE, NULL,
-           GST_PARSE_FLAG_NO_SINGLE_ELEMENT_BINS, NULL);
+           GST_PARSE_FLAG_NO_SINGLE_ELEMENT_BINS | GST_PARSE_FLAG_PLACE_IN_BIN, NULL);
        if (bin) {
          g_value_set_object (&v, bin);
          got_value = TRUE;
@@ -1107,7 +1107,10 @@
 
   /* put all elements in our bin if necessary */
   if(g.chain->elements->next){
-    bin = GST_BIN (gst_element_factory_make ("pipeline", NULL));
+    if (flags & GST_PARSE_FLAG_PLACE_IN_BIN)
+      bin = GST_BIN (gst_element_factory_make ("bin", NULL));
+    else
+      bin = GST_BIN (gst_element_factory_make ("pipeline", NULL));
     g_assert (bin);
 
     for (walk = g.chain->elements; walk; walk = walk->next) {
diff --git a/gst/printf/Makefile.in b/gst/printf/Makefile.in
index d8c5e39..6ea65ca 100644
--- a/gst/printf/Makefile.in
+++ b/gst/printf/Makefile.in
@@ -284,6 +284,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -291,17 +292,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -426,6 +424,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/gstreamer.doap b/gstreamer.doap
index cd1310c..d5881cc 100644
--- a/gstreamer.doap
+++ b/gstreamer.doap
@@ -40,31 +40,31 @@
 
  <release>
   <Version>
-   <revision>1.8.3</revision>
-   <branch>1.8</branch>
+   <revision>1.9.90</revision>
+   <branch>master</branch>
    <name></name>
-   <created>2016-08-19</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.8.3.tar.xz" />
+   <created>2016-09-30</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.9.90.tar.xz" />
   </Version>
  </release>
 
  <release>
   <Version>
-   <revision>1.8.2</revision>
-   <branch>1.8</branch>
+   <revision>1.9.2</revision>
+   <branch>master</branch>
    <name></name>
-   <created>2016-06-09</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.8.2.tar.xz" />
+   <created>2016-09-01</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.9.2.tar.xz" />
   </Version>
  </release>
 
  <release>
   <Version>
-   <revision>1.8.1</revision>
-   <branch>1.8</branch>
+   <revision>1.9.1</revision>
+   <branch>master</branch>
    <name></name>
-   <created>2016-04-20</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.8.1.tar.xz" />
+   <created>2016-06-06</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.9.1.tar.xz" />
   </Version>
  </release>
 
diff --git a/gstreamer.spec b/gstreamer.spec
index 7c81f7f..d37e44e 100644
--- a/gstreamer.spec
+++ b/gstreamer.spec
@@ -4,7 +4,7 @@
 %define 	_glib2		2.40.0
 
 Name: 		%{gstreamer}
-Version: 	1.8.3
+Version: 	1.9.90
 Release: 	1
 Summary: 	GStreamer streaming media framework runtime
 
diff --git a/libs/Makefile.in b/libs/Makefile.in
index f7b95dc..da903ad 100644
--- a/libs/Makefile.in
+++ b/libs/Makefile.in
@@ -288,6 +288,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -295,17 +296,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -430,6 +428,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/libs/gst/Makefile.in b/libs/gst/Makefile.in
index 0a3c322..b46618a 100644
--- a/libs/gst/Makefile.in
+++ b/libs/gst/Makefile.in
@@ -287,6 +287,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -294,17 +295,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -429,6 +427,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/libs/gst/base/Makefile.in b/libs/gst/base/Makefile.in
index 64cc5a4..7d1d67a 100644
--- a/libs/gst/base/Makefile.in
+++ b/libs/gst/base/Makefile.in
@@ -334,6 +334,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -341,17 +342,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -476,6 +474,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/libs/gst/base/gstadapter.c b/libs/gst/base/gstadapter.c
index c017486..079a2b5 100644
--- a/libs/gst/base/gstadapter.c
+++ b/libs/gst/base/gstadapter.c
@@ -92,6 +92,18 @@
  * gst_adapter_prev_pts_at_offset() can be used to determine the last
  * seen timestamp at a particular offset in the adapter.
  *
+ * The adapter will also keep track of the offset of the buffers
+ * (#GST_BUFFER_OFFSET) that were pushed. The last seen offset before the
+ * current position can be queried with gst_adapter_prev_offset(). This function
+ * can optionally return the number of bytes between the start of the buffer
+ * that carried the offset and the current adapter position.
+ *
+ * Additionally the adapter also keeps track of the PTS, DTS and buffer offset
+ * at the last discontinuity, which can be retrieved with
+ * gst_adapter_pts_at_discont(), gst_adapter_dts_at_discont() and
+ * gst_adapter_offset_at_discont(). The number of bytes that were consumed
+ * since then can be queried with gst_adapter_distance_from_discont().
+ *
  * A last thing to note is that while #GstAdapter is pretty optimized,
  * merging buffers still might be an operation that requires a malloc() and
  * memcpy() operation, and these operations are not the fastest. Because of
@@ -143,10 +155,18 @@
   guint64 pts_distance;
   GstClockTime dts;
   guint64 dts_distance;
+  guint64 offset;
+  guint64 offset_distance;
 
   gsize scan_offset;
   GSList *scan_entry;
 
+  GstClockTime pts_at_discont;
+  GstClockTime dts_at_discont;
+  guint64 offset_at_discont;
+
+  guint64 distance_from_discont;
+
   GstMapInfo info;
 };
 
@@ -181,6 +201,12 @@
   adapter->pts_distance = 0;
   adapter->dts = GST_CLOCK_TIME_NONE;
   adapter->dts_distance = 0;
+  adapter->offset = GST_BUFFER_OFFSET_NONE;
+  adapter->offset_distance = 0;
+  adapter->pts_at_discont = GST_CLOCK_TIME_NONE;
+  adapter->dts_at_discont = GST_CLOCK_TIME_NONE;
+  adapter->offset_at_discont = GST_BUFFER_OFFSET_NONE;
+  adapter->distance_from_discont = 0;
 }
 
 static void
@@ -242,14 +268,21 @@
   adapter->pts_distance = 0;
   adapter->dts = GST_CLOCK_TIME_NONE;
   adapter->dts_distance = 0;
+  adapter->offset = GST_BUFFER_OFFSET_NONE;
+  adapter->offset_distance = 0;
+  adapter->pts_at_discont = GST_CLOCK_TIME_NONE;
+  adapter->dts_at_discont = GST_CLOCK_TIME_NONE;
+  adapter->offset_at_discont = GST_BUFFER_OFFSET_NONE;
+  adapter->distance_from_discont = 0;
   adapter->scan_offset = 0;
   adapter->scan_entry = NULL;
 }
 
 static inline void
-update_timestamps (GstAdapter * adapter, GstBuffer * buf)
+update_timestamps_and_offset (GstAdapter * adapter, GstBuffer * buf)
 {
   GstClockTime pts, dts;
+  guint64 offset;
 
   pts = GST_BUFFER_PTS (buf);
   if (GST_CLOCK_TIME_IS_VALID (pts)) {
@@ -263,6 +296,20 @@
     adapter->dts = dts;
     adapter->dts_distance = 0;
   }
+  offset = GST_BUFFER_OFFSET (buf);
+  if (offset != GST_BUFFER_OFFSET_NONE) {
+    GST_LOG_OBJECT (adapter, "new offset %" G_GUINT64_FORMAT, offset);
+    adapter->offset = offset;
+    adapter->offset_distance = 0;
+  }
+
+  if (GST_BUFFER_IS_DISCONT (buf)) {
+    /* Take values as-is (might be NONE) */
+    adapter->pts_at_discont = pts;
+    adapter->dts_at_discont = dts;
+    adapter->offset_at_discont = offset;
+    adapter->distance_from_discont = 0;
+  }
 }
 
 /* copy data into @dest, skipping @skip bytes from the head buffers */
@@ -340,7 +387,7 @@
     GST_LOG_OBJECT (adapter, "pushing %p first %" G_GSIZE_FORMAT " bytes",
         buf, size);
     adapter->buflist = adapter->buflist_end = g_slist_append (NULL, buf);
-    update_timestamps (adapter, buf);
+    update_timestamps_and_offset (adapter, buf);
   } else {
     /* Otherwise append to the end, and advance our end pointer */
     GST_LOG_OBJECT (adapter, "pushing %p %" G_GSIZE_FORMAT " bytes at end, "
@@ -597,6 +644,8 @@
   /* distance is always at least the amount of skipped bytes */
   adapter->pts_distance -= adapter->skip;
   adapter->dts_distance -= adapter->skip;
+  adapter->offset_distance -= adapter->skip;
+  adapter->distance_from_discont -= adapter->skip;
 
   g = adapter->buflist;
   cur = g->data;
@@ -606,6 +655,8 @@
     GST_LOG_OBJECT (adapter, "flushing out head buffer");
     adapter->pts_distance += size;
     adapter->dts_distance += size;
+    adapter->offset_distance += size;
+    adapter->distance_from_discont += size;
     flush -= size;
 
     gst_buffer_unref (cur);
@@ -619,7 +670,7 @@
     }
     /* there is a new head buffer, update the timestamps */
     cur = g->data;
-    update_timestamps (adapter, cur);
+    update_timestamps_and_offset (adapter, cur);
     size = gst_buffer_get_size (cur);
   }
   adapter->buflist = g;
@@ -627,6 +678,8 @@
   adapter->skip = flush;
   adapter->pts_distance += flush;
   adapter->dts_distance += flush;
+  adapter->offset_distance += flush;
+  adapter->distance_from_discont += flush;
   /* invalidate scan position */
   adapter->scan_offset = 0;
   adapter->scan_entry = NULL;
@@ -1312,6 +1365,113 @@
 }
 
 /**
+ * gst_adapter_get_distance_from_discont:
+ * @adapter: a #GstAdapter
+ *
+ * Get the distance in bytes since the last buffer with the
+ * %GST_BUFFER_FLAG_DISCONT flag.
+ *
+ * The distance will be reset to 0 for all buffers with
+ * %GST_BUFFER_FLAG_DISCONT on them, and then calculated for all other
+ * following buffers based on their size.
+ *
+ * Since: 1.10
+ *
+ * Returns: The offset. Can be %GST_BUFFER_OFFSET_NONE.
+ */
+guint64
+gst_adapter_distance_from_discont (GstAdapter * adapter)
+{
+  return adapter->distance_from_discont;
+}
+
+/**
+ * gst_adapter_offset_at_discont:
+ * @adapter: a #GstAdapter
+ *
+ * Get the offset that was on the last buffer with the GST_BUFFER_FLAG_DISCONT
+ * flag, or GST_BUFFER_OFFSET_NONE.
+ *
+ * Since: 1.10
+ *
+ * Returns: The offset at the last discont or GST_BUFFER_OFFSET_NONE.
+ */
+guint64
+gst_adapter_offset_at_discont (GstAdapter * adapter)
+{
+  g_return_val_if_fail (GST_IS_ADAPTER (adapter), GST_BUFFER_OFFSET_NONE);
+
+  return adapter->offset_at_discont;
+}
+
+/**
+ * gst_adapter_pts_at_discont:
+ * @adapter: a #GstAdapter
+ *
+ * Get the PTS that was on the last buffer with the GST_BUFFER_FLAG_DISCONT
+ * flag, or GST_CLOCK_TIME_NONE.
+ *
+ * Since: 1.10
+ *
+ * Returns: The PTS at the last discont or GST_CLOCK_TIME_NONE.
+ */
+GstClockTime
+gst_adapter_pts_at_discont (GstAdapter * adapter)
+{
+  g_return_val_if_fail (GST_IS_ADAPTER (adapter), GST_CLOCK_TIME_NONE);
+
+  return adapter->pts_at_discont;
+}
+
+/**
+ * gst_adapter_dts_at_discont:
+ * @adapter: a #GstAdapter
+ *
+ * Get the DTS that was on the last buffer with the GST_BUFFER_FLAG_DISCONT
+ * flag, or GST_CLOCK_TIME_NONE.
+ *
+ * Since: 1.10
+ *
+ * Returns: The DTS at the last discont or GST_CLOCK_TIME_NONE.
+ */
+GstClockTime
+gst_adapter_dts_at_discont (GstAdapter * adapter)
+{
+  g_return_val_if_fail (GST_IS_ADAPTER (adapter), GST_CLOCK_TIME_NONE);
+
+  return adapter->dts_at_discont;
+}
+
+/**
+ * gst_adapter_prev_offset:
+ * @adapter: a #GstAdapter
+ * @distance: (out) (allow-none): pointer to a location for distance, or %NULL
+ *
+ * Get the offset that was before the current byte in the adapter. When
+ * @distance is given, the amount of bytes between the offset and the current
+ * position is returned.
+ *
+ * The offset is reset to GST_BUFFER_OFFSET_NONE and the distance is set to 0
+ * when the adapter is first created or when it is cleared. This also means that
+ * before the first byte with an offset is removed from the adapter, the offset
+ * and distance returned are GST_BUFFER_OFFSET_NONE and 0 respectively.
+ *
+ * Since: 1.10
+ *
+ * Returns: The previous seen offset.
+ */
+guint64
+gst_adapter_prev_offset (GstAdapter * adapter, guint64 * distance)
+{
+  g_return_val_if_fail (GST_IS_ADAPTER (adapter), GST_BUFFER_OFFSET_NONE);
+
+  if (distance)
+    *distance = adapter->offset_distance;
+
+  return adapter->offset;
+}
+
+/**
  * gst_adapter_prev_pts:
  * @adapter: a #GstAdapter
  * @distance: (out) (allow-none): pointer to location for distance, or %NULL
diff --git a/libs/gst/base/gstadapter.h b/libs/gst/base/gstadapter.h
index bb8c77d..23cc250 100644
--- a/libs/gst/base/gstadapter.h
+++ b/libs/gst/base/gstadapter.h
@@ -75,6 +75,13 @@
 GstClockTime            gst_adapter_prev_dts            (GstAdapter *adapter, guint64 *distance);
 GstClockTime            gst_adapter_prev_pts_at_offset  (GstAdapter * adapter, gsize offset, guint64 * distance);
 GstClockTime            gst_adapter_prev_dts_at_offset  (GstAdapter * adapter, gsize offset, guint64 * distance);
+guint64                 gst_adapter_prev_offset         (GstAdapter *adapter, guint64 *distance);
+
+GstClockTime            gst_adapter_pts_at_discont      (GstAdapter *adapter);
+GstClockTime            gst_adapter_dts_at_discont      (GstAdapter *adapter);
+guint64                 gst_adapter_offset_at_discont   (GstAdapter *adapter);
+
+guint64                 gst_adapter_distance_from_discont (GstAdapter *adapter);
 
 gssize                  gst_adapter_masked_scan_uint32  (GstAdapter * adapter, guint32 mask,
                                                          guint32 pattern, gsize offset, gsize size);
diff --git a/libs/gst/base/gstbaseparse.c b/libs/gst/base/gstbaseparse.c
index 45bc869..816b7ab 100644
--- a/libs/gst/base/gstbaseparse.c
+++ b/libs/gst/base/gstbaseparse.c
@@ -952,23 +952,25 @@
     return;
   }
 
-  /* only add bitrate tags to non-empty taglists for now, and only if neither
-   * upstream tags nor the subclass sets the bitrate tag in question already */
-  if (parse->priv->min_bitrate != G_MAXUINT && parse->priv->post_min_bitrate) {
-    GST_LOG_OBJECT (parse, "adding min bitrate %u", parse->priv->min_bitrate);
-    gst_tag_list_add (merged_tags, GST_TAG_MERGE_KEEP, GST_TAG_MINIMUM_BITRATE,
-        parse->priv->min_bitrate, NULL);
-  }
-  if (parse->priv->max_bitrate != 0 && parse->priv->post_max_bitrate) {
-    GST_LOG_OBJECT (parse, "adding max bitrate %u", parse->priv->max_bitrate);
-    gst_tag_list_add (merged_tags, GST_TAG_MERGE_KEEP, GST_TAG_MAXIMUM_BITRATE,
-        parse->priv->max_bitrate, NULL);
-  }
-  if (parse->priv->avg_bitrate != 0 && parse->priv->post_avg_bitrate) {
-    parse->priv->posted_avg_bitrate = parse->priv->avg_bitrate;
-    GST_LOG_OBJECT (parse, "adding avg bitrate %u", parse->priv->avg_bitrate);
-    gst_tag_list_add (merged_tags, GST_TAG_MERGE_KEEP, GST_TAG_BITRATE,
-        parse->priv->avg_bitrate, NULL);
+  if (parse->priv->framecount >= MIN_FRAMES_TO_POST_BITRATE) {
+    /* only add bitrate tags to non-empty taglists for now, and only if neither
+     * upstream tags nor the subclass sets the bitrate tag in question already */
+    if (parse->priv->min_bitrate != G_MAXUINT && parse->priv->post_min_bitrate) {
+      GST_LOG_OBJECT (parse, "adding min bitrate %u", parse->priv->min_bitrate);
+      gst_tag_list_add (merged_tags, GST_TAG_MERGE_KEEP,
+          GST_TAG_MINIMUM_BITRATE, parse->priv->min_bitrate, NULL);
+    }
+    if (parse->priv->max_bitrate != 0 && parse->priv->post_max_bitrate) {
+      GST_LOG_OBJECT (parse, "adding max bitrate %u", parse->priv->max_bitrate);
+      gst_tag_list_add (merged_tags, GST_TAG_MERGE_KEEP,
+          GST_TAG_MAXIMUM_BITRATE, parse->priv->max_bitrate, NULL);
+    }
+    if (parse->priv->avg_bitrate != 0 && parse->priv->post_avg_bitrate) {
+      parse->priv->posted_avg_bitrate = parse->priv->avg_bitrate;
+      GST_LOG_OBJECT (parse, "adding avg bitrate %u", parse->priv->avg_bitrate);
+      gst_tag_list_add (merged_tags, GST_TAG_MERGE_KEEP,
+          GST_TAG_BITRATE, parse->priv->avg_bitrate, NULL);
+    }
   }
 
   parse->priv->pending_events =
@@ -2223,6 +2225,12 @@
     gst_adapter_clear (parse->priv->adapter);
   }
 
+  if (*skip == 0 && *flushed == 0) {
+    /* Carry over discont if we need more data */
+    if (GST_BUFFER_IS_DISCONT (frame->buffer))
+      parse->priv->discont = TRUE;
+  }
+
   gst_base_parse_frame_free (frame);
 
   return ret;
@@ -2524,6 +2532,8 @@
 
   if (ret == GST_BASE_PARSE_FLOW_DROPPED) {
     GST_LOG_OBJECT (parse, "frame (%" G_GSIZE_FORMAT " bytes) dropped", size);
+    if (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DISCONT))
+      parse->priv->discont = TRUE;
     gst_buffer_unref (buffer);
     ret = GST_FLOW_OK;
   } else if (ret == GST_FLOW_OK) {
@@ -3595,8 +3605,7 @@
       /* for fatal errors we post an error message, wrong-state is
        * not fatal because it happens due to flushes and only means
        * that we should stop now. */
-      GST_ELEMENT_ERROR (parse, STREAM, FAILED, (NULL),
-          ("streaming stopped, reason %s", gst_flow_get_name (ret)));
+      GST_ELEMENT_FLOW_ERROR (parse, ret);
       push_eos = TRUE;
     }
     if (push_eos) {
diff --git a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c
index f0d8c40..ac2390f 100644
--- a/libs/gst/base/gstbasesink.c
+++ b/libs/gst/base/gstbasesink.c
@@ -45,8 +45,7 @@
  *
  *   // sinktemplate should be a #GstStaticPadTemplate with direction
  *   // %GST_PAD_SINK and name "sink"
- *   gst_element_class_add_pad_template (gstelement_class,
- *       gst_static_pad_template_get (&amp;sinktemplate));
+ *   gst_element_class_add_static_pad_template (gstelement_class, &amp;sinktemplate);
  *
  *   gst_element_class_set_static_metadata (gstelement_class,
  *       "Sink name",
@@ -202,19 +201,8 @@
   GstClockTime last_left;
 
   /* running averages go here these are done on running time */
-  GstClockTime avg_pt;
-  GstClockTime avg_duration;
-  gdouble avg_rate;
-  GstClockTime avg_in_diff;
-
-  /* these are done on system time. avg_jitter and avg_render are
-   * compared to eachother to see if the rendering time takes a
-   * huge amount of the processing, If so we are flooded with
-   * buffers. */
-  GstClockTime last_left_systime;
-  GstClockTime avg_jitter;
-  GstClockTime start, stop;
-  GstClockTime avg_render;
+  GstClockTime avg_pt, avg_in_diff;
+  gdouble avg_rate;             /* average with infinite window */
 
   /* number of rendered and dropped frames */
   guint64 rendered;
@@ -2669,11 +2657,11 @@
     left = start + jitter;
   }
 
-  /* calculate duration of the buffer */
-  if (GST_CLOCK_TIME_IS_VALID (stop) && stop != start)
-    duration = stop - start;
-  else
-    duration = priv->avg_in_diff;
+  /* calculate duration of the buffer, only use buffer durations if not in
+   * trick mode or key-unit mode. Otherwise the buffer durations will be
+   * meaningless as frames are being dropped in-between without updating the
+   * durations. */
+  duration = priv->avg_in_diff;
 
   /* if we have the time when the last buffer left us, calculate
    * processing time */
@@ -2694,29 +2682,24 @@
       GST_TIME_ARGS (entered), GST_TIME_ARGS (left), GST_TIME_ARGS (pt),
       GST_TIME_ARGS (duration), jitter);
 
-  GST_CAT_DEBUG_OBJECT (GST_CAT_QOS, sink, "avg_duration: %" GST_TIME_FORMAT
-      ", avg_pt: %" GST_TIME_FORMAT ", avg_rate: %g",
-      GST_TIME_ARGS (priv->avg_duration), GST_TIME_ARGS (priv->avg_pt),
-      priv->avg_rate);
+  GST_CAT_DEBUG_OBJECT (GST_CAT_QOS, sink,
+      "avg_pt: %" GST_TIME_FORMAT ", avg_rate: %g",
+      GST_TIME_ARGS (priv->avg_pt), priv->avg_rate);
 
   /* collect running averages. for first observations, we copy the
    * values */
-  if (!GST_CLOCK_TIME_IS_VALID (priv->avg_duration))
-    priv->avg_duration = duration;
-  else
-    priv->avg_duration = UPDATE_RUNNING_AVG (priv->avg_duration, duration);
-
   if (!GST_CLOCK_TIME_IS_VALID (priv->avg_pt))
     priv->avg_pt = pt;
   else
     priv->avg_pt = UPDATE_RUNNING_AVG (priv->avg_pt, pt);
 
-  if (priv->avg_duration != 0)
+  if (duration != -1 && duration != 0) {
     rate =
         gst_guint64_to_gdouble (priv->avg_pt) /
-        gst_guint64_to_gdouble (priv->avg_duration);
-  else
+        gst_guint64_to_gdouble (duration);
+  } else {
     rate = 1.0;
+  }
 
   if (GST_CLOCK_TIME_IS_VALID (priv->last_left)) {
     if (dropped || priv->avg_rate < 0.0) {
@@ -2730,9 +2713,8 @@
   }
 
   GST_CAT_DEBUG_OBJECT (GST_CAT_QOS, sink,
-      "updated: avg_duration: %" GST_TIME_FORMAT ", avg_pt: %" GST_TIME_FORMAT
-      ", avg_rate: %g", GST_TIME_ARGS (priv->avg_duration),
-      GST_TIME_ARGS (priv->avg_pt), priv->avg_rate);
+      "updated: avg_pt: %" GST_TIME_FORMAT
+      ", avg_rate: %g", GST_TIME_ARGS (priv->avg_pt), priv->avg_rate);
 
 
   if (priv->avg_rate >= 0.0) {
@@ -2778,10 +2760,8 @@
   priv->prev_rstart = GST_CLOCK_TIME_NONE;
   priv->earliest_in_time = GST_CLOCK_TIME_NONE;
   priv->last_left = GST_CLOCK_TIME_NONE;
-  priv->avg_duration = GST_CLOCK_TIME_NONE;
   priv->avg_pt = GST_CLOCK_TIME_NONE;
   priv->avg_rate = -1.0;
-  priv->avg_render = GST_CLOCK_TIME_NONE;
   priv->avg_in_diff = GST_CLOCK_TIME_NONE;
   priv->rendered = 0;
   priv->dropped = 0;
@@ -2890,35 +2870,6 @@
   }
 }
 
-/* called before and after calling the render vmethod. It keeps track of how
- * much time was spent in the render method and is used to check if we are
- * flooded */
-static void
-gst_base_sink_do_render_stats (GstBaseSink * basesink, gboolean start)
-{
-  GstBaseSinkPrivate *priv;
-
-  priv = basesink->priv;
-
-  if (start) {
-    priv->start = gst_util_get_timestamp ();
-  } else {
-    GstClockTime elapsed;
-
-    priv->stop = gst_util_get_timestamp ();
-
-    elapsed = GST_CLOCK_DIFF (priv->start, priv->stop);
-
-    if (!GST_CLOCK_TIME_IS_VALID (priv->avg_render))
-      priv->avg_render = elapsed;
-    else
-      priv->avg_render = UPDATE_RUNNING_AVG (priv->avg_render, elapsed);
-
-    GST_CAT_DEBUG_OBJECT (GST_CAT_QOS, basesink,
-        "avg_render: %" GST_TIME_FORMAT, GST_TIME_ARGS (priv->avg_render));
-  }
-}
-
 static void
 gst_base_sink_update_start_time (GstBaseSink * basesink)
 {
@@ -3349,7 +3300,6 @@
   GstClockTime start = GST_CLOCK_TIME_NONE, end = GST_CLOCK_TIME_NONE;
   GstSegment *segment;
   GstBuffer *sync_buf;
-  gint do_qos;
   gboolean late, step_end, prepared = FALSE;
 
   if (G_UNLIKELY (basesink->flushing))
@@ -3515,15 +3465,8 @@
         8 * GST_SECOND, priv->max_bitrate);
   }
 
-  /* read once, to get same value before and after */
-  do_qos = g_atomic_int_get (&priv->qos_enabled);
-
   GST_DEBUG_OBJECT (basesink, "rendering object %p", obj);
 
-  /* record rendering time for QoS and stats */
-  if (do_qos)
-    gst_base_sink_do_render_stats (basesink, TRUE);
-
   if (!is_list) {
     /* For buffer lists do not set last buffer for now. */
     gst_base_sink_set_last_buffer (basesink, GST_BUFFER_CAST (obj));
@@ -3542,9 +3485,6 @@
     gst_base_sink_set_last_buffer_list (basesink, buffer_list);
   }
 
-  if (do_qos)
-    gst_base_sink_do_render_stats (basesink, FALSE);
-
   if (ret == GST_FLOW_STEP)
     goto again;
 
@@ -4091,9 +4031,7 @@
        * flushing and posting an error message in that case is the
        * wrong thing to do, e.g. when basesrc is doing a flushing
        * seek. */
-      GST_ELEMENT_ERROR (basesink, STREAM, FAILED,
-          (_("Internal data stream error.")),
-          ("stream stopped, reason %s", gst_flow_get_name (result)));
+      GST_ELEMENT_FLOW_ERROR (basesink, result);
       gst_base_sink_event (pad, parent, gst_event_new_eos ());
     }
     return;
diff --git a/libs/gst/base/gstbasesrc.c b/libs/gst/base/gstbasesrc.c
index 934dcca..37719f4 100644
--- a/libs/gst/base/gstbasesrc.c
+++ b/libs/gst/base/gstbasesrc.c
@@ -119,8 +119,7 @@
  *   GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
  *   // srctemplate should be a #GstStaticPadTemplate with direction
  *   // %GST_PAD_SRC and name "src"
- *   gst_element_class_add_pad_template (gstelement_class,
- *       gst_static_pad_template_get (&amp;srctemplate));
+ *   gst_element_class_add_static_pad_template (gstelement_class, &amp;srctemplate);
  *
  *   gst_element_class_set_static_metadata (gstelement_class,
  *      "Source name",
@@ -2364,21 +2363,26 @@
         if (!bclass->get_size (src, &size))
           size = -1;
 
-      /* make sure we don't exceed the configured segment stop
-       * if it was set */
-      if (stop != -1)
-        maxsize = MIN (size, stop);
+      /* when not doing automatic EOS, just use the stop position. We don't use
+       * the size to check for EOS */
+      if (!g_atomic_int_get (&src->priv->automatic_eos))
+        maxsize = stop;
+      /* Otherwise, the max amount of bytes to read is the total
+       * size or up to the segment.stop if present. */
+      else if (stop != -1)
+        maxsize = size != -1 ? MIN (size, stop) : stop;
       else
         maxsize = size;
 
-      /* if we are at or past the end, EOS */
-      if (G_UNLIKELY (offset >= maxsize))
-        goto unexpected_length;
+      if (maxsize != -1) {
+        /* if we are at or past the end, EOS */
+        if (G_UNLIKELY (offset >= maxsize))
+          goto unexpected_length;
 
-      /* else we can clip to the end */
-      if (G_UNLIKELY (offset + *length >= maxsize))
-        *length = maxsize - offset;
-
+        /* else we can clip to the end */
+        if (G_UNLIKELY (offset + *length >= maxsize))
+          *length = maxsize - offset;
+      }
     }
   }
 
@@ -2943,9 +2947,7 @@
        * due to flushing and posting an error message because of
        * that is the wrong thing to do, e.g. when we're doing
        * a flushing seek. */
-      GST_ELEMENT_ERROR (src, STREAM, FAILED,
-          (_("Internal data flow error.")),
-          ("streaming task paused, reason %s (%d)", reason, ret));
+      GST_ELEMENT_FLOW_ERROR (src, ret);
       gst_pad_push_event (pad, event);
     }
     goto done;
diff --git a/libs/gst/base/gstcollectpads.c b/libs/gst/base/gstcollectpads.c
index dc18222..4658ef3 100644
--- a/libs/gst/base/gstcollectpads.c
+++ b/libs/gst/base/gstcollectpads.c
@@ -515,6 +515,12 @@
 
     time = GST_BUFFER_PTS (buf);
 
+    /* If PTS is not set, the best guess we can make is to assume that both
+     * PTS and DTS are the same. If it was possible, parsers should have fixed
+     * it already as explained in https://bugzilla.gnome.org/show_bug.cgi?id=659489 */
+    if (!GST_CLOCK_TIME_IS_VALID (time))
+      time = GST_BUFFER_DTS (buf);
+
     if (GST_CLOCK_TIME_IS_VALID (time)) {
       time =
           gst_segment_to_running_time (&cdata->segment, GST_FORMAT_TIME, time);
@@ -952,8 +958,8 @@
  *
  * MT safe.
  *
- * Returns: The buffer in @data or %NULL if no buffer is queued.
- *  should unref the buffer after usage.
+ * Returns: (transfer full) (nullable): The buffer in @data or %NULL if no
+ * buffer is queued. should unref the buffer after usage.
  */
 GstBuffer *
 gst_collect_pads_peek (GstCollectPads * pads, GstCollectData * data)
@@ -984,8 +990,8 @@
  *
  * MT safe.
  *
- * Returns: (transfer full): The buffer in @data or %NULL if no buffer was
- *   queued. You should unref the buffer after usage.
+ * Returns: (transfer full) (nullable): The buffer in @data or %NULL if no
+ * buffer was queued. You should unref the buffer after usage.
  */
 GstBuffer *
 gst_collect_pads_pop (GstCollectPads * pads, GstCollectData * data)
@@ -1151,9 +1157,9 @@
  *
  * MT safe.
  *
- * Returns: (transfer full): A sub buffer. The size of the buffer can be less that requested.
- * A return of %NULL signals that the pad is end-of-stream.
- * Unref the buffer after use.
+ * Returns: (transfer full) (nullable): A sub buffer. The size of the buffer can
+ * be less that requested. A return of %NULL signals that the pad is
+ * end-of-stream. Unref the buffer after use.
  */
 GstBuffer *
 gst_collect_pads_read_buffer (GstCollectPads * pads, GstCollectData * data,
@@ -1191,9 +1197,9 @@
  *
  * MT safe.
  *
- * Returns: A sub buffer. The size of the buffer can be less that requested.
- * A return of %NULL signals that the pad is end-of-stream.
- * Unref the buffer after use.
+ * Returns: (transfer full) (nullable): A sub buffer. The size of the buffer can
+ * be less that requested. A return of %NULL signals that the pad is
+ * end-of-stream. Unref the buffer after use.
  */
 GstBuffer *
 gst_collect_pads_take_buffer (GstCollectPads * pads, GstCollectData * data,
diff --git a/libs/gst/base/gstflowcombiner.c b/libs/gst/base/gstflowcombiner.c
index 9dd5123..377198f 100644
--- a/libs/gst/base/gstflowcombiner.c
+++ b/libs/gst/base/gstflowcombiner.c
@@ -74,9 +74,14 @@
 static GstFlowCombiner *gst_flow_combiner_ref (GstFlowCombiner * combiner);
 static void gst_flow_combiner_unref (GstFlowCombiner * combiner);
 
-G_DEFINE_BOXED_TYPE (GstFlowCombiner, gst_flow_combiner,
+GST_DEBUG_CATEGORY_STATIC (flowcombiner_dbg);
+#define GST_CAT_DEFAULT flowcombiner_dbg
+
+G_DEFINE_BOXED_TYPE_WITH_CODE (GstFlowCombiner, gst_flow_combiner,
     (GBoxedCopyFunc) gst_flow_combiner_ref,
-    (GBoxedFreeFunc) gst_flow_combiner_unref);
+    (GBoxedFreeFunc) gst_flow_combiner_unref,
+    GST_DEBUG_CATEGORY_INIT (flowcombiner_dbg, "flowcombiner", 0,
+        "Flow Combiner"));
 
 /**
  * gst_flow_combiner_new:
@@ -95,6 +100,9 @@
   combiner->last_ret = GST_FLOW_OK;
   combiner->ref_count = 1;
 
+  /* Make sure debug category is initialised */
+  gst_flow_combiner_get_type ();
+
   return combiner;
 }
 
@@ -162,7 +170,7 @@
  * gst_flow_combiner_reset:
  * @combiner: the #GstFlowCombiner to clear
  *
- * Removes all pads from a #GstFlowCombiner and resets it to its initial state.
+ * Reset flow combiner and all pads to their initial state without removing pads.
  *
  * Since: 1.6
  */
diff --git a/libs/gst/base/gsttypefindhelper.c b/libs/gst/base/gsttypefindhelper.c
index b2fb21c..9aeceb4 100644
--- a/libs/gst/base/gsttypefindhelper.c
+++ b/libs/gst/base/gsttypefindhelper.c
@@ -482,7 +482,7 @@
  * gst_type_find_helper_for_data:
  * @obj: (allow-none): object doing the typefinding, or %NULL (used for logging)
  * @data: (in) (transfer none): a pointer with data to typefind
- * @size: (in) (transfer none): the size of @data
+ * @size: (in): the size of @data
  * @prob: (out) (allow-none): location to store the probability of the found
  *     caps, or %NULL
  *
diff --git a/libs/gst/check/Makefile.in b/libs/gst/check/Makefile.in
index b28ae03..333bd9a 100644
--- a/libs/gst/check/Makefile.in
+++ b/libs/gst/check/Makefile.in
@@ -369,6 +369,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -376,17 +377,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -511,6 +509,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/libs/gst/check/gstharness.c b/libs/gst/check/gstharness.c
index bc45e08..1226b7e 100644
--- a/libs/gst/check/gstharness.c
+++ b/libs/gst/check/gstharness.c
@@ -2016,10 +2016,6 @@
  *
  * Sets the min latency reported by #GstHarness when receiving a latency-query
  *
- * MT safe.
- *
- * Returns: a #GstClockTime with min latency
- *
  * Since: 1.6
  */
 void
diff --git a/libs/gst/check/gsttestclock.c b/libs/gst/check/gsttestclock.c
index c0961e3..513667f 100644
--- a/libs/gst/check/gsttestclock.c
+++ b/libs/gst/check/gsttestclock.c
@@ -183,7 +183,8 @@
 enum
 {
   PROP_0,
-  PROP_START_TIME
+  PROP_START_TIME,
+  PROP_CLOCK_TYPE
 };
 
 typedef struct _GstClockEntryContext GstClockEntryContext;
@@ -196,6 +197,7 @@
 
 struct _GstTestClockPrivate
 {
+  GstClockType clock_type;
   GstClockTime start_time;
   GstClockTime internal_time;
   GList *entry_contexts;
@@ -203,6 +205,8 @@
   GCond entry_processed_cond;
 };
 
+#define DEFAULT_CLOCK_TYPE GST_CLOCK_TYPE_MONOTONIC
+
 #define GST_TEST_CLOCK_GET_PRIVATE(obj) ((GST_TEST_CLOCK_CAST (obj))->priv)
 
 GST_DEBUG_CATEGORY_STATIC (test_clock_debug);
@@ -287,6 +291,13 @@
       "Start Time of the Clock", 0, G_MAXUINT64, 0,
       G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY);
   g_object_class_install_property (gobject_class, PROP_START_TIME, pspec);
+
+  g_object_class_install_property (gobject_class, PROP_CLOCK_TYPE,
+      g_param_spec_enum ("clock-type", "Clock type",
+          "The kind of clock implementation to be reported by this clock",
+          GST_TYPE_CLOCK_TYPE, DEFAULT_CLOCK_TYPE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
 }
 
 static void
@@ -301,6 +312,7 @@
 
   g_cond_init (&priv->entry_added_cond);
   g_cond_init (&priv->entry_processed_cond);
+  priv->clock_type = DEFAULT_CLOCK_TYPE;
 
   GST_OBJECT_FLAG_SET (test_clock,
       GST_CLOCK_FLAG_CAN_DO_SINGLE_SYNC |
@@ -361,6 +373,9 @@
     case PROP_START_TIME:
       g_value_set_uint64 (value, priv->start_time);
       break;
+    case PROP_CLOCK_TYPE:
+      g_value_set_enum (value, priv->clock_type);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
       break;
@@ -381,6 +396,11 @@
           "test clock start time initialized at %" GST_TIME_FORMAT,
           GST_TIME_ARGS (priv->start_time));
       break;
+    case PROP_CLOCK_TYPE:
+      priv->clock_type = (GstClockType) g_value_get_enum (value);
+      GST_CAT_DEBUG (GST_CAT_TEST_CLOCK, "clock-type set to %d",
+          priv->clock_type);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
       break;
diff --git a/libs/gst/check/libcheck/Makefile.in b/libs/gst/check/libcheck/Makefile.in
index bc2a984..b61bc04 100644
--- a/libs/gst/check/libcheck/Makefile.in
+++ b/libs/gst/check/libcheck/Makefile.in
@@ -325,6 +325,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -332,17 +333,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -467,6 +465,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/libs/gst/check/libcheck/strsignal.c b/libs/gst/check/libcheck/strsignal.c
index b79409b..57e71cd 100644
--- a/libs/gst/check/libcheck/strsignal.c
+++ b/libs/gst/check/libcheck/strsignal.c
@@ -1,6 +1,6 @@
 #include "libcompat.h"
 
-const char *
+char *
 strsignal (int sig)
 {
   static char signame[40];
diff --git a/libs/gst/controller/Makefile.in b/libs/gst/controller/Makefile.in
index ad960de..89fe786 100644
--- a/libs/gst/controller/Makefile.in
+++ b/libs/gst/controller/Makefile.in
@@ -309,6 +309,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -316,17 +317,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -451,6 +449,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/libs/gst/helpers/Makefile.in b/libs/gst/helpers/Makefile.in
index ed131be..0ae83ed 100644
--- a/libs/gst/helpers/Makefile.in
+++ b/libs/gst/helpers/Makefile.in
@@ -346,6 +346,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -353,17 +354,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -488,6 +486,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/libs/gst/net/Makefile.in b/libs/gst/net/Makefile.in
index 997a56d..34fa492 100644
--- a/libs/gst/net/Makefile.in
+++ b/libs/gst/net/Makefile.in
@@ -330,6 +330,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -337,17 +338,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -472,6 +470,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/libs/gst/net/gstnetclientclock.c b/libs/gst/net/gstnetclientclock.c
index 6c8236b..0b3e4df 100644
--- a/libs/gst/net/gstnetclientclock.c
+++ b/libs/gst/net/gstnetclientclock.c
@@ -360,6 +360,11 @@
   GST_OBJECT_LOCK (self);
   rtt_limit = self->roundtrip_limit;
 
+  GST_LOG_OBJECT (self,
+      "local1 %" G_GUINT64_FORMAT " remote1 %" G_GUINT64_FORMAT " remote2 %"
+      G_GUINT64_FORMAT " local2 %" G_GUINT64_FORMAT, local_1, remote_1,
+      remote_2, local_2);
+
   /* If the server told us a poll interval and it's bigger than the
    * one configured via the property, use the server's */
   if (self->last_remote_poll_interval != GST_CLOCK_TIME_NONE &&
@@ -477,10 +482,8 @@
   remote_avg = (remote_2 + remote_1) / 2;
 
   GST_LOG_OBJECT (self,
-      "local1 %" G_GUINT64_FORMAT " remote1 %" G_GUINT64_FORMAT " remote2 %"
-      G_GUINT64_FORMAT " remoteavg %" G_GUINT64_FORMAT " localavg %"
-      G_GUINT64_FORMAT " local2 %" G_GUINT64_FORMAT, local_1, remote_1,
-      remote_2, remote_avg, local_avg, local_2);
+      "remoteavg %" G_GUINT64_FORMAT " localavg %" G_GUINT64_FORMAT,
+      remote_avg, local_avg);
 
   clock = GST_CLOCK_CAST (self);
 
@@ -1329,6 +1332,11 @@
         self->priv->address, "port", self->priv->port, "is-ntp",
         self->priv->is_ntp, NULL);
     clocks = g_list_prepend (clocks, cache);
+
+    /* Not actually leaked but is cached for a while before being disposed,
+     * see gst_net_client_clock_finalize, so pretend it is to not confuse
+     * tests. */
+    GST_OBJECT_FLAG_SET (cache->clock, GST_OBJECT_FLAG_MAY_BE_LEAKED);
   }
 
   cache->clocks = g_list_prepend (cache->clocks, self);
diff --git a/ltmain.sh b/ltmain.sh
index 2ad8be8..a736cf9 100644
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -31,7 +31,7 @@
 
 PROGRAM=libtool
 PACKAGE=libtool
-VERSION="2.4.6 Debian-2.4.6-1"
+VERSION="2.4.6 Debian-2.4.6-2"
 package_revision=2.4.6
 
 
@@ -1977,7 +1977,7 @@
 # End:
 
 # Set a version string.
-scriptversion='(GNU libtool) 2.4.6 Debian-2.4.6-1'
+scriptversion='(GNU libtool) 2.4.6'
 
 
 # func_echo ARG...
@@ -2068,7 +2068,7 @@
        compiler:       $LTCC
        compiler flags: $LTCFLAGS
        linker:         $LD (gnu? $with_gnu_ld)
-       version:        $progname $scriptversion
+       version:        $progname $scriptversion Debian-2.4.6-2
        automake:       `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
        autoconf:       `($AUTOCONF --version) 2>/dev/null |$SED 1q`
 
diff --git a/m4/Makefile.in b/m4/Makefile.in
index aa52f37..5fadcf8 100644
--- a/m4/Makefile.in
+++ b/m4/Makefile.in
@@ -228,6 +228,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -235,17 +236,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -370,6 +368,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/pkgconfig/Makefile.in b/pkgconfig/Makefile.in
index 0bdca69..f25247f 100644
--- a/pkgconfig/Makefile.in
+++ b/pkgconfig/Makefile.in
@@ -272,6 +272,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -279,17 +280,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -414,6 +412,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/pkgconfig/gstreamer.pc.in b/pkgconfig/gstreamer.pc.in
index 381c96d..78b8aa9 100644
--- a/pkgconfig/gstreamer.pc.in
+++ b/pkgconfig/gstreamer.pc.in
@@ -17,4 +17,4 @@
 Requires: glib-2.0, gobject-2.0
 Requires.private: gmodule-no-export-2.0
 Libs: -L${libdir} -lgstreamer-@GST_API_VERSION@
-Cflags: -I${includedir} -I${libdir}/gstreamer-@GST_API_VERSION@/include
+Cflags: -I${includedir}
diff --git a/plugins/Makefile.in b/plugins/Makefile.in
index bdde8db..98ae3d8 100644
--- a/plugins/Makefile.in
+++ b/plugins/Makefile.in
@@ -287,6 +287,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -294,17 +295,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -429,6 +427,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/plugins/elements/Makefile.in b/plugins/elements/Makefile.in
index 173a32d..85862c8 100644
--- a/plugins/elements/Makefile.in
+++ b/plugins/elements/Makefile.in
@@ -335,6 +335,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -342,17 +343,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -477,6 +475,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/plugins/elements/gstcapsfilter.c b/plugins/elements/gstcapsfilter.c
index 26ae121..30b6b99 100644
--- a/plugins/elements/gstcapsfilter.c
+++ b/plugins/elements/gstcapsfilter.c
@@ -167,6 +167,7 @@
   gst_base_transform_set_prefer_passthrough (trans, FALSE);
   filter->filter_caps = gst_caps_new_any ();
   filter->filter_caps_used = FALSE;
+  filter->got_sink_caps = FALSE;
   filter->caps_change_mode = DEFAULT_CAPS_CHANGE_MODE;
 }
 
@@ -404,7 +405,7 @@
   *buf = input;
 
   if (GST_PAD_MODE (trans->srcpad) == GST_PAD_MODE_PUSH
-      && !gst_pad_has_current_caps (trans->sinkpad)) {
+      && !filter->got_sink_caps) {
 
     /* No caps. See if the output pad only supports fixed caps */
     GstCaps *out_caps;
@@ -505,7 +506,7 @@
     }
     g_list_free (filter->pending_events);
     filter->pending_events = NULL;
-  } else if (!gst_pad_has_current_caps (trans->sinkpad)) {
+  } else if (!filter->got_sink_caps) {
     GST_LOG_OBJECT (trans, "Got %s event before caps, queueing",
         GST_EVENT_TYPE_NAME (event));
 
@@ -521,32 +522,35 @@
       GST_BASE_TRANSFORM_CLASS (parent_class)->sink_event (trans,
       gst_event_ref (event));
 
-  if (GST_EVENT_TYPE (event) == GST_EVENT_CAPS
-      && filter->caps_change_mode == GST_CAPS_FILTER_CAPS_CHANGE_MODE_DELAYED) {
-    GList *l;
-    GstCaps *caps;
+  if (GST_EVENT_TYPE (event) == GST_EVENT_CAPS) {
+    filter->got_sink_caps = TRUE;
+    if (filter->caps_change_mode == GST_CAPS_FILTER_CAPS_CHANGE_MODE_DELAYED) {
+      GList *l;
+      GstCaps *caps;
 
-    gst_event_parse_caps (event, &caps);
+      gst_event_parse_caps (event, &caps);
 
-    /* Remove all previous caps up to one that works.
-     * Note that this might keep some leftover caps if there
-     * are multiple compatible caps */
-    GST_OBJECT_LOCK (filter);
-    for (l = g_list_last (filter->previous_caps); l; l = l->prev) {
-      if (gst_caps_can_intersect (caps, l->data)) {
-        while (l->next) {
-          gst_caps_unref (l->next->data);
-          l = g_list_delete_link (l, l->next);
+      /* Remove all previous caps up to one that works.
+       * Note that this might keep some leftover caps if there
+       * are multiple compatible caps */
+      GST_OBJECT_LOCK (filter);
+      for (l = g_list_last (filter->previous_caps); l; l = l->prev) {
+        if (gst_caps_can_intersect (caps, l->data)) {
+          while (l->next) {
+            gst_caps_unref (l->next->data);
+            l = g_list_delete_link (l, l->next);
+          }
+          break;
         }
-        break;
       }
+      if (!l && gst_caps_can_intersect (caps, filter->filter_caps)) {
+        g_list_free_full (filter->previous_caps,
+            (GDestroyNotify) gst_caps_unref);
+        filter->previous_caps = NULL;
+        filter->filter_caps_used = TRUE;
+      }
+      GST_OBJECT_UNLOCK (filter);
     }
-    if (!l && gst_caps_can_intersect (caps, filter->filter_caps)) {
-      g_list_free_full (filter->previous_caps, (GDestroyNotify) gst_caps_unref);
-      filter->previous_caps = NULL;
-      filter->filter_caps_used = TRUE;
-    }
-    GST_OBJECT_UNLOCK (filter);
   }
   gst_event_unref (event);
 
@@ -566,5 +570,7 @@
   filter->previous_caps = NULL;
   GST_OBJECT_UNLOCK (filter);
 
+  filter->got_sink_caps = FALSE;
+
   return TRUE;
 }
diff --git a/plugins/elements/gstcapsfilter.h b/plugins/elements/gstcapsfilter.h
index 652ec34..8a57bc4 100644
--- a/plugins/elements/gstcapsfilter.h
+++ b/plugins/elements/gstcapsfilter.h
@@ -67,6 +67,7 @@
   GstCaps *filter_caps;
   gboolean filter_caps_used;
   GstCapsFilterCapsChangeMode caps_change_mode;
+  gboolean got_sink_caps;
 
   GList *pending_events;
   GList *previous_caps;
diff --git a/plugins/elements/gstdownloadbuffer.c b/plugins/elements/gstdownloadbuffer.c
index 37249aa..79ea149 100644
--- a/plugins/elements/gstdownloadbuffer.c
+++ b/plugins/elements/gstdownloadbuffer.c
@@ -1345,10 +1345,7 @@
        * file. */
       gst_pad_push_event (dlbuf->srcpad, gst_event_new_eos ());
     } else if ((ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_EOS)) {
-      GST_ELEMENT_ERROR (dlbuf, STREAM, FAILED,
-          (_("Internal data flow error.")),
-          ("streaming task paused, reason %s (%d)",
-              gst_flow_get_name (ret), ret));
+      GST_ELEMENT_FLOW_ERROR (dlbuf, ret);
       gst_pad_push_event (dlbuf->srcpad, gst_event_new_eos ());
     }
     return;
diff --git a/plugins/elements/gstfunnel.c b/plugins/elements/gstfunnel.c
index 9895b7b..bb7d768 100644
--- a/plugins/elements/gstfunnel.c
+++ b/plugins/elements/gstfunnel.c
@@ -401,11 +401,13 @@
     /* If no data is coming and we receive GAP event, need to forward sticky events. */
     unlock = TRUE;
     GST_PAD_STREAM_LOCK (funnel->srcpad);
-    GST_OBJECT_LOCK (funnel);
-    gst_object_replace ((GstObject **) & funnel->last_sinkpad,
-        GST_OBJECT (pad));
-    GST_OBJECT_UNLOCK (funnel);
-    gst_pad_sticky_events_foreach (pad, forward_events, funnel->srcpad);
+
+    if ((funnel->last_sinkpad == NULL) || (funnel->forward_sticky_events
+            && (funnel->last_sinkpad != pad))) {
+      gst_object_replace ((GstObject **) & funnel->last_sinkpad,
+          GST_OBJECT (pad));
+      gst_pad_sticky_events_foreach (pad, forward_events, funnel->srcpad);
+    }
   }
 
   if (forward)
diff --git a/plugins/elements/gstinputselector.c b/plugins/elements/gstinputselector.c
index 4af2190..5d1d65e 100644
--- a/plugins/elements/gstinputselector.c
+++ b/plugins/elements/gstinputselector.c
@@ -155,6 +155,9 @@
   GstPad parent;
 
   gboolean pushed;              /* when buffer was pushed downstream since activation */
+  guint group_id;               /* Group ID from the last stream-start */
+  gboolean group_done;          /* when Stream Group Done has been
+                                   received */
   gboolean eos;                 /* when EOS has been received */
   gboolean eos_sent;            /* when EOS was sent downstream */
   gboolean discont;             /* after switching we create a discont */
@@ -340,6 +343,7 @@
 {
   GST_OBJECT_LOCK (pad);
   pad->pushed = FALSE;
+  pad->group_done = FALSE;
   pad->eos = FALSE;
   pad->eos_sent = FALSE;
   pad->events_pending = FALSE;
@@ -550,16 +554,17 @@
 
   switch (GST_EVENT_TYPE (event)) {
     case GST_EVENT_STREAM_START:{
-      guint group_id;
-
-      if (!gst_event_parse_group_id (event, &group_id))
+      if (!gst_event_parse_group_id (event, &selpad->group_id)) {
         sel->have_group_id = FALSE;
+        selpad->group_id = 0;
+      }
       break;
     }
     case GST_EVENT_FLUSH_START:
       /* Unblock the pad if it's waiting */
       selpad->flushing = TRUE;
       sel->eos = FALSE;
+      selpad->group_done = FALSE;
       GST_INPUT_SELECTOR_BROADCAST (sel);
       break;
     case GST_EVENT_FLUSH_STOP:
@@ -626,6 +631,15 @@
 
     }
       break;
+    case GST_EVENT_STREAM_GROUP_DONE:{
+      GST_DEBUG_OBJECT (sel, "Stream group-done in inputselector pad %s",
+          GST_OBJECT_NAME (selpad));
+      gst_event_parse_stream_group_done (event, &selpad->group_id);
+      selpad->group_done = TRUE;
+      if (sel->sync_streams && active_sinkpad == pad)
+        GST_INPUT_SELECTOR_BROADCAST (sel);
+      break;
+    }
     default:
       break;
   }
@@ -798,6 +812,15 @@
             GST_FORMAT_TIME, active_seg->position);
     }
 
+    /* Don't wait if the group is finished on the active pad,
+     * as the running time won't progress now */
+    if (selpad != active_selpad && active_selpad->group_done &&
+        selpad->group_id == active_selpad->group_id) {
+      GST_DEBUG_OBJECT (selpad, "Active pad received group-done. Unblocking");
+      GST_INPUT_SELECTOR_UNLOCK (sel);
+      break;
+    }
+
     if (selpad != active_selpad && !sel->eos && !sel->flushing
         && !selpad->flushing && (cur_running_time == GST_CLOCK_TIME_NONE
             || running_time >= cur_running_time)) {
diff --git a/plugins/elements/gstmultiqueue.c b/plugins/elements/gstmultiqueue.c
index 78bca73..738eddf 100644
--- a/plugins/elements/gstmultiqueue.c
+++ b/plugins/elements/gstmultiqueue.c
@@ -100,6 +100,17 @@
  *   queues is filled.
  *   Both signals are emitted from the context of the streaming thread.
  * </para>
+ * <para>
+ *   When using #GstMultiQueue:sync-by-running-time the unlinked streams will
+ *   be throttled by the highest running-time of linked streams. This allows
+ *   further relinking of those unlinked streams without them being in the
+ *   future (i.e. to achieve gapless playback).
+ *   When dealing with streams which have got different consumption requirements
+ *   downstream (ex: video decoders which will consume more buffer (in time) than
+ *   audio decoders), it is recommended to group streams of the same type
+ *   by using the pad "group-id" property. This will further throttle streams
+ *   in time within that group.
+ * </para>
  * </refsect2>
  */
 
@@ -126,6 +137,9 @@
 {
   /* unique identifier of the queue */
   guint id;
+  /* group of streams to which this queue belongs to */
+  guint groupid;
+  GstClockTimeDiff group_high_time;
 
   GstMultiQueue *mqueue;
 
@@ -203,7 +217,7 @@
 
 static void wake_up_next_non_linked (GstMultiQueue * mq);
 static void compute_high_id (GstMultiQueue * mq);
-static void compute_high_time (GstMultiQueue * mq);
+static void compute_high_time (GstMultiQueue * mq, guint groupid);
 static void single_queue_overrun_cb (GstDataQueue * dq, GstSingleQueue * sq);
 static void single_queue_underrun_cb (GstDataQueue * dq, GstSingleQueue * sq);
 
@@ -253,8 +267,8 @@
 #define DEFAULT_EXTRA_SIZE_TIME 3 * GST_SECOND
 
 #define DEFAULT_USE_BUFFERING FALSE
-#define DEFAULT_LOW_PERCENT   10
-#define DEFAULT_HIGH_PERCENT  99
+#define DEFAULT_LOW_WATERMARK  0.01
+#define DEFAULT_HIGH_WATERMARK 0.99
 #define DEFAULT_SYNC_BY_RUNNING_TIME FALSE
 #define DEFAULT_USE_INTERLEAVE FALSE
 #define DEFAULT_UNLINKED_CACHE_TIME 250 * GST_MSECOND
@@ -271,12 +285,136 @@
   PROP_USE_BUFFERING,
   PROP_LOW_PERCENT,
   PROP_HIGH_PERCENT,
+  PROP_LOW_WATERMARK,
+  PROP_HIGH_WATERMARK,
   PROP_SYNC_BY_RUNNING_TIME,
   PROP_USE_INTERLEAVE,
   PROP_UNLINKED_CACHE_TIME,
   PROP_LAST
 };
 
+/* Explanation for buffer levels and percentages:
+ *
+ * The buffering_level functions here return a value in a normalized range
+ * that specifies the current fill level of a queue. The range goes from 0 to
+ * MAX_BUFFERING_LEVEL. The low/high watermarks also use this same range.
+ *
+ * This is not to be confused with the buffering_percent value, which is
+ * a *relative* quantity - relative to the low/high watermarks.
+ * buffering_percent = 0% means overall buffering_level is at the low watermark.
+ * buffering_percent = 100% means overall buffering_level is at the high watermark.
+ * buffering_percent is used for determining if the fill level has reached
+ * the high watermark, and for producing BUFFERING messages. This value
+ * always uses a 0..100 range (since it is a percentage).
+ *
+ * To avoid future confusions, whenever "buffering level" is mentioned, it
+ * refers to the absolute level which is in the 0..MAX_BUFFERING_LEVEL
+ * range. Whenever "buffering_percent" is mentioned, it refers to the
+ * percentage value that is relative to the low/high watermark. */
+
+/* Using a buffering level range of 0..1000000 to allow for a
+ * resolution in ppm (1 ppm = 0.0001%) */
+#define MAX_BUFFERING_LEVEL 1000000
+
+/* How much 1% makes up in the buffer level range */
+#define BUF_LEVEL_PERCENT_FACTOR ((MAX_BUFFERING_LEVEL) / 100)
+
+/* GstMultiQueuePad */
+
+#define DEFAULT_PAD_GROUP_ID 0
+
+enum
+{
+  PROP_PAD_0,
+  PROP_PAD_GROUP_ID,
+};
+
+#define GST_TYPE_MULTIQUEUE_PAD            (gst_multiqueue_pad_get_type())
+#define GST_MULTIQUEUE_PAD(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_MULTIQUEUE_PAD,GstMultiQueuePad))
+#define GST_IS_MULTIQUEUE_PAD(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_MULTIQUEUE_PAD))
+#define GST_MULTIQUEUE_PAD_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass) ,GST_TYPE_MULTIQUEUE_PAD,GstMultiQueuePadClass))
+#define GST_IS_MULTIQUEUE_PAD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass) ,GST_TYPE_MULTIQUEUE_PAD))
+#define GST_MULTIQUEUE_PAD_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj) ,GST_TYPE_MULTIQUEUE_PAD,GstMultiQueuePadClass))
+
+struct _GstMultiQueuePad
+{
+  GstPad parent;
+
+  GstSingleQueue *sq;
+};
+
+struct _GstMultiQueuePadClass
+{
+  GstPadClass parent_class;
+};
+
+GType gst_multiqueue_pad_get_type (void);
+
+G_DEFINE_TYPE (GstMultiQueuePad, gst_multiqueue_pad, GST_TYPE_PAD);
+static void
+gst_multiqueue_pad_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstMultiQueuePad *pad = GST_MULTIQUEUE_PAD (object);
+
+  switch (prop_id) {
+    case PROP_PAD_GROUP_ID:
+      if (pad->sq)
+        g_value_set_uint (value, pad->sq->groupid);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_multiqueue_pad_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstMultiQueuePad *pad = GST_MULTIQUEUE_PAD (object);
+
+  switch (prop_id) {
+    case PROP_PAD_GROUP_ID:
+      GST_OBJECT_LOCK (pad);
+      if (pad->sq)
+        pad->sq->groupid = g_value_get_uint (value);
+      GST_OBJECT_UNLOCK (pad);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_multiqueue_pad_class_init (GstMultiQueuePadClass * klass)
+{
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+
+  gobject_class->set_property = gst_multiqueue_pad_set_property;
+  gobject_class->get_property = gst_multiqueue_pad_get_property;
+
+  /**
+   * GstMultiQueuePad:group-id:
+   *
+   * Group to which this pad belongs.
+   *
+   * Since: 1.10
+   */
+  g_object_class_install_property (gobject_class, PROP_PAD_GROUP_ID,
+      g_param_spec_uint ("group-id", "Group ID",
+          "Group to which this pad belongs", 0, G_MAXUINT32,
+          DEFAULT_PAD_GROUP_ID, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+}
+
+static void
+gst_multiqueue_pad_init (GstMultiQueuePad * pad)
+{
+
+}
+
+
 #define GST_MULTI_QUEUE_MUTEX_LOCK(q) G_STMT_START {                          \
   g_mutex_lock (&q->qlock);                                              \
 } G_STMT_END
@@ -286,9 +424,9 @@
 } G_STMT_END
 
 #define SET_PERCENT(mq, perc) G_STMT_START {                             \
-  if (perc != mq->percent) {                                             \
-    mq->percent = perc;                                                  \
-    mq->percent_changed = TRUE;                                          \
+  if (perc != mq->buffering_percent) {                                   \
+    mq->buffering_percent = perc;                                        \
+    mq->buffering_percent_changed = TRUE;                                \
     GST_DEBUG_OBJECT (mq, "buffering %d percent", perc);                 \
   }                                                                      \
 } G_STMT_END
@@ -430,8 +568,10 @@
    */
   g_object_class_install_property (gobject_class, PROP_LOW_PERCENT,
       g_param_spec_int ("low-percent", "Low percent",
-          "Low threshold for buffering to start", 0, 100,
-          DEFAULT_LOW_PERCENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          "Low threshold for buffering to start. Only used if use-buffering is True "
+          "(Deprecated: use low-watermark instead)",
+          0, 100, DEFAULT_LOW_WATERMARK * 100,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
   /**
    * GstMultiQueue:high-percent
    * 
@@ -439,8 +579,34 @@
    */
   g_object_class_install_property (gobject_class, PROP_HIGH_PERCENT,
       g_param_spec_int ("high-percent", "High percent",
-          "High threshold for buffering to finish", 0, 100,
-          DEFAULT_HIGH_PERCENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          "High threshold for buffering to finish. Only used if use-buffering is True "
+          "(Deprecated: use high-watermark instead)",
+          0, 100, DEFAULT_HIGH_WATERMARK * 100,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstMultiQueue:low-watermark
+   *
+   * Low threshold watermark for buffering to start.
+   *
+   * Since: 1.10
+   */
+  g_object_class_install_property (gobject_class, PROP_LOW_WATERMARK,
+      g_param_spec_double ("low-watermark", "Low watermark",
+          "Low threshold for buffering to start. Only used if use-buffering is True",
+          0.0, 1.0, DEFAULT_LOW_WATERMARK,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstMultiQueue:high-watermark
+   *
+   * High threshold watermark for buffering to finish.
+   *
+   * Since: 1.10
+   */
+  g_object_class_install_property (gobject_class, PROP_HIGH_WATERMARK,
+      g_param_spec_double ("high-watermark", "High watermark",
+          "High threshold for buffering to finish. Only used if use-buffering is True",
+          0.0, 1.0, DEFAULT_HIGH_WATERMARK,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
   /**
    * GstMultiQueue:sync-by-running-time
@@ -501,8 +667,8 @@
   mqueue->extra_size.time = DEFAULT_EXTRA_SIZE_TIME;
 
   mqueue->use_buffering = DEFAULT_USE_BUFFERING;
-  mqueue->low_percent = DEFAULT_LOW_PERCENT;
-  mqueue->high_percent = DEFAULT_HIGH_PERCENT;
+  mqueue->low_watermark = DEFAULT_LOW_WATERMARK * MAX_BUFFERING_LEVEL;
+  mqueue->high_watermark = DEFAULT_HIGH_WATERMARK * MAX_BUFFERING_LEVEL;
 
   mqueue->sync_by_running_time = DEFAULT_SYNC_BY_RUNNING_TIME;
   mqueue->use_interleave = DEFAULT_USE_INTERLEAVE;
@@ -617,15 +783,23 @@
       recheck_buffering_status (mq);
       break;
     case PROP_LOW_PERCENT:
-      mq->low_percent = g_value_get_int (value);
-      /* Recheck buffering status - the new low-percent value might
-       * be above the current fill level. If the old low-percent one
+      mq->low_watermark = g_value_get_int (value) * BUF_LEVEL_PERCENT_FACTOR;
+      /* Recheck buffering status - the new low_watermark value might
+       * be above the current fill level. If the old low_watermark one
        * was below the current level, this means that mq->buffering is
        * disabled and needs to be re-enabled. */
       recheck_buffering_status (mq);
       break;
     case PROP_HIGH_PERCENT:
-      mq->high_percent = g_value_get_int (value);
+      mq->high_watermark = g_value_get_int (value) * BUF_LEVEL_PERCENT_FACTOR;
+      recheck_buffering_status (mq);
+      break;
+    case PROP_LOW_WATERMARK:
+      mq->low_watermark = g_value_get_double (value) * MAX_BUFFERING_LEVEL;
+      recheck_buffering_status (mq);
+      break;
+    case PROP_HIGH_WATERMARK:
+      mq->high_watermark = g_value_get_double (value) * MAX_BUFFERING_LEVEL;
       recheck_buffering_status (mq);
       break;
     case PROP_SYNC_BY_RUNNING_TIME:
@@ -677,10 +851,18 @@
       g_value_set_boolean (value, mq->use_buffering);
       break;
     case PROP_LOW_PERCENT:
-      g_value_set_int (value, mq->low_percent);
+      g_value_set_int (value, mq->low_watermark / BUF_LEVEL_PERCENT_FACTOR);
       break;
     case PROP_HIGH_PERCENT:
-      g_value_set_int (value, mq->high_percent);
+      g_value_set_int (value, mq->high_watermark / BUF_LEVEL_PERCENT_FACTOR);
+      break;
+    case PROP_LOW_WATERMARK:
+      g_value_set_double (value, mq->low_watermark /
+          (gdouble) MAX_BUFFERING_LEVEL);
+      break;
+    case PROP_HIGH_WATERMARK:
+      g_value_set_double (value, mq->high_watermark /
+          (gdouble) MAX_BUFFERING_LEVEL);
       break;
     case PROP_SYNC_BY_RUNNING_TIME:
       g_value_set_boolean (value, mq->sync_by_running_time);
@@ -910,8 +1092,12 @@
     sq->next_time = GST_CLOCK_STIME_NONE;
     sq->last_time = GST_CLOCK_STIME_NONE;
     sq->cached_sinktime = GST_CLOCK_STIME_NONE;
+    sq->group_high_time = GST_CLOCK_STIME_NONE;
     gst_data_queue_set_flushing (sq->queue, FALSE);
 
+    /* We will become active again on the next buffer/gap */
+    sq->active = FALSE;
+
     /* Reset high time to be recomputed next */
     mq->high_time = GST_CLOCK_STIME_NONE;
 
@@ -928,10 +1114,10 @@
 
 /* WITH LOCK TAKEN */
 static gint
-get_percentage (GstSingleQueue * sq)
+get_buffering_level (GstSingleQueue * sq)
 {
   GstDataQueueSize size;
-  gint percent, tmp;
+  gint buffering_level, tmp;
 
   gst_data_queue_get_level (sq->queue, &size);
 
@@ -940,42 +1126,53 @@
       G_GUINT64_FORMAT, sq->id, size.visible, sq->max_size.visible,
       size.bytes, sq->max_size.bytes, sq->cur_time, sq->max_size.time);
 
-  /* get bytes and time percentages and take the max */
+  /* get bytes and time buffer levels and take the max */
   if (sq->is_eos || sq->srcresult == GST_FLOW_NOT_LINKED || sq->is_sparse) {
-    percent = 100;
+    buffering_level = MAX_BUFFERING_LEVEL;
   } else {
-    percent = 0;
+    buffering_level = 0;
     if (sq->max_size.time > 0) {
-      tmp = (sq->cur_time * 100) / sq->max_size.time;
-      percent = MAX (percent, tmp);
+      tmp =
+          gst_util_uint64_scale_int (sq->cur_time,
+          MAX_BUFFERING_LEVEL, sq->max_size.time);
+      buffering_level = MAX (buffering_level, tmp);
     }
     if (sq->max_size.bytes > 0) {
-      tmp = (size.bytes * 100) / sq->max_size.bytes;
-      percent = MAX (percent, tmp);
+      tmp =
+          gst_util_uint64_scale_int (size.bytes,
+          MAX_BUFFERING_LEVEL, sq->max_size.bytes);
+      buffering_level = MAX (buffering_level, tmp);
     }
   }
 
-  return percent;
+  return buffering_level;
 }
 
 /* WITH LOCK TAKEN */
 static void
 update_buffering (GstMultiQueue * mq, GstSingleQueue * sq)
 {
-  gint percent;
+  gint buffering_level, percent;
 
   /* nothing to dowhen we are not in buffering mode */
   if (!mq->use_buffering)
     return;
 
-  percent = get_percentage (sq);
+  buffering_level = get_buffering_level (sq);
+
+  /* scale so that if buffering_level equals the high watermark,
+   * the percentage is 100% */
+  percent = gst_util_uint64_scale (buffering_level, 100, mq->high_watermark);
+  /* clip */
+  if (percent > 100)
+    percent = 100;
 
   if (mq->buffering) {
-    if (percent >= mq->high_percent) {
+    if (buffering_level >= mq->high_watermark) {
       mq->buffering = FALSE;
     }
     /* make sure it increases */
-    percent = MAX (mq->percent, percent);
+    percent = MAX (mq->buffering_percent, percent);
 
     SET_PERCENT (mq, percent);
   } else {
@@ -985,14 +1182,14 @@
     for (iter = mq->queues; iter; iter = g_list_next (iter)) {
       GstSingleQueue *oq = (GstSingleQueue *) iter->data;
 
-      if (get_percentage (oq) >= mq->high_percent) {
+      if (get_buffering_level (oq) >= mq->high_watermark) {
         is_buffering = FALSE;
 
         break;
       }
     }
 
-    if (is_buffering && percent < mq->low_percent) {
+    if (is_buffering && buffering_level < mq->low_watermark) {
       mq->buffering = TRUE;
       SET_PERCENT (mq, percent);
     }
@@ -1006,15 +1203,10 @@
 
   g_mutex_lock (&mq->buffering_post_lock);
   GST_MULTI_QUEUE_MUTEX_LOCK (mq);
-  if (mq->percent_changed) {
-    gint percent = mq->percent;
+  if (mq->buffering_percent_changed) {
+    gint percent = mq->buffering_percent;
 
-    mq->percent_changed = FALSE;
-
-    percent = percent * 100 / mq->high_percent;
-    /* clip */
-    if (percent > 100)
-      percent = 100;
+    mq->buffering_percent_changed = FALSE;
 
     GST_DEBUG_OBJECT (mq, "Going to post buffering: %d%%", percent);
     msg = gst_message_new_buffering (GST_OBJECT_CAST (mq), percent);
@@ -1034,7 +1226,8 @@
     GST_MULTI_QUEUE_MUTEX_LOCK (mq);
     mq->buffering = FALSE;
     GST_DEBUG_OBJECT (mq,
-        "Buffering property disabled, but queue was still buffering; setting percentage to 100%%");
+        "Buffering property disabled, but queue was still buffering; "
+        "setting buffering percentage to 100%%");
     SET_PERCENT (mq, 100);
     GST_MULTI_QUEUE_MUTEX_UNLOCK (mq);
   }
@@ -1045,9 +1238,9 @@
 
     GST_MULTI_QUEUE_MUTEX_LOCK (mq);
 
-    /* force fill level percentage to be recalculated */
-    old_perc = mq->percent;
-    mq->percent = 0;
+    /* force buffering percentage to be recalculated */
+    old_perc = mq->buffering_percent;
+    mq->buffering_percent = 0;
 
     tmp = mq->queues;
     while (tmp) {
@@ -1057,8 +1250,9 @@
       tmp = g_list_next (tmp);
     }
 
-    GST_DEBUG_OBJECT (mq, "Recalculated fill level: old: %d%% new: %d%%",
-        old_perc, mq->percent);
+    GST_DEBUG_OBJECT (mq,
+        "Recalculated buffering percentage: old: %d%% new: %d%%",
+        old_perc, mq->buffering_percent);
 
     GST_MULTI_QUEUE_MUTEX_UNLOCK (mq);
   }
@@ -1621,24 +1815,37 @@
       sq->oldid = sq->last_oldid;
 
     if (sq->srcresult == GST_FLOW_NOT_LINKED) {
+      gboolean should_wait;
       /* Go to sleep until it's time to push this buffer */
 
       /* Recompute the highid */
       compute_high_id (mq);
       /* Recompute the high time */
-      compute_high_time (mq);
+      compute_high_time (mq, sq->groupid);
 
-      while (((mq->sync_by_running_time && GST_CLOCK_STIME_IS_VALID (next_time)
-                  && (mq->high_time == GST_CLOCK_STIME_NONE
-                      || next_time > mq->high_time))
-              || (!mq->sync_by_running_time && newid > mq->highid))
-          && sq->srcresult == GST_FLOW_NOT_LINKED) {
+      GST_DEBUG_OBJECT (mq,
+          "groupid %d high_time %" GST_STIME_FORMAT " next_time %"
+          GST_STIME_FORMAT, sq->groupid, GST_STIME_ARGS (sq->group_high_time),
+          GST_STIME_ARGS (next_time));
+
+      if (mq->sync_by_running_time)
+        /* In this case we only need to wait if:
+         * 1) there is a time against which to wait
+         * 2) and either we have gone over the high_time or there is no
+         *   high_time */
+        should_wait = GST_CLOCK_STIME_IS_VALID (next_time) &&
+            (sq->group_high_time == GST_CLOCK_STIME_NONE
+            || next_time > sq->group_high_time);
+      else
+        should_wait = newid > mq->highid;
+
+      while (should_wait && sq->srcresult == GST_FLOW_NOT_LINKED) {
 
         GST_DEBUG_OBJECT (mq,
             "queue %d sleeping for not-linked wakeup with "
             "newid %u, highid %u, next_time %" GST_STIME_FORMAT
             ", high_time %" GST_STIME_FORMAT, sq->id, newid, mq->highid,
-            GST_STIME_ARGS (next_time), GST_STIME_ARGS (mq->high_time));
+            GST_STIME_ARGS (next_time), GST_STIME_ARGS (sq->group_high_time));
 
         /* Wake up all non-linked pads before we sleep */
         wake_up_next_non_linked (mq);
@@ -1653,21 +1860,28 @@
         }
 
         /* Recompute the high time and ID */
-        compute_high_time (mq);
+        compute_high_time (mq, sq->groupid);
         compute_high_id (mq);
 
         GST_DEBUG_OBJECT (mq, "queue %d woken from sleeping for not-linked "
             "wakeup with newid %u, highid %u, next_time %" GST_STIME_FORMAT
             ", high_time %" GST_STIME_FORMAT, sq->id, newid, mq->highid,
-            GST_STIME_ARGS (next_time), GST_STIME_ARGS (mq->high_time));
+            GST_STIME_ARGS (next_time), GST_STIME_ARGS (sq->group_high_time));
+
+        if (mq->sync_by_running_time)
+          should_wait = GST_CLOCK_STIME_IS_VALID (next_time) &&
+              (sq->group_high_time == GST_CLOCK_STIME_NONE
+              || next_time > sq->group_high_time);
+        else
+          should_wait = newid > mq->highid;
       }
 
       /* Re-compute the high_id in case someone else pushed */
       compute_high_id (mq);
-      compute_high_time (mq);
+      compute_high_time (mq, sq->groupid);
     } else {
       compute_high_id (mq);
-      compute_high_time (mq);
+      compute_high_time (mq, sq->groupid);
       /* Wake up all non-linked pads */
       wake_up_next_non_linked (mq);
     }
@@ -1718,6 +1932,7 @@
         sq->id);
 
     compute_high_id (mq);
+    compute_high_time (mq, sq->groupid);
     do_update_buffering = TRUE;
 
     /* maybe no-one is waiting */
@@ -1773,7 +1988,7 @@
   GST_MULTI_QUEUE_MUTEX_LOCK (mq);
   if (mq->numwaiting > 0 && (GST_PAD_IS_EOS (sq->srcpad)
           || sq->srcresult == GST_FLOW_EOS)) {
-    compute_high_time (mq);
+    compute_high_time (mq, sq->groupid);
     compute_high_id (mq);
     wake_up_next_non_linked (mq);
   }
@@ -1803,9 +2018,7 @@
      * error upstream */
     if (sq->is_eos && sq->srcresult < GST_FLOW_EOS) {
       GST_MULTI_QUEUE_MUTEX_UNLOCK (mq);
-      GST_ELEMENT_ERROR (mq, STREAM, FAILED,
-          ("Internal data stream error."),
-          ("streaming stopped, reason %s", gst_flow_get_name (sq->srcresult)));
+      GST_ELEMENT_FLOW_ERROR (mq, sq->srcresult);
     } else {
       GST_MULTI_QUEUE_MUTEX_UNLOCK (mq);
     }
@@ -1998,15 +2211,14 @@
           GST_INFO_OBJECT (mq, "SingleQueue %d is a sparse stream", sq->id);
           sq->is_sparse = TRUE;
         }
-        sq->thread = g_thread_self ();
       }
 
       sq->thread = g_thread_self ();
 
       /* Remove EOS flag */
       sq->is_eos = FALSE;
-    }
       break;
+    }
     case GST_EVENT_FLUSH_START:
       GST_DEBUG_OBJECT (mq, "SingleQueue %d : received flush start event",
           sq->id);
@@ -2087,10 +2299,7 @@
        * error upstream */
       if (sq->srcresult < GST_FLOW_EOS) {
         GST_MULTI_QUEUE_MUTEX_UNLOCK (mq);
-        GST_ELEMENT_ERROR (mq, STREAM, FAILED,
-            ("Internal data stream error."),
-            ("streaming stopped, reason %s",
-                gst_flow_get_name (sq->srcresult)));
+        GST_ELEMENT_FLOW_ERROR (mq, sq->srcresult);
       } else {
         GST_MULTI_QUEUE_MUTEX_UNLOCK (mq);
       }
@@ -2183,6 +2392,8 @@
           GST_MULTI_QUEUE_MUTEX_UNLOCK (mq);
           res = gst_data_queue_push (sq->queue, (GstDataQueueItem *) item);
           GST_MULTI_QUEUE_MUTEX_LOCK (mq);
+          if (!res || sq->flushing)
+            goto out_flushing;
           /* it might be that the query has been taken out of the queue
            * while we were unlocked. So, we need to check if the last
            * handled query is the same one than the one we just
@@ -2305,8 +2516,9 @@
     for (tmp = mq->queues; tmp; tmp = tmp->next) {
       GstSingleQueue *sq = (GstSingleQueue *) tmp->data;
       if (sq->srcresult == GST_FLOW_NOT_LINKED
+          && GST_CLOCK_STIME_IS_VALID (sq->group_high_time)
           && GST_CLOCK_STIME_IS_VALID (sq->next_time)
-          && sq->next_time <= mq->high_time) {
+          && sq->next_time <= sq->group_high_time) {
         GST_LOG_OBJECT (mq, "Waking up singlequeue %d", sq->id);
         g_cond_signal (&sq->turn);
       }
@@ -2369,7 +2581,7 @@
 
 /* WITH LOCK TAKEN */
 static void
-compute_high_time (GstMultiQueue * mq)
+compute_high_time (GstMultiQueue * mq, guint groupid)
 {
   /* The high-time is either the highest last time among the linked
    * pads, or if all pads are not-linked, it's the lowest nex time of
@@ -2377,19 +2589,28 @@
   GList *tmp;
   GstClockTimeDiff highest = GST_CLOCK_STIME_NONE;
   GstClockTimeDiff lowest = GST_CLOCK_STIME_NONE;
+  GstClockTimeDiff group_high = GST_CLOCK_STIME_NONE;
+  GstClockTimeDiff group_low = GST_CLOCK_STIME_NONE;
+  GstClockTimeDiff res;
+  /* Number of streams which belong to groupid */
+  guint group_count = 0;
 
   if (!mq->sync_by_running_time)
+    /* return GST_CLOCK_STIME_NONE; */
     return;
 
   for (tmp = mq->queues; tmp; tmp = tmp->next) {
     GstSingleQueue *sq = (GstSingleQueue *) tmp->data;
 
     GST_LOG_OBJECT (mq,
-        "inspecting sq:%d , next_time:%" GST_STIME_FORMAT ", last_time:%"
-        GST_STIME_FORMAT ", srcresult:%s", sq->id,
+        "inspecting sq:%d (group:%d) , next_time:%" GST_STIME_FORMAT
+        ", last_time:%" GST_STIME_FORMAT ", srcresult:%s", sq->id, sq->groupid,
         GST_STIME_ARGS (sq->next_time), GST_STIME_ARGS (sq->last_time),
         gst_flow_get_name (sq->srcresult));
 
+    if (sq->groupid == groupid)
+      group_count++;
+
     if (sq->srcresult == GST_FLOW_NOT_LINKED) {
       /* No need to consider queues which are not waiting */
       if (!GST_CLOCK_STIME_IS_VALID (sq->next_time)) {
@@ -2399,6 +2620,9 @@
 
       if (lowest == GST_CLOCK_STIME_NONE || sq->next_time < lowest)
         lowest = sq->next_time;
+      if (sq->groupid == groupid && (group_low == GST_CLOCK_STIME_NONE
+              || sq->next_time < group_low))
+        group_low = sq->next_time;
     } else if (!GST_PAD_IS_EOS (sq->srcpad) && sq->srcresult != GST_FLOW_EOS) {
       /* If we don't have a global high time, or the global high time
        * is lower than this single queue's last outputted time, store
@@ -2406,10 +2630,18 @@
       if (highest == GST_CLOCK_STIME_NONE
           || (sq->last_time != GST_CLOCK_STIME_NONE && sq->last_time > highest))
         highest = sq->last_time;
+      if (sq->groupid == groupid && (group_high == GST_CLOCK_STIME_NONE
+              || (sq->last_time != GST_CLOCK_STIME_NONE
+                  && sq->last_time > group_high)))
+        group_high = sq->last_time;
     }
     GST_LOG_OBJECT (mq,
         "highest now %" GST_STIME_FORMAT " lowest %" GST_STIME_FORMAT,
         GST_STIME_ARGS (highest), GST_STIME_ARGS (lowest));
+    if (sq->groupid == groupid)
+      GST_LOG_OBJECT (mq,
+          "grouphigh %" GST_STIME_FORMAT " grouplow %" GST_STIME_FORMAT,
+          GST_STIME_ARGS (group_high), GST_STIME_ARGS (group_low));
   }
 
   if (highest == GST_CLOCK_STIME_NONE)
@@ -2417,10 +2649,25 @@
   else
     mq->high_time = highest;
 
+  GST_LOG_OBJECT (mq, "group count %d for groupid %u", group_count, groupid);
   GST_LOG_OBJECT (mq,
       "High time is now : %" GST_STIME_FORMAT ", lowest non-linked %"
       GST_STIME_FORMAT, GST_STIME_ARGS (mq->high_time),
       GST_STIME_ARGS (lowest));
+
+  /* If there's only one stream of a given type, use the global high */
+  if (group_count < 2)
+    res = mq->high_time;
+  else if (group_high == GST_CLOCK_STIME_NONE)
+    res = group_low;
+  else
+    res = group_high;
+
+  for (tmp = mq->queues; tmp; tmp = tmp->next) {
+    GstSingleQueue *sq = (GstSingleQueue *) tmp->data;
+    if (groupid == sq->groupid)
+      sq->group_high_time = res;
+  }
 }
 
 #define IS_FILLED(q, format, value) (((q)->max_size.format) != 0 && \
@@ -2448,9 +2695,10 @@
 
   GST_MULTI_QUEUE_MUTEX_LOCK (mq);
 
-  /* check if we reached the hard time/bytes limits */
-  if (sq->is_eos || sq->is_sparse || IS_FILLED (sq, bytes, size.bytes) ||
-      IS_FILLED (sq, time, sq->cur_time)) {
+  /* check if we reached the hard time/bytes limits;
+     time limit is only taken into account for non-sparse streams */
+  if (sq->is_eos || IS_FILLED (sq, bytes, size.bytes) ||
+      (!sq->is_sparse && IS_FILLED (sq, time, sq->cur_time))) {
     goto done;
   }
 
@@ -2635,6 +2883,8 @@
 gst_single_queue_new (GstMultiQueue * mqueue, guint id)
 {
   GstSingleQueue *sq;
+  GstMultiQueuePad *mqpad;
+  GstPadTemplate *templ;
   gchar *name;
   GList *tmp;
   guint temp_id = (id == -1) ? 0 : id;
@@ -2662,6 +2912,8 @@
   sq = g_new0 (GstSingleQueue, 1);
   mqueue->nbqueues++;
   sq->id = temp_id;
+  sq->groupid = DEFAULT_PAD_GROUP_ID;
+  sq->group_high_time = GST_CLOCK_STIME_NONE;
 
   mqueue->queues = g_list_insert_before (mqueue->queues, tmp, sq);
   mqueue->queues_cookie++;
@@ -2705,9 +2957,15 @@
   sq->src_tainted = TRUE;
 
   name = g_strdup_printf ("sink_%u", sq->id);
-  sq->sinkpad = gst_pad_new_from_static_template (&sinktemplate, name);
+  templ = gst_static_pad_template_get (&sinktemplate);
+  sq->sinkpad = g_object_new (GST_TYPE_MULTIQUEUE_PAD, "name", name,
+      "direction", templ->direction, "template", templ, NULL);
+  gst_object_unref (templ);
   g_free (name);
 
+  mqpad = (GstMultiQueuePad *) sq->sinkpad;
+  mqpad->sq = sq;
+
   gst_pad_set_chain_function (sq->sinkpad,
       GST_DEBUG_FUNCPTR (gst_multi_queue_chain));
   gst_pad_set_activatemode_function (sq->sinkpad,
diff --git a/plugins/elements/gstmultiqueue.h b/plugins/elements/gstmultiqueue.h
index 98e4bc1..5ed8413 100644
--- a/plugins/elements/gstmultiqueue.h
+++ b/plugins/elements/gstmultiqueue.h
@@ -42,6 +42,9 @@
 typedef struct _GstMultiQueue GstMultiQueue;
 typedef struct _GstMultiQueueClass GstMultiQueueClass;
 
+typedef struct _GstMultiQueuePad GstMultiQueuePad;
+typedef struct _GstMultiQueuePadClass GstMultiQueuePadClass;
+
 /**
  * GstMultiQueue:
  *
@@ -62,9 +65,9 @@
 
   GstDataQueueSize  max_size, extra_size;
   gboolean use_buffering;
-  gint low_percent, high_percent;
+  gint low_watermark, high_watermark;
   gboolean buffering;
-  gint percent;
+  gint buffering_percent;
 
   guint    counter;	/* incoming object counter, use atomic accesses */
   guint32  highid;	/* contains highest id of last outputted object */
@@ -76,7 +79,7 @@
 
   gint numwaiting;	/* number of not-linked pads waiting */
 
-  gboolean percent_changed;
+  gboolean buffering_percent_changed;
   GMutex buffering_post_lock; /* assures only one posted at a time */
 
   GstClockTime interleave;	/* Input interleave */
diff --git a/plugins/elements/gstqueue.c b/plugins/elements/gstqueue.c
index a0b880c..e8f7f89 100644
--- a/plugins/elements/gstqueue.c
+++ b/plugins/elements/gstqueue.c
@@ -986,10 +986,7 @@
             if (queue->srcresult == GST_FLOW_NOT_LINKED
                 || queue->srcresult < GST_FLOW_EOS) {
               GST_QUEUE_MUTEX_UNLOCK (queue);
-              GST_ELEMENT_ERROR (queue, STREAM, FAILED,
-                  (_("Internal data flow error.")),
-                  ("streaming task paused, reason %s (%d)",
-                      gst_flow_get_name (queue->srcresult), queue->srcresult));
+              GST_ELEMENT_FLOW_ERROR (queue, queue->srcresult);
             } else {
               GST_QUEUE_MUTEX_UNLOCK (queue);
             }
@@ -1535,10 +1532,7 @@
     /* let app know about us giving up if upstream is not expected to do so */
     /* EOS is already taken care of elsewhere */
     if (eos && (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_EOS)) {
-      GST_ELEMENT_ERROR (queue, STREAM, FAILED,
-          (_("Internal data flow error.")),
-          ("streaming task paused, reason %s (%d)",
-              gst_flow_get_name (ret), ret));
+      GST_ELEMENT_FLOW_ERROR (queue, ret);
       gst_pad_push_event (queue->srcpad, gst_event_new_eos ());
     }
     return;
diff --git a/plugins/elements/gstqueue2.c b/plugins/elements/gstqueue2.c
index 8e5a5dc..8d78856 100644
--- a/plugins/elements/gstqueue2.c
+++ b/plugins/elements/gstqueue2.c
@@ -117,6 +117,8 @@
 #define DEFAULT_USE_RATE_ESTIMATE  TRUE
 #define DEFAULT_LOW_PERCENT        10
 #define DEFAULT_HIGH_PERCENT       99
+#define DEFAULT_LOW_WATERMARK      0.01
+#define DEFAULT_HIGH_WATERMARK     0.99
 #define DEFAULT_TEMP_REMOVE        TRUE
 #define DEFAULT_RING_BUFFER_MAX_SIZE 0
 
@@ -134,6 +136,8 @@
   PROP_USE_RATE_ESTIMATE,
   PROP_LOW_PERCENT,
   PROP_HIGH_PERCENT,
+  PROP_LOW_WATERMARK,
+  PROP_HIGH_WATERMARK,
   PROP_TEMP_TEMPLATE,
   PROP_TEMP_LOCATION,
   PROP_TEMP_REMOVE,
@@ -142,6 +146,32 @@
   PROP_LAST
 };
 
+/* Explanation for buffer levels and percentages:
+ *
+ * The buffering_level functions here return a value in a normalized range
+ * that specifies the queue's current fill level. The range goes from 0 to
+ * MAX_BUFFERING_LEVEL. The low/high watermarks also use this same range.
+ *
+ * This is not to be confused with the buffering_percent value, which is
+ * a *relative* quantity - relative to the low/high watermarks.
+ * buffering_percent = 0% means buffering_level is at the low watermark.
+ * buffering_percent = 100% means buffering_level is at the high watermark.
+ * buffering_percent is used for determining if the fill level has reached
+ * the high watermark, and for producing BUFFERING messages. This value
+ * always uses a 0..100 range (since it is a percentage).
+ *
+ * To avoid future confusions, whenever "buffering level" is mentioned, it
+ * refers to the absolute level which is in the 0..MAX_BUFFERING_LEVEL
+ * range. Whenever "buffering_percent" is mentioned, it refers to the
+ * percentage value that is relative to the low/high watermark. */
+
+/* Using a buffering level range of 0..1000000 to allow for a
+ * resolution in ppm (1 ppm = 0.0001%) */
+#define MAX_BUFFERING_LEVEL 1000000
+
+/* How much 1% makes up in the buffer level range */
+#define BUF_LEVEL_PERCENT_FACTOR ((MAX_BUFFERING_LEVEL) / 100)
+
 #define GST_QUEUE2_CLEAR_LEVEL(l) G_STMT_START {         \
   l.buffers = 0;                                        \
   l.bytes = 0;                                          \
@@ -354,13 +384,25 @@
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
   g_object_class_install_property (gobject_class, PROP_LOW_PERCENT,
       g_param_spec_int ("low-percent", "Low percent",
-          "Low threshold for buffering to start. Only used if use-buffering is True",
-          0, 100, DEFAULT_LOW_PERCENT,
+          "Low threshold for buffering to start. Only used if use-buffering is True "
+          "(Deprecated: use low-watermark instead)",
+          0, 100, DEFAULT_LOW_WATERMARK * 100,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
   g_object_class_install_property (gobject_class, PROP_HIGH_PERCENT,
       g_param_spec_int ("high-percent", "High percent",
+          "High threshold for buffering to finish. Only used if use-buffering is True "
+          "(Deprecated: use high-watermark instead)",
+          0, 100, DEFAULT_HIGH_WATERMARK * 100,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_LOW_WATERMARK,
+      g_param_spec_double ("low-watermark", "Low watermark",
+          "Low threshold for buffering to start. Only used if use-buffering is True",
+          0.0, 1.0, DEFAULT_LOW_WATERMARK,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_HIGH_WATERMARK,
+      g_param_spec_double ("high-watermark", "High watermark",
           "High threshold for buffering to finish. Only used if use-buffering is True",
-          0, 100, DEFAULT_HIGH_PERCENT,
+          0.0, 1.0, DEFAULT_HIGH_WATERMARK,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
   g_object_class_install_property (gobject_class, PROP_TEMP_TEMPLATE,
@@ -463,8 +505,8 @@
   queue->max_level.rate_time = DEFAULT_MAX_SIZE_TIME;
   queue->use_buffering = DEFAULT_USE_BUFFERING;
   queue->use_rate_estimate = DEFAULT_USE_RATE_ESTIMATE;
-  queue->low_percent = DEFAULT_LOW_PERCENT;
-  queue->high_percent = DEFAULT_HIGH_PERCENT;
+  queue->low_watermark = DEFAULT_LOW_WATERMARK * MAX_BUFFERING_LEVEL;
+  queue->high_watermark = DEFAULT_HIGH_WATERMARK * MAX_BUFFERING_LEVEL;
 
   gst_segment_init (&queue->sink_segment, GST_FORMAT_TIME);
   gst_segment_init (&queue->src_segment, GST_FORMAT_TIME);
@@ -882,7 +924,8 @@
 }
 
 static inline gint
-get_percent (guint64 cur_level, guint64 max_level, guint64 alt_max)
+normalize_to_buffering_level (guint64 cur_level, guint64 max_level,
+    guint64 alt_max)
 {
   guint64 p;
 
@@ -890,33 +933,34 @@
     return 0;
 
   if (alt_max > 0)
-    p = gst_util_uint64_scale (cur_level, 100, MIN (max_level, alt_max));
+    p = gst_util_uint64_scale (cur_level, MAX_BUFFERING_LEVEL,
+        MIN (max_level, alt_max));
   else
-    p = gst_util_uint64_scale (cur_level, 100, max_level);
+    p = gst_util_uint64_scale (cur_level, MAX_BUFFERING_LEVEL, max_level);
 
-  return MIN (p, 100);
+  return MIN (p, MAX_BUFFERING_LEVEL);
 }
 
 static gboolean
-get_buffering_percent (GstQueue2 * queue, gboolean * is_buffering,
-    gint * percent)
+get_buffering_level (GstQueue2 * queue, gboolean * is_buffering,
+    gint * buffering_level)
 {
-  gint perc, perc2;
+  gint buflevel, buflevel2;
 
-  if (queue->high_percent <= 0) {
-    if (percent)
-      *percent = 100;
+  if (queue->high_watermark <= 0) {
+    if (buffering_level)
+      *buffering_level = MAX_BUFFERING_LEVEL;
     if (is_buffering)
       *is_buffering = FALSE;
     return FALSE;
   }
-#define GET_PERCENT(format,alt_max) \
-    get_percent(queue->cur_level.format,queue->max_level.format,(alt_max))
+#define GET_BUFFER_LEVEL_FOR_QUANTITY(format,alt_max) \
+    normalize_to_buffering_level (queue->cur_level.format,queue->max_level.format,(alt_max))
 
   if (queue->is_eos) {
     /* on EOS we are always 100% full, we set the var here so that it we can
      * reuse the logic below to stop buffering */
-    perc = 100;
+    buflevel = MAX_BUFFERING_LEVEL;
     GST_LOG_OBJECT (queue, "we are EOS");
   } else {
     GST_LOG_OBJECT (queue,
@@ -924,50 +968,59 @@
         queue->cur_level.bytes, GST_TIME_ARGS (queue->cur_level.time),
         queue->cur_level.buffers);
 
-    /* figure out the percent we are filled, we take the max of all formats. */
+    /* figure out the buffering level we are filled, we take the max of all formats. */
     if (!QUEUE_IS_USING_RING_BUFFER (queue)) {
-      perc = GET_PERCENT (bytes, 0);
+      buflevel = GET_BUFFER_LEVEL_FOR_QUANTITY (bytes, 0);
     } else {
       guint64 rb_size = queue->ring_buffer_max_size;
-      perc = GET_PERCENT (bytes, rb_size);
+      buflevel = GET_BUFFER_LEVEL_FOR_QUANTITY (bytes, rb_size);
     }
 
-    perc2 = GET_PERCENT (time, 0);
-    perc = MAX (perc, perc2);
+    buflevel2 = GET_BUFFER_LEVEL_FOR_QUANTITY (time, 0);
+    buflevel = MAX (buflevel, buflevel2);
 
-    perc2 = GET_PERCENT (buffers, 0);
-    perc = MAX (perc, perc2);
+    buflevel2 = GET_BUFFER_LEVEL_FOR_QUANTITY (buffers, 0);
+    buflevel = MAX (buflevel, buflevel2);
 
     /* also apply the rate estimate when we need to */
     if (queue->use_rate_estimate) {
-      perc2 = GET_PERCENT (rate_time, 0);
-      perc = MAX (perc, perc2);
+      buflevel2 = GET_BUFFER_LEVEL_FOR_QUANTITY (rate_time, 0);
+      buflevel = MAX (buflevel, buflevel2);
     }
 
     /* Don't get to 0% unless we're really empty */
     if (queue->cur_level.bytes > 0)
-      perc = MAX (1, perc);
+      buflevel = MAX (1, buflevel);
   }
-#undef GET_PERCENT
+#undef GET_BUFFER_LEVEL_FOR_QUANTITY
 
   if (is_buffering)
     *is_buffering = queue->is_buffering;
 
-  /* scale to high percent so that it becomes the 100% mark */
-  perc = perc * 100 / queue->high_percent;
-  /* clip */
-  if (perc > 100)
-    perc = 100;
+  if (buffering_level)
+    *buffering_level = buflevel;
 
-  if (percent)
-    *percent = perc;
-
-  GST_DEBUG_OBJECT (queue, "buffering %d, percent %d", queue->is_buffering,
-      perc);
+  GST_DEBUG_OBJECT (queue, "buffering %d, level %d", queue->is_buffering,
+      buflevel);
 
   return TRUE;
 }
 
+static gint
+convert_to_buffering_percent (GstQueue2 * queue, gint buffering_level)
+{
+  int percent;
+
+  /* scale so that if buffering_level equals the high watermark,
+   * the percentage is 100% */
+  percent = buffering_level * 100 / queue->high_watermark;
+  /* clip */
+  if (percent > 100)
+    percent = 100;
+
+  return percent;
+}
+
 static void
 get_buffering_stats (GstQueue2 * queue, gint percent, GstBufferingMode * mode,
     gint * avg_in, gint * avg_out, gint64 * buffering_left)
@@ -1043,16 +1096,18 @@
 static void
 update_buffering (GstQueue2 * queue)
 {
-  gint percent;
+  gint buffering_level, percent;
 
   /* Ensure the variables used to calculate buffering state are up-to-date. */
   if (queue->current)
     update_cur_level (queue, queue->current);
   update_in_rates (queue, FALSE);
 
-  if (!get_buffering_percent (queue, NULL, &percent))
+  if (!get_buffering_level (queue, NULL, &buffering_level))
     return;
 
+  percent = convert_to_buffering_percent (queue, buffering_level);
+
   if (queue->is_buffering) {
     /* if we were buffering see if we reached the high watermark */
     if (percent >= 100)
@@ -1062,7 +1117,7 @@
   } else {
     /* we were not buffering, check if we need to start buffering if we drop
      * below the low threshold */
-    if (percent < queue->low_percent) {
+    if (buffering_level < queue->low_watermark) {
       queue->is_buffering = TRUE;
       SET_PERCENT (queue, percent);
     }
@@ -2512,10 +2567,7 @@
           } else if (GST_EVENT_TYPE (event) == GST_EVENT_EOS) {
             if (queue->srcresult == GST_FLOW_NOT_LINKED
                 || queue->srcresult < GST_FLOW_EOS) {
-              GST_ELEMENT_ERROR (queue, STREAM, FAILED,
-                  (_("Internal data flow error.")),
-                  ("streaming task paused, reason %s (%d)",
-                      gst_flow_get_name (queue->srcresult), queue->srcresult));
+              GST_ELEMENT_FLOW_ERROR (queue, queue->srcresult);
             }
             goto out_flow_error;
           }
@@ -3004,10 +3056,7 @@
     /* let app know about us giving up if upstream is not expected to do so */
     /* EOS is already taken care of elsewhere */
     if (eos && (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_EOS)) {
-      GST_ELEMENT_ERROR (queue, STREAM, FAILED,
-          (_("Internal data flow error.")),
-          ("streaming task paused, reason %s (%d)",
-              gst_flow_get_name (ret), ret));
+      GST_ELEMENT_FLOW_ERROR (queue, ret);
       gst_pad_push_event (queue->srcpad, gst_event_new_eos ());
     }
     return;
@@ -3137,7 +3186,8 @@
 
       GST_DEBUG_OBJECT (queue, "query buffering");
 
-      get_buffering_percent (queue, &is_buffering, &percent);
+      get_buffering_level (queue, &is_buffering, &percent);
+      percent = convert_to_buffering_percent (queue, percent);
       gst_query_set_buffering_percent (query, is_buffering, percent);
 
       get_buffering_stats (queue, percent, &mode, &avg_in, &avg_out,
@@ -3695,10 +3745,25 @@
       queue->use_rate_estimate = g_value_get_boolean (value);
       break;
     case PROP_LOW_PERCENT:
-      queue->low_percent = g_value_get_int (value);
+      queue->low_watermark = g_value_get_int (value) * BUF_LEVEL_PERCENT_FACTOR;
+      if (queue->is_buffering)
+        update_buffering (queue);
       break;
     case PROP_HIGH_PERCENT:
-      queue->high_percent = g_value_get_int (value);
+      queue->high_watermark =
+          g_value_get_int (value) * BUF_LEVEL_PERCENT_FACTOR;
+      if (queue->is_buffering)
+        update_buffering (queue);
+      break;
+    case PROP_LOW_WATERMARK:
+      queue->low_watermark = g_value_get_double (value) * MAX_BUFFERING_LEVEL;
+      if (queue->is_buffering)
+        update_buffering (queue);
+      break;
+    case PROP_HIGH_WATERMARK:
+      queue->high_watermark = g_value_get_double (value) * MAX_BUFFERING_LEVEL;
+      if (queue->is_buffering)
+        update_buffering (queue);
       break;
     case PROP_TEMP_TEMPLATE:
       gst_queue2_set_temp_template (queue, g_value_get_string (value));
@@ -3755,10 +3820,18 @@
       g_value_set_boolean (value, queue->use_rate_estimate);
       break;
     case PROP_LOW_PERCENT:
-      g_value_set_int (value, queue->low_percent);
+      g_value_set_int (value, queue->low_watermark / BUF_LEVEL_PERCENT_FACTOR);
       break;
     case PROP_HIGH_PERCENT:
-      g_value_set_int (value, queue->high_percent);
+      g_value_set_int (value, queue->high_watermark / BUF_LEVEL_PERCENT_FACTOR);
+      break;
+    case PROP_LOW_WATERMARK:
+      g_value_set_double (value, queue->low_watermark /
+          (gdouble) MAX_BUFFERING_LEVEL);
+      break;
+    case PROP_HIGH_WATERMARK:
+      g_value_set_double (value, queue->high_watermark /
+          (gdouble) MAX_BUFFERING_LEVEL);
       break;
     case PROP_TEMP_TEMPLATE:
       g_value_set_string (value, queue->temp_template);
diff --git a/plugins/elements/gstqueue2.h b/plugins/elements/gstqueue2.h
index 670953f..a1b94a7 100644
--- a/plugins/elements/gstqueue2.h
+++ b/plugins/elements/gstqueue2.h
@@ -109,8 +109,10 @@
   gboolean use_tags_bitrate;
   gboolean use_rate_estimate;
   GstClockTime buffering_interval;
-  gint low_percent;             /* low/high watermarks for buffering */
-  gint high_percent;
+
+  /* low/high watermarks for buffering */
+  gint low_watermark;
+  gint high_watermark;
 
   /* current buffering state */
   gboolean is_buffering;
diff --git a/plugins/elements/gsttypefindelement.c b/plugins/elements/gsttypefindelement.c
index 453ff75..0740972 100644
--- a/plugins/elements/gsttypefindelement.c
+++ b/plugins/elements/gsttypefindelement.c
@@ -1216,8 +1216,7 @@
       }
     } else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_EOS) {
       /* for fatal errors we post an error message */
-      GST_ELEMENT_ERROR (typefind, STREAM, FAILED, (NULL),
-          ("stream stopped, reason %s", reason));
+      GST_ELEMENT_FLOW_ERROR (typefind, ret);
       push_eos = TRUE;
     }
     if (push_eos) {
diff --git a/plugins/tracers/Makefile.am b/plugins/tracers/Makefile.am
index f6efee6..9114447 100644
--- a/plugins/tracers/Makefile.am
+++ b/plugins/tracers/Makefile.am
@@ -18,21 +18,24 @@
 libgstcoretracers_la_DEPENDENCIES = $(top_builddir)/gst/libgstreamer-@GST_API_VERSION@.la
 libgstcoretracers_la_SOURCES = \
   gstlatency.c \
+  gstleaks.c \
   $(LOG_SOURCES) \
   $(RUSAGE_SOURCES) \
   gststats.c \
-	gsttracers.c
+  gsttracers.c
 
 libgstcoretracers_la_CFLAGS = $(GST_OBJ_CFLAGS) \
   -DGST_USE_UNSTABLE_API
 libgstcoretracers_la_LIBADD = \
 	$(GST_PRINTF_LA) \
-	$(GST_OBJ_LIBS)
+	$(GST_OBJ_LIBS) \
+	$(UNWIND_LIBS)
 libgstcoretracers_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstcoretracers_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 
 noinst_HEADERS = \
   gstlatency.h \
+  gstleaks.h \
   gstlog.h \
   gstrusage.h \
   gststats.h
diff --git a/plugins/tracers/Makefile.in b/plugins/tracers/Makefile.in
index 3efb20a..90fcab9 100644
--- a/plugins/tracers/Makefile.in
+++ b/plugins/tracers/Makefile.in
@@ -167,15 +167,15 @@
 LTLIBRARIES = $(plugin_LTLIBRARIES)
 @GST_DISABLE_GST_DEBUG_FALSE@am__DEPENDENCIES_1 = $(top_builddir)/gst/printf/libgstprintf.la
 am__DEPENDENCIES_2 =
-am__libgstcoretracers_la_SOURCES_DIST = gstlatency.c gstlog.c \
-	gstrusage.c gststats.c gsttracers.c
+am__libgstcoretracers_la_SOURCES_DIST = gstlatency.c gstleaks.c \
+	gstlog.c gstrusage.c gststats.c gsttracers.c
 @GST_DISABLE_GST_DEBUG_FALSE@am__objects_1 =  \
 @GST_DISABLE_GST_DEBUG_FALSE@	libgstcoretracers_la-gstlog.lo
 @HAVE_GETRUSAGE_TRUE@am__objects_2 =  \
 @HAVE_GETRUSAGE_TRUE@	libgstcoretracers_la-gstrusage.lo
 am_libgstcoretracers_la_OBJECTS = libgstcoretracers_la-gstlatency.lo \
-	$(am__objects_1) $(am__objects_2) \
-	libgstcoretracers_la-gststats.lo \
+	libgstcoretracers_la-gstleaks.lo $(am__objects_1) \
+	$(am__objects_2) libgstcoretracers_la-gststats.lo \
 	libgstcoretracers_la-gsttracers.lo
 libgstcoretracers_la_OBJECTS = $(am_libgstcoretracers_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
@@ -322,6 +322,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -329,17 +330,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -464,6 +462,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
@@ -551,22 +551,25 @@
 libgstcoretracers_la_DEPENDENCIES = $(top_builddir)/gst/libgstreamer-@GST_API_VERSION@.la
 libgstcoretracers_la_SOURCES = \
   gstlatency.c \
+  gstleaks.c \
   $(LOG_SOURCES) \
   $(RUSAGE_SOURCES) \
   gststats.c \
-	gsttracers.c
+  gsttracers.c
 
 libgstcoretracers_la_CFLAGS = $(GST_OBJ_CFLAGS) \
   -DGST_USE_UNSTABLE_API
 
 libgstcoretracers_la_LIBADD = \
 	$(GST_PRINTF_LA) \
-	$(GST_OBJ_LIBS)
+	$(GST_OBJ_LIBS) \
+	$(UNWIND_LIBS)
 
 libgstcoretracers_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstcoretracers_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 noinst_HEADERS = \
   gstlatency.h \
+  gstleaks.h \
   gstlog.h \
   gstrusage.h \
   gststats.h
@@ -651,6 +654,7 @@
 	-rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcoretracers_la-gstlatency.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcoretracers_la-gstleaks.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcoretracers_la-gstlog.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcoretracers_la-gstrusage.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcoretracers_la-gststats.Plo@am__quote@
@@ -687,6 +691,13 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstcoretracers_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcoretracers_la_CFLAGS) $(CFLAGS) -c -o libgstcoretracers_la-gstlatency.lo `test -f 'gstlatency.c' || echo '$(srcdir)/'`gstlatency.c
 
+libgstcoretracers_la-gstleaks.lo: gstleaks.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstcoretracers_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcoretracers_la_CFLAGS) $(CFLAGS) -MT libgstcoretracers_la-gstleaks.lo -MD -MP -MF $(DEPDIR)/libgstcoretracers_la-gstleaks.Tpo -c -o libgstcoretracers_la-gstleaks.lo `test -f 'gstleaks.c' || echo '$(srcdir)/'`gstleaks.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstcoretracers_la-gstleaks.Tpo $(DEPDIR)/libgstcoretracers_la-gstleaks.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstleaks.c' object='libgstcoretracers_la-gstleaks.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstcoretracers_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcoretracers_la_CFLAGS) $(CFLAGS) -c -o libgstcoretracers_la-gstleaks.lo `test -f 'gstleaks.c' || echo '$(srcdir)/'`gstleaks.c
+
 libgstcoretracers_la-gstlog.lo: gstlog.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstcoretracers_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcoretracers_la_CFLAGS) $(CFLAGS) -MT libgstcoretracers_la-gstlog.lo -MD -MP -MF $(DEPDIR)/libgstcoretracers_la-gstlog.Tpo -c -o libgstcoretracers_la-gstlog.lo `test -f 'gstlog.c' || echo '$(srcdir)/'`gstlog.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstcoretracers_la-gstlog.Tpo $(DEPDIR)/libgstcoretracers_la-gstlog.Plo
diff --git a/plugins/tracers/gstleaks.c b/plugins/tracers/gstleaks.c
new file mode 100644
index 0000000..fe9c295
--- /dev/null
+++ b/plugins/tracers/gstleaks.c
@@ -0,0 +1,657 @@
+/* GStreamer
+ * Copyright (C) 2016 Collabora Ltd. <guillaume.desmottes@collabora.co.uk>
+ *
+ * gstleaks.c: tracing module detecting object leaks
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+/**
+ * SECTION:gstleaks
+ * @short_description: detect GstObject and GstMiniObject leaks
+ *
+ * A tracing module tracking the lifetime of objects by logging those still
+ * alive when program is exiting and raising a warning.
+ * The type of objects tracked can be filtered using the parameters of the
+ * tracer, for example: GST_TRACERS="leaks(GstEvent,GstMessage)"
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#ifdef HAVE_UNWIND
+/* No need for remote debugging so turn on the 'local only' optimizations in
+ * libunwind */
+#define UNW_LOCAL_ONLY
+#include <libunwind.h>
+#endif /* HAVE_UNWIND */
+
+#ifdef HAVE_BACKTRACE
+#include <execinfo.h>
+#endif /* HAVE_BACKTRACE */
+
+#include "gstleaks.h"
+
+#ifdef G_OS_UNIX
+#include <signal.h>
+#endif /* G_OS_UNIX */
+
+GST_DEBUG_CATEGORY_STATIC (gst_leaks_debug);
+#define GST_CAT_DEFAULT gst_leaks_debug
+
+#define _do_init \
+    GST_DEBUG_CATEGORY_INIT (gst_leaks_debug, "leaks", 0, "leaks tracer");
+#define gst_leaks_tracer_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstLeaksTracer, gst_leaks_tracer,
+    GST_TYPE_TRACER, _do_init);
+
+static GstTracerRecord *tr_alive;
+#ifdef G_OS_UNIX
+static GstTracerRecord *tr_added = NULL;
+static GstTracerRecord *tr_removed = NULL;
+#endif /* G_OS_UNIX */
+static GQueue instances = G_QUEUE_INIT;
+
+static void
+set_filtering (GstLeaksTracer * self)
+{
+  gchar *params;
+  GStrv tmp;
+  guint i;
+
+  g_object_get (self, "params", &params, NULL);
+  if (!params)
+    return;
+
+  tmp = g_strsplit (params, ",", -1);
+
+  self->filter = g_array_sized_new (FALSE, FALSE, sizeof (GType),
+      g_strv_length (tmp));
+  for (i = 0; tmp[i]; i++) {
+    GType type;
+
+    type = g_type_from_name (tmp[i]);
+    if (type == 0) {
+      /* The type may not yet be known by the type system, typically because
+       * the plugin implementing it as not yet be loaded. Save it for now as
+       * it will have another chance to be added to the filter later in
+       * should_handle_object_type() when/if the object type is actually
+       * used. */
+      if (!self->unhandled_filter)
+        self->unhandled_filter = g_hash_table_new (NULL, NULL);
+
+      g_hash_table_add (self->unhandled_filter,
+          GUINT_TO_POINTER (g_quark_from_string (tmp[i])));
+      g_atomic_int_inc (&self->unhandled_filter_count);
+      continue;
+    }
+
+    GST_DEBUG_OBJECT (self, "add filter on %s", tmp[i]);
+
+    g_array_append_val (self->filter, type);
+  }
+
+  g_strfreev (tmp);
+  g_free (params);
+}
+
+static gboolean
+should_handle_object_type (GstLeaksTracer * self, GType object_type)
+{
+  guint i, len;
+
+  if (!self->filter)
+    /* No filtering, handle all types */
+    return TRUE;
+
+  if (g_atomic_int_get (&self->unhandled_filter_count)) {
+    GST_OBJECT_LOCK (self);
+    if (self->unhandled_filter) {
+      GQuark q;
+
+      q = g_type_qname (object_type);
+      if (g_hash_table_contains (self->unhandled_filter, GUINT_TO_POINTER (q))) {
+        g_array_append_val (self->filter, object_type);
+        g_hash_table_remove (self->unhandled_filter, GUINT_TO_POINTER (q));
+
+        if (g_atomic_int_dec_and_test (&self->unhandled_filter_count))
+          g_clear_pointer (&self->unhandled_filter, g_hash_table_unref);
+
+        GST_OBJECT_UNLOCK (self);
+        return TRUE;
+      }
+    }
+    GST_OBJECT_UNLOCK (self);
+  }
+
+  len = self->filter->len;
+  for (i = 0; i < len; i++) {
+    GType type = g_array_index (self->filter, GType, i);
+
+    if (g_type_is_a (object_type, type))
+      return TRUE;
+  }
+
+  return FALSE;
+}
+
+#ifdef G_OS_UNIX
+/* The object may be destroyed when we log it using the checkpointing system so
+ * we have to save its type name */
+typedef struct
+{
+  gpointer object;
+  const gchar *type_name;
+} ObjectLog;
+
+static ObjectLog *
+object_log_new (gpointer obj)
+{
+  ObjectLog *o = g_slice_new (ObjectLog);
+
+  o->object = obj;
+
+  if (G_IS_OBJECT (obj))
+    o->type_name = G_OBJECT_TYPE_NAME (obj);
+  else
+    o->type_name = g_type_name (GST_MINI_OBJECT_TYPE (obj));
+
+  return o;
+}
+
+static void
+object_log_free (ObjectLog * obj)
+{
+  g_slice_free (ObjectLog, obj);
+}
+#endif /* G_OS_UNIX */
+
+static void
+handle_object_destroyed (GstLeaksTracer * self, gpointer object)
+{
+  GST_OBJECT_LOCK (self);
+  if (self->done) {
+    g_warning
+        ("object %p destroyed while the leaks tracer was finalizing. Some threads are still running?",
+        object);
+    goto out;
+  }
+
+  g_hash_table_remove (self->objects, object);
+#ifdef G_OS_UNIX
+  if (self->removed)
+    g_hash_table_add (self->removed, object_log_new (object));
+#endif /* G_OS_UNIX */
+out:
+  GST_OBJECT_UNLOCK (self);
+}
+
+static void
+object_weak_cb (gpointer data, GObject * object)
+{
+  GstLeaksTracer *self = data;
+
+  handle_object_destroyed (self, object);
+}
+
+static void
+mini_object_weak_cb (gpointer data, GstMiniObject * object)
+{
+  GstLeaksTracer *self = data;
+
+  handle_object_destroyed (self, object);
+}
+
+#ifdef HAVE_UNWIND
+#define BT_NAME_SIZE 256
+static gchar *
+generate_unwind_trace (void)
+{
+  unw_context_t ctx;
+  unw_cursor_t cursor;
+  GString *trace;
+
+  if (unw_getcontext (&ctx))
+    return NULL;
+
+  if (unw_init_local (&cursor, &ctx))
+    return NULL;
+
+  trace = g_string_new (NULL);
+  while (unw_step (&cursor) > 0) {
+    char name[BT_NAME_SIZE];
+    unw_word_t offp;
+    int ret;
+
+    ret = unw_get_proc_name (&cursor, name, BT_NAME_SIZE, &offp);
+    /* -UNW_ENOMEM is returned if name has been truncated */
+    if (ret != 0 && ret != -UNW_ENOMEM)
+      break;
+
+    g_string_append_printf (trace, "%s\n", name);
+  }
+
+  return g_string_free (trace, FALSE);
+}
+#endif /* HAVE_UNWIND */
+
+#ifdef HAVE_BACKTRACE
+#define BT_BUF_SIZE 100
+static gchar *
+generate_backtrace_trace (void)
+{
+  int j, nptrs;
+  void *buffer[BT_BUF_SIZE];
+  char **strings;
+  GString *trace;
+
+  trace = g_string_new (NULL);
+  nptrs = backtrace (buffer, BT_BUF_SIZE);
+
+  strings = backtrace_symbols (buffer, nptrs);
+  if (!strings)
+    return NULL;
+
+  for (j = 0; j < nptrs; j++)
+    g_string_append_printf (trace, "%s\n", strings[j]);
+
+  return g_string_free (trace, FALSE);
+}
+#endif /* HAVE_BACKTRACE */
+
+static gchar *
+generate_trace (void)
+{
+  gchar *trace = NULL;
+
+#ifdef HAVE_UNWIND
+  trace = generate_unwind_trace ();
+  if (trace)
+    return trace;
+#endif /* HAVE_UNWIND */
+
+#ifdef HAVE_BACKTRACE
+  trace = generate_backtrace_trace ();
+#endif /* HAVE_BACKTRACE */
+
+  return trace;
+}
+
+static void
+handle_object_created (GstLeaksTracer * self, gpointer object, GType type,
+    gboolean gobject)
+{
+  gchar *trace = NULL;
+
+  if (!should_handle_object_type (self, type))
+    return;
+
+  if (gobject)
+    g_object_weak_ref ((GObject *) object, object_weak_cb, self);
+  else
+    gst_mini_object_weak_ref (GST_MINI_OBJECT_CAST (object),
+        mini_object_weak_cb, self);
+
+  GST_OBJECT_LOCK (self);
+  if (self->log_stack_trace) {
+    trace = generate_trace ();
+  }
+
+  g_hash_table_insert (self->objects, object, trace);
+
+#ifdef G_OS_UNIX
+  if (self->added)
+    g_hash_table_add (self->added, object_log_new (object));
+#endif /* G_OS_UNIX */
+  GST_OBJECT_UNLOCK (self);
+}
+
+static void
+mini_object_created_cb (GstTracer * tracer, GstClockTime ts,
+    GstMiniObject * object)
+{
+  GstLeaksTracer *self = GST_LEAKS_TRACER_CAST (tracer);
+
+  handle_object_created (self, object, GST_MINI_OBJECT_TYPE (object), FALSE);
+}
+
+static void
+object_created_cb (GstTracer * tracer, GstClockTime ts, GstObject * object)
+{
+  GstLeaksTracer *self = GST_LEAKS_TRACER_CAST (tracer);
+  GType object_type = G_OBJECT_TYPE (object);
+
+  /* Can't track tracers as they may be disposed after the leak tracer itself */
+  if (g_type_is_a (object_type, GST_TYPE_TRACER))
+    return;
+
+  handle_object_created (self, object, object_type, TRUE);
+}
+
+static void
+gst_leaks_tracer_init (GstLeaksTracer * self)
+{
+  self->objects = g_hash_table_new_full (NULL, NULL, NULL, g_free);
+
+  if (g_getenv ("GST_LEAKS_TRACER_STACK_TRACE")) {
+    gchar *trace;
+
+    /* Test if we can retrieve backtrace */
+    trace = generate_trace ();
+    if (trace) {
+      self->log_stack_trace = TRUE;
+      g_free (trace);
+    } else {
+      g_warning ("Can't retrieve backtrace on this system");
+    }
+  }
+
+  g_queue_push_tail (&instances, self);
+}
+
+static void
+gst_leaks_tracer_constructed (GObject * object)
+{
+  GstLeaksTracer *self = GST_LEAKS_TRACER (object);
+  GstTracer *tracer = GST_TRACER (object);
+
+  set_filtering (self);
+
+  gst_tracing_register_hook (tracer, "mini-object-created",
+      G_CALLBACK (mini_object_created_cb));
+  gst_tracing_register_hook (tracer, "object-created",
+      G_CALLBACK (object_created_cb));
+
+  /* We rely on weak pointers rather than (mini-)object-destroyed hooks so we
+   * are notified of objects being destroyed even during the shuting down of
+   * the tracing system. */
+
+  ((GObjectClass *) gst_leaks_tracer_parent_class)->constructed (object);
+}
+
+typedef struct
+{
+  gpointer obj;
+  const gchar *type_name;
+  guint ref_count;
+  gchar *desc;
+  const gchar *trace;
+} Leak;
+
+/* The content of the returned Leak struct is valid until the self->objects
+ * hash table has been modified. */
+static Leak *
+leak_new (gpointer obj, GType type, guint ref_count, const gchar * trace)
+{
+  Leak *leak = g_slice_new (Leak);
+
+  leak->obj = obj;
+  leak->type_name = g_type_name (type);
+  leak->ref_count = ref_count;
+  leak->desc = gst_info_strdup_printf ("%" GST_PTR_FORMAT, obj);
+  leak->trace = trace;
+
+  return leak;
+}
+
+static void
+leak_free (Leak * leak)
+{
+  g_free (leak->desc);
+  g_slice_free (Leak, leak);
+}
+
+static gint
+sort_leaks (gconstpointer _a, gconstpointer _b)
+{
+  const Leak *a = _a, *b = _b;
+
+  return g_strcmp0 (a->type_name, b->type_name);
+}
+
+static GList *
+create_leaks_list (GstLeaksTracer * self)
+{
+  GList *l = NULL;
+  GHashTableIter iter;
+  gpointer obj, trace;
+
+  g_hash_table_iter_init (&iter, self->objects);
+  while (g_hash_table_iter_next (&iter, &obj, &trace)) {
+    GType type;
+    guint ref_count;
+
+    if (GST_IS_OBJECT (obj)) {
+      if (GST_OBJECT_FLAG_IS_SET (obj, GST_OBJECT_FLAG_MAY_BE_LEAKED))
+        continue;
+
+      type = G_OBJECT_TYPE (obj);
+      ref_count = ((GObject *) obj)->ref_count;
+    } else {
+      if (GST_MINI_OBJECT_FLAG_IS_SET (obj, GST_MINI_OBJECT_FLAG_MAY_BE_LEAKED))
+        continue;
+
+      type = GST_MINI_OBJECT_TYPE (obj);
+      ref_count = ((GstMiniObject *) obj)->refcount;
+    }
+
+    l = g_list_prepend (l, leak_new (obj, type, ref_count, trace));
+  }
+
+  /* Sort leaks by type name so they are grouped together making the output
+   * easier to read */
+  l = g_list_sort (l, sort_leaks);
+
+  return l;
+}
+
+/* Return TRUE if at least one leaked object has been logged */
+static gboolean
+log_leaked (GstLeaksTracer * self)
+{
+  GList *leaks, *l;
+
+  leaks = create_leaks_list (self);
+  if (!leaks)
+    return FALSE;
+
+  for (l = leaks; l != NULL; l = g_list_next (l)) {
+    Leak *leak = l->data;
+
+    gst_tracer_record_log (tr_alive, leak->type_name, leak->obj, leak->desc,
+        leak->ref_count, leak->trace ? leak->trace : "");
+  }
+
+  g_list_free_full (leaks, (GDestroyNotify) leak_free);
+
+  return TRUE;
+}
+
+static void
+gst_leaks_tracer_finalize (GObject * object)
+{
+  GstLeaksTracer *self = GST_LEAKS_TRACER (object);
+  gboolean leaks;
+  GHashTableIter iter;
+  gpointer obj;
+
+  self->done = TRUE;
+
+  /* Tracers are destroyed as part of gst_deinit() so now is a good time to
+   * report all the objects which are still alive. */
+  leaks = log_leaked (self);
+
+  /* Remove weak references */
+  g_hash_table_iter_init (&iter, self->objects);
+  while (g_hash_table_iter_next (&iter, &obj, NULL)) {
+    if (GST_IS_OBJECT (obj))
+      g_object_weak_unref (obj, object_weak_cb, self);
+    else
+      gst_mini_object_weak_unref (GST_MINI_OBJECT_CAST (obj),
+          mini_object_weak_cb, self);
+  }
+
+  g_clear_pointer (&self->objects, g_hash_table_unref);
+  if (self->filter)
+    g_array_free (self->filter, TRUE);
+  g_clear_pointer (&self->added, g_hash_table_unref);
+  g_clear_pointer (&self->removed, g_hash_table_unref);
+  g_clear_pointer (&self->unhandled_filter, g_hash_table_unref);
+
+  g_queue_remove (&instances, self);
+
+  if (leaks)
+    g_warning ("Leaks detected");
+
+  ((GObjectClass *) gst_leaks_tracer_parent_class)->finalize (object);
+}
+
+#define RECORD_FIELD_TYPE_NAME \
+    "type-name", GST_TYPE_STRUCTURE, gst_structure_new ("value", \
+        "type", G_TYPE_GTYPE, G_TYPE_STRING, \
+        "related-to", GST_TYPE_TRACER_VALUE_SCOPE, GST_TRACER_VALUE_SCOPE_PROCESS, \
+        NULL)
+#define RECORD_FIELD_ADDRESS \
+    "address", GST_TYPE_STRUCTURE, gst_structure_new ("value", \
+        "type", G_TYPE_GTYPE, G_TYPE_POINTER, \
+        "related-to", GST_TYPE_TRACER_VALUE_SCOPE, \
+        GST_TRACER_VALUE_SCOPE_PROCESS, \
+        NULL)
+#define RECORD_FIELD_DESC \
+    "description", GST_TYPE_STRUCTURE, gst_structure_new ("value", \
+        "type", G_TYPE_GTYPE, G_TYPE_STRING, \
+        "related-to", GST_TYPE_TRACER_VALUE_SCOPE, GST_TRACER_VALUE_SCOPE_PROCESS, \
+        NULL)
+#define RECORD_FIELD_REF_COUNT \
+    "ref-count", GST_TYPE_STRUCTURE, gst_structure_new ("value", \
+        "type", G_TYPE_GTYPE, G_TYPE_UINT, \
+        "related-to", GST_TYPE_TRACER_VALUE_SCOPE, GST_TRACER_VALUE_SCOPE_PROCESS, \
+        NULL)
+#define RECORD_FIELD_TRACE \
+    "trace", GST_TYPE_STRUCTURE, gst_structure_new ("value", \
+        "type", G_TYPE_GTYPE, G_TYPE_STRING, \
+        "related-to", GST_TYPE_TRACER_VALUE_SCOPE, GST_TRACER_VALUE_SCOPE_PROCESS, \
+        NULL)
+
+#ifdef G_OS_UNIX
+static void
+sig_usr1_handler_foreach (gpointer data, gpointer user_data)
+{
+  GstLeaksTracer *tracer = data;
+
+  GST_OBJECT_LOCK (tracer);
+  GST_TRACE_OBJECT (tracer, "start listing currently alive objects");
+  log_leaked (tracer);
+  GST_TRACE_OBJECT (tracer, "done listing currently alive objects");
+  GST_OBJECT_UNLOCK (tracer);
+}
+
+static void
+sig_usr1_handler (G_GNUC_UNUSED int signal)
+{
+  g_queue_foreach (&instances, sig_usr1_handler_foreach, NULL);
+}
+
+static void
+log_checkpoint (GHashTable * hash, GstTracerRecord * record)
+{
+  GHashTableIter iter;
+  gpointer o;
+
+  g_hash_table_iter_init (&iter, hash);
+  while (g_hash_table_iter_next (&iter, &o, NULL)) {
+    ObjectLog *obj = o;
+
+    gst_tracer_record_log (record, obj->type_name, obj->object);
+  }
+}
+
+static void
+do_checkpoint (GstLeaksTracer * self)
+{
+  GST_TRACE_OBJECT (self, "listing objects created since last checkpoint");
+  log_checkpoint (self->added, tr_added);
+  GST_TRACE_OBJECT (self, "listing objects removed since last checkpoint");
+  log_checkpoint (self->removed, tr_removed);
+
+  g_hash_table_remove_all (self->added);
+  g_hash_table_remove_all (self->removed);
+}
+
+static void
+sig_usr2_handler_foreach (gpointer data, gpointer user_data)
+{
+  GstLeaksTracer *tracer = data;
+
+  GST_OBJECT_LOCK (tracer);
+
+  if (!tracer->added) {
+    GST_TRACE_OBJECT (tracer, "First checkpoint, start tracking objects");
+
+    tracer->added = g_hash_table_new_full (NULL, NULL,
+        (GDestroyNotify) object_log_free, NULL);
+    tracer->removed = g_hash_table_new_full (NULL, NULL,
+        (GDestroyNotify) object_log_free, NULL);
+  } else {
+    do_checkpoint (tracer);
+  }
+
+  GST_OBJECT_UNLOCK (tracer);
+}
+
+static void
+sig_usr2_handler (G_GNUC_UNUSED int signal)
+{
+  g_queue_foreach (&instances, sig_usr2_handler_foreach, NULL);
+}
+
+static void
+setup_signals (void)
+{
+  tr_added = gst_tracer_record_new ("object-added.class",
+      RECORD_FIELD_TYPE_NAME, RECORD_FIELD_ADDRESS, NULL);
+  GST_OBJECT_FLAG_SET (tr_added, GST_OBJECT_FLAG_MAY_BE_LEAKED);
+
+  tr_removed = gst_tracer_record_new ("object-removed.class",
+      RECORD_FIELD_TYPE_NAME, RECORD_FIELD_ADDRESS, NULL);
+  GST_OBJECT_FLAG_SET (tr_removed, GST_OBJECT_FLAG_MAY_BE_LEAKED);
+
+  signal (SIGUSR1, sig_usr1_handler);
+  signal (SIGUSR2, sig_usr2_handler);
+}
+#endif /* G_OS_UNIX */
+
+static void
+gst_leaks_tracer_class_init (GstLeaksTracerClass * klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+  gobject_class->constructed = gst_leaks_tracer_constructed;
+  gobject_class->finalize = gst_leaks_tracer_finalize;
+
+  tr_alive = gst_tracer_record_new ("object-alive.class",
+      RECORD_FIELD_TYPE_NAME, RECORD_FIELD_ADDRESS, RECORD_FIELD_DESC,
+      RECORD_FIELD_REF_COUNT, RECORD_FIELD_TRACE, NULL);
+  GST_OBJECT_FLAG_SET (tr_alive, GST_OBJECT_FLAG_MAY_BE_LEAKED);
+
+  if (g_getenv ("GST_LEAKS_TRACER_SIG")) {
+#ifdef G_OS_UNIX
+    setup_signals ();
+#else
+    g_warning ("System doesn't support POSIX signals");
+#endif /* G_OS_UNIX */
+  }
+}
diff --git a/plugins/tracers/gstleaks.h b/plugins/tracers/gstleaks.h
new file mode 100644
index 0000000..6dd3def
--- /dev/null
+++ b/plugins/tracers/gstleaks.h
@@ -0,0 +1,82 @@
+/* GStreamer
+ * Copyright (C) 2016 Collabora Ltd. <guillaume.desmottes@collabora.co.uk>
+ *
+ * gstleaks.c: tracing module detecting object leaks
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_LEAKS_TRACER_H__
+#define __GST_LEAKS_TRACER_H__
+
+#include <gst/gst.h>
+#include <gst/gsttracer.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_LEAKS_TRACER \
+  (gst_leaks_tracer_get_type())
+#define GST_LEAKS_TRACER(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_LEAKS_TRACER,GstLeaksTracer))
+#define GST_LEAKS_TRACER_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_LEAKS_TRACER,GstLeaksTracerClass))
+#define GST_IS_LEAKS_TRACER(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_LEAKS_TRACER))
+#define GST_IS_LEAKS_TRACER_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_LEAKS_TRACER))
+#define GST_LEAKS_TRACER_CAST(obj) ((GstLeaksTracer *)(obj))
+
+typedef struct _GstLeaksTracer GstLeaksTracer;
+typedef struct _GstLeaksTracerClass GstLeaksTracerClass;
+
+/**
+ * GstLeaksTracer:
+ *
+ * Opaque #GstLeaksTracer data structure
+ */
+struct _GstLeaksTracer {
+  GstTracer parent;
+
+  /*< private >*/
+  /* gpointer (object currently alive) -> gchar * (its creation trace, or
+   * NULL). Protected by object lock */
+  GHashTable *objects;
+  /* array of GType used as filtering */
+  GArray *filter;
+  /* Set of owned ObjectLog.  Protected by object lock */
+  GHashTable *added;
+  /* Set of owned ObjectLog.  Protected by object lock */
+  GHashTable *removed;
+  /* If not NULL, contain a set of GQuark representing type filter not
+   * (yet?) known by the type system.
+   * Protected by object lock. */
+  GHashTable *unhandled_filter;
+  /* The number of elements in unhandled_filter */
+  gint unhandled_filter_count;
+  gboolean done;
+
+  gboolean log_stack_trace;
+};
+
+struct _GstLeaksTracerClass {
+  GstTracerClass parent_class;
+};
+
+G_GNUC_INTERNAL GType gst_leaks_tracer_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_LEAKS_TRACER_H__ */
diff --git a/plugins/tracers/gstrusage.c b/plugins/tracers/gstrusage.c
index c4110ec..9df6b69 100644
--- a/plugins/tracers/gstrusage.c
+++ b/plugins/tracers/gstrusage.c
@@ -85,7 +85,8 @@
 static void
 free_trace_values (GstTraceValues * self)
 {
-  g_queue_free_full (&self->values, free_trace_value);
+  g_queue_foreach (&self->values, (GFunc) free_trace_value, NULL);
+  g_queue_clear (&self->values);
   g_slice_free (GstTraceValues, self);
 }
 
diff --git a/plugins/tracers/gsttracers.c b/plugins/tracers/gsttracers.c
index 010c185..b03e25a 100644
--- a/plugins/tracers/gsttracers.c
+++ b/plugins/tracers/gsttracers.c
@@ -28,6 +28,7 @@
 #include "gstlog.h"
 #include "gstrusage.h"
 #include "gststats.h"
+#include "gstleaks.h"
 
 static gboolean
 plugin_init (GstPlugin * plugin)
@@ -44,6 +45,8 @@
 #endif
   if (!gst_tracer_register (plugin, "stats", gst_stats_tracer_get_type ()))
     return FALSE;
+  if (!gst_tracer_register (plugin, "leaks", gst_leaks_tracer_get_type ()))
+    return FALSE;
   return TRUE;
 }
 
diff --git a/po/POTFILES.in b/po/POTFILES.in
index ef532c7..fe3d9c6 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -7,7 +7,6 @@
 gst/gstpipeline.c
 gst/gstregistry.c
 gst/gsttaglist.c
-gst/gsttrace.c
 gst/gsturi.c
 gst/gstutils.c
 gst/parse/grammar.y
diff --git a/po/af.gmo b/po/af.gmo
index 319746e..5dd4c26 100644
--- a/po/af.gmo
+++ b/po/af.gmo
Binary files differ
diff --git a/po/af.po b/po/af.po
index 042c686..491b313 100644
--- a/po/af.po
+++ b/po/af.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.9.7\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2005-12-05 11:45+0200\n"
 "Last-Translator: Petri Jooste <rkwjpj@puk.ac.za>\n"
 "Language-Team: Afrikaans <i18n@af.org.za>\n"
@@ -932,10 +932,6 @@
 msgid "Internal data flow problem."
 msgstr "Interne datavloeiprobleem."
 
-#, fuzzy
-msgid "Internal data stream error."
-msgstr "Interne datavloeifout."
-
 msgid "Internal data flow error."
 msgstr "Interne datavloeifout."
 
@@ -1329,6 +1325,10 @@
 msgid "Freeing pipeline ...\n"
 msgstr "Pyplyn word gestel na NULL ...\n"
 
+#, fuzzy
+#~ msgid "Internal data stream error."
+#~ msgstr "Interne datavloeifout."
+
 #~ msgid "Do not output status information of TYPE"
 #~ msgstr "Moenie statusinligting van TIPE wys nie"
 
diff --git a/po/az.gmo b/po/az.gmo
index 168c14d..69033ad 100644
--- a/po/az.gmo
+++ b/po/az.gmo
Binary files differ
diff --git a/po/az.po b/po/az.po
index 02c00b2..e4df89d 100644
--- a/po/az.po
+++ b/po/az.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer-0.8.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2004-03-19 18:40+0200\n"
 "Last-Translator: Metin Amiroff <metin@karegen.com>\n"
 "Language-Team: Azerbaijani <translation-team-az@lists.sourceforge.net>\n"
@@ -883,9 +883,6 @@
 msgid "Internal data flow problem."
 msgstr ""
 
-msgid "Internal data stream error."
-msgstr ""
-
 msgid "Internal data flow error."
 msgstr ""
 
diff --git a/po/be.gmo b/po/be.gmo
index b964f54..0b2ad0e 100644
--- a/po/be.gmo
+++ b/po/be.gmo
Binary files differ
diff --git a/po/be.po b/po/be.po
index feeecbe..d158391 100644
--- a/po/be.po
+++ b/po/be.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.9.7\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2006-01-18 22:26+0200\n"
 "Last-Translator: Ales Nyakhaychyk <nab@mail.by>\n"
 "Language-Team: Belarusian <i18n@mova.org>\n"
@@ -891,9 +891,6 @@
 msgid "Internal data flow problem."
 msgstr ""
 
-msgid "Internal data stream error."
-msgstr ""
-
 msgid "Internal data flow error."
 msgstr ""
 
diff --git a/po/bg.gmo b/po/bg.gmo
index b3ba84b..3d6c9db 100644
--- a/po/bg.gmo
+++ b/po/bg.gmo
Binary files differ
diff --git a/po/bg.po b/po/bg.po
index 9b818dd..f0dc544 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -10,7 +10,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2016-02-21 21:02+0200\n"
 "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
 "Language-Team: Bulgarian <dict@ludost.net>\n"
@@ -922,9 +922,6 @@
 msgid "Internal data flow problem."
 msgstr "Вътрешен проблем на потока от данни."
 
-msgid "Internal data stream error."
-msgstr "Вътрешна грешка на потока от данни."
-
 msgid "Internal data flow error."
 msgstr "Вътрешна грешка на потока от данни."
 
@@ -1324,3 +1321,6 @@
 
 msgid "Freeing pipeline ...\n"
 msgstr "Конвейерът се освобождава…\n"
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Вътрешна грешка на потока от данни."
diff --git a/po/ca.gmo b/po/ca.gmo
index 2ec1a7a..e84458f 100644
--- a/po/ca.gmo
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
index dcf1957..c1bfd6a 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.30.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2010-11-04 19:41+0100\n"
 "Last-Translator: Jordi Mallach <jordi@sindominio.net>\n"
 "Language-Team: Catalan <ca@dodds.net>\n"
@@ -933,9 +933,6 @@
 msgid "Internal data flow problem."
 msgstr "Hi ha un problema intern de flux de dades."
 
-msgid "Internal data stream error."
-msgstr "S'ha produït un error intern de flux de dades."
-
 msgid "Internal data flow error."
 msgstr "S'ha produït un error intern de flux de dades."
 
@@ -1340,6 +1337,9 @@
 msgid "Freeing pipeline ...\n"
 msgstr "S'està alliberant el conducte…\n"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "S'ha produït un error intern de flux de dades."
+
 #~ msgid "Do not output status information of TYPE"
 #~ msgstr "No mostres informació d'estat de TIPUS"
 
diff --git a/po/cs.gmo b/po/cs.gmo
index 23d89c7..8bbd2d2 100644
--- a/po/cs.gmo
+++ b/po/cs.gmo
Binary files differ
diff --git a/po/cs.po b/po/cs.po
index 155664a..ad4d531 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.7.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2016-03-03 15:31+0100\n"
 "Last-Translator: Marek Černocký <marek@manet.cz>\n"
 "Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
@@ -922,9 +922,6 @@
 msgid "Internal data flow problem."
 msgstr "Interní problém toku dat."
 
-msgid "Internal data stream error."
-msgstr "Interní chyba proudu dat."
-
 msgid "Internal data flow error."
 msgstr "Interní chyba toku dat."
 
@@ -1334,3 +1331,6 @@
 
 msgid "Freeing pipeline ...\n"
 msgstr "Uvolňuje se roura…\n"
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Interní chyba proudu dat."
diff --git a/po/da.gmo b/po/da.gmo
index 2658f67..bf02d2f 100644
--- a/po/da.gmo
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
index f56e6c0..58170d1 100644
--- a/po/da.po
+++ b/po/da.po
@@ -4,12 +4,14 @@
 # Mogens Jaeger <mogensjaeger@gmail.com>, 2007, 2010, 2013, 2014.
 # Joe Hansen <joedalton2@yahoo.dk>, 2015, 2016.
 #
+# conductor -> dirigent (https://lists.freedesktop.org/archives/gstreamer-commits/2016-February/092542.html)
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer 1.7.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
-"PO-Revision-Date: 2016-03-27 13:26+0200\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
+"PO-Revision-Date: 2016-06-25 13:26+0200\n"
 "Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
 "Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
 "Language: da\n"
@@ -455,10 +457,14 @@
 msgstr "person(er) der komponerede optagelsen"
 
 msgid "conductor"
-msgstr "konduktør"
+msgstr "dirigent"
 
+# Jeg tror "refinement" refererer til at de skelner bedre mellem hvem
+# der dirigerer og opfører.  F.eks. står der oftest navne på dirigent
+# samt solister i koncerter, og/eller de vigtigste sangere (opera osv.)
+# Måske man kan erstatte det med -angivelse eller noget andet indirekte.  Ideer?
 msgid "conductor/performer refinement"
-msgstr "konduktør/optrædende-raffinement"
+msgstr "dirigent/opfører-angivelse"
 
 msgid "duration"
 msgstr "varighed"
@@ -857,7 +863,7 @@
 
 #, c-format
 msgid "link has no sink [source=%s@%p]"
-msgstr "Henvisningen har ingen datakanal [kilde=%s@%p]"
+msgstr "Henvisningen har ingen destination [kilde=%s@%p]"
 
 #, c-format
 msgid "no property \"%s\" in element \"%s\""
@@ -921,17 +927,17 @@
 msgid "Internal data flow problem."
 msgstr "Intern datastrømsproblem."
 
-msgid "Internal data stream error."
-msgstr "Intern datastrømsfejl."
-
 msgid "Internal data flow error."
 msgstr "Intern datastrømsfejl."
 
 msgid "Internal clock error."
 msgstr "Fejl i internt ur."
 
+# Ingen idé om hvad de mener med map her, men "behandling" eller
+# muligvis kortlægge kunne også dække.  Men det kan sagtens ske at
+# oversætte virker også...
 msgid "Failed to map buffer."
-msgstr "Fejlede ved oversættelse af buffer."
+msgstr "Fejlede ved behandling af buffer."
 
 msgid "Filter caps"
 msgstr "Filterkapabilitet"
@@ -1322,3 +1328,6 @@
 
 msgid "Freeing pipeline ...\n"
 msgstr "Rørledning frigøres ...\n"
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Intern datastrømsfejl."
diff --git a/po/de.gmo b/po/de.gmo
index f5cfd85..07d4ac6 100644
--- a/po/de.gmo
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
index 6703dd0..b147825 100644
--- a/po/de.po
+++ b/po/de.po
@@ -1,4 +1,4 @@
-# German translation for gstreamer 1.7.2
+# German translation for gstreamer 1.7.90
 # Copyright (C) 2004 Free Software Foundation, Inc.
 # This file is distributed under the same license as the gstreamer package.
 #
@@ -7,18 +7,19 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gstreamer 1.7.2\n"
+"Project-Id-Version: gstreamer 1.7.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
-"PO-Revision-Date: 2016-02-22 23:41+0100\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
+"PO-Revision-Date: 2016-09-28 21:13+0200\n"
 "Last-Translator: Christian Kirbach <christian.kirbach@gmail.com>\n"
 "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
 "Language: de\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 1.8.7\n"
+"X-Generator: Poedit 1.8.9\n"
 "X-Poedit-SourceCharset: UTF-8\n"
 
 msgid "Print the GStreamer version"
@@ -473,10 +474,10 @@
 msgstr "Für die Aufnahme verantwortliche Person(en)"
 
 msgid "conductor"
-msgstr ""
+msgstr "Dirigent"
 
 msgid "conductor/performer refinement"
-msgstr ""
+msgstr "Detaillierung Dirigent/Darsteller"
 
 msgid "duration"
 msgstr "Dauer"
@@ -950,9 +951,6 @@
 msgid "Internal data flow problem."
 msgstr "Internes Problem im Datenfluss."
 
-msgid "Internal data stream error."
-msgstr "Interner Fehler im Datenstrom."
-
 msgid "Internal data flow error."
 msgstr "Interner Fehler im Datenfluss."
 
@@ -1350,6 +1348,9 @@
 msgid "Freeing pipeline ...\n"
 msgstr "Leitung wird geleert ...\n"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Interner Fehler im Datenstrom."
+
 #~ msgid "Do not output status information of TYPE"
 #~ msgstr "Zustandsinformation der Art ART nicht ausgeben"
 
diff --git a/po/el.gmo b/po/el.gmo
index 4b46c75..ea4a86c 100644
--- a/po/el.gmo
+++ b/po/el.gmo
Binary files differ
diff --git a/po/el.po b/po/el.po
index 815b9ee..8460467 100644
--- a/po/el.po
+++ b/po/el.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer-0.10.30.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2010-11-29 11:14+0200\n"
 "Last-Translator: Michael Kotsarinis <mk73628@gmail.com>\n"
 "Language-Team: Greek <team@lists.gnome.gr>\n"
@@ -945,9 +945,6 @@
 msgid "Internal data flow problem."
 msgstr "Εσωτερικό πρόβλημα ροής δεδομένων."
 
-msgid "Internal data stream error."
-msgstr "Εσωτερικό σφάλμα ροής δεδομένων."
-
 msgid "Internal data flow error."
 msgstr "Εσωτερικό σφάλμα ροής δεδομένων."
 
@@ -1344,6 +1341,9 @@
 msgid "Freeing pipeline ...\n"
 msgstr "Αποδέσμευση της διασωλήνωσης …\n"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Εσωτερικό σφάλμα ροής δεδομένων."
+
 #~ msgid "Do not output status information of TYPE"
 #~ msgstr "Να μην εξάγεται πληροφορία κατάστασης εξόδου του TYPE"
 
diff --git a/po/en_GB.gmo b/po/en_GB.gmo
index aade0e1..6426589 100644
--- a/po/en_GB.gmo
+++ b/po/en_GB.gmo
Binary files differ
diff --git a/po/en_GB.po b/po/en_GB.po
index 14b4e23..df4a338 100644
--- a/po/en_GB.po
+++ b/po/en_GB.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.8.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2004-04-26 10:36-0400\n"
 "Last-Translator: Gareth Owen <gowen72@yahoo.com>\n"
 "Language-Team: English (British) <en_gb@li.org>\n"
@@ -936,9 +936,6 @@
 msgid "Internal data flow problem."
 msgstr ""
 
-msgid "Internal data stream error."
-msgstr ""
-
 msgid "Internal data flow error."
 msgstr ""
 
diff --git a/po/eo.gmo b/po/eo.gmo
index 441eddb..5c005a3 100644
--- a/po/eo.gmo
+++ b/po/eo.gmo
Binary files differ
diff --git a/po/eo.po b/po/eo.po
index e927dc3..b4e9e1c 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.32.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2011-06-04 21:11+0100\n"
 "Last-Translator: Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>\n"
 "Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
@@ -873,9 +873,6 @@
 msgid "Internal data flow problem."
 msgstr ""
 
-msgid "Internal data stream error."
-msgstr "Interna datumflu-eraro."
-
 msgid "Internal data flow error."
 msgstr ""
 
@@ -1258,6 +1255,9 @@
 msgid "Freeing pipeline ...\n"
 msgstr ""
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Interna datumflu-eraro."
+
 #~ msgid "TYPE1,TYPE2,..."
 #~ msgstr "TIPO1,TIPO2,..."
 
diff --git a/po/es.gmo b/po/es.gmo
index c322318..e3986e9 100644
--- a/po/es.gmo
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
index e5f75d9..84e80a4 100644
--- a/po/es.po
+++ b/po/es.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.32.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2011-10-02 15:45+0200\n"
 "Last-Translator: Jorge González González <aloriel@gmail.com>\n"
 "Language-Team: Spanish <es@li.org>\n"
@@ -936,9 +936,6 @@
 msgid "Internal data flow problem."
 msgstr "Problema en el flujo de datos interno."
 
-msgid "Internal data stream error."
-msgstr "Error interno de flujo de datos."
-
 msgid "Internal data flow error."
 msgstr "Error en el flujo de datos interno."
 
@@ -1336,6 +1333,9 @@
 msgid "Freeing pipeline ...\n"
 msgstr "Liberando la tubería…\n"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Error interno de flujo de datos."
+
 #~ msgid "Do not output status information of TYPE"
 #~ msgstr "No sacar la salida de la información de estado del TIPO"
 
diff --git a/po/eu.gmo b/po/eu.gmo
index e86e257..f868667 100644
--- a/po/eu.gmo
+++ b/po/eu.gmo
Binary files differ
diff --git a/po/eu.po b/po/eu.po
index 0801350..1b2ea1c 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer-0.10.26.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2010-03-25 13:10+0100\n"
 "Last-Translator: Mikel Olasagasti Uranga <hey_neken@mundurat.net>\n"
 "Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n"
@@ -935,9 +935,6 @@
 msgid "Internal data flow problem."
 msgstr "Datu-fluxuaren barne-arazoa."
 
-msgid "Internal data stream error."
-msgstr "Datu-korrontearen barne-errorea."
-
 msgid "Internal data flow error."
 msgstr "Datu-fluxuaren barne-errorea."
 
@@ -1334,6 +1331,9 @@
 msgid "Freeing pipeline ...\n"
 msgstr "Kanalizazioa askatzen...\n"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Datu-korrontearen barne-errorea."
+
 #~ msgid "Do not output status information of TYPE"
 #~ msgstr "Ez erakutsi MOTA hauetako egoera-informazioa:"
 
diff --git a/po/fi.gmo b/po/fi.gmo
index 869ddc8..bba61ba 100644
--- a/po/fi.gmo
+++ b/po/fi.gmo
Binary files differ
diff --git a/po/fi.po b/po/fi.po
index 5b34a2e..4706b99 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -12,7 +12,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.30.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2010-11-17 23:10+0200\n"
 "Last-Translator: Tommi Vainikainen <Tommi.Vainikainen@iki.fi>\n"
 "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
@@ -931,9 +931,6 @@
 msgid "Internal data flow problem."
 msgstr "Sisäinen tiedon virtausongelma."
 
-msgid "Internal data stream error."
-msgstr "Sisäinen tietovirtavirhe."
-
 msgid "Internal data flow error."
 msgstr "Sisäinen tiedon virtausvirhe."
 
@@ -1332,6 +1329,9 @@
 msgid "Freeing pipeline ...\n"
 msgstr "Vapautetaan liukuhihna...\n"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Sisäinen tietovirtavirhe."
+
 #~ msgid "Do not output status information of TYPE"
 #~ msgstr "Älä tulosta tilatietoa TYYPPI"
 
diff --git a/po/fr.gmo b/po/fr.gmo
index 9c8a1df..0fa2d90 100644
--- a/po/fr.gmo
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
index 7d461da..8ea1e9e 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -10,7 +10,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.7.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2016-03-04 13:08+0100\n"
 "Last-Translator: Stéphane Aulery <lkppo@free.fr>\n"
 "Language-Team: French <traduc@traduc.org>\n"
@@ -930,9 +930,6 @@
 msgid "Internal data flow problem."
 msgstr "Problème interne de flux de données."
 
-msgid "Internal data stream error."
-msgstr "Erreur interne de flux de données."
-
 msgid "Internal data flow error."
 msgstr "Erreur interne de flux de données."
 
@@ -1327,3 +1324,6 @@
 
 msgid "Freeing pipeline ...\n"
 msgstr "Libération du pipeline…\n"
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Erreur interne de flux de données."
diff --git a/po/gl.gmo b/po/gl.gmo
index ba21616..9273e7b 100644
--- a/po/gl.gmo
+++ b/po/gl.gmo
Binary files differ
diff --git a/po/gl.po b/po/gl.po
index 00aae8a..374563f 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.0.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2012-12-15 03:29+0200\n"
 "Last-Translator: Fran Dieguez <frandieguez@ubuntu.com>\n"
 "Language-Team: Galician <proxecto@trasno.net>\n"
@@ -924,9 +924,6 @@
 msgid "Internal data flow problem."
 msgstr "Hai un problema no fluxo interno de datos."
 
-msgid "Internal data stream error."
-msgstr "Produciuse un erro no fluxo interno de datos."
-
 msgid "Internal data flow error."
 msgstr "Produciuse un erro no fluxo interno de datos."
 
@@ -1322,6 +1319,9 @@
 msgid "Freeing pipeline ...\n"
 msgstr "Liberando a tubería...\n"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Produciuse un erro no fluxo interno de datos."
+
 #~ msgid "Do not output status information of TYPE"
 #~ msgstr "Non sacar a saída da información de estado do TIPO"
 
diff --git a/po/gstreamer-1.0.pot b/po/gstreamer-1.0.pot
index c376dd7..28ea9ba 100644
--- a/po/gstreamer-1.0.pot
+++ b/po/gstreamer-1.0.pot
@@ -6,9 +6,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: gstreamer 1.8.3\n"
+"Project-Id-Version: gstreamer 1.9.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,94 +18,94 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
 
-#: gst/gst.c:244
+#: gst/gst.c:243
 msgid "Print the GStreamer version"
 msgstr ""
 
-#: gst/gst.c:246
+#: gst/gst.c:245
 msgid "Make all warnings fatal"
 msgstr ""
 
-#: gst/gst.c:250
+#: gst/gst.c:249
 msgid "Print available debug categories and exit"
 msgstr ""
 
-#: gst/gst.c:254
+#: gst/gst.c:253
 msgid ""
 "Default debug level from 1 (only error) to 9 (anything) or 0 for no output"
 msgstr ""
 
-#: gst/gst.c:256
+#: gst/gst.c:255
 msgid "LEVEL"
 msgstr ""
 
-#: gst/gst.c:258
+#: gst/gst.c:257
 msgid ""
 "Comma-separated list of category_name:level pairs to set specific levels for "
 "the individual categories. Example: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
 msgstr ""
 
-#: gst/gst.c:261
+#: gst/gst.c:260
 msgid "LIST"
 msgstr ""
 
-#: gst/gst.c:263
+#: gst/gst.c:262
 msgid "Disable colored debugging output"
 msgstr ""
 
-#: gst/gst.c:267
+#: gst/gst.c:266
 msgid ""
 "Changes coloring mode of the debug log. Possible modes: off, on, disable, "
 "auto, unix"
 msgstr ""
 
-#: gst/gst.c:271
+#: gst/gst.c:270
 msgid "Disable debugging"
 msgstr ""
 
-#: gst/gst.c:275
+#: gst/gst.c:274
 msgid "Enable verbose plugin loading diagnostics"
 msgstr ""
 
-#: gst/gst.c:279
+#: gst/gst.c:278
 msgid "Colon-separated paths containing plugins"
 msgstr ""
 
-#: gst/gst.c:279
+#: gst/gst.c:278
 msgid "PATHS"
 msgstr ""
 
-#: gst/gst.c:282
+#: gst/gst.c:281
 msgid ""
 "Comma-separated list of plugins to preload in addition to the list stored in "
 "environment variable GST_PLUGIN_PATH"
 msgstr ""
 
-#: gst/gst.c:284
+#: gst/gst.c:283
 msgid "PLUGINS"
 msgstr ""
 
-#: gst/gst.c:287
+#: gst/gst.c:286
 msgid "Disable trapping of segmentation faults during plugin loading"
 msgstr ""
 
-#: gst/gst.c:292
+#: gst/gst.c:291
 msgid "Disable updating the registry"
 msgstr ""
 
-#: gst/gst.c:297
+#: gst/gst.c:296
 msgid "Disable spawning a helper process while scanning the registry"
 msgstr ""
 
-#: gst/gst.c:302
+#: gst/gst.c:301
 msgid "GStreamer Options"
 msgstr ""
 
-#: gst/gst.c:303
+#: gst/gst.c:302
 msgid "Show GStreamer Options"
 msgstr ""
 
-#: gst/gst.c:892
+#: gst/gst.c:921
 msgid "Unknown option"
 msgstr ""
 
@@ -310,7 +310,7 @@
 msgid "Selected clock cannot be used in pipeline."
 msgstr ""
 
-#: gst/gstregistry.c:1694
+#: gst/gstregistry.c:1709
 #, c-format
 msgid "Error writing registry cache to %s: %s"
 msgstr ""
@@ -1034,12 +1034,12 @@
 msgid "URI scheme '%s' not supported"
 msgstr ""
 
-#: gst/gstutils.c:2426 tools/gst-launch.c:324
+#: gst/gstutils.c:2485 tools/gst-launch.c:325
 #, c-format
 msgid "ERROR: from element %s: %s\n"
 msgstr ""
 
-#: gst/gstutils.c:2428 tools/gst-launch.c:326 tools/gst-launch.c:670
+#: gst/gstutils.c:2487 tools/gst-launch.c:327 tools/gst-launch.c:671
 #, c-format
 msgid ""
 "Additional debug info:\n"
@@ -1127,30 +1127,23 @@
 msgid "empty pipeline not allowed"
 msgstr ""
 
-#: libs/gst/base/gstbasesink.c:2853
+#: libs/gst/base/gstbasesink.c:2833
 msgid "A lot of buffers are being dropped."
 msgstr ""
 
-#: libs/gst/base/gstbasesink.c:3382
+#: libs/gst/base/gstbasesink.c:3332
 msgid "Internal data flow problem."
 msgstr ""
 
-#: libs/gst/base/gstbasesink.c:4095
-msgid "Internal data stream error."
-msgstr ""
-
-#: libs/gst/base/gstbasesink.c:4105 libs/gst/base/gstbasesrc.c:2947
-#: libs/gst/base/gstbasesrc.c:2956 plugins/elements/gstdownloadbuffer.c:1349
-#: plugins/elements/gstqueue.c:990 plugins/elements/gstqueue.c:1539
-#: plugins/elements/gstqueue2.c:2516 plugins/elements/gstqueue2.c:3008
+#: libs/gst/base/gstbasesink.c:4043 libs/gst/base/gstbasesrc.c:2958
 msgid "Internal data flow error."
 msgstr ""
 
-#: libs/gst/base/gstbasesrc.c:2546
+#: libs/gst/base/gstbasesrc.c:2550
 msgid "Internal clock error."
 msgstr ""
 
-#: libs/gst/base/gstbasesrc.c:2574
+#: libs/gst/base/gstbasesrc.c:2578
 msgid "Failed to map buffer."
 msgstr ""
 
@@ -1172,22 +1165,22 @@
 msgid "Filter caps change behaviour"
 msgstr ""
 
-#: plugins/elements/gstdownloadbuffer.c:920 plugins/elements/gstqueue2.c:1655
+#: plugins/elements/gstdownloadbuffer.c:920 plugins/elements/gstqueue2.c:1710
 msgid "No Temp directory specified."
 msgstr ""
 
-#: plugins/elements/gstdownloadbuffer.c:926 plugins/elements/gstqueue2.c:1661
+#: plugins/elements/gstdownloadbuffer.c:926 plugins/elements/gstqueue2.c:1716
 #, c-format
 msgid "Could not create temp file \"%s\"."
 msgstr ""
 
 #: plugins/elements/gstdownloadbuffer.c:934 plugins/elements/gstfilesrc.c:534
-#: plugins/elements/gstqueue2.c:1669
+#: plugins/elements/gstqueue2.c:1724
 #, c-format
 msgid "Could not open file \"%s\" for reading."
 msgstr ""
 
-#: plugins/elements/gstdownloadbuffer.c:1258 plugins/elements/gstqueue2.c:2089
+#: plugins/elements/gstdownloadbuffer.c:1258 plugins/elements/gstqueue2.c:2144
 msgid "Error while writing to download file."
 msgstr ""
 
@@ -1300,51 +1293,51 @@
 msgid "changeable only in NULL or READY state"
 msgstr ""
 
-#: tools/gst-inspect.c:910
+#: tools/gst-inspect.c:909
 msgid "Blacklisted files:"
 msgstr ""
 
-#: tools/gst-inspect.c:922 tools/gst-inspect.c:1011
+#: tools/gst-inspect.c:921 tools/gst-inspect.c:1010
 msgid "Total count: "
 msgstr ""
 
-#: tools/gst-inspect.c:923
+#: tools/gst-inspect.c:922
 #, c-format
 msgid "%d blacklisted file"
 msgid_plural "%d blacklisted files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: tools/gst-inspect.c:1012
+#: tools/gst-inspect.c:1011
 #, c-format
 msgid "%d plugin"
 msgid_plural "%d plugins"
 msgstr[0] ""
 msgstr[1] ""
 
-#: tools/gst-inspect.c:1015
+#: tools/gst-inspect.c:1014
 #, c-format
 msgid "%d blacklist entry"
 msgid_plural "%d blacklist entries"
 msgstr[0] ""
 msgstr[1] ""
 
-#: tools/gst-inspect.c:1020
+#: tools/gst-inspect.c:1019
 #, c-format
 msgid "%d feature"
 msgid_plural "%d features"
 msgstr[0] ""
 msgstr[1] ""
 
-#: tools/gst-inspect.c:1469
+#: tools/gst-inspect.c:1468
 msgid "Print all elements"
 msgstr ""
 
-#: tools/gst-inspect.c:1471
+#: tools/gst-inspect.c:1470
 msgid "Print list of blacklisted files"
 msgstr ""
 
-#: tools/gst-inspect.c:1473
+#: tools/gst-inspect.c:1472
 msgid ""
 "Print a machine-parsable list of features the specified plugin or all "
 "plugins provide.\n"
@@ -1352,284 +1345,284 @@
 "automatic plugin installation mechanisms"
 msgstr ""
 
-#: tools/gst-inspect.c:1478
+#: tools/gst-inspect.c:1477
 msgid "List the plugin contents"
 msgstr ""
 
-#: tools/gst-inspect.c:1480
+#: tools/gst-inspect.c:1479
 msgid "Check if the specified element or plugin exists"
 msgstr ""
 
-#: tools/gst-inspect.c:1483
+#: tools/gst-inspect.c:1482
 msgid ""
 "When checking if an element or plugin exists, also check that its version is "
 "at least the version specified"
 msgstr ""
 
-#: tools/gst-inspect.c:1487
+#: tools/gst-inspect.c:1486
 msgid "Print supported URI schemes, with the elements that implement them"
 msgstr ""
 
-#: tools/gst-inspect.c:1632
+#: tools/gst-inspect.c:1634
 #, c-format
 msgid "Could not load plugin file: %s\n"
 msgstr ""
 
-#: tools/gst-inspect.c:1637
+#: tools/gst-inspect.c:1639
 #, c-format
 msgid "No such element or plugin '%s'\n"
 msgstr ""
 
-#: tools/gst-launch.c:251
+#: tools/gst-launch.c:252
 msgid "Index statistics"
 msgstr ""
 
-#: tools/gst-launch.c:551
+#: tools/gst-launch.c:552
 #, c-format
 msgid "Got message #%u from element \"%s\" (%s): "
 msgstr ""
 
-#: tools/gst-launch.c:555
+#: tools/gst-launch.c:556
 #, c-format
 msgid "Got message #%u from pad \"%s:%s\" (%s): "
 msgstr ""
 
-#: tools/gst-launch.c:559
+#: tools/gst-launch.c:560
 #, c-format
 msgid "Got message #%u from object \"%s\" (%s): "
 msgstr ""
 
-#: tools/gst-launch.c:563
+#: tools/gst-launch.c:564
 #, c-format
 msgid "Got message #%u (%s): "
 msgstr ""
 
-#: tools/gst-launch.c:595
+#: tools/gst-launch.c:596
 #, c-format
 msgid "Got EOS from element \"%s\".\n"
 msgstr ""
 
-#: tools/gst-launch.c:604
+#: tools/gst-launch.c:605
 #, c-format
 msgid "FOUND TAG      : found by element \"%s\".\n"
 msgstr ""
 
-#: tools/gst-launch.c:607
+#: tools/gst-launch.c:608
 #, c-format
 msgid "FOUND TAG      : found by pad \"%s:%s\".\n"
 msgstr ""
 
-#: tools/gst-launch.c:610
+#: tools/gst-launch.c:611
 #, c-format
 msgid "FOUND TAG      : found by object \"%s\".\n"
 msgstr ""
 
-#: tools/gst-launch.c:613
+#: tools/gst-launch.c:614
 msgid "FOUND TAG\n"
 msgstr ""
 
-#: tools/gst-launch.c:628
+#: tools/gst-launch.c:629
 #, c-format
 msgid "FOUND TOC      : found by element \"%s\".\n"
 msgstr ""
 
-#: tools/gst-launch.c:631
+#: tools/gst-launch.c:632
 #, c-format
 msgid "FOUND TOC      : found by object \"%s\".\n"
 msgstr ""
 
-#: tools/gst-launch.c:634
+#: tools/gst-launch.c:635
 msgid "FOUND TOC\n"
 msgstr ""
 
-#: tools/gst-launch.c:651
+#: tools/gst-launch.c:652
 #, c-format
 msgid ""
 "INFO:\n"
 "%s\n"
 msgstr ""
 
-#: tools/gst-launch.c:668
+#: tools/gst-launch.c:669
 #, c-format
 msgid "WARNING: from element %s: %s\n"
 msgstr ""
 
-#: tools/gst-launch.c:703
+#: tools/gst-launch.c:704
 msgid "Prerolled, waiting for buffering to finish...\n"
 msgstr ""
 
-#: tools/gst-launch.c:707
+#: tools/gst-launch.c:708
 msgid "Prerolled, waiting for progress to finish...\n"
 msgstr ""
 
-#: tools/gst-launch.c:719
+#: tools/gst-launch.c:720
 msgid "buffering..."
 msgstr ""
 
-#: tools/gst-launch.c:730
+#: tools/gst-launch.c:731
 msgid "Done buffering, setting pipeline to PLAYING ...\n"
 msgstr ""
 
-#: tools/gst-launch.c:738
+#: tools/gst-launch.c:739
 msgid "Buffering, setting pipeline to PAUSED ...\n"
 msgstr ""
 
-#: tools/gst-launch.c:747
+#: tools/gst-launch.c:748
 msgid "Redistribute latency...\n"
 msgstr ""
 
-#: tools/gst-launch.c:758
+#: tools/gst-launch.c:759
 #, c-format
 msgid "Setting state to %s as requested by %s...\n"
 msgstr ""
 
-#: tools/gst-launch.c:774
+#: tools/gst-launch.c:775
 msgid "Interrupt: Stopping pipeline ...\n"
 msgstr ""
 
-#: tools/gst-launch.c:803
+#: tools/gst-launch.c:804
 #, c-format
 msgid "Progress: (%s) %s\n"
 msgstr ""
 
-#: tools/gst-launch.c:816
+#: tools/gst-launch.c:817
 #, c-format
 msgid "Missing element: %s\n"
 msgstr ""
 
-#: tools/gst-launch.c:830
+#: tools/gst-launch.c:831
 #, c-format
 msgid "Got context from element '%s': %s=%s\n"
 msgstr ""
 
-#: tools/gst-launch.c:920
+#: tools/gst-launch.c:961
 msgid "Output tags (also known as metadata)"
 msgstr ""
 
-#: tools/gst-launch.c:922
+#: tools/gst-launch.c:963
 msgid "Output TOC (chapters and editions)"
 msgstr ""
 
-#: tools/gst-launch.c:924
+#: tools/gst-launch.c:965
 msgid "Output status information and property notifications"
 msgstr ""
 
-#: tools/gst-launch.c:926
+#: tools/gst-launch.c:967
 msgid "Do not print any progress information"
 msgstr ""
 
-#: tools/gst-launch.c:928
+#: tools/gst-launch.c:969
 msgid "Output messages"
 msgstr ""
 
-#: tools/gst-launch.c:930
+#: tools/gst-launch.c:971
 msgid ""
 "Do not output status information for the specified property if verbose "
 "output is enabled (can be used multiple times)"
 msgstr ""
 
-#: tools/gst-launch.c:932
+#: tools/gst-launch.c:973
 msgid "PROPERTY-NAME"
 msgstr ""
 
-#: tools/gst-launch.c:934
+#: tools/gst-launch.c:975
 msgid "Do not install a fault handler"
 msgstr ""
 
-#: tools/gst-launch.c:936
+#: tools/gst-launch.c:977
 msgid "Force EOS on sources before shutting the pipeline down"
 msgstr ""
 
-#: tools/gst-launch.c:939
+#: tools/gst-launch.c:980
 msgid "Gather and print index statistics"
 msgstr ""
 
-#: tools/gst-launch.c:1004
+#: tools/gst-launch.c:1045
 #, c-format
 msgid "ERROR: pipeline could not be constructed: %s.\n"
 msgstr ""
 
-#: tools/gst-launch.c:1008
+#: tools/gst-launch.c:1049
 msgid "ERROR: pipeline could not be constructed.\n"
 msgstr ""
 
-#: tools/gst-launch.c:1012
+#: tools/gst-launch.c:1053
 #, c-format
 msgid "WARNING: erroneous pipeline: %s\n"
 msgstr ""
 
-#: tools/gst-launch.c:1028
+#: tools/gst-launch.c:1069
 msgid "ERROR: the 'pipeline' element wasn't found.\n"
 msgstr ""
 
-#: tools/gst-launch.c:1059 tools/gst-launch.c:1160
+#: tools/gst-launch.c:1100 tools/gst-launch.c:1201
 msgid "Setting pipeline to PAUSED ...\n"
 msgstr ""
 
-#: tools/gst-launch.c:1064
+#: tools/gst-launch.c:1105
 msgid "ERROR: Pipeline doesn't want to pause.\n"
 msgstr ""
 
-#: tools/gst-launch.c:1069
+#: tools/gst-launch.c:1110
 msgid "Pipeline is live and does not need PREROLL ...\n"
 msgstr ""
 
-#: tools/gst-launch.c:1073
+#: tools/gst-launch.c:1114
 msgid "Pipeline is PREROLLING ...\n"
 msgstr ""
 
-#: tools/gst-launch.c:1076 tools/gst-launch.c:1090
+#: tools/gst-launch.c:1117 tools/gst-launch.c:1131
 msgid "ERROR: pipeline doesn't want to preroll.\n"
 msgstr ""
 
-#: tools/gst-launch.c:1083
+#: tools/gst-launch.c:1124
 msgid "Pipeline is PREROLLED ...\n"
 msgstr ""
 
-#: tools/gst-launch.c:1096
+#: tools/gst-launch.c:1137
 msgid "Setting pipeline to PLAYING ...\n"
 msgstr ""
 
-#: tools/gst-launch.c:1103
+#: tools/gst-launch.c:1144
 msgid "ERROR: pipeline doesn't want to play.\n"
 msgstr ""
 
-#: tools/gst-launch.c:1122
+#: tools/gst-launch.c:1163
 msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n"
 msgstr ""
 
-#: tools/gst-launch.c:1126
+#: tools/gst-launch.c:1167
 msgid "EOS on shutdown enabled -- waiting for EOS after Error\n"
 msgstr ""
 
-#: tools/gst-launch.c:1129
+#: tools/gst-launch.c:1170
 msgid "Waiting for EOS...\n"
 msgstr ""
 
-#: tools/gst-launch.c:1136
+#: tools/gst-launch.c:1177
 msgid "EOS received - stopping pipeline...\n"
 msgstr ""
 
-#: tools/gst-launch.c:1140
+#: tools/gst-launch.c:1181
 msgid "Interrupt while waiting for EOS - stopping pipeline...\n"
 msgstr ""
 
-#: tools/gst-launch.c:1145
+#: tools/gst-launch.c:1186
 msgid "An error happened while waiting for EOS\n"
 msgstr ""
 
-#: tools/gst-launch.c:1156
+#: tools/gst-launch.c:1197
 msgid "Execution ended after %"
 msgstr ""
 
-#: tools/gst-launch.c:1172
+#: tools/gst-launch.c:1213
 msgid "Setting pipeline to READY ...\n"
 msgstr ""
 
-#: tools/gst-launch.c:1184
+#: tools/gst-launch.c:1225
 msgid "Setting pipeline to NULL ...\n"
 msgstr ""
 
-#: tools/gst-launch.c:1188
+#: tools/gst-launch.c:1229
 msgid "Freeing pipeline ...\n"
 msgstr ""
diff --git a/po/hr.gmo b/po/hr.gmo
index a874772..857eeae 100644
--- a/po/hr.gmo
+++ b/po/hr.gmo
Binary files differ
diff --git a/po/hr.po b/po/hr.po
index aea81f1..550980c 100644
--- a/po/hr.po
+++ b/po/hr.po
@@ -11,7 +11,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.7.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2016-05-27 12:48-0700\n"
 "Last-Translator: Božidar Putanec <bozidarp@yahoo.com>\n"
 "Language-Team: Croatian <lokalizacija@linux.hr>\n"
@@ -933,9 +933,6 @@
 msgid "Internal data flow problem."
 msgstr "Problem unutrašnjeg protoka podataka."
 
-msgid "Internal data stream error."
-msgstr "Interna greška protoka (stream) podataka."
-
 msgid "Internal data flow error."
 msgstr "Interna greška protoka podataka."
 
@@ -1333,6 +1330,9 @@
 msgid "Freeing pipeline ...\n"
 msgstr "Cjevovod se prazni...\n"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Interna greška protoka (stream) podataka."
+
 #~ msgid "link without source element"
 #~ msgstr "veza bez izvornog elementa"
 
diff --git a/po/hu.gmo b/po/hu.gmo
index 5f555de..bbff153 100644
--- a/po/hu.gmo
+++ b/po/hu.gmo
Binary files differ
diff --git a/po/hu.po b/po/hu.po
index de403a5..3498692 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.7.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2016-03-14 16:10+0100\n"
 "Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n"
 "Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
@@ -920,9 +920,6 @@
 msgid "Internal data flow problem."
 msgstr "Belső adatfolyam-probléma."
 
-msgid "Internal data stream error."
-msgstr "Belső adatfolyam-hiba."
-
 msgid "Internal data flow error."
 msgstr "Belső adatfolyam-hiba."
 
@@ -1314,6 +1311,9 @@
 msgid "Freeing pipeline ...\n"
 msgstr "Adatcsatorna felszabadítása…\n"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Belső adatfolyam-hiba."
+
 #~ msgid "Do not output status information of TYPE"
 #~ msgstr "Ne írjon ki a TÍPUS típus állapotinformációit"
 
diff --git a/po/id.gmo b/po/id.gmo
index f41000a..8b228e5 100644
--- a/po/id.gmo
+++ b/po/id.gmo
Binary files differ
diff --git a/po/id.po b/po/id.po
index 6b0d864..a8a6045 100644
--- a/po/id.po
+++ b/po/id.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.3.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2014-05-31 22:06+0700\n"
 "Last-Translator: Andhika Padmawan <andhika.padmawan@gmail.com>\n"
 "Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
@@ -923,9 +923,6 @@
 msgid "Internal data flow problem."
 msgstr "Masalah aliran data internal."
 
-msgid "Internal data stream error."
-msgstr "Galat arus data internal."
-
 msgid "Internal data flow error."
 msgstr "Galat aliran data internal."
 
@@ -1314,6 +1311,9 @@
 msgid "Freeing pipeline ...\n"
 msgstr "Membebaskan baris pipa ...\n"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Galat arus data internal."
+
 #~ msgid "Do not output status information of TYPE"
 #~ msgstr "Jangan keluarkan informasi status dari TIPE"
 
diff --git a/po/it.gmo b/po/it.gmo
index 115114c..3b36548 100644
--- a/po/it.gmo
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
index 4d7859a..6ed99af 100644
--- a/po/it.po
+++ b/po/it.po
@@ -106,7 +106,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.30.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2010-10-25 10:03+0200\n"
 "Last-Translator: Luca Ferretti <elle.uca@infinito.it>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
@@ -1078,9 +1078,6 @@
 msgid "Internal data flow problem."
 msgstr "Problema interno nel flusso di dati."
 
-msgid "Internal data stream error."
-msgstr "Errore interno nello stream di dati."
-
 msgid "Internal data flow error."
 msgstr "Errore interno nel flusso di dati."
 
@@ -1508,6 +1505,9 @@
 msgid "Freeing pipeline ...\n"
 msgstr "Esecuzione di free sulla pipeline...\n"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Errore interno nello stream di dati."
+
 # -X, --exclude=TIPO1,TIPO2,...
 #~ msgid "Do not output status information of TYPE"
 #~ msgstr "Non stampa le informazioni di stato per TIPO"
diff --git a/po/ja.gmo b/po/ja.gmo
index 7d4d83b..f859acc 100644
--- a/po/ja.gmo
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
index 8148d16..5c4a7de 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.0.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2013-08-20 14:56+0900\n"
 "Last-Translator: Makoto Kato <makoto.kt@gmail.com>\n"
 "Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
@@ -889,9 +889,6 @@
 msgid "Internal data flow problem."
 msgstr ""
 
-msgid "Internal data stream error."
-msgstr "内部データストリームエラー"
-
 msgid "Internal data flow error."
 msgstr "内部データフローエラー"
 
@@ -1281,6 +1278,9 @@
 msgid "Freeing pipeline ...\n"
 msgstr "パイプラインを解放 (FREEING) しています...\n"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "内部データストリームエラー"
+
 #~ msgid "Do not output status information of TYPE"
 #~ msgstr "TYPE のステータス情報を出力しない"
 
diff --git a/po/lt.gmo b/po/lt.gmo
index 85f2aac..9f2e732 100644
--- a/po/lt.gmo
+++ b/po/lt.gmo
Binary files differ
diff --git a/po/lt.po b/po/lt.po
index 59611ab..f5779bc 100644
--- a/po/lt.po
+++ b/po/lt.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.29.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2010-07-16 00:50+0300\n"
 "Last-Translator: Žygimantas Beručka <uid0@akl.lt>\n"
 "Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
@@ -929,9 +929,6 @@
 msgid "Internal data flow problem."
 msgstr "Vidinė duomenų tėkmės problema."
 
-msgid "Internal data stream error."
-msgstr "Vidinė duomenų srauto klaida."
-
 msgid "Internal data flow error."
 msgstr "Vidinė duomenų tėkmės klaida."
 
@@ -1329,6 +1326,9 @@
 msgid "Freeing pipeline ...\n"
 msgstr "Atlaisvinamas konvejeris...\n"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Vidinė duomenų srauto klaida."
+
 #~ msgid "Do not output status information of TYPE"
 #~ msgstr "Neišvesti šio TIPO būsenos informacijos"
 
diff --git a/po/nb.gmo b/po/nb.gmo
index ed2b806..bbfcd6c 100644
--- a/po/nb.gmo
+++ b/po/nb.gmo
Binary files differ
diff --git a/po/nb.po b/po/nb.po
index 314e2da..68db42a 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.6.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2015-12-23 02:02+0100\n"
 "Last-Translator: Johnny A. Solbu <johnny@solbu.net>\n"
 "Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n"
@@ -919,9 +919,6 @@
 msgid "Internal data flow problem."
 msgstr ""
 
-msgid "Internal data stream error."
-msgstr ""
-
 msgid "Internal data flow error."
 msgstr "Intern feil med dataflyt."
 
diff --git a/po/nl.gmo b/po/nl.gmo
index 9012072..cd54bdb 100644
--- a/po/nl.gmo
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
index ad37ae9..760d751 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -10,7 +10,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2016-02-20 16:42+0100\n"
 "Last-Translator: Freek de Kruijf <f.de.kruijf@gmail.com>\n"
 "Language-Team: Dutch <vertaling@vrijschrift.org>\n"
@@ -932,9 +932,6 @@
 msgid "Internal data flow problem."
 msgstr "Intern probleem met gegevensdoorvoer."
 
-msgid "Internal data stream error."
-msgstr "Interne fout in gegevensstroom."
-
 msgid "Internal data flow error."
 msgstr "Interne fout met gegevensdoorvoer."
 
@@ -1329,6 +1326,9 @@
 msgid "Freeing pipeline ...\n"
 msgstr "Pijplijn wordt vrijgemaakt ...\n"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Interne fout in gegevensstroom."
+
 #~ msgid "Do not output status information of TYPE"
 #~ msgstr "Statusinformatie van soort SOORT niet weergeven"
 
diff --git a/po/pl.gmo b/po/pl.gmo
index 8cd207b..0a1f871 100644
--- a/po/pl.gmo
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
index 97af70c..81e2808 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2016-02-20 21:41+0100\n"
 "Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
 "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
@@ -925,9 +925,6 @@
 msgid "Internal data flow problem."
 msgstr "Wewnętrzny problem przepływu danych."
 
-msgid "Internal data stream error."
-msgstr "Wewnętrzny błąd strumienia danych."
-
 msgid "Internal data flow error."
 msgstr "Wewnętrzny błąd przepływu danych."
 
@@ -1324,3 +1321,6 @@
 
 msgid "Freeing pipeline ...\n"
 msgstr "Zwalnianie potoku...\n"
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Wewnętrzny błąd strumienia danych."
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
index d2afe3f..8bd5b08 100644
--- a/po/pt_BR.gmo
+++ b/po/pt_BR.gmo
Binary files differ
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 30ed2c0..ec83585 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -17,7 +17,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer-1.7.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2016-05-06 18:23-0300\n"
 "Last-Translator: Fabrício Godoy <skarllot@gmail.com>\n"
 "Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge."
@@ -941,9 +941,6 @@
 msgid "Internal data flow problem."
 msgstr "Problema interno no fluxo de dados."
 
-msgid "Internal data stream error."
-msgstr "Erro interno no fluxo de dados."
-
 msgid "Internal data flow error."
 msgstr "Erro interno no fluxo de dados."
 
@@ -1347,6 +1344,9 @@
 msgid "Freeing pipeline ...\n"
 msgstr "Liberando a fila de processamento...\n"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Erro interno no fluxo de dados."
+
 #~ msgid "Do not output status information of TYPE"
 #~ msgstr "Não é possível obter informações do estado de saída do TIPO"
 
diff --git a/po/ro.gmo b/po/ro.gmo
index 0660991..eee43c5 100644
--- a/po/ro.gmo
+++ b/po/ro.gmo
Binary files differ
diff --git a/po/ro.po b/po/ro.po
index 6567c24..939c0b6 100644
--- a/po/ro.po
+++ b/po/ro.po
@@ -5,7 +5,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.29.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2010-08-16 01:10+0300\n"
 "Last-Translator: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>\n"
 "Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
@@ -947,9 +947,6 @@
 msgid "Internal data flow problem."
 msgstr "Problemă internă de flux al datelor."
 
-msgid "Internal data stream error."
-msgstr "Eroare internă a fluxului de date."
-
 msgid "Internal data flow error."
 msgstr "Eroare internă de flux al datelor."
 
@@ -1348,6 +1345,9 @@
 msgid "Freeing pipeline ...\n"
 msgstr "Se eliberează linia de asamblare...\n"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Eroare internă a fluxului de date."
+
 #~ msgid "Do not output status information of TYPE"
 #~ msgstr "Nu scoate informații despre stările de TIPUL"
 
diff --git a/po/ru.gmo b/po/ru.gmo
index 28a0259..2059ef8 100644
--- a/po/ru.gmo
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
index 3eb696e..fea7f05 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.7.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2016-03-05 08:41+0300\n"
 "Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
 "Language-Team: Russian <gnu@d07.ru>\n"
@@ -924,9 +924,6 @@
 msgid "Internal data flow problem."
 msgstr "Внутренняя проблема передачи данных."
 
-msgid "Internal data stream error."
-msgstr "Внутренняя ошибка потока данных."
-
 msgid "Internal data flow error."
 msgstr "Внутренняя ошибка передачи данных."
 
@@ -1323,6 +1320,9 @@
 msgid "Freeing pipeline ...\n"
 msgstr "Освобождение конвейера…\n"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Внутренняя ошибка потока данных."
+
 #~ msgid "Do not output status information of TYPE"
 #~ msgstr "Не выводить информацию о состоянии ТИПА"
 
diff --git a/po/rw.gmo b/po/rw.gmo
index f2f909c..ca9041b 100644
--- a/po/rw.gmo
+++ b/po/rw.gmo
Binary files differ
diff --git a/po/rw.po b/po/rw.po
index 8e63f83..8be8778 100644
--- a/po/rw.po
+++ b/po/rw.po
@@ -15,7 +15,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.8.8\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2005-04-04 10:55-0700\n"
 "Last-Translator: Steven Michael Murphy <murf@e-tools.com>\n"
 "Language-Team: Kinyarwanda <translation-team-rw@lists.sourceforge.net>\n"
@@ -1088,9 +1088,6 @@
 msgid "Internal data flow problem."
 msgstr ""
 
-msgid "Internal data stream error."
-msgstr ""
-
 msgid "Internal data flow error."
 msgstr ""
 
diff --git a/po/sk.gmo b/po/sk.gmo
index 355220c..2da481b 100644
--- a/po/sk.gmo
+++ b/po/sk.gmo
Binary files differ
diff --git a/po/sk.po b/po/sk.po
index 6bd3806..6c6d7f1 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.7.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2016-05-20 11:32+0100\n"
 "Last-Translator: Peter Tuhársky <tuharsky@misbb.sk>\n"
 "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
@@ -922,9 +922,6 @@
 msgid "Internal data flow problem."
 msgstr "Vnútorný problém v toku údajov."
 
-msgid "Internal data stream error."
-msgstr "Vnútorná chyba prúdu údajov."
-
 msgid "Internal data flow error."
 msgstr "Vnútorná chyba toku údajov."
 
@@ -1325,6 +1322,9 @@
 msgid "Freeing pipeline ...\n"
 msgstr "Uvoľňujem rúru ...\n"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Vnútorná chyba prúdu údajov."
+
 #~ msgid "link without source element"
 #~ msgstr "pripojenie bez zdrojového prvku"
 
diff --git a/po/sl.gmo b/po/sl.gmo
index 8674f61..54f865b 100644
--- a/po/sl.gmo
+++ b/po/sl.gmo
Binary files differ
diff --git a/po/sl.po b/po/sl.po
index 16e5fb6..e8d3278 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -10,7 +10,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer-1.2.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2014-04-09 22:38+0100\n"
 "Last-Translator: Klemen Košir <klemen913@gmail.com>\n"
 "Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
@@ -922,9 +922,6 @@
 msgid "Internal data flow problem."
 msgstr "Notranja težava toka podatkov."
 
-msgid "Internal data stream error."
-msgstr "Notranja napaka pretoka podatkov."
-
 msgid "Internal data flow error."
 msgstr "Notranja napaka toka podatkov."
 
@@ -1325,6 +1322,9 @@
 msgid "Freeing pipeline ...\n"
 msgstr "Sproščanje cevovoda ...\n"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Notranja napaka pretoka podatkov."
+
 #~ msgid "Do not output status information of TYPE"
 #~ msgstr "Ne izpiši podrobnosti stanja VRSTE"
 
diff --git a/po/sq.gmo b/po/sq.gmo
index 19400db..53fd3bd 100644
--- a/po/sq.gmo
+++ b/po/sq.gmo
Binary files differ
diff --git a/po/sq.po b/po/sq.po
index 3161c54..9a155dc 100644
--- a/po/sq.po
+++ b/po/sq.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.8.4\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2004-08-07 23:46+0200\n"
 "Last-Translator: Laurent Dhima <laurenti@alblinux.net>\n"
 "Language-Team: Albanian <begraj@hotmail.com>\n"
@@ -942,9 +942,6 @@
 msgid "Internal data flow problem."
 msgstr ""
 
-msgid "Internal data stream error."
-msgstr ""
-
 msgid "Internal data flow error."
 msgstr ""
 
diff --git a/po/sr.gmo b/po/sr.gmo
index 081a1e7..da1100a 100644
--- a/po/sr.gmo
+++ b/po/sr.gmo
Binary files differ
diff --git a/po/sr.po b/po/sr.po
index 95fa39e..e0d8afe 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer-1.7.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2016-03-05 10:03+0200\n"
 "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
 "Language-Team: Serbian <(nothing)>\n"
@@ -923,9 +923,6 @@
 msgid "Internal data flow problem."
 msgstr "Унутрaшњи проблем протока података."
 
-msgid "Internal data stream error."
-msgstr "Унутрашња грешка тока података."
-
 msgid "Internal data flow error."
 msgstr "Унутрaшња грешка протока података."
 
@@ -1324,6 +1321,9 @@
 msgid "Freeing pipeline ...\n"
 msgstr "Ослобађам спојку низа...\n"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Унутрашња грешка тока података."
+
 #~ msgid "Do not output status information of TYPE"
 #~ msgstr "Не исписује податке о стању за ВРСТУ"
 
diff --git a/po/sv.gmo b/po/sv.gmo
index 6d4e335..7e74e28 100644
--- a/po/sv.gmo
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
index 63377c0..6ee8029 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.7.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2016-03-02 22:19+0100\n"
 "Last-Translator: Sebastian Rasmussen <sebras@gmail.com>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
@@ -923,9 +923,6 @@
 msgid "Internal data flow problem."
 msgstr "Internt dataflödesproblem."
 
-msgid "Internal data stream error."
-msgstr "Internt fel i dataström."
-
 msgid "Internal data flow error."
 msgstr "Internt fel i dataflöde."
 
@@ -1322,6 +1319,9 @@
 msgid "Freeing pipeline ...\n"
 msgstr "Frigör rörledning ...\n"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Internt fel i dataström."
+
 #~ msgid "Do not output status information of TYPE"
 #~ msgstr "Mata inte ut statusinformation av TYP"
 
diff --git a/po/tr.gmo b/po/tr.gmo
index 3431160..16c2796 100644
--- a/po/tr.gmo
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
index eda0af7..0f603c7 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.4.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2015-01-10 21:06+0100\n"
 "Last-Translator: Volkan Gezer <volkangezer@gmail.com>\n"
 "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
@@ -911,9 +911,6 @@
 msgid "Internal data flow problem."
 msgstr "İç veri akış sorunu."
 
-msgid "Internal data stream error."
-msgstr "İç veri akışı hatası."
-
 msgid "Internal data flow error."
 msgstr "İç veri akış hatası."
 
@@ -1307,6 +1304,9 @@
 msgid "Freeing pipeline ...\n"
 msgstr "Boru hattı boşaltılıyor ...\n"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "İç veri akışı hatası."
+
 #~ msgid "Do not output status information of TYPE"
 #~ msgstr "TÜRÜN durum bilgisini gösterme"
 
diff --git a/po/uk.gmo b/po/uk.gmo
index 344d6b8..d36297b 100644
--- a/po/uk.gmo
+++ b/po/uk.gmo
Binary files differ
diff --git a/po/uk.po b/po/uk.po
index fe59211..6571cf1 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.7.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2016-03-02 22:00+0200\n"
 "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
 "Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
@@ -921,9 +921,6 @@
 msgid "Internal data flow problem."
 msgstr "Помилка внутрішнього перенесення даних."
 
-msgid "Internal data stream error."
-msgstr "Помилка внутрішнього потоку даних."
-
 msgid "Internal data flow error."
 msgstr "Помилка внутрішнього перенесення даних."
 
@@ -1326,6 +1323,9 @@
 msgid "Freeing pipeline ...\n"
 msgstr "Спорожнення каналу...\n"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Помилка внутрішнього потоку даних."
+
 #~ msgid "Do not output status information of TYPE"
 #~ msgstr "Не виводити інформацію про стан типу ТИП"
 
diff --git a/po/vi.gmo b/po/vi.gmo
index 47a794a..4f4507a 100644
--- a/po/vi.gmo
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
index 390d1f5..6b9e472 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.7.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2016-03-03 07:44+0700\n"
 "Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
 "Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
@@ -927,9 +927,6 @@
 msgid "Internal data flow problem."
 msgstr "Vấn đề luồng dữ liệu nội bộ."
 
-msgid "Internal data stream error."
-msgstr "Lỗi luồng dữ liệu nội bộ."
-
 msgid "Internal data flow error."
 msgstr "Lỗi luồng dữ liệu nội bộ."
 
@@ -1321,6 +1318,9 @@
 msgid "Freeing pipeline ...\n"
 msgstr "Đang giải phóng đường ống …\n"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Lỗi luồng dữ liệu nội bộ."
+
 #~ msgid "Do not output status information of TYPE"
 #~ msgstr "Không xuất thông tin trạng thái KIỂU"
 
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
index 04cf304..5093998 100644
--- a/po/zh_CN.gmo
+++ b/po/zh_CN.gmo
Binary files differ
diff --git a/po/zh_CN.po b/po/zh_CN.po
index f13565a..8253356 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.7.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2016-03-03 12:49+0800\n"
 "Last-Translator: Tianze Wang <zwpwjwtz@126.com>\n"
 "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
@@ -890,9 +890,6 @@
 msgid "Internal data flow problem."
 msgstr "内部数据流问题。"
 
-msgid "Internal data stream error."
-msgstr "内部数据流错误。"
-
 msgid "Internal data flow error."
 msgstr "内部数据流错误。"
 
@@ -1275,6 +1272,9 @@
 msgid "Freeing pipeline ...\n"
 msgstr "释放管道资源 ...\n"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "内部数据流错误。"
+
 #~ msgid "Do not output status information of TYPE"
 #~ msgstr "不输出类型的状态信息"
 
diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo
index 915a299..75cbafd 100644
--- a/po/zh_TW.gmo
+++ b/po/zh_TW.gmo
Binary files differ
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 43886f3..700e101 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -27,7 +27,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.3.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-08-19 11:47+0300\n"
+"POT-Creation-Date: 2016-09-30 12:08+0300\n"
 "PO-Revision-Date: 2014-06-08 00:22+0800\n"
 "Last-Translator: Wen Liao <wen.cf83@gmail.com>\n"
 "Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
@@ -917,9 +917,6 @@
 msgid "Internal data flow problem."
 msgstr "內部資料流程錯誤"
 
-msgid "Internal data stream error."
-msgstr "內部資料串流錯誤"
-
 msgid "Internal data flow error."
 msgstr "內部資料流程錯誤"
 
@@ -1305,6 +1302,9 @@
 msgid "Freeing pipeline ...\n"
 msgstr "釋放pipeline ...\n"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "內部資料串流錯誤"
+
 #~ msgid "Do not output status information of TYPE"
 #~ msgstr "不顯示和 TYPE 有關的狀態資訊"
 
diff --git a/tests/Makefile.am b/tests/Makefile.am
index e5909fd..9fe291c 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1,7 +1,10 @@
 EXTRA_DIST = README
 
+# Build misc unless both --disable-examples and --disable-benchmarks were passed
+
 if BUILD_BENCHMARKS
 SUBDIRS_BENCHMARKS = benchmarks
+SUBDIRS_MISC = misc
 else
 SUBDIRS_BENCHMARKS =
 endif
@@ -22,6 +25,7 @@
 
 if BUILD_EXAMPLES
 SUBDIRS_EXAMPLES = examples
+SUBDIRS_MISC = misc
 else
 SUBDIRS_EXAMPLES =
 endif
@@ -29,7 +33,7 @@
 SUBDIRS = \
 	$(SUBDIRS_BENCHMARKS) \
 	$(SUBDIRS_CHECK) \
-	misc		\
+	$(SUBDIRS_MISC) \
 	$(SUBDIRS_TESTS) \
 	$(SUBDIRS_EXAMPLES)
 
diff --git a/tests/Makefile.in b/tests/Makefile.in
index 2304b6b..e504418 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -287,6 +287,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -294,17 +295,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -429,6 +427,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
@@ -508,7 +508,11 @@
 top_srcdir = @top_srcdir@
 EXTRA_DIST = README
 @BUILD_BENCHMARKS_FALSE@SUBDIRS_BENCHMARKS = 
+
+# Build misc unless both --disable-examples and --disable-benchmarks were passed
 @BUILD_BENCHMARKS_TRUE@SUBDIRS_BENCHMARKS = benchmarks
+@BUILD_BENCHMARKS_TRUE@SUBDIRS_MISC = misc
+@BUILD_EXAMPLES_TRUE@SUBDIRS_MISC = misc
 @BUILD_TESTS_FALSE@SUBDIRS_TESTS = 
 @BUILD_TESTS_TRUE@SUBDIRS_TESTS = 
 @BUILD_TESTS_FALSE@SUBDIRS_CHECK = 
@@ -519,7 +523,7 @@
 SUBDIRS = \
 	$(SUBDIRS_BENCHMARKS) \
 	$(SUBDIRS_CHECK) \
-	misc		\
+	$(SUBDIRS_MISC) \
 	$(SUBDIRS_TESTS) \
 	$(SUBDIRS_EXAMPLES)
 
diff --git a/tests/benchmarks/Makefile.in b/tests/benchmarks/Makefile.in
index e43c672..646a8af 100644
--- a/tests/benchmarks/Makefile.in
+++ b/tests/benchmarks/Makefile.in
@@ -333,6 +333,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -340,17 +341,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -475,6 +473,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/tests/benchmarks/capsnego.c b/tests/benchmarks/capsnego.c
index dc60194..5a7a390 100644
--- a/tests/benchmarks/capsnego.c
+++ b/tests/benchmarks/capsnego.c
@@ -185,7 +185,7 @@
 main (gint argc, gchar * argv[])
 {
   /* default parameters */
-  const gchar *flavour_str = "audio";
+  gchar *flavour_str = g_strdup("audio");
   gint flavour = FLAVOUR_AUDIO;
   gint children = 3;
   gint depth = 4;
@@ -230,6 +230,8 @@
   /* build pipeline */
   g_print ("building %s pipeline with depth = %d and children = %d\n",
       flavour_str, depth, children);
+  g_free (flavour_str);
+
   start = gst_util_get_timestamp ();
   bin = GST_BIN (gst_pipeline_new ("pipeline"));
   sink = gst_element_factory_make ("fakesink", NULL);
diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am
index d626c8e..1b0ebc4 100644
--- a/tests/check/Makefile.am
+++ b/tests/check/Makefile.am
@@ -39,10 +39,8 @@
 # Do not run the abi test in case any option which causes the API to change has
 # been used
 if !GST_DISABLE_REGISTRY
-if !GST_DISABLE_TRACE
 ABI_CHECKS = gst/gstabi
 endif
-endif
 
 if !GST_DISABLE_GST_DEBUG
 PRINTF_CHECKS = gst/gstprintf
@@ -137,6 +135,7 @@
 	gst/gstsegment				\
 	gst/gstsystemclock			\
 	gst/gstclock				\
+	gst/gststream				\
 	gst/gststructure			\
 	gst/gsttag				\
 	gst/gsttracerrecord		 		\
@@ -195,7 +194,7 @@
 EXTRA_DIST = \
 	libs/test_transform.c
 
-AM_CFLAGS = $(GST_OBJ_CFLAGS) -UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS \
+AM_CFLAGS = $(PTHREAD_CFLAGS) $(GST_OBJ_CFLAGS) -UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS \
 	-DGST_CHECK_TEST_ENVIRONMENT_BEACON="\"GST_STATE_IGNORE_ELEMENTS\""
 AM_CXXFLAGS = $(GST_OBJ_CXXFLAGS) -UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS \
 	-DGST_CHECK_TEST_ENVIRONMENT_BEACON="\"GST_STATE_IGNORE_ELEMENTS\""
@@ -234,7 +233,7 @@
 # these just need valgrind fixing, period
 VALGRIND_TO_FIX = \
 	gst/gstinfo \
-	pipelines/parse-launch \
+	gst/gsttracerrecord \
 	tools/gstinspect
 
 VALGRIND_IGNORE = \
diff --git a/tests/check/Makefile.in b/tests/check/Makefile.in
index 68f0167..52c9cf8 100644
--- a/tests/check/Makefile.in
+++ b/tests/check/Makefile.in
@@ -103,14 +103,15 @@
 	gst/gstpipeline$(EXEEXT) gst/gstpoll$(EXEEXT) \
 	gst/gstprotection$(EXEEXT) $(am__EXEEXT_3) \
 	gst/gstsegment$(EXEEXT) gst/gstsystemclock$(EXEEXT) \
-	gst/gstclock$(EXEEXT) gst/gststructure$(EXEEXT) \
-	gst/gsttag$(EXEEXT) gst/gsttracerrecord$(EXEEXT) \
-	gst/gsttagsetter$(EXEEXT) gst/gsttask$(EXEEXT) \
-	gst/gsttoc$(EXEEXT) gst/gsttocsetter$(EXEEXT) \
-	gst/gstvalue$(EXEEXT) generic/states$(EXEEXT) $(am__EXEEXT_4) \
-	$(am__EXEEXT_5) $(am__EXEEXT_6) libs/adapter$(EXEEXT) \
-	libs/bitreader$(EXEEXT) libs/bytereader$(EXEEXT) \
-	libs/bytewriter$(EXEEXT) libs/bitreader-noinline$(EXEEXT) \
+	gst/gstclock$(EXEEXT) gst/gststream$(EXEEXT) \
+	gst/gststructure$(EXEEXT) gst/gsttag$(EXEEXT) \
+	gst/gsttracerrecord$(EXEEXT) gst/gsttagsetter$(EXEEXT) \
+	gst/gsttask$(EXEEXT) gst/gsttoc$(EXEEXT) \
+	gst/gsttocsetter$(EXEEXT) gst/gstvalue$(EXEEXT) \
+	generic/states$(EXEEXT) $(am__EXEEXT_4) $(am__EXEEXT_5) \
+	$(am__EXEEXT_6) libs/adapter$(EXEEXT) libs/bitreader$(EXEEXT) \
+	libs/bytereader$(EXEEXT) libs/bytewriter$(EXEEXT) \
+	libs/bitreader-noinline$(EXEEXT) \
 	libs/bytereader-noinline$(EXEEXT) \
 	libs/bytewriter-noinline$(EXEEXT) libs/flowcombiner$(EXEEXT) \
 	libs/sparsefile$(EXEEXT) libs/collectpads$(EXEEXT) \
@@ -165,7 +166,7 @@
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
-@GST_DISABLE_REGISTRY_FALSE@@GST_DISABLE_TRACE_FALSE@am__EXEEXT_1 = gst/gstabi$(EXEEXT)
+@GST_DISABLE_REGISTRY_FALSE@am__EXEEXT_1 = gst/gstabi$(EXEEXT)
 @HAVE_CXX_TRUE@am__EXEEXT_2 = gst/gstcpp$(EXEEXT) \
 @HAVE_CXX_TRUE@	libs/gstlibscpp$(EXEEXT)
 @GST_DISABLE_GST_DEBUG_FALSE@am__EXEEXT_3 = gst/gstprintf$(EXEEXT)
@@ -578,6 +579,12 @@
 gst_gstsegment_DEPENDENCIES = $(top_builddir)/libs/gst/check/libgstcheck-@GST_API_VERSION@.la \
 	$(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
 	$(am__DEPENDENCIES_1)
+gst_gststream_SOURCES = gst/gststream.c
+gst_gststream_OBJECTS = gst/gststream.$(OBJEXT)
+gst_gststream_LDADD = $(LDADD)
+gst_gststream_DEPENDENCIES = $(top_builddir)/libs/gst/check/libgstcheck-@GST_API_VERSION@.la \
+	$(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
+	$(am__DEPENDENCIES_1)
 gst_gststructure_SOURCES = gst/gststructure.c
 gst_gststructure_OBJECTS = gst/gststructure.$(OBJEXT)
 gst_gststructure_LDADD = $(LDADD)
@@ -907,13 +914,13 @@
 	gst/gstparamspecs.c gst/gstpipeline.c gst/gstplugin.c \
 	gst/gstpoll.c gst/gstpreset.c gst/gstprintf.c \
 	gst/gstprotection.c gst/gstquery.c gst/gstregistry.c \
-	gst/gstsegment.c gst/gststructure.c gst/gstsystemclock.c \
-	gst/gsttag.c gst/gsttagsetter.c gst/gsttask.c gst/gsttoc.c \
-	gst/gsttocsetter.c gst/gsttracerrecord.c gst/gsturi.c \
-	gst/gstutils.c gst/gstvalue.c libs/adapter.c libs/baseparse.c \
-	libs/basesink.c libs/basesrc.c libs/bitreader.c \
-	libs/bitreader-noinline.c libs/bytereader.c \
-	libs/bytereader-noinline.c libs/bytewriter.c \
+	gst/gstsegment.c gst/gststream.c gst/gststructure.c \
+	gst/gstsystemclock.c gst/gsttag.c gst/gsttagsetter.c \
+	gst/gsttask.c gst/gsttoc.c gst/gsttocsetter.c \
+	gst/gsttracerrecord.c gst/gsturi.c gst/gstutils.c \
+	gst/gstvalue.c libs/adapter.c libs/baseparse.c libs/basesink.c \
+	libs/basesrc.c libs/bitreader.c libs/bitreader-noinline.c \
+	libs/bytereader.c libs/bytereader-noinline.c libs/bytewriter.c \
 	libs/bytewriter-noinline.c libs/collectpads.c \
 	libs/controller.c libs/flowcombiner.c libs/gstharness.c \
 	$(libs_gstlibscpp_SOURCES) libs/gstnetclientclock.c \
@@ -943,8 +950,8 @@
 	gst/gstpipeline.c gst/gstplugin.c gst/gstpoll.c \
 	gst/gstpreset.c gst/gstprintf.c gst/gstprotection.c \
 	gst/gstquery.c gst/gstregistry.c gst/gstsegment.c \
-	gst/gststructure.c gst/gstsystemclock.c gst/gsttag.c \
-	gst/gsttagsetter.c gst/gsttask.c gst/gsttoc.c \
+	gst/gststream.c gst/gststructure.c gst/gstsystemclock.c \
+	gst/gsttag.c gst/gsttagsetter.c gst/gsttask.c gst/gsttoc.c \
 	gst/gsttocsetter.c gst/gsttracerrecord.c gst/gsturi.c \
 	gst/gstutils.c gst/gstvalue.c libs/adapter.c libs/baseparse.c \
 	libs/basesink.c libs/basesrc.c libs/bitreader.c \
@@ -1265,6 +1272,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -1272,17 +1280,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -1407,6 +1412,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
@@ -1511,7 +1518,7 @@
 
 # Do not run the abi test in case any option which causes the API to change has
 # been used
-@GST_DISABLE_REGISTRY_FALSE@@GST_DISABLE_TRACE_FALSE@ABI_CHECKS = gst/gstabi
+@GST_DISABLE_REGISTRY_FALSE@ABI_CHECKS = gst/gstabi
 @GST_DISABLE_GST_DEBUG_FALSE@PRINTF_CHECKS = gst/gstprintf
 @GST_DISABLE_GST_DEBUG_TRUE@PRINTF_CHECKS = 
 LIBSABI_CHECKS = libs/libsabi
@@ -1590,7 +1597,7 @@
 EXTRA_DIST = \
 	libs/test_transform.c
 
-AM_CFLAGS = $(GST_OBJ_CFLAGS) -UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS \
+AM_CFLAGS = $(PTHREAD_CFLAGS) $(GST_OBJ_CFLAGS) -UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS \
 	-DGST_CHECK_TEST_ENVIRONMENT_BEACON="\"GST_STATE_IGNORE_ELEMENTS\""
 
 AM_CXXFLAGS = $(GST_OBJ_CXXFLAGS) -UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS \
@@ -1631,7 +1638,7 @@
 # these just need valgrind fixing, period
 VALGRIND_TO_FIX = \
 	gst/gstinfo \
-	pipelines/parse-launch \
+	gst/gsttracerrecord \
 	tools/gstinspect
 
 VALGRIND_IGNORE = \
@@ -2073,6 +2080,12 @@
 gst/gstsegment$(EXEEXT): $(gst_gstsegment_OBJECTS) $(gst_gstsegment_DEPENDENCIES) $(EXTRA_gst_gstsegment_DEPENDENCIES) gst/$(am__dirstamp)
 	@rm -f gst/gstsegment$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(gst_gstsegment_OBJECTS) $(gst_gstsegment_LDADD) $(LIBS)
+gst/gststream.$(OBJEXT): gst/$(am__dirstamp) \
+	gst/$(DEPDIR)/$(am__dirstamp)
+
+gst/gststream$(EXEEXT): $(gst_gststream_OBJECTS) $(gst_gststream_DEPENDENCIES) $(EXTRA_gst_gststream_DEPENDENCIES) gst/$(am__dirstamp)
+	@rm -f gst/gststream$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(gst_gststream_OBJECTS) $(gst_gststream_LDADD) $(LIBS)
 gst/gststructure.$(OBJEXT): gst/$(am__dirstamp) \
 	gst/$(DEPDIR)/$(am__dirstamp)
 
@@ -2420,6 +2433,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@gst/$(DEPDIR)/gstquery.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@gst/$(DEPDIR)/gstregistry.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@gst/$(DEPDIR)/gstsegment.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@gst/$(DEPDIR)/gststream.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@gst/$(DEPDIR)/gststructure.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@gst/$(DEPDIR)/gstsystemclock.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@gst/$(DEPDIR)/gsttag.Po@am__quote@
@@ -2954,6 +2968,13 @@
 	--log-file $$b.log --trs-file $$b.trs \
 	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
 	"$$tst" $(AM_TESTS_FD_REDIRECT)
+gst/gststream.log: gst/gststream$(EXEEXT)
+	@p='gst/gststream$(EXEEXT)'; \
+	b='gst/gststream'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
 gst/gststructure.log: gst/gststructure$(EXEEXT)
 	@p='gst/gststructure$(EXEEXT)'; \
 	b='gst/gststructure'; \
diff --git a/tests/check/elements/fakesink.c b/tests/check/elements/fakesink.c
index b96d266..0f811b1 100644
--- a/tests/check/elements/fakesink.c
+++ b/tests/check/elements/fakesink.c
@@ -915,8 +915,7 @@
   GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
   GstPushSrcClass *pushsrc_class = GST_PUSH_SRC_CLASS (klass);
 
-  gst_element_class_add_pad_template (element_class,
-      gst_static_pad_template_get (&sinktemplate));
+  gst_element_class_add_static_pad_template (element_class, &sinktemplate);
 
   pushsrc_class->create = GST_DEBUG_FUNCPTR (oob_source_create);
 }
@@ -1072,6 +1071,8 @@
 
   fail_unless_equals_int (counter1, NUM_BUFFERS);
   fail_unless_equals_int (counter2, NUM_BUFFERS);
+
+  gst_object_unref (pipe);
 }
 
 GST_END_TEST;
diff --git a/tests/check/elements/filesrc.c b/tests/check/elements/filesrc.c
index 5487f7c..65b5fb3 100644
--- a/tests/check/elements/filesrc.c
+++ b/tests/check/elements/filesrc.c
@@ -83,6 +83,7 @@
 static void
 cleanup_filesrc (GstElement * filesrc)
 {
+  gst_check_drop_buffers ();
   gst_pad_set_active (mysinkpad, FALSE);
   gst_check_teardown_sink_pad (filesrc);
   gst_check_teardown_element (filesrc);
diff --git a/tests/check/elements/multiqueue.c b/tests/check/elements/multiqueue.c
index 0cd54d2..e99f555 100644
--- a/tests/check/elements/multiqueue.c
+++ b/tests/check/elements/multiqueue.c
@@ -976,6 +976,114 @@
 
 GST_END_TEST;
 
+GST_START_TEST (test_watermark_and_fill_level)
+{
+  /* This test checks the behavior of the fill level and
+   * the low/high watermarks. It also checks if the
+   * low/high-percent and low/high-watermark properties
+   * are coupled together properly. */
+  GstElement *pipe;
+  GstElement *mq, *fakesink;
+  GstPad *inputpad;
+  GstPad *mq_sinkpad;
+  GstPad *sinkpad;
+  GstSegment segment;
+  GThread *thread;
+  gint low_perc, high_perc;
+
+
+  /* Setup test pipeline with one multiqueue and one fakesink */
+
+  pipe = gst_pipeline_new ("testbin");
+  mq = gst_element_factory_make ("multiqueue", NULL);
+  fail_unless (mq != NULL);
+  gst_bin_add (GST_BIN (pipe), mq);
+
+  fakesink = gst_element_factory_make ("fakesink", NULL);
+  fail_unless (fakesink != NULL);
+  gst_bin_add (GST_BIN (pipe), fakesink);
+
+  /* Block fakesink sinkpad flow to ensure the queue isn't emptied
+   * by the prerolling sink */
+  sinkpad = gst_element_get_static_pad (fakesink, "sink");
+  gst_pad_add_probe (sinkpad, GST_PAD_PROBE_TYPE_BLOCK, block_probe, NULL,
+      NULL);
+  gst_object_unref (sinkpad);
+
+  g_object_set (mq,
+      "use-buffering", (gboolean) TRUE,
+      "max-size-bytes", (guint) 1000 * 1000,
+      "max-size-buffers", (guint) 0,
+      "max-size-time", (guint64) 0,
+      "extra-size-bytes", (guint) 0,
+      "extra-size-buffers", (guint) 0,
+      "extra-size-time", (guint64) 0,
+      "low-watermark", (gdouble) 0.01, "high-watermark", (gdouble) 0.10, NULL);
+
+  g_object_get (mq, "low-percent", &low_perc, "high-percent", &high_perc, NULL);
+
+  /* Check that low/high-watermark and low/high-percent are
+   * coupled properly. (low/high-percent are deprecated and
+   * exist for backwards compatibility.) */
+  fail_unless_equals_int (low_perc, 1);
+  fail_unless_equals_int (high_perc, 10);
+
+  gst_segment_init (&segment, GST_FORMAT_TIME);
+
+  inputpad = gst_pad_new ("dummysrc", GST_PAD_SRC);
+  gst_pad_set_query_function (inputpad, mq_dummypad_query);
+
+  mq_sinkpad = gst_element_get_request_pad (mq, "sink_%u");
+  fail_unless (mq_sinkpad != NULL);
+  fail_unless (gst_pad_link (inputpad, mq_sinkpad) == GST_PAD_LINK_OK);
+
+  gst_pad_set_active (inputpad, TRUE);
+
+  gst_pad_push_event (inputpad, gst_event_new_stream_start ("test"));
+  gst_pad_push_event (inputpad, gst_event_new_segment (&segment));
+
+  gst_object_unref (mq_sinkpad);
+
+  fail_unless (gst_element_link (mq, fakesink));
+
+  /* Start pipeline in paused state to ensure the sink remains
+   * in preroll mode and blocks */
+  gst_element_set_state (pipe, GST_STATE_PAUSED);
+
+  /* Feed data. queue will be filled to 8% (because it pushes 80000 bytes),
+   * which is below the high-threshold, provoking a buffering message. */
+  thread = g_thread_new ("push1", pad_push_datablock_thread, inputpad);
+  g_thread_join (thread);
+
+  /* Check for the buffering message; it should indicate 80% fill level
+   * (Note that the percentage from the message is normalized) */
+  CHECK_FOR_BUFFERING_MSG (pipe, 80);
+
+  /* Increase the buffer size and lower the watermarks to test
+   * if <1% watermarks are supported. */
+  g_object_set (mq,
+      "max-size-bytes", (guint) 20 * 1000 * 1000,
+      "low-watermark", (gdouble) 0.0001, "high-watermark", (gdouble) 0.005,
+      NULL);
+  /* First buffering message is posted after the max-size-bytes limit
+   * is set to 20000000 bytes & the low-watermark is set. Since the
+   * multiqueue contains 80000 bytes, and the high watermark still is
+   * 0.1 at this point, and the buffer level 80000 / 20000000 = 0.004 is
+   * normalized by 0.1: 0.004 / 0.1 => buffering percentage 4%. */
+  CHECK_FOR_BUFFERING_MSG (pipe, 4);
+  /* Second buffering message is posted after the high-watermark limit
+   * is set to 0.005. This time, the buffer level is normalized this way:
+   * 0.004 / 0.005 => buffering percentage 80%. */
+  CHECK_FOR_BUFFERING_MSG (pipe, 80);
+
+
+  gst_element_set_state (pipe, GST_STATE_NULL);
+  gst_object_unref (inputpad);
+  gst_object_unref (pipe);
+}
+
+GST_END_TEST;
+
 GST_START_TEST (test_high_threshold_change)
 {
   /* This test checks what happens if the high threshold is changed to a
@@ -1508,6 +1616,7 @@
 
   tcase_add_test (tc_chain, test_sparse_stream);
   tcase_add_test (tc_chain, test_initial_fill_above_high_threshold);
+  tcase_add_test (tc_chain, test_watermark_and_fill_level);
   tcase_add_test (tc_chain, test_high_threshold_change);
   tcase_add_test (tc_chain, test_low_threshold_change);
   tcase_add_test (tc_chain, test_limit_changes);
diff --git a/tests/check/elements/queue2.c b/tests/check/elements/queue2.c
index 91c24ad..6087569 100644
--- a/tests/check/elements/queue2.c
+++ b/tests/check/elements/queue2.c
@@ -207,6 +207,174 @@
 
 GST_END_TEST;
 
+static gboolean
+queue2_dummypad_query (GstPad * sinkpad, GstObject * parent, GstQuery * query)
+{
+  gboolean res = TRUE;
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_CAPS:
+    {
+      GstCaps *filter, *caps;
+
+      gst_query_parse_caps (query, &filter);
+      caps = (filter ? gst_caps_ref (filter) : gst_caps_new_any ());
+      gst_query_set_caps_result (query, caps);
+      gst_caps_unref (caps);
+      break;
+    }
+    default:
+      res = gst_pad_query_default (sinkpad, parent, query);
+      break;
+  }
+  return res;
+}
+
+static gpointer
+pad_push_datablock_thread (gpointer data)
+{
+  GstPad *pad = data;
+  GstBuffer *buf;
+
+  buf = gst_buffer_new_allocate (NULL, 80 * 1000, NULL);
+  gst_pad_push (pad, buf);
+
+  return NULL;
+}
+
+static GstPadProbeReturn
+block_probe (GstPad * pad, GstPadProbeInfo * info, gpointer user_data)
+{
+  return GST_PAD_PROBE_OK;
+}
+
+#define CHECK_FOR_BUFFERING_MSG(PIPELINE, EXPECTED_PERC) \
+  G_STMT_START { \
+    gint buf_perc; \
+    GstMessage *msg; \
+    GST_LOG ("waiting for %d%% buffering message", (EXPECTED_PERC)); \
+    msg = gst_bus_poll (GST_ELEMENT_BUS (PIPELINE), \
+        GST_MESSAGE_BUFFERING | GST_MESSAGE_ERROR, -1); \
+    fail_if (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_ERROR, \
+        "Expected BUFFERING message, got ERROR message"); \
+    gst_message_parse_buffering (msg, &buf_perc); \
+    gst_message_unref (msg); \
+    fail_unless (buf_perc == (EXPECTED_PERC), \
+        "Got incorrect percentage: %d%% expected: %d%%", buf_perc, \
+        (EXPECTED_PERC)); \
+  } G_STMT_END
+
+GST_START_TEST (test_watermark_and_fill_level)
+{
+  /* This test checks the behavior of the fill level and
+   * the low/high watermarks. It also checks if the
+   * low/high-percent and low/high-watermark properties
+   * are coupled together properly. */
+
+  GstElement *pipe;
+  GstElement *queue2, *fakesink;
+  GstPad *inputpad;
+  GstPad *queue2_sinkpad;
+  GstPad *sinkpad;
+  GstSegment segment;
+  GThread *thread;
+  gint low_perc, high_perc;
+
+
+  /* Setup test pipeline with one multiqueue and one fakesink */
+
+  pipe = gst_pipeline_new ("pipeline");
+  queue2 = gst_element_factory_make ("queue2", NULL);
+  fail_unless (queue2 != NULL);
+  gst_bin_add (GST_BIN (pipe), queue2);
+
+  fakesink = gst_element_factory_make ("fakesink", NULL);
+  fail_unless (fakesink != NULL);
+  gst_bin_add (GST_BIN (pipe), fakesink);
+
+  /* Block fakesink sinkpad flow to ensure the queue isn't emptied
+   * by the prerolling sink */
+  sinkpad = gst_element_get_static_pad (fakesink, "sink");
+  gst_pad_add_probe (sinkpad, GST_PAD_PROBE_TYPE_BLOCK, block_probe, NULL,
+      NULL);
+  gst_object_unref (sinkpad);
+
+  g_object_set (queue2,
+      "use-buffering", (gboolean) TRUE,
+      "max-size-bytes", (guint) 1000 * 1000,
+      "max-size-buffers", (guint) 0,
+      "max-size-time", (guint64) 0,
+      "low-watermark", (gdouble) 0.01, "high-watermark", (gdouble) 0.10, NULL);
+
+  g_object_get (queue2, "low-percent", &low_perc,
+      "high-percent", &high_perc, NULL);
+
+  /* Check that low/high-watermark and low/high-percent are
+   * coupled properly. (low/high-percent are deprecated and
+   * exist for backwards compatibility.) */
+  fail_unless_equals_int (low_perc, 1);
+  fail_unless_equals_int (high_perc, 10);
+
+  gst_segment_init (&segment, GST_FORMAT_TIME);
+
+  inputpad = gst_pad_new ("dummysrc", GST_PAD_SRC);
+  gst_pad_set_query_function (inputpad, queue2_dummypad_query);
+
+  queue2_sinkpad = gst_element_get_static_pad (queue2, "sink");
+  fail_unless (queue2_sinkpad != NULL);
+  fail_unless (gst_pad_link (inputpad, queue2_sinkpad) == GST_PAD_LINK_OK);
+
+  gst_pad_set_active (inputpad, TRUE);
+
+  gst_pad_push_event (inputpad, gst_event_new_stream_start ("test"));
+  gst_pad_push_event (inputpad, gst_event_new_segment (&segment));
+
+  gst_object_unref (queue2_sinkpad);
+
+  fail_unless (gst_element_link (queue2, fakesink));
+
+  /* Start pipeline in paused state to ensure the sink remains
+   * in preroll mode and blocks */
+  gst_element_set_state (pipe, GST_STATE_PAUSED);
+
+  /* When the use-buffering property is set to TRUE, a buffering
+   * message is posted. Since the queue is empty at that point,
+   * the buffering message contains a value of 0%. */
+  CHECK_FOR_BUFFERING_MSG (pipe, 0);
+
+  /* Feed data. queue will be filled to 80% (because it pushes 80000 bytes),
+   * which is below the high-threshold, provoking a buffering message. */
+  thread = g_thread_new ("push1", pad_push_datablock_thread, inputpad);
+  g_thread_join (thread);
+
+  /* Check for the buffering message; it should indicate 80% fill level
+   * (Note that the percentage from the message is normalized) */
+  CHECK_FOR_BUFFERING_MSG (pipe, 80);
+
+  /* Increase the buffer size and lower the watermarks to test
+   * if <1% watermarks are supported. */
+  g_object_set (queue2,
+      "max-size-bytes", (guint) 20 * 1000 * 1000,
+      "low-watermark", (gdouble) 0.0001, "high-watermark", (gdouble) 0.005,
+      NULL);
+
+  /* First buffering message is posted after the max-size-bytes limit
+   * is set to 20000000 bytes & the low-watermark is set. Since the
+   * queue contains 80000 bytes, and the high watermark still is
+   * 0.1 at this point, and the buffer level 80000 / 20000000 = 0.004 is
+   * normalized by 0.1: 0.004 / 0.1 => buffering percentage 4%. */
+  CHECK_FOR_BUFFERING_MSG (pipe, 4);
+  /* Second buffering message is posted after the high-watermark limit
+   * is set to 0.005. This time, the buffer level is normalized this way:
+   * 0.004 / 0.005 => buffering percentage 80%. */
+  CHECK_FOR_BUFFERING_MSG (pipe, 80);
+
+  gst_element_set_state (pipe, GST_STATE_NULL);
+  gst_object_unref (pipe);
+}
+
+GST_END_TEST;
+
 static gpointer
 push_buffer (GstPad * sinkpad)
 {
@@ -333,6 +501,45 @@
 
 GST_END_TEST;
 
+GST_START_TEST (test_small_ring_buffer)
+{
+  GstElement *pipeline;
+  GstElement *queue2;
+  const gchar *desc;
+  GstBus *bus;
+  GstMessage *msg;
+
+  /* buffer too small to seek used to crash, test for regression */
+  desc = "fakesrc sizetype=2 sizemax=4096 num-buffers=100 datarate=1000 ! "
+      "queue2 ring-buffer-max-size=1000 name=q2 ! fakesink sync=true";
+
+  pipeline = gst_parse_launch (desc, NULL);
+  fail_if (pipeline == NULL);
+
+  queue2 = gst_bin_get_by_name (GST_BIN (pipeline), "q2");
+  fail_if (queue2 == NULL);
+
+  /* bring the pipeline to PLAYING, then start switching */
+  bus = gst_element_get_bus (pipeline);
+  fail_if (bus == NULL);
+  gst_element_set_state (pipeline, GST_STATE_PLAYING);
+  /* Wait for the pipeline to hit playing */
+  gst_element_get_state (pipeline, NULL, NULL, GST_CLOCK_TIME_NONE);
+
+  /* now wait for completion or error */
+  msg = gst_bus_poll (bus, GST_MESSAGE_EOS | GST_MESSAGE_ERROR, -1);
+  fail_if (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_ERROR,
+      "Expected EOS message, got ERROR message");
+  gst_message_unref (msg);
+
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_object_unref (queue2);
+  gst_object_unref (bus);
+  gst_object_unref (pipeline);
+}
+
+GST_END_TEST;
+
 static Suite *
 queue2_suite (void)
 {
@@ -345,8 +552,10 @@
   tcase_add_test (tc_chain, test_simple_pipeline_ringbuffer);
   tcase_add_test (tc_chain, test_simple_shutdown_while_running);
   tcase_add_test (tc_chain, test_simple_shutdown_while_running_ringbuffer);
+  tcase_add_test (tc_chain, test_watermark_and_fill_level);
   tcase_add_test (tc_chain, test_filled_read);
   tcase_add_test (tc_chain, test_percent_overflow);
+  tcase_add_test (tc_chain, test_small_ring_buffer);
 
   return s;
 }
diff --git a/tests/check/elements/selector.c b/tests/check/elements/selector.c
index 1bb2d02..c7320e6 100644
--- a/tests/check/elements/selector.c
+++ b/tests/check/elements/selector.c
@@ -470,6 +470,8 @@
   gst_pad_set_active (output_pad, FALSE);
   gst_check_teardown_sink_pad (selector);
   gst_check_teardown_element (selector);
+  gst_object_unref (stream1_pad);
+  gst_object_unref (stream2_pad);
 
   g_mutex_clear (&eos_probe_lock);
   g_cond_clear (&eos_probe_cond);
diff --git a/tests/check/elements/streamiddemux.c b/tests/check/elements/streamiddemux.c
index 8c10bce..25bb969 100644
--- a/tests/check/elements/streamiddemux.c
+++ b/tests/check/elements/streamiddemux.c
@@ -63,9 +63,10 @@
 
   gst_caps_unref (td->mycaps);
 
-  if (active_srcpad)
+  if (active_srcpad) {
     gst_object_unref (active_srcpad);
-
+    active_srcpad = NULL;
+  }
   gst_object_unref (td->demux);
 }
 
@@ -265,15 +266,15 @@
 static gboolean
 sink_event_func (GstPad * pad, GstObject * parent, GstEvent * event)
 {
-  GList **expected = GST_PAD_ELEMENT_PRIVATE (pad);
+  GList **expected = GST_PAD_ELEMENT_PRIVATE (pad), *l;
   GstEvent *exp;
 
   switch (GST_EVENT_TYPE (event)) {
     case GST_EVENT_CAPS:{
       GstCaps *recvcaps, *expectcaps;
 
-      *expected = g_list_first (*expected);
-      exp = GST_EVENT ((*expected)->data);
+      l = g_list_first (*expected);
+      exp = GST_EVENT (l->data);
 
       gst_event_parse_caps (event, &recvcaps);
       gst_event_parse_caps (exp, &expectcaps);
@@ -284,8 +285,8 @@
     case GST_EVENT_SEGMENT:{
       const GstSegment *recvseg, *expectseg;
 
-      *expected = g_list_last (*expected);
-      exp = GST_EVENT ((*expected)->data);
+      l = g_list_last (*expected);
+      exp = GST_EVENT (l->data);
 
       gst_event_parse_segment (event, &recvseg);
       gst_event_parse_segment (exp, &expectseg);
@@ -395,6 +396,8 @@
 
   for (stream_cnt = 0; stream_cnt < NUM_SUBSTREAMS; ++stream_cnt) {
     gst_object_unref (td.mysink[stream_cnt]);
+
+    g_list_free_full (expected[stream_cnt], (GDestroyNotify) gst_event_unref);
   }
   gst_object_unref (td.mysrc);
 
diff --git a/tests/check/gst/gstbin.c b/tests/check/gst/gstbin.c
index 297f6b4..30e0bef 100644
--- a/tests/check/gst/gstbin.c
+++ b/tests/check/gst/gstbin.c
@@ -296,6 +296,8 @@
 
   ASSERT_OBJECT_REFCOUNT (bin, "bin", 1);
 
+  gst_bus_set_flushing (bus, TRUE);
+
   /* clean up */
   ret = gst_element_set_state (GST_ELEMENT (bin), GST_STATE_NULL);
   fail_unless (ret == GST_STATE_CHANGE_SUCCESS);
@@ -359,9 +361,12 @@
   ASSERT_OBJECT_REFCOUNT (src, "src", 1);
   ASSERT_OBJECT_REFCOUNT (bin, "bin", 1);
 
+  gst_bus_set_flushing (bus, TRUE);
+
   /* clean up */
   ret = gst_element_set_state (GST_ELEMENT (bin), GST_STATE_NULL);
   fail_unless (ret == GST_STATE_CHANGE_SUCCESS);
+
   gst_object_unref (bus);
   gst_object_unref (bin);
 }
@@ -579,7 +584,8 @@
   fail_unless (gst_bus_have_pending (bus) == FALSE,
       "Unexpected messages on bus");
 
-  /* setting bin to NULL flushes the bus automatically */
+  gst_bus_set_flushing (bus, TRUE);
+
   ret = gst_element_set_state (GST_ELEMENT (bin), GST_STATE_NULL);
   fail_unless (ret == GST_STATE_CHANGE_SUCCESS);
 
@@ -1422,6 +1428,7 @@
   GstFormat format = GST_FORMAT_BYTES;
   gboolean res;
   gint64 duration;
+  GstBus *bus;
 
   GST_INFO ("preparing test");
 
@@ -1466,6 +1473,10 @@
 
   ck_assert_int_eq (duration, 3000);
 
+  bus = gst_element_get_bus (bin);
+  gst_bus_set_flushing (bus, TRUE);
+  gst_object_unref (bus);
+
   gst_element_set_state (bin, GST_STATE_NULL);
   gst_object_unref (bin);
 }
@@ -1479,6 +1490,7 @@
   GstFormat format = GST_FORMAT_BYTES;
   gboolean res;
   gint64 duration;
+  GstBus *bus;
 
   GST_INFO ("preparing test");
 
@@ -1523,13 +1535,165 @@
 
   ck_assert_int_eq (duration, GST_CLOCK_TIME_NONE);
 
+  bus = gst_element_get_bus (bin);
+  gst_bus_set_flushing (bus, TRUE);
+  gst_object_unref (bus);
+
   gst_element_set_state (bin, GST_STATE_NULL);
   gst_object_unref (bin);
 }
 
 GST_END_TEST;
 
+static gboolean
+element_in_list (GList ** list, GstElement * element)
+{
+  GList *l = g_list_find (*list, element);
 
+  if (l == NULL)
+    return FALSE;
+
+  *list = g_list_delete_link (*list, l);
+  return TRUE;
+}
+
+#define element_was_added(e) element_in_list(&added,e)
+#define element_was_removed(e) element_in_list(&removed,e)
+
+static void
+add_cb (GstBin * pipeline, GstBin * bin, GstElement * element, GList ** list)
+{
+  fail_unless (GST_OBJECT_PARENT (element) == GST_OBJECT_CAST (bin));
+
+  *list = g_list_prepend (*list, element);
+}
+
+static void
+remove_cb (GstBin * pipeline, GstBin * bin, GstElement * element, GList ** list)
+{
+  *list = g_list_prepend (*list, element);
+}
+
+GST_START_TEST (test_deep_added_removed)
+{
+  GstElement *pipe, *e, *bin0, *bin1;
+  gulong id_removed, id_added;
+  GList *removed = NULL;
+  GList *added = NULL;
+
+  pipe = gst_pipeline_new (NULL);
+
+  id_added = g_signal_connect (pipe, "deep-element-added",
+      G_CALLBACK (add_cb), &added);
+  id_removed = g_signal_connect (pipe, "deep-element-removed",
+      G_CALLBACK (remove_cb), &removed);
+
+  /* simple add/remove */
+  e = gst_element_factory_make ("identity", NULL);
+  gst_bin_add (GST_BIN (pipe), e);
+  fail_unless (element_was_added (e));
+  gst_bin_remove (GST_BIN (pipe), e);
+  fail_unless (element_was_removed (e));
+
+  /* let's try with a deeper hierarchy, construct it from top-level down */
+  bin0 = gst_bin_new (NULL);
+  gst_bin_add (GST_BIN (pipe), bin0);
+  bin1 = gst_bin_new (NULL);
+  gst_bin_add (GST_BIN (bin0), bin1);
+  e = gst_element_factory_make ("identity", NULL);
+  gst_bin_add (GST_BIN (bin1), e);
+  fail_unless (element_was_added (bin0));
+  fail_unless (element_was_added (bin1));
+  fail_unless (element_was_added (e));
+  fail_unless (added == NULL);
+  fail_unless (removed == NULL);
+
+  gst_object_ref (e);           /* keep e alive */
+  gst_bin_remove (GST_BIN (bin1), e);
+  fail_unless (element_was_removed (e));
+  fail_unless (added == NULL);
+  fail_unless (removed == NULL);
+
+  /* now add existing bin hierarchy to pipeline (first remove it so we can re-add it) */
+  gst_object_ref (bin0);        /* keep bin0 alive */
+  gst_bin_remove (GST_BIN (pipe), bin0);
+  fail_unless (element_was_removed (bin0));
+  fail_unless (element_was_removed (bin1));
+  fail_unless (added == NULL);
+  fail_unless (removed == NULL);
+
+  /* re-adding element to removed bin should not trigger our callbacks */
+  gst_bin_add (GST_BIN (bin1), e);
+  fail_unless (added == NULL);
+  fail_unless (removed == NULL);
+
+  gst_bin_add (GST_BIN (pipe), bin0);
+  fail_unless (element_was_added (bin0));
+  fail_unless (element_was_added (bin1));
+  fail_unless (element_was_added (e));
+  fail_unless (added == NULL);
+  fail_unless (removed == NULL);
+  gst_object_unref (bin0);
+  gst_object_unref (e);
+
+  /* disconnect signals, unref will trigger remove callbacks otherwise */
+  g_signal_handler_disconnect (pipe, id_added);
+  g_signal_handler_disconnect (pipe, id_removed);
+
+  gst_object_unref (pipe);
+}
+
+GST_END_TEST;
+
+#define _GST_CHECK_BIN_SUPPRESSED_FLAGS(element_flags, suppressed_flags, \
+    expected_flags) \
+G_STMT_START { \
+  GstBin *bin = GST_BIN (gst_bin_new ("test-bin")); \
+  GstElement *element = gst_element_factory_make ("identity", "test-i"); \
+  GstElementFlags natural_flags = GST_OBJECT_FLAGS (bin); \
+  GST_OBJECT_FLAG_SET (element, element_flags); \
+  gst_bin_set_suppressed_flags (bin, suppressed_flags); \
+  gst_bin_add (bin, element); \
+  fail_unless ((natural_flags | GST_OBJECT_FLAGS (bin)) \
+      == expected_flags); \
+  gst_object_unref (bin); \
+} G_STMT_END
+
+GST_START_TEST (test_suppressed_flags)
+{
+  _GST_CHECK_BIN_SUPPRESSED_FLAGS (GST_ELEMENT_FLAG_SOURCE,
+      0, GST_ELEMENT_FLAG_SOURCE);
+  _GST_CHECK_BIN_SUPPRESSED_FLAGS (GST_ELEMENT_FLAG_SOURCE,
+      GST_ELEMENT_FLAG_SOURCE, 0);
+  _GST_CHECK_BIN_SUPPRESSED_FLAGS (GST_ELEMENT_FLAG_SOURCE,
+      GST_ELEMENT_FLAG_SINK, GST_ELEMENT_FLAG_SOURCE);
+  _GST_CHECK_BIN_SUPPRESSED_FLAGS (GST_ELEMENT_FLAG_SOURCE |
+      GST_ELEMENT_FLAG_PROVIDE_CLOCK,
+      GST_ELEMENT_FLAG_PROVIDE_CLOCK, GST_ELEMENT_FLAG_SOURCE);
+
+  _GST_CHECK_BIN_SUPPRESSED_FLAGS (GST_ELEMENT_FLAG_SINK,
+      0, GST_ELEMENT_FLAG_SINK);
+  _GST_CHECK_BIN_SUPPRESSED_FLAGS (GST_ELEMENT_FLAG_SINK,
+      GST_ELEMENT_FLAG_SINK, 0);
+  _GST_CHECK_BIN_SUPPRESSED_FLAGS (GST_ELEMENT_FLAG_SINK,
+      GST_ELEMENT_FLAG_SOURCE, GST_ELEMENT_FLAG_SINK);
+
+  _GST_CHECK_BIN_SUPPRESSED_FLAGS (GST_ELEMENT_FLAG_PROVIDE_CLOCK,
+      0, GST_ELEMENT_FLAG_PROVIDE_CLOCK);
+  _GST_CHECK_BIN_SUPPRESSED_FLAGS (GST_ELEMENT_FLAG_PROVIDE_CLOCK,
+      GST_ELEMENT_FLAG_PROVIDE_CLOCK, 0);
+  _GST_CHECK_BIN_SUPPRESSED_FLAGS (GST_ELEMENT_FLAG_PROVIDE_CLOCK,
+      GST_ELEMENT_FLAG_REQUIRE_CLOCK, GST_ELEMENT_FLAG_PROVIDE_CLOCK);
+
+  _GST_CHECK_BIN_SUPPRESSED_FLAGS (GST_ELEMENT_FLAG_REQUIRE_CLOCK,
+      0, GST_ELEMENT_FLAG_REQUIRE_CLOCK);
+  _GST_CHECK_BIN_SUPPRESSED_FLAGS (GST_ELEMENT_FLAG_REQUIRE_CLOCK,
+      GST_ELEMENT_FLAG_REQUIRE_CLOCK, 0);
+  _GST_CHECK_BIN_SUPPRESSED_FLAGS (GST_ELEMENT_FLAG_REQUIRE_CLOCK,
+      GST_ELEMENT_FLAG_PROVIDE_CLOCK, GST_ELEMENT_FLAG_REQUIRE_CLOCK);
+}
+
+GST_END_TEST;
 
 static Suite *
 gst_bin_suite (void)
@@ -1560,6 +1724,8 @@
   tcase_add_test (tc_chain, test_state_change_skip);
   tcase_add_test (tc_chain, test_duration_is_max);
   tcase_add_test (tc_chain, test_duration_unknown_overrides);
+  tcase_add_test (tc_chain, test_deep_added_removed);
+  tcase_add_test (tc_chain, test_suppressed_flags);
 
   /* fails on OSX build bot for some reason, and is a bit silly anyway */
   if (0)
diff --git a/tests/check/gst/gstbuffer.c b/tests/check/gst/gstbuffer.c
index 66bb5d4..620d857 100644
--- a/tests/check/gst/gstbuffer.c
+++ b/tests/check/gst/gstbuffer.c
@@ -24,12 +24,6 @@
 # include "config.h"
 #endif
 
-#ifdef HAVE_VALGRIND_H
-# include <valgrind/valgrind.h>
-#else
-# define RUNNING_ON_VALGRIND FALSE
-#endif
-
 #include <gst/check/gstcheck.h>
 
 GST_START_TEST (test_subbuffer)
@@ -466,20 +460,6 @@
   gst_buffer_unmap (buf, &info);
 
   gst_buffer_unref (buf);
-
-#if 0
-  /* Disabled this part of the test, because it happily succeeds on 64-bit
-   * machines that have enough memory+swap, because the address space is large
-   * enough. There's not really any way to test the failure case except by 
-   * allocating chunks of memory until it fails, which would suck. */
-
-  /* now this better fail (don't run in valgrind, it will abort
-   * or warn when passing silly arguments to malloc) */
-  if (!RUNNING_ON_VALGRIND) {
-    buf = gst_buffer_new_and_alloc ((guint) - 1);
-    fail_unless (buf == NULL);
-  }
-#endif
 }
 
 GST_END_TEST;
diff --git a/tests/check/gst/gstbufferpool.c b/tests/check/gst/gstbufferpool.c
index 8dd265a..8b05324 100644
--- a/tests/check/gst/gstbufferpool.c
+++ b/tests/check/gst/gstbufferpool.c
@@ -35,6 +35,27 @@
   return pool;
 }
 
+static void
+buffer_destroy_notify (gpointer ptr)
+{
+  gint *counter = ptr;
+
+  GST_DEBUG ("buffer destroyed");
+
+  *counter += 1;
+}
+
+/* Track when a buffer is destroyed. The counter will be increased if the
+ * buffer is finalized (but not if it was re-surrected in dispose and put
+ * back into the buffer pool. */
+static void
+buffer_track_destroy (GstBuffer * buf, gint * counter)
+{
+  gst_mini_object_set_qdata (GST_MINI_OBJECT (buf),
+      g_quark_from_static_string ("TestTracker"),
+      counter, buffer_destroy_notify);
+}
+
 GST_START_TEST (test_new_buffer_from_empty_pool)
 {
   GstBufferPool *pool = create_pool (10, 0, 0);
@@ -56,18 +77,26 @@
 {
   GstBufferPool *pool = create_pool (10, 0, 0);
   GstBuffer *buf = NULL, *prev;
+  gint dcount = 0;
 
   gst_buffer_pool_set_active (pool, TRUE);
   gst_buffer_pool_acquire_buffer (pool, &buf, NULL);
   prev = buf;
+  buffer_track_destroy (buf, &dcount);
   gst_buffer_unref (buf);
 
+  /* buffer should not have been freed, but have been recycled */
+  fail_unless (dcount == 0);
+
   gst_buffer_pool_acquire_buffer (pool, &buf, NULL);
   fail_unless (buf == prev, "got a fresh buffer instead of previous");
 
   gst_buffer_unref (buf);
   gst_buffer_pool_set_active (pool, FALSE);
   gst_object_unref (pool);
+
+  /* buffer should now be gone */
+  fail_unless (dcount == 1);
 }
 
 GST_END_TEST;
@@ -77,13 +106,19 @@
 {
   GstBufferPool *pool = create_pool (10, 0, 0);
   GstBuffer *buf1 = NULL, *buf2 = NULL, *prev;
+  gint dcount1 = 0, dcount2 = 0;
 
   gst_buffer_pool_set_active (pool, TRUE);
   gst_buffer_pool_acquire_buffer (pool, &buf1, NULL);
+  buffer_track_destroy (buf1, &dcount1);
   gst_buffer_pool_acquire_buffer (pool, &buf2, NULL);
+  buffer_track_destroy (buf2, &dcount2);
   prev = buf2;
   gst_buffer_unref (buf2);
 
+  /* buffer should not have been freed, but have been recycled */
+  fail_unless (dcount2 == 0);
+
   gst_buffer_pool_acquire_buffer (pool, &buf2, NULL);
   fail_unless (buf2 == prev, "got a fresh buffer instead of previous");
 
@@ -91,6 +126,9 @@
   gst_buffer_unref (buf2);
   gst_buffer_pool_set_active (pool, FALSE);
   gst_object_unref (pool);
+
+  fail_unless (dcount1 == 1);
+  fail_unless (dcount2 == 1);
 }
 
 GST_END_TEST;
@@ -133,31 +171,44 @@
   GstBufferPool *pool = create_pool (10, 0, 0);
   GstBuffer *buf = NULL, *prev;
   GstMemory *mem;
+  gint dcount = 0;
 
   gst_buffer_pool_set_active (pool, TRUE);
   gst_buffer_pool_acquire_buffer (pool, &buf, NULL);
+  fail_unless (buf != NULL);
   prev = buf;
+  buffer_track_destroy (buf, &dcount);
   /* remove all memory, pool should not reuse this buffer */
   gst_buffer_remove_all_memory (buf);
   gst_buffer_unref (buf);
 
+  /* buffer should've been destroyed instead of going back into pool */
+  fail_unless_equals_int (dcount, 1);
+
   gst_buffer_pool_acquire_buffer (pool, &buf, NULL);
-  fail_if (buf == prev, "got a reused buffer instead of new one");
   prev = buf;
+  buffer_track_destroy (buf, &dcount);
   /* do resize, pool should not reuse this buffer */
   gst_buffer_resize (buf, 5, 2);
   gst_buffer_unref (buf);
 
+  /* buffer should've been destroyed instead of going back into pool */
+  fail_unless_equals_int (dcount, 2);
+
   gst_buffer_pool_acquire_buffer (pool, &buf, NULL);
-  fail_if (buf == prev, "got a reused buffer instead of new one");
   prev = buf;
+  buffer_track_destroy (buf, &dcount);
   /* keep ref to memory, not exclusive so pool should reuse this buffer */
   mem = gst_buffer_get_memory (buf, 0);
   gst_buffer_unref (buf);
   gst_memory_unref (mem);
 
+  /* buffer should not have been destroyed and gone back into pool */
+  fail_unless_equals_int (dcount, 2);
+
   gst_buffer_pool_acquire_buffer (pool, &buf, NULL);
   fail_unless (buf == prev, "got a fresh buffer instead of previous");
+  /* we're already did track_destroy on this buf, so no need to do it again */
   mem = gst_buffer_get_memory (buf, 0);
   /* exclusive lock so pool should not reuse this buffer */
   gst_memory_lock (mem, GST_LOCK_FLAG_EXCLUSIVE);
@@ -165,9 +216,10 @@
   gst_memory_unlock (mem, GST_LOCK_FLAG_EXCLUSIVE);
   gst_memory_unref (mem);
 
-  gst_buffer_pool_acquire_buffer (pool, &buf, NULL);
-  fail_if (buf == prev, "got a reused buffer instead of new one");
-  gst_buffer_unref (buf);
+  /* buffer should have been destroyed and not gone back into pool because
+   * of the exclusive lock */
+  fail_unless_equals_int (dcount, 3);
+
   gst_buffer_pool_set_active (pool, FALSE);
   gst_object_unref (pool);
 }
diff --git a/tests/check/gst/gstcpp.cc b/tests/check/gst/gstcpp.cc
index c6aaf73..a96667a 100644
--- a/tests/check/gst/gstcpp.cc
+++ b/tests/check/gst/gstcpp.cc
@@ -1,2 +1,46 @@
-#include "gst.c"
+/* GStreamer C++ compiler include compatibility test
+ * Copyright (C) 2016 Tim-Philipp Müller <tim centricular com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
 
+#include <gst/gst.h>
+#include <gst/check/check.h>
+
+GST_START_TEST (test_init_macros)
+{
+  GstMapInfo map = GST_MAP_INFO_INIT;
+  GstPollFD poll_fd = GST_POLL_FD_INIT;
+
+  fail_unless_equals_int (map.size, 0);
+  fail_unless_equals_int (poll_fd.fd, -1);
+}
+
+GST_END_TEST;
+
+static Suite *
+gst_cpp_suite (void)
+{
+  Suite *s = suite_create ("GstC++");
+  TCase *tc_chain = tcase_create ("gst C++ tests");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_init_macros);
+
+  return s;
+}
+
+GST_CHECK_MAIN (gst_cpp);
diff --git a/tests/check/gst/gstelement.c b/tests/check/gst/gstelement.c
index 8732611..e2505bb 100644
--- a/tests/check/gst/gstelement.c
+++ b/tests/check/gst/gstelement.c
@@ -347,6 +347,141 @@
 
 GST_END_TEST;
 
+/* need to return the message here because object, property name and value
+ * are only valid as long as we keep the message alive */
+static GstMessage *
+bus_wait_for_notify_message (GstBus * bus, GstElement ** obj,
+    const gchar ** prop_name, const GValue ** val)
+{
+  GstMessage *msg;
+
+  do {
+    msg = gst_bus_timed_pop_filtered (bus, -1, GST_MESSAGE_ANY);
+    if (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_PROPERTY_NOTIFY)
+      break;
+    gst_message_unref (msg);
+  } while (TRUE);
+
+  gst_message_parse_property_notify (msg, (GstObject **) obj, prop_name, val);
+  return msg;
+}
+
+GST_START_TEST (test_property_notify_message)
+{
+  GstElement *pipeline, *identity;
+  gulong watch_id0, watch_id1, watch_id2, deep_watch_id1, deep_watch_id2;
+  GstBus *bus;
+
+  pipeline = gst_pipeline_new (NULL);
+  identity = gst_element_factory_make ("identity", NULL);
+  gst_bin_add (GST_BIN (pipeline), identity);
+
+  bus = GST_ELEMENT_BUS (pipeline);
+
+  /* need to set state to READY, otherwise bus will be flushing and discard
+   * our messages */
+  gst_element_set_state (pipeline, GST_STATE_READY);
+
+  watch_id0 = gst_element_add_property_notify_watch (identity, NULL, FALSE);
+
+  watch_id1 = gst_element_add_property_notify_watch (identity, "sync", FALSE);
+
+  watch_id2 = gst_element_add_property_notify_watch (identity, "silent", TRUE);
+
+  deep_watch_id1 =
+      gst_element_add_property_deep_notify_watch (pipeline, NULL, TRUE);
+
+  deep_watch_id2 =
+      gst_element_add_property_deep_notify_watch (pipeline, "silent", FALSE);
+
+  /* Now test property changes and if we get the messages we expect. We rely
+   * on the signals being fired in the order that they were set up here. */
+  {
+    const GValue *val;
+    const gchar *name;
+    GstMessage *msg;
+    GstElement *obj;
+
+    /* A - This should be picked up by... */
+    g_object_set (identity, "dump", TRUE, NULL);
+    /* 1) the catch-all notify on the element (no value) */
+    msg = bus_wait_for_notify_message (bus, &obj, &name, &val);
+    fail_unless (obj == identity);
+    fail_unless_equals_string (name, "dump");
+    fail_unless (val == NULL);
+    gst_message_unref (msg);
+    /* 2) the catch-all deep-notify on the pipeline (with value) */
+    msg = bus_wait_for_notify_message (bus, &obj, &name, &val);
+    fail_unless_equals_string (name, "dump");
+    fail_unless (obj == identity);
+    fail_unless (G_VALUE_HOLDS_BOOLEAN (val));
+    fail_unless_equals_int (g_value_get_boolean (val), TRUE);
+    gst_message_unref (msg);
+
+    /* B - This should be picked up by... */
+    g_object_set (identity, "sync", TRUE, NULL);
+    /* 1) the catch-all notify on the element (no value) */
+    msg = bus_wait_for_notify_message (bus, &obj, &name, &val);
+    fail_unless (obj == identity);
+    fail_unless_equals_string (name, "sync");
+    fail_unless (val == NULL);
+    gst_message_unref (msg);
+    /* 2) the "sync" notify on the element (no value) */
+    msg = bus_wait_for_notify_message (bus, &obj, &name, &val);
+    fail_unless (obj == identity);
+    fail_unless_equals_string (name, "sync");
+    fail_unless (val == NULL);
+    gst_message_unref (msg);
+    /* 3) the catch-all deep-notify on the pipeline (with value) */
+    msg = bus_wait_for_notify_message (bus, &obj, &name, &val);
+    fail_unless_equals_string (name, "sync");
+    fail_unless (obj == identity);
+    fail_unless (G_VALUE_HOLDS_BOOLEAN (val));
+    fail_unless_equals_int (g_value_get_boolean (val), TRUE);
+    gst_message_unref (msg);
+
+    /* C - This should be picked up by... */
+    g_object_set (identity, "silent", FALSE, NULL);
+    /* 1) the catch-all notify on the element (no value) */
+    msg = bus_wait_for_notify_message (bus, &obj, &name, &val);
+    fail_unless (obj == identity);
+    fail_unless_equals_string (name, "silent");
+    fail_unless (val == NULL);
+    gst_message_unref (msg);
+    /* 2) the "silent" notify on the element (with value) */
+    msg = bus_wait_for_notify_message (bus, &obj, &name, &val);
+    fail_unless (obj == identity);
+    fail_unless_equals_string (name, "silent");
+    fail_unless (val != NULL);
+    fail_unless (G_VALUE_HOLDS_BOOLEAN (val));
+    fail_unless_equals_int (g_value_get_boolean (val), FALSE);
+    gst_message_unref (msg);
+    /* 3) the catch-all deep-notify on the pipeline (with value) */
+    msg = bus_wait_for_notify_message (bus, &obj, &name, &val);
+    fail_unless_equals_string (name, "silent");
+    fail_unless (obj == identity);
+    fail_unless (G_VALUE_HOLDS_BOOLEAN (val));
+    fail_unless_equals_int (g_value_get_boolean (val), FALSE);
+    gst_message_unref (msg);
+    /* 4) the "silent" deep-notify on the pipeline (without value) */
+    msg = bus_wait_for_notify_message (bus, &obj, &name, &val);
+    fail_unless_equals_string (name, "silent");
+    fail_unless (obj == identity);
+    fail_unless (val == NULL);
+    gst_message_unref (msg);
+  }
+
+  gst_element_remove_property_notify_watch (identity, watch_id0);
+  gst_element_remove_property_notify_watch (identity, watch_id1);
+  gst_element_remove_property_notify_watch (identity, watch_id2);
+  gst_element_remove_property_notify_watch (pipeline, deep_watch_id1);
+  gst_element_remove_property_notify_watch (pipeline, deep_watch_id2);
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_object_unref (pipeline);
+}
+
+GST_END_TEST;
+
 static Suite *
 gst_element_suite (void)
 {
@@ -360,6 +495,7 @@
   tcase_add_test (tc_chain, test_link);
   tcase_add_test (tc_chain, test_link_no_pads);
   tcase_add_test (tc_chain, test_pad_templates);
+  tcase_add_test (tc_chain, test_property_notify_message);
 
   return s;
 }
diff --git a/tests/check/gst/gstelementfactory.c b/tests/check/gst/gstelementfactory.c
index 366a1c2..47c125c 100644
--- a/tests/check/gst/gstelementfactory.c
+++ b/tests/check/gst/gstelementfactory.c
@@ -159,6 +159,7 @@
   fail_if (klass->elementfactory == NULL);
   fail_if (klass->elementfactory != factory);
 
+  gst_object_unref (factory);
 }
 
 GST_END_TEST;
diff --git a/tests/check/gst/gstevent.c b/tests/check/gst/gstevent.c
index 387f229..5e93b5d 100644
--- a/tests/check/gst/gstevent.c
+++ b/tests/check/gst/gstevent.c
@@ -52,6 +52,48 @@
     fail_unless (reset_time == TRUE);
     gst_event_unref (event);
   }
+
+  /* SELECT_STREAMS */
+  {
+    GList *streams = NULL;
+    GList *res = NULL;
+    GList *tmp;
+    streams = g_list_append (streams, (gpointer) "stream1");
+    streams = g_list_append (streams, (gpointer) "stream2");
+    event = gst_event_new_select_streams (streams);
+    fail_if (event == NULL);
+    fail_unless (GST_EVENT_TYPE (event) == GST_EVENT_SELECT_STREAMS);
+    fail_unless (GST_EVENT_IS_UPSTREAM (event));
+
+    gst_event_parse_select_streams (event, &res);
+    fail_if (res == NULL);
+    fail_unless_equals_int (g_list_length (res), 2);
+    tmp = res;
+    fail_unless_equals_string (tmp->data, "stream1");
+    tmp = tmp->next;
+    fail_unless_equals_string (tmp->data, "stream2");
+
+    gst_event_unref (event);
+
+    g_list_free (streams);
+    g_list_free_full (res, g_free);
+  }
+
+  /* STREAM_GROUP_DONE */
+  {
+    guint group_id = 0;
+
+    event = gst_event_new_stream_group_done (0x42);
+    fail_if (event == NULL);
+    fail_unless (GST_EVENT_TYPE (event) == GST_EVENT_STREAM_GROUP_DONE);
+    fail_if (GST_EVENT_IS_UPSTREAM (event));
+    fail_unless (GST_EVENT_IS_DOWNSTREAM (event));
+    fail_unless (GST_EVENT_IS_SERIALIZED (event));
+    gst_event_parse_stream_group_done (event, &group_id);
+    fail_unless (group_id == 0x42);
+    gst_event_unref (event);
+  }
+
   /* EOS */
   {
     event = gst_event_new_eos ();
@@ -219,6 +261,37 @@
     gst_event_unref (event);
   }
 
+  /* STREAM_COLLECTION */
+  {
+    GstStreamCollection *collection, *res = NULL;
+    GstStream *stream1, *stream2;
+    GstCaps *caps1, *caps2;
+
+    /* Create a collection of two streams */
+    caps1 = gst_caps_from_string ("some/caps");
+    caps2 = gst_caps_from_string ("some/other-string");
+
+    stream1 = gst_stream_new ("stream-1", caps1, GST_STREAM_TYPE_AUDIO, 0);
+    stream2 = gst_stream_new ("stream-2", caps2, GST_STREAM_TYPE_VIDEO, 0);
+
+    collection = gst_stream_collection_new ("something");
+    fail_unless (gst_stream_collection_add_stream (collection, stream1));
+    fail_unless (gst_stream_collection_add_stream (collection, stream2));
+
+    event = gst_event_new_stream_collection (collection);
+    fail_unless (event != NULL);
+
+    gst_event_parse_stream_collection (event, &res);
+    fail_unless (res != NULL);
+    fail_unless (res == collection);
+
+    gst_event_unref (event);
+    gst_object_unref (res);
+    gst_object_unref (collection);
+    gst_caps_unref (caps1);
+    gst_caps_unref (caps2);
+  }
+
   /* NAVIGATION */
   {
     structure = gst_structure_new ("application/x-gst-navigation", "event",
diff --git a/tests/check/gst/gstmemory.c b/tests/check/gst/gstmemory.c
index 079174d..d0b3a78 100644
--- a/tests/check/gst/gstmemory.c
+++ b/tests/check/gst/gstmemory.c
@@ -24,12 +24,6 @@
 # include "config.h"
 #endif
 
-#ifdef HAVE_VALGRIND_H
-# include <valgrind/valgrind.h>
-#else
-# define RUNNING_ON_VALGRIND FALSE
-#endif
-
 #include <gst/check/gstcheck.h>
 
 GST_START_TEST (test_submemory)
@@ -271,20 +265,6 @@
   gst_memory_unmap (mem, &info);
 
   gst_memory_unref (mem);
-
-#if 0
-  /* Disabled this part of the test, because it happily succeeds on 64-bit
-   * machines that have enough memory+swap, because the address space is large
-   * enough. There's not really any way to test the failure case except by
-   * allocating chunks of memory until it fails, which would suck. */
-
-  /* now this better fail (don't run in valgrind, it will abort
-   * or warn when passing silly arguments to malloc) */
-  if (!RUNNING_ON_VALGRIND) {
-    mem = gst_allocator_alloc (NULL, (guint) - 1, 0);
-    fail_unless (mem == NULL);
-  }
-#endif
 }
 
 GST_END_TEST;
diff --git a/tests/check/gst/gstmessage.c b/tests/check/gst/gstmessage.c
index 94d5cdd..9c8c27a 100644
--- a/tests/check/gst/gstmessage.c
+++ b/tests/check/gst/gstmessage.c
@@ -68,6 +68,46 @@
     g_error_free (error);
     g_free (debug);
   }
+  /* GST_MESSAGE_ERROR with details */
+  {
+    GError *error = NULL;
+    gchar *debug;
+    GstStructure *d;
+    const GstStructure *dc;
+
+    error = g_error_new (domain, 10, "test error");
+    fail_if (error == NULL);
+    d = gst_structure_new ("title", "test-field", G_TYPE_STRING,
+        "test-contents", NULL);
+    message =
+        gst_message_new_error_with_details (NULL, error, "error string", d);
+    fail_if (message == NULL);
+    fail_unless (GST_MESSAGE_TYPE (message) == GST_MESSAGE_ERROR);
+    fail_unless (GST_MESSAGE_SRC (message) == NULL);
+
+    g_error_free (error);
+    error = NULL;
+    debug = NULL;
+
+    gst_message_parse_error (message, NULL, NULL);
+
+    gst_message_parse_error (message, &error, &debug);
+    fail_if (error == NULL);
+    fail_if (debug == NULL);
+    fail_unless (strcmp (error->message, "test error") == 0);
+    fail_unless (error->domain == domain);
+    fail_unless (error->code == 10);
+    fail_unless (strcmp (debug, "error string") == 0);
+    gst_message_parse_error_details (message, &dc);
+    fail_unless (dc != NULL);
+    fail_unless (gst_structure_has_field_typed (dc, "test-field",
+            G_TYPE_STRING));
+    fail_unless (gst_structure_get_string (dc, "test-field"), "test-contents");
+
+    gst_message_unref (message);
+    g_error_free (error);
+    g_free (debug);
+  }
   /* GST_MESSAGE_WARNING   */
   {
     GError *warning = NULL;
@@ -377,6 +417,190 @@
 
     gst_message_unref (message);
   }
+  /* GST_MESSAGE_STREAM_COLLECTION */
+  {
+    GstMessage *message;
+    GstStreamCollection *collection, *res = NULL;
+    GstStream *stream1, *stream2;
+    GstCaps *caps1, *caps2;
+
+    /* Create a collection of two streams */
+    caps1 = gst_caps_from_string ("some/caps");
+    caps2 = gst_caps_from_string ("some/other-string");
+
+    stream1 = gst_stream_new ("stream-1", caps1, GST_STREAM_TYPE_AUDIO, 0);
+    stream2 = gst_stream_new ("stream-2", caps2, GST_STREAM_TYPE_VIDEO, 0);
+
+    collection = gst_stream_collection_new ("something");
+    fail_unless (gst_stream_collection_add_stream (collection, stream1));
+    fail_unless (gst_stream_collection_add_stream (collection, stream2));
+
+    message = gst_message_new_stream_collection (NULL, collection);
+    fail_unless (message != NULL);
+
+    gst_message_parse_stream_collection (message, &res);
+    fail_unless (res != NULL);
+
+    gst_message_unref (message);
+    gst_object_unref (res);
+    gst_object_unref (collection);
+    gst_caps_unref (caps1);
+    gst_caps_unref (caps2);
+  }
+  /* GST_MESSAGE_STREAMS_SELECTED */
+  {
+    GstMessage *message;
+    GstStreamCollection *collection, *res = NULL;
+    GstStream *stream1, *stream2, *stream3;
+    GstCaps *caps1, *caps2;
+
+    /* Create a collection of two streams */
+    caps1 = gst_caps_from_string ("some/caps");
+    caps2 = gst_caps_from_string ("some/other-string");
+
+    stream1 = gst_stream_new ("stream-1", caps1, GST_STREAM_TYPE_AUDIO, 0);
+    stream2 = gst_stream_new ("stream-2", caps2, GST_STREAM_TYPE_VIDEO, 0);
+
+    collection = gst_stream_collection_new ("something");
+    fail_unless (gst_stream_collection_add_stream (collection, stream1));
+    fail_unless (gst_stream_collection_add_stream (collection, stream2));
+
+    message = gst_message_new_streams_selected (NULL, collection);
+    fail_unless (message != NULL);
+
+    gst_message_parse_streams_selected (message, &res);
+    fail_unless (res != NULL);
+
+    fail_unless (gst_message_streams_selected_get_size (message) == 0);
+    gst_object_unref (res);
+    gst_message_unref (message);
+
+    /* Once again, this time with a stream in it */
+    message = gst_message_new_streams_selected (NULL, collection);
+    fail_unless (message != NULL);
+
+    gst_message_streams_selected_add (message, stream1);
+
+    gst_message_parse_streams_selected (message, &res);
+    fail_unless (res != NULL);
+
+    /* There is only one stream ! */
+    fail_unless (gst_message_streams_selected_get_size (message) == 1);
+
+    stream3 = gst_message_streams_selected_get_stream (message, 0);
+    fail_unless (stream3 != NULL);
+    gst_object_unref (stream3);
+
+    /* Shoul fail */
+    ASSERT_CRITICAL (gst_message_streams_selected_get_stream (message, 1));
+
+    gst_object_unref (res);
+    gst_message_unref (message);
+
+    gst_object_unref (collection);
+    gst_caps_unref (caps1);
+    gst_caps_unref (caps2);
+  }
+  /* GST_MESSAGE_REDIRECT */
+  {
+    const gchar *parsed_location;
+    GstTagList *parsed_tag_list;
+    const GstStructure *parsed_structure;
+    const gchar *test_location = "some-location";
+    const gchar *test_struct_name = "test-struct";
+    const gchar *test_value_name = "foo";
+    const gint test_value = 12345;
+    const guint test_bitrate = 120000;
+    gint value;
+    guint bitrate;
+    GstTagList *test_tag_list;
+    GstStructure *test_structure;
+
+    test_structure =
+        gst_structure_new (test_struct_name, test_value_name, G_TYPE_INT,
+        test_value, NULL);
+
+    /* Create a test tag list. It is ref'd  before adding an entry to be able
+     * to test that new_redirect takes ownership */
+    test_tag_list = gst_tag_list_new (GST_TAG_BITRATE, test_bitrate, NULL);
+
+    /* Create the message and add the first entry, which only has a location
+     * and a tag list */
+    gst_tag_list_ref (test_tag_list);
+    message =
+        gst_message_new_redirect (NULL, test_location, test_tag_list, NULL);
+    fail_if (message == NULL);
+    fail_unless (GST_MESSAGE_TYPE (message) == GST_MESSAGE_REDIRECT);
+    fail_unless (GST_MESSAGE_SRC (message) == NULL);
+
+    /* Add the second entry, which only has a location and a structure */
+    gst_message_add_redirect_entry (message, test_location, NULL,
+        gst_structure_copy (test_structure));
+
+    /* Add the third entry, which has a location, a taglist, and a structure */
+    gst_tag_list_ref (test_tag_list);
+    gst_message_add_redirect_entry (message, test_location, test_tag_list,
+        gst_structure_copy (test_structure));
+
+    fail_unless (gst_message_get_num_redirect_entries (message) == 3);
+
+    /* Check that the location of the first entry is correct and that the
+     * structure pointer is set to NULL */
+    parsed_location = NULL;
+    parsed_tag_list = NULL;
+    parsed_structure = (const GstStructure *) 0x1;
+    gst_message_parse_redirect_entry (message, 0, &parsed_location,
+        &parsed_tag_list, &parsed_structure);
+    fail_unless (parsed_location != NULL);
+    fail_unless (parsed_tag_list != NULL);
+    fail_unless (parsed_structure == NULL);
+    fail_unless (!strcmp (parsed_location, test_location));
+    fail_unless (gst_tag_list_get_uint (parsed_tag_list, GST_TAG_BITRATE,
+            &bitrate) && (bitrate == test_bitrate));
+
+    /* Check that the structure of the second entry is correct and that the
+     * tag list pointer is set to NULL */
+    parsed_location = NULL;
+    parsed_tag_list = (GstTagList *) 0x1;
+    parsed_structure = NULL;
+    gst_message_parse_redirect_entry (message, 1, &parsed_location,
+        &parsed_tag_list, &parsed_structure);
+    fail_unless (parsed_location != NULL);
+    fail_unless (parsed_tag_list == NULL);
+    fail_unless (parsed_structure != NULL);
+    fail_unless (!strcmp (parsed_location, test_location));
+    fail_unless (!strcmp (gst_structure_get_name (parsed_structure),
+            test_struct_name));
+    fail_unless (gst_structure_get_int (parsed_structure, test_value_name,
+            &value) && (value == test_value));
+
+    /* Check that the location, tag list, and structure pointers of the
+     * third entry are correct */
+    parsed_location = NULL;
+    parsed_tag_list = NULL;
+    parsed_structure = NULL;
+    gst_message_parse_redirect_entry (message, 2, &parsed_location,
+        &parsed_tag_list, &parsed_structure);
+    fail_unless (parsed_location != NULL);
+    fail_unless (parsed_tag_list != NULL);
+    fail_unless (parsed_structure != NULL);
+    fail_unless (!strcmp (parsed_location, test_location));
+    fail_unless (!strcmp (gst_structure_get_name (parsed_structure),
+            test_struct_name));
+    fail_unless (gst_tag_list_get_uint (parsed_tag_list, GST_TAG_BITRATE,
+            &bitrate) && (bitrate == test_bitrate));
+    fail_unless (gst_structure_get_int (parsed_structure, test_value_name,
+            &value) && (value == test_value));
+
+    gst_message_unref (message);
+
+    /* Since the message takes ownership over the tag list, its refcount
+     * must have been decreased after each added entry */
+    fail_unless_equals_int (GST_MINI_OBJECT_REFCOUNT_VALUE (test_tag_list), 1);
+
+    gst_structure_free (test_structure);
+    gst_tag_list_unref (test_tag_list);
+  }
 }
 
 GST_END_TEST;
diff --git a/tests/check/gst/gstmeta.c b/tests/check/gst/gstmeta.c
index 88205fc..db073e4 100644
--- a/tests/check/gst/gstmeta.c
+++ b/tests/check/gst/gstmeta.c
@@ -24,12 +24,6 @@
 # include "config.h"
 #endif
 
-#ifdef HAVE_VALGRIND_H
-# include <valgrind/valgrind.h>
-#else
-# define RUNNING_ON_VALGRIND FALSE
-#endif
-
 #include <gst/check/gstcheck.h>
 
 /* test metadata for PTS/DTS and duration */
diff --git a/tests/check/gst/gstminiobject.c b/tests/check/gst/gstminiobject.c
index 6351b70..d29438e 100644
--- a/tests/check/gst/gstminiobject.c
+++ b/tests/check/gst/gstminiobject.c
@@ -34,6 +34,9 @@
   fail_if (copy == NULL, "Copy of buffer returned NULL");
   fail_unless (gst_buffer_get_size (copy) == 4,
       "Copy of buffer has different size");
+
+  gst_buffer_unref (buffer);
+  gst_buffer_unref (copy);
 }
 
 GST_END_TEST;
@@ -53,6 +56,9 @@
 
   fail_if (gst_mini_object_is_writable (mobj),
       "A buffer with two refs should not be writable");
+
+  gst_buffer_unref (buffer);
+  gst_mini_object_unref (mobj);
 }
 
 GST_END_TEST;
@@ -84,6 +90,8 @@
   fail_unless (mobj == mobj2,
       "make_writable returned a copy for a buffer with refcount 1");
 
+  gst_buffer_unref (buffer);
+  gst_mini_object_unref (mobj3);
 }
 
 GST_END_TEST;
@@ -124,6 +132,9 @@
 
   expected = num_threads * refs_per_thread + 1;
   ASSERT_MINI_OBJECT_REFCOUNT (mobj, "miniobject", expected);
+
+  while (expected-- != 0)
+    gst_buffer_unref (buffer);
 }
 
 GST_END_TEST;
diff --git a/tests/check/gst/gstobject.c b/tests/check/gst/gstobject.c
index 289750c..96ad284 100644
--- a/tests/check/gst/gstobject.c
+++ b/tests/check/gst/gstobject.c
@@ -86,41 +86,95 @@
 
 GST_END_TEST;
 
+static void
+notify_name (GObject * object, GParamSpec * pspec, gint * out_count)
+{
+  *out_count += 1;
+}
+
 /* GstFakeObject name tests */
-GST_START_TEST (test_fake_object_name)
+GST_START_TEST (test_fake_object_initial_name)
 {
   GstObject *object;
   gchar *name;
-  gchar *name2;
 
   object = g_object_new (gst_fake_object_get_type (), NULL);
 
   name = gst_object_get_name (object);
   fail_if (name == NULL, "Newly created object has no name");
   fail_if (strncmp (name, "fakeobject", 10) != 0,
-      "Random name %s does not start with Gst", name);
+      "Random name %s does not start with 'fakeobject'", name);
   g_free (name);
 
+  gst_object_unref (object);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (test_fake_object_reset_name)
+{
+  GstObject *object;
+  gchar *name;
+  gint count = 0;
+
+  object = g_object_new (gst_fake_object_get_type (), NULL);
+  g_signal_connect (object, "notify::name", G_CALLBACK (notify_name), &count);
+
   /* give a random name by setting with NULL;
    * GstFakeObject class -> fakeobject%d */
-  gst_object_set_name (object, NULL);
+  fail_unless (gst_object_set_name (object, NULL), "Could not set name");
   name = gst_object_get_name (object);
   fail_if (name == NULL, "Random name was not assigned");
   fail_if (strncmp (name, "fakeobject", 10) != 0,
-      "Random name %s does not start with Gst", name);
+      "Random name %s does not start with 'fakeobject'", name);
   g_free (name);
+  fail_unless (count == 1, "Name change was not notified");
 
-  gst_object_set_name (object, "fake");
+  gst_object_unref (object);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (test_fake_object_set_name_via_property)
+{
+  GstObject *object;
+  gchar *name;
+  gint count = 0;
+
+  object = g_object_new (gst_fake_object_get_type (), NULL);
+  g_signal_connect (object, "notify::name", G_CALLBACK (notify_name), &count);
+
+  /* also test the property code path */
+  g_object_set (object, "name", "fake", NULL);
   name = gst_object_get_name (object);
   fail_if (name == NULL, "Failed to get name of GstFakeObject");
   fail_if (strcmp (name, "fake") != 0, "Name of GstFakeObject is not 'fake'");
+  g_free (name);
+  fail_if (count > 1, "Name change was notified multiple time");
+  fail_unless (count == 1, "Name change was not notified");
+
+  gst_object_unref (object);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (test_fake_object_get_name_returns_copy)
+{
+  GstObject *object;
+  gchar *name1, *name2;
+
+  object = g_object_new (gst_fake_object_get_type (), NULL);
 
   /* change the gotten name to see that it's a copy and not the original */
-  name[0] = 'm';
+  name1 = gst_object_get_name (object);
+  name1[0] = 'm';
   name2 = gst_object_get_name (object);
-  fail_if (strcmp (name2, "fake") != 0,
+  fail_if (strncmp (name2, "fakeobject", 10) != 0,
       "Copy of object name affected actual object name");
-  g_free (name);
+  g_free (name1);
   g_free (name2);
 
   gst_object_unref (object);
@@ -128,6 +182,25 @@
 
 GST_END_TEST;
 
+
+GST_START_TEST (test_fake_object_set_name_when_parented)
+{
+  GstObject *object, *parent;
+
+  object = g_object_new (gst_fake_object_get_type (), NULL);
+
+  /* add a parent and ensure name cannot be changed */
+  parent = g_object_new (gst_fake_object_get_type (), NULL);
+  gst_object_set_parent (object, parent);
+  fail_if (gst_object_set_name (object, "broken"),
+      "Could set name on parented object");
+
+  gst_object_unparent (object);
+  gst_object_unref (parent);
+}
+
+GST_END_TEST;
+
 /* thread function for threaded name change test */
 static gpointer
 thread_name_object (GstObject * object)
@@ -549,7 +622,11 @@
 
   suite_add_tcase (s, tc_chain);
   tcase_add_test (tc_chain, test_fake_object_new);
-  tcase_add_test (tc_chain, test_fake_object_name);
+  tcase_add_test (tc_chain, test_fake_object_initial_name);
+  tcase_add_test (tc_chain, test_fake_object_reset_name);
+  tcase_add_test (tc_chain, test_fake_object_set_name_via_property);
+  tcase_add_test (tc_chain, test_fake_object_get_name_returns_copy);
+  tcase_add_test (tc_chain, test_fake_object_set_name_when_parented);
 #if 0
   tcase_add_test (tc_chain, test_fake_object_name_threaded_wrong);
 #endif
diff --git a/tests/check/gst/gstpad.c b/tests/check/gst/gstpad.c
index ada9819..4e098c2 100644
--- a/tests/check/gst/gstpad.c
+++ b/tests/check/gst/gstpad.c
@@ -893,6 +893,7 @@
   buffers = NULL;
 
   /* teardown */
+  gst_check_drop_buffers ();
   gst_pad_unlink (src, sink);
   ASSERT_CAPS_REFCOUNT (caps, "caps", 2);
   gst_object_unref (src);
@@ -988,6 +989,7 @@
   gst_pad_remove_probe (src, id);
 
   /* cleanup */
+  gst_check_drop_buffers ();
   ASSERT_CAPS_REFCOUNT (caps, "caps", 2);
   ASSERT_OBJECT_REFCOUNT (src, "src", 1);
   gst_pad_link (src, sink);
@@ -1085,6 +1087,7 @@
   fail_unless (buffers == NULL);
 
   /* teardown */
+  gst_check_drop_buffers ();
   gst_pad_unlink (src, sink);
   gst_object_unref (src);
   gst_object_unref (sink);
@@ -1177,6 +1180,7 @@
   fail_unless (gst_pad_set_caps (sink, caps) == FALSE);
 
   /* teardown */
+  gst_check_drop_buffers ();
   gst_pad_unlink (src, sink);
   gst_object_unref (src);
   gst_object_unref (sink);
@@ -1459,6 +1463,226 @@
 
 GST_END_TEST;
 
+static gboolean pull_probe_called;
+static gboolean pull_probe_called_with_bad_type;
+static gboolean pull_probe_called_with_bad_data;
+
+static GstPadProbeReturn
+probe_pull_buffer_cb_check_buffer_return_ok (GstPad * pad,
+    GstPadProbeInfo * info, gpointer user_data)
+{
+  if (info->type & GST_PAD_PROBE_TYPE_BUFFER) {
+    if (GST_IS_BUFFER (info->data))
+      pull_probe_called = TRUE;
+    else
+      pull_probe_called_with_bad_data = TRUE;
+  } else {
+    /* shouldn't be called */
+    pull_probe_called_with_bad_type = TRUE;
+  }
+  return GST_PAD_PROBE_OK;
+}
+
+static GstFlowReturn
+test_probe_pull_getrange (GstPad * pad, GstObject * parent, guint64 offset,
+    guint length, GstBuffer ** buf)
+{
+  *buf = gst_buffer_new ();
+  return GST_FLOW_OK;
+}
+
+static gboolean
+test_probe_pull_activate_pull (GstPad * pad, GstObject * object)
+{
+  return gst_pad_activate_mode (pad, GST_PAD_MODE_PULL, TRUE);
+}
+
+static gpointer
+pull_range_async (GstPad * pad)
+{
+  GstBuffer *buf = NULL;
+  GstFlowReturn res = gst_pad_pull_range (pad, 0, 100, &buf);
+  if (buf)
+    gst_buffer_unref (buf);
+  return GINT_TO_POINTER (res);
+}
+
+GST_START_TEST (test_pad_probe_pull)
+{
+  GstPad *srcpad, *sinkpad;
+  GThread *thread;
+  GstFlowReturn ret;
+
+  srcpad = gst_pad_new ("src", GST_PAD_SRC);
+  fail_unless (srcpad != NULL);
+  sinkpad = gst_pad_new ("sink", GST_PAD_SINK);
+  fail_unless (sinkpad != NULL);
+
+  gst_pad_set_getrange_function (srcpad, test_probe_pull_getrange);
+  gst_pad_set_activate_function (sinkpad, test_probe_pull_activate_pull);
+  gst_pad_link (srcpad, sinkpad);
+
+  gst_pad_set_active (sinkpad, TRUE);
+  gst_pad_set_active (srcpad, TRUE);
+
+  id = gst_pad_add_probe (sinkpad,
+      GST_PAD_PROBE_TYPE_BLOCK | GST_PAD_PROBE_TYPE_PULL,
+      block_async_cb_return_ok, NULL, NULL);
+
+  thread = g_thread_try_new ("gst-check", (GThreadFunc) pull_range_async,
+      sinkpad, NULL);
+
+  /* wait for the block */
+  while (!gst_pad_is_blocking (sinkpad)) {
+    g_usleep (10000);
+  }
+
+  /* stop with flushing */
+  gst_pad_push_event (srcpad, gst_event_new_flush_start ());
+
+  /* get return value from push */
+  ret = GPOINTER_TO_INT (g_thread_join (thread));
+  /* unflush now */
+  gst_pad_push_event (srcpad, gst_event_new_flush_stop (FALSE));
+  /* must be wrong state */
+  fail_unless (ret == GST_FLOW_FLUSHING);
+
+  gst_object_unref (srcpad);
+  gst_object_unref (sinkpad);
+}
+
+GST_END_TEST;
+
+static gboolean idle_probe_called;
+static gboolean get_range_wait;
+static gboolean getrange_waiting;
+
+static GstPadProbeReturn
+idle_cb_return_ok (GstPad * pad, GstPadProbeInfo * info, gpointer user_data)
+{
+  idle_probe_called = TRUE;
+  return GST_PAD_PROBE_OK;
+}
+
+static GstFlowReturn
+test_probe_pull_getrange_wait (GstPad * pad, GstObject * parent, guint64 offset,
+    guint length, GstBuffer ** buf)
+{
+  getrange_waiting = TRUE;
+
+  *buf = gst_buffer_new ();
+  while (get_range_wait) {
+    g_usleep (10000);
+  }
+
+  getrange_waiting = FALSE;
+  return GST_FLOW_OK;
+}
+
+GST_START_TEST (test_pad_probe_pull_idle)
+{
+  GstPad *srcpad, *sinkpad;
+  GThread *thread;
+  GstFlowReturn ret;
+
+  srcpad = gst_pad_new ("src", GST_PAD_SRC);
+  fail_unless (srcpad != NULL);
+  sinkpad = gst_pad_new ("sink", GST_PAD_SINK);
+  fail_unless (sinkpad != NULL);
+
+  gst_pad_set_getrange_function (srcpad, test_probe_pull_getrange_wait);
+  gst_pad_set_activate_function (sinkpad, test_probe_pull_activate_pull);
+  gst_pad_link (srcpad, sinkpad);
+
+  gst_pad_set_active (sinkpad, TRUE);
+  gst_pad_set_active (srcpad, TRUE);
+
+  idle_probe_called = FALSE;
+  get_range_wait = TRUE;
+  thread = g_thread_try_new ("gst-check", (GThreadFunc) pull_range_async,
+      sinkpad, NULL);
+
+  /* wait for the block */
+  while (!getrange_waiting) {
+    g_usleep (10000);
+  }
+
+  id = gst_pad_add_probe (sinkpad,
+      GST_PAD_PROBE_TYPE_IDLE | GST_PAD_PROBE_TYPE_PULL,
+      idle_cb_return_ok, NULL, NULL);
+
+  fail_if (idle_probe_called);
+
+  get_range_wait = FALSE;
+  while (getrange_waiting) {
+    g_usleep (10000);
+  }
+  while (!idle_probe_called) {
+    g_usleep (10000);
+  }
+
+  ret = GPOINTER_TO_INT (g_thread_join (thread));
+  fail_unless (ret == GST_FLOW_OK);
+  gst_pad_set_active (srcpad, FALSE);
+  gst_pad_set_active (sinkpad, FALSE);
+  gst_object_unref (srcpad);
+  gst_object_unref (sinkpad);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (test_pad_probe_pull_buffer)
+{
+  GstPad *srcpad, *sinkpad;
+  GThread *thread;
+  GstFlowReturn ret;
+
+  srcpad = gst_pad_new ("src", GST_PAD_SRC);
+  fail_unless (srcpad != NULL);
+  sinkpad = gst_pad_new ("sink", GST_PAD_SINK);
+  fail_unless (sinkpad != NULL);
+
+  gst_pad_set_getrange_function (srcpad, test_probe_pull_getrange);
+  gst_pad_set_activate_function (sinkpad, test_probe_pull_activate_pull);
+  gst_pad_link (srcpad, sinkpad);
+
+  gst_pad_set_active (sinkpad, TRUE);
+  gst_pad_set_active (srcpad, TRUE);
+
+  id = gst_pad_add_probe (sinkpad,
+      GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_PULL,
+      probe_pull_buffer_cb_check_buffer_return_ok, NULL, NULL);
+
+  pull_probe_called = FALSE;
+  pull_probe_called_with_bad_type = FALSE;
+  pull_probe_called_with_bad_data = FALSE;
+
+  thread = g_thread_try_new ("gst-check", (GThreadFunc) pull_range_async,
+      sinkpad, NULL);
+
+  /* wait for the block */
+  while (!pull_probe_called && !pull_probe_called_with_bad_data
+      && !pull_probe_called_with_bad_type) {
+    g_usleep (10000);
+  }
+
+  fail_unless (pull_probe_called);
+  fail_if (pull_probe_called_with_bad_data);
+  fail_if (pull_probe_called_with_bad_type);
+
+  /* get return value from push */
+  ret = GPOINTER_TO_INT (g_thread_join (thread));
+  fail_unless (ret == GST_FLOW_OK);
+
+  gst_pad_set_active (sinkpad, FALSE);
+  gst_pad_set_active (srcpad, FALSE);
+  gst_object_unref (srcpad);
+  gst_object_unref (sinkpad);
+}
+
+GST_END_TEST;
+
 static gboolean pad_probe_remove_notifiy_called = FALSE;
 
 static GstPadProbeReturn
@@ -1577,6 +1801,7 @@
   fail_if (buffers && buffers->data == NULL);
   fail_unless (buffers == NULL);
 
+  gst_check_drop_buffers ();
   gst_object_unref (src);
   gst_object_unref (sink);
 }
@@ -1756,6 +1981,7 @@
   fail_unless (sink_flush_start_probe_called);
   fail_unless (sink_flush_stop_probe_called);
 
+  gst_check_drop_buffers ();
   gst_object_unref (src);
   gst_object_unref (sink);
 }
@@ -1807,6 +2033,7 @@
   gst_pad_push_event (src, gst_event_new_flush_stop (TRUE));
   fail_unless (probe_was_called);
 
+  gst_check_drop_buffers ();
   gst_object_unref (src);
   gst_object_unref (sink);
 }
@@ -1857,6 +2084,7 @@
     fail_unless (counters[i] == i + 1);
   }
 
+  gst_check_drop_buffers ();
   gst_object_unref (src);
   gst_object_unref (sink);
 }
@@ -2597,8 +2825,8 @@
       "Proxy Test Element", "Test", "Proxy test element",
       "Thiago Santos <thiagoss@osg.samsung.com>");
 
-  gst_element_class_add_pad_template (gstelement_class,
-      gst_static_pad_template_get (&proxytestelement_sink_template));
+  gst_element_class_add_static_pad_template (gstelement_class,
+      &proxytestelement_sink_template);
 }
 
 static void
@@ -2736,6 +2964,253 @@
 
 GST_END_TEST;
 
+static GstSegment sink_segment;
+static gint sink_segment_counter;
+
+static gboolean
+segment_event_func (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEGMENT:
+      gst_event_copy_segment (event, &sink_segment);
+      sink_segment_counter++;
+      break;
+    default:
+      break;
+  }
+
+  gst_event_unref (event);
+  return TRUE;
+}
+
+static void
+test_pad_offset (gboolean on_srcpad)
+{
+  GstPad *srcpad, *sinkpad, *offset_pad;
+  GstSegment segment;
+  GstBuffer *buffer;
+  GstQuery *query;
+
+  srcpad = gst_pad_new ("src", GST_PAD_SRC);
+  fail_unless (srcpad != NULL);
+  sinkpad = gst_pad_new ("sink", GST_PAD_SINK);
+
+  offset_pad = on_srcpad ? srcpad : sinkpad;
+
+  gst_segment_init (&sink_segment, GST_FORMAT_UNDEFINED);
+  sink_segment_counter = 0;
+  gst_pad_set_chain_function (sinkpad, gst_check_chain_func);
+  gst_pad_set_event_function (sinkpad, segment_event_func);
+
+  fail_unless (sinkpad != NULL);
+  fail_unless_equals_int (gst_pad_link (srcpad, sinkpad), GST_PAD_LINK_OK);
+  fail_unless (gst_pad_set_active (sinkpad, TRUE));
+  fail_unless (gst_pad_set_active (srcpad, TRUE));
+
+  /* Set an offset of 5s, meaning:
+   * segment position 0 gives running time 5s, stream time 0s
+   * segment start of 0 should stay 0
+   */
+  gst_pad_set_offset (offset_pad, 5 * GST_SECOND);
+
+  fail_unless (gst_pad_push_event (srcpad,
+          gst_event_new_stream_start ("test")) == TRUE);
+  /* We should have no segment event yet */
+  fail_if (sink_segment.format != GST_FORMAT_UNDEFINED);
+  fail_unless_equals_int (sink_segment_counter, 0);
+
+  /* Send segment event, expect it to arrive with a modified start running time */
+  gst_segment_init (&segment, GST_FORMAT_TIME);
+  fail_unless (gst_pad_push_event (srcpad,
+          gst_event_new_segment (&segment)) == TRUE);
+  fail_if (sink_segment.format == GST_FORMAT_UNDEFINED);
+  fail_unless_equals_uint64 (gst_segment_to_running_time (&sink_segment,
+          GST_FORMAT_TIME, sink_segment.start), 5 * GST_SECOND);
+  fail_unless_equals_uint64 (gst_segment_to_stream_time (&sink_segment,
+          GST_FORMAT_TIME, sink_segment.start), 0 * GST_SECOND);
+  fail_unless_equals_uint64 (sink_segment.start, 0 * GST_SECOND);
+
+  fail_unless_equals_int (sink_segment_counter, 1);
+
+  /* Send a buffer and check if all timestamps are as expected, and especially
+   * if the buffer timestamp was not changed */
+  buffer = gst_buffer_new ();
+  GST_BUFFER_PTS (buffer) = 0 * GST_SECOND;
+  fail_unless_equals_int (gst_pad_push (srcpad, buffer), GST_FLOW_OK);
+
+  fail_unless_equals_int (g_list_length (buffers), 1);
+  buffer = buffers->data;
+  buffers = g_list_delete_link (buffers, buffers);
+  fail_unless_equals_uint64 (gst_segment_to_running_time (&sink_segment,
+          GST_FORMAT_TIME, GST_BUFFER_PTS (buffer)), 5 * GST_SECOND);
+  fail_unless_equals_uint64 (gst_segment_to_stream_time (&sink_segment,
+          GST_FORMAT_TIME, GST_BUFFER_PTS (buffer)), 0 * GST_SECOND);
+  fail_unless_equals_uint64 (GST_BUFFER_PTS (buffer), 0 * GST_SECOND);
+  gst_buffer_unref (buffer);
+
+  fail_unless_equals_int (sink_segment_counter, 1);
+
+  /* Set a negative offset of -5s, meaning:
+   * segment position 5s gives running time 0s, stream time 5s
+   * segment start would have a negative running time!
+   */
+  gst_pad_set_offset (offset_pad, -5 * GST_SECOND);
+
+  /* Segment should still be the same as before */
+  fail_if (sink_segment.format == GST_FORMAT_UNDEFINED);
+  fail_unless_equals_uint64 (gst_segment_to_running_time (&sink_segment,
+          GST_FORMAT_TIME, sink_segment.start), 5 * GST_SECOND);
+  fail_unless_equals_uint64 (gst_segment_to_stream_time (&sink_segment,
+          GST_FORMAT_TIME, sink_segment.start), 0 * GST_SECOND);
+  fail_unless_equals_uint64 (sink_segment.start, 0 * GST_SECOND);
+
+  fail_unless_equals_int (sink_segment_counter, 1);
+
+  /* Send segment event, expect it to arrive with a modified start running time */
+  gst_segment_init (&segment, GST_FORMAT_TIME);
+  fail_unless (gst_pad_push_event (srcpad,
+          gst_event_new_segment (&segment)) == TRUE);
+  fail_if (sink_segment.format == GST_FORMAT_UNDEFINED);
+  fail_unless_equals_uint64 (gst_segment_to_running_time (&sink_segment,
+          GST_FORMAT_TIME, sink_segment.start + 5 * GST_SECOND),
+      0 * GST_SECOND);
+  fail_unless_equals_uint64 (gst_segment_to_stream_time (&sink_segment,
+          GST_FORMAT_TIME, sink_segment.start + 5 * GST_SECOND),
+      5 * GST_SECOND);
+  fail_unless_equals_uint64 (sink_segment.start, 0 * GST_SECOND);
+
+  fail_unless_equals_int (sink_segment_counter, 2);
+
+  /* Send a buffer and check if all timestamps are as expected, and especially
+   * if the buffer timestamp was not changed */
+  buffer = gst_buffer_new ();
+  GST_BUFFER_PTS (buffer) = 5 * GST_SECOND;
+  fail_unless_equals_int (gst_pad_push (srcpad, buffer), GST_FLOW_OK);
+
+  fail_unless_equals_int (g_list_length (buffers), 1);
+  buffer = buffers->data;
+  buffers = g_list_delete_link (buffers, buffers);
+  fail_unless_equals_uint64 (gst_segment_to_running_time (&sink_segment,
+          GST_FORMAT_TIME, GST_BUFFER_PTS (buffer)), 0 * GST_SECOND);
+  fail_unless_equals_uint64 (gst_segment_to_stream_time (&sink_segment,
+          GST_FORMAT_TIME, GST_BUFFER_PTS (buffer)), 5 * GST_SECOND);
+  fail_unless_equals_uint64 (GST_BUFFER_PTS (buffer), 5 * GST_SECOND);
+  gst_buffer_unref (buffer);
+
+  fail_unless_equals_int (sink_segment_counter, 2);
+
+  /* Set offset to 5s again, same situation as above but don't send a new
+   * segment event. The segment should be adjusted *before* the buffer comes
+   * out of the srcpad */
+  gst_pad_set_offset (offset_pad, 5 * GST_SECOND);
+
+  /* Segment should still be the same as before */
+  fail_if (sink_segment.format == GST_FORMAT_UNDEFINED);
+  fail_unless_equals_uint64 (gst_segment_to_running_time (&sink_segment,
+          GST_FORMAT_TIME, sink_segment.start + 5 * GST_SECOND),
+      0 * GST_SECOND);
+  fail_unless_equals_uint64 (gst_segment_to_stream_time (&sink_segment,
+          GST_FORMAT_TIME, sink_segment.start + 5 * GST_SECOND),
+      5 * GST_SECOND);
+  fail_unless_equals_uint64 (sink_segment.start, 0 * GST_SECOND);
+
+  fail_unless_equals_int (sink_segment_counter, 2);
+
+  /* Send a buffer and check if a new segment event was sent and all buffer
+   * timestamps are as expected */
+  buffer = gst_buffer_new ();
+  GST_BUFFER_PTS (buffer) = 0 * GST_SECOND;
+  fail_unless_equals_int (gst_pad_push (srcpad, buffer), GST_FLOW_OK);
+
+  fail_if (sink_segment.format == GST_FORMAT_UNDEFINED);
+  fail_unless_equals_uint64 (gst_segment_to_running_time (&sink_segment,
+          GST_FORMAT_TIME, sink_segment.start), 5 * GST_SECOND);
+  fail_unless_equals_uint64 (gst_segment_to_stream_time (&sink_segment,
+          GST_FORMAT_TIME, sink_segment.start), 0 * GST_SECOND);
+  fail_unless_equals_uint64 (sink_segment.start, 0 * GST_SECOND);
+
+  fail_unless_equals_int (sink_segment_counter, 3);
+
+  fail_unless_equals_int (g_list_length (buffers), 1);
+  buffer = buffers->data;
+  buffers = g_list_delete_link (buffers, buffers);
+  fail_unless_equals_uint64 (gst_segment_to_running_time (&sink_segment,
+          GST_FORMAT_TIME, GST_BUFFER_PTS (buffer)), 5 * GST_SECOND);
+  fail_unless_equals_uint64 (gst_segment_to_stream_time (&sink_segment,
+          GST_FORMAT_TIME, GST_BUFFER_PTS (buffer)), 0 * GST_SECOND);
+  fail_unless_equals_uint64 (GST_BUFFER_PTS (buffer), 0 * GST_SECOND);
+  gst_buffer_unref (buffer);
+
+  fail_unless_equals_int (sink_segment_counter, 3);
+
+  /* Set offset to 10s and send another sticky event. In between a new
+   * segment event should've been sent */
+  gst_pad_set_offset (offset_pad, 10 * GST_SECOND);
+
+  /* Segment should still be the same as before */
+  fail_if (sink_segment.format == GST_FORMAT_UNDEFINED);
+  fail_unless_equals_uint64 (gst_segment_to_running_time (&sink_segment,
+          GST_FORMAT_TIME, sink_segment.start), 5 * GST_SECOND);
+  fail_unless_equals_uint64 (gst_segment_to_stream_time (&sink_segment,
+          GST_FORMAT_TIME, sink_segment.start), 0 * GST_SECOND);
+  fail_unless_equals_uint64 (sink_segment.start, 0 * GST_SECOND);
+  fail_unless_equals_int (sink_segment_counter, 3);
+
+  fail_unless (gst_pad_push_event (srcpad,
+          gst_event_new_tag (gst_tag_list_new_empty ())) == TRUE);
+
+  /* Segment should be updated */
+  fail_if (sink_segment.format == GST_FORMAT_UNDEFINED);
+  fail_unless_equals_uint64 (gst_segment_to_running_time (&sink_segment,
+          GST_FORMAT_TIME, sink_segment.start), 10 * GST_SECOND);
+  fail_unless_equals_uint64 (gst_segment_to_stream_time (&sink_segment,
+          GST_FORMAT_TIME, sink_segment.start), 0 * GST_SECOND);
+  fail_unless_equals_uint64 (sink_segment.start, 0 * GST_SECOND);
+
+  fail_unless_equals_int (sink_segment_counter, 4);
+
+  /* Set offset to 15s and do a serialized query. In between a new
+   * segment event should've been sent */
+  gst_pad_set_offset (offset_pad, 15 * GST_SECOND);
+
+  /* Segment should still be the same as before */
+  fail_if (sink_segment.format == GST_FORMAT_UNDEFINED);
+  fail_unless_equals_uint64 (gst_segment_to_running_time (&sink_segment,
+          GST_FORMAT_TIME, sink_segment.start), 10 * GST_SECOND);
+  fail_unless_equals_uint64 (gst_segment_to_stream_time (&sink_segment,
+          GST_FORMAT_TIME, sink_segment.start), 0 * GST_SECOND);
+  fail_unless_equals_uint64 (sink_segment.start, 0 * GST_SECOND);
+  fail_unless_equals_int (sink_segment_counter, 4);
+
+  query = gst_query_new_drain ();
+  gst_pad_peer_query (srcpad, query);
+  gst_query_unref (query);
+
+  /* Segment should be updated */
+  fail_if (sink_segment.format == GST_FORMAT_UNDEFINED);
+  fail_unless_equals_uint64 (gst_segment_to_running_time (&sink_segment,
+          GST_FORMAT_TIME, sink_segment.start), 15 * GST_SECOND);
+  fail_unless_equals_uint64 (gst_segment_to_stream_time (&sink_segment,
+          GST_FORMAT_TIME, sink_segment.start), 0 * GST_SECOND);
+  fail_unless_equals_uint64 (sink_segment.start, 0 * GST_SECOND);
+
+  fail_unless_equals_int (sink_segment_counter, 5);
+
+  gst_check_drop_buffers ();
+
+  fail_unless (gst_pad_set_active (sinkpad, FALSE));
+  fail_unless (gst_pad_set_active (srcpad, FALSE));
+  gst_object_unref (sinkpad);
+  gst_object_unref (srcpad);
+}
+
+GST_START_TEST (test_pad_offset_src)
+{
+  test_pad_offset (TRUE);
+}
+
+GST_END_TEST;
+
 static Suite *
 gst_pad_suite (void)
 {
@@ -2769,6 +3244,9 @@
   tcase_add_test (tc_chain, test_pad_blocking_with_probe_type_block);
   tcase_add_test (tc_chain, test_pad_blocking_with_probe_type_blocking);
   tcase_add_test (tc_chain, test_pad_blocking_with_probe_type_idle);
+  tcase_add_test (tc_chain, test_pad_probe_pull);
+  tcase_add_test (tc_chain, test_pad_probe_pull_idle);
+  tcase_add_test (tc_chain, test_pad_probe_pull_buffer);
   tcase_add_test (tc_chain, test_pad_probe_remove);
   tcase_add_test (tc_chain, test_pad_probe_block_add_remove);
   tcase_add_test (tc_chain, test_pad_probe_block_and_drop_buffer);
@@ -2791,6 +3269,7 @@
   tcase_add_test (tc_chain, test_proxy_accept_caps_no_proxy);
   tcase_add_test (tc_chain, test_proxy_accept_caps_with_proxy);
   tcase_add_test (tc_chain, test_proxy_accept_caps_with_incompatible_proxy);
+  tcase_add_test (tc_chain, test_pad_offset_src);
 
   return s;
 }
diff --git a/tests/check/gst/gstplugin.c b/tests/check/gst/gstplugin.c
index 7e69629..cb4f17d 100644
--- a/tests/check/gst/gstplugin.c
+++ b/tests/check/gst/gstplugin.c
@@ -60,7 +60,7 @@
     GstPlugin *plugin = GST_PLUGIN (g->data);
 
     /* one for the registry, one for the list */
-    GST_DEBUG ("refcount %d %s", GST_OBJECT_REFCOUNT_VALUE (plugin),
+    GST_DEBUG ("Plugin refcount %d %s", GST_OBJECT_REFCOUNT_VALUE (plugin),
         gst_plugin_get_name (plugin));
     ASSERT_OBJECT_REFCOUNT (plugin, "plugin in registry", 2);
 
@@ -73,9 +73,8 @@
     GstPluginFeature *feature = GST_PLUGIN_FEATURE (g->data);
 
     /* one for the registry, one for the list */
-    GST_DEBUG ("refcount %d %s", GST_OBJECT_REFCOUNT_VALUE (feature),
+    GST_DEBUG ("Feature refcount %d %s", GST_OBJECT_REFCOUNT_VALUE (feature),
         GST_OBJECT_NAME (feature));
-    ASSERT_OBJECT_REFCOUNT (feature, "feature in registry", 2);
     gst_object_unref (feature);
   }
   g_list_free (list);
diff --git a/tests/check/gst/gstprotection.c b/tests/check/gst/gstprotection.c
index 89181f8..b5dae25 100644
--- a/tests/check/gst/gstprotection.c
+++ b/tests/check/gst/gstprotection.c
@@ -81,8 +81,8 @@
 {
   GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
 
-  gst_element_class_add_pad_template (element_class,
-      gst_static_pad_template_get (&gst_decrypt_sink_template));
+  gst_element_class_add_static_pad_template (element_class,
+      &gst_decrypt_sink_template);
 
   gst_element_class_set_metadata (element_class,
       "Decryptor element for unit tests",
diff --git a/tests/check/gst/gststream.c b/tests/check/gst/gststream.c
new file mode 100644
index 0000000..aa09b2b
--- /dev/null
+++ b/tests/check/gst/gststream.c
@@ -0,0 +1,225 @@
+/* GStreamer
+ * Copyright (C) <2015> Edward Hervey <edward@centricular.com>
+ *
+ * gststructure.c: Unit tests for GstStream and GstStreamCollection
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+
+#include <gst/gst.h>
+#include <gst/check/gstcheck.h>
+
+GST_START_TEST (test_stream_creation)
+{
+  GstStream *stream;
+  GstCaps *caps;
+  GstCaps *caps2;
+  GstTagList *tags, *tags2;
+
+  caps = gst_caps_from_string ("some/caps");
+  stream = gst_stream_new ("stream-id", caps, GST_STREAM_TYPE_AUDIO, 0);
+  fail_unless (stream != NULL);
+
+  fail_unless_equals_string (gst_stream_get_stream_id (stream), "stream-id");
+  caps2 = gst_stream_get_caps (stream);
+  fail_unless (gst_caps_is_equal (caps, caps2));
+  gst_caps_unref (caps2);
+
+  fail_unless (gst_stream_get_stream_type (stream) == GST_STREAM_TYPE_AUDIO);
+
+  gst_caps_unref (caps);
+
+  tags = gst_tag_list_new (GST_TAG_ALBUM, "test-album", NULL);
+  g_object_set (stream, "tags", tags, NULL);
+  tags2 = gst_stream_get_tags (stream);
+  fail_unless (gst_tag_list_is_equal (tags, tags2));
+  gst_tag_list_unref (tags);
+  gst_tag_list_unref (tags2);
+
+  gst_object_unref (stream);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_stream_event)
+{
+  GstEvent *event;
+  GstStream *stream, *stream2 = NULL;
+  GstCaps *caps;
+  GstCaps *caps2;
+
+  event = gst_event_new_stream_start ("here/we/go");
+  /* By default a stream-start event has no stream */
+  gst_event_parse_stream (event, &stream2);
+  fail_if (stream2 != NULL);
+
+  /* Create and set stream on event */
+  caps = gst_caps_from_string ("some/caps");
+  stream = gst_stream_new ("here/we/go", caps, GST_STREAM_TYPE_AUDIO, 0);
+  fail_unless (stream != NULL);
+  gst_event_set_stream (event, stream);
+
+  /* Parse and check it's the same */
+  gst_event_parse_stream (event, &stream2);
+  fail_unless (stream2 != NULL);
+  fail_unless_equals_string (gst_stream_get_stream_id (stream2), "here/we/go");
+  caps2 = gst_stream_get_caps (stream);
+  fail_unless (gst_caps_is_equal (caps, caps2));
+  fail_unless (gst_stream_get_stream_type (stream) == GST_STREAM_TYPE_AUDIO);
+  gst_caps_unref (caps2);
+
+  gst_event_unref (event);
+  gst_caps_unref (caps);
+  gst_object_unref (stream);
+  gst_object_unref (stream2);
+}
+
+GST_END_TEST;
+
+struct NotifyStats
+{
+  guint collection_notify;
+  guint collection_notify_caps;
+  guint collection_notify_tags;
+  guint collection_notify_type;
+  guint collection_notify_flags;
+
+  guint stream_notify;
+  guint stream_notify_caps;
+  guint stream_notify_tags;
+  guint stream_notify_type;
+  guint stream_notify_flags;
+
+  guint stream2_notify;
+  guint stream2_notify_caps;
+  guint stream2_notify_tags;
+  guint stream2_notify_type;
+  guint stream2_notify_flags;
+};
+
+static void
+stream_notify_cb (GstStreamCollection * collection, GstStream * stream,
+    GParamSpec * pspec, guint * val)
+{
+  GST_LOG ("Got stream-notify from %" GST_PTR_FORMAT " for %s from %"
+      GST_PTR_FORMAT, stream, pspec->name, collection);
+  (*val)++;
+}
+
+static void
+notify_cb (GstStream * stream, GParamSpec * pspec, guint * val)
+{
+  GST_LOG ("Got notify from %" GST_PTR_FORMAT " for %s", stream, pspec->name);
+  (*val)++;
+}
+
+GST_START_TEST (test_notifies)
+{
+  GstStreamCollection *collection;
+  GstStream *stream, *stream2 = NULL;
+  GstCaps *caps;
+  struct NotifyStats stats = { 0, };
+  GstTagList *tags;
+
+  collection = gst_stream_collection_new ("check-collection");
+  g_signal_connect (collection, "stream-notify", (GCallback) stream_notify_cb,
+      &stats.collection_notify);
+  g_signal_connect (collection, "stream-notify::stream-type",
+      (GCallback) stream_notify_cb, &stats.collection_notify_type);
+  g_signal_connect (collection, "stream-notify::stream-flags",
+      (GCallback) stream_notify_cb, &stats.collection_notify_flags);
+  g_signal_connect (collection, "stream-notify::caps",
+      (GCallback) stream_notify_cb, &stats.collection_notify_caps);
+  g_signal_connect (collection, "stream-notify::tags",
+      (GCallback) stream_notify_cb, &stats.collection_notify_tags);
+
+  caps = gst_caps_from_string ("some/audio-caps");
+  stream = gst_stream_new ("here/we/go", caps, GST_STREAM_TYPE_AUDIO, 0);
+  gst_caps_unref (caps);
+  g_signal_connect (stream, "notify", (GCallback) notify_cb,
+      &stats.stream_notify);
+  g_signal_connect (stream, "notify::stream-type", (GCallback) notify_cb,
+      &stats.stream_notify_type);
+  g_signal_connect (stream, "notify::stream-flags", (GCallback) notify_cb,
+      &stats.stream_notify_flags);
+  g_signal_connect (stream, "notify::caps", (GCallback) notify_cb,
+      &stats.stream_notify_caps);
+  g_signal_connect (stream, "notify::tags", (GCallback) notify_cb,
+      &stats.stream_notify_tags);
+  gst_stream_collection_add_stream (collection, stream);
+
+  caps = gst_caps_from_string ("some/video-caps");
+  stream2 = gst_stream_new ("here/we/go/again", caps, GST_STREAM_TYPE_VIDEO, 0);
+  gst_caps_unref (caps);
+  g_signal_connect (stream2, "notify", (GCallback) notify_cb,
+      &stats.stream2_notify);
+  g_signal_connect (stream2, "notify::stream-type", (GCallback) notify_cb,
+      &stats.stream2_notify_type);
+  g_signal_connect (stream2, "notify::stream-flags", (GCallback) notify_cb,
+      &stats.stream2_notify_flags);
+  g_signal_connect (stream2, "notify::caps", (GCallback) notify_cb,
+      &stats.stream2_notify_caps);
+  g_signal_connect (stream2, "notify::tags", (GCallback) notify_cb,
+      &stats.stream2_notify_tags);
+  gst_stream_collection_add_stream (collection, stream2);
+
+  caps = gst_caps_from_string ("some/new-video-caps");
+  gst_stream_set_caps (stream2, caps);
+  gst_caps_unref (caps);
+
+  fail_unless (stats.collection_notify == 1);
+  fail_unless (stats.collection_notify_caps == 1);
+  fail_unless (stats.stream_notify == 0);
+  fail_unless (stats.stream_notify_caps == 0);
+  fail_unless (stats.stream_notify_tags == 0);
+  fail_unless (stats.stream2_notify == 1);
+  fail_unless (stats.stream2_notify_caps == 1);
+  fail_unless (stats.stream2_notify_tags == 0);
+
+  tags = gst_tag_list_new (GST_TAG_ALBUM, "test-album", NULL);
+  gst_stream_set_tags (stream, tags);
+  gst_tag_list_unref (tags);
+
+  fail_unless (stats.collection_notify == 2);
+  fail_unless (stats.collection_notify_caps == 1);
+  fail_unless (stats.collection_notify_tags == 1);
+  fail_unless (stats.stream_notify == 1);
+  fail_unless (stats.stream_notify_caps == 0);
+  fail_unless (stats.stream_notify_tags == 1);
+  fail_unless (stats.stream2_notify == 1);
+  fail_unless (stats.stream2_notify_caps == 1);
+  fail_unless (stats.stream2_notify_tags == 0);
+
+  gst_object_unref (collection);
+}
+
+GST_END_TEST;
+
+static Suite *
+gst_streams_suite (void)
+{
+  Suite *s = suite_create ("GstStream");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_stream_creation);
+  tcase_add_test (tc_chain, test_stream_event);
+  tcase_add_test (tc_chain, test_notifies);
+  return s;
+}
+
+GST_CHECK_MAIN (gst_streams);
diff --git a/tests/check/gst/gstutils.c b/tests/check/gst/gstutils.c
index 012a69a..3a5de64 100644
--- a/tests/check/gst/gstutils.c
+++ b/tests/check/gst/gstutils.c
@@ -1385,8 +1385,8 @@
       "Fake Request Sink", "Sink", "Fake sink with request pads",
       "Sebastian Rasmussen <sebras@hotmail.com>");
 
-  gst_element_class_add_pad_template (gstelement_class,
-      gst_static_pad_template_get (&fakereqsink_sink_template));
+  gst_element_class_add_static_pad_template (gstelement_class,
+      &fakereqsink_sink_template);
 
   gstelement_class->request_new_pad = gst_fakereqsink_request_new_pad;
   gstelement_class->release_pad = gst_fakereqsink_release_pad;
@@ -1593,10 +1593,10 @@
       "Test Pad Request Sink", "Sink", "Sink for unit tests with request pads",
       "Thiago Santos <thiagoss@osg.samsung.com>");
 
-  gst_element_class_add_pad_template (gstelement_class,
-      gst_static_pad_template_get (&testpadreqsink_video_template));
-  gst_element_class_add_pad_template (gstelement_class,
-      gst_static_pad_template_get (&testpadreqsink_audio_template));
+  gst_element_class_add_static_pad_template (gstelement_class,
+      &testpadreqsink_video_template);
+  gst_element_class_add_static_pad_template (gstelement_class,
+      &testpadreqsink_audio_template);
 
   gstelement_class->request_new_pad = gst_testpadreqsink_request_new_pad;
   gstelement_class->release_pad = gst_testpadreqsink_release_pad;
@@ -1701,6 +1701,52 @@
 
 GST_END_TEST;
 
+GST_START_TEST (test_element_link_with_ghost_pads)
+{
+  GstElement *sink_bin, *sink2_bin, *pipeline;
+  GstElement *src, *tee, *queue, *queue2, *sink, *sink2;
+  GstMessage *message;
+  GstBus *bus;
+
+  fail_unless (pipeline = gst_pipeline_new (NULL));
+  fail_unless (sink_bin = gst_bin_new (NULL));
+  fail_unless (sink2_bin = gst_bin_new (NULL));
+  fail_unless (src = gst_element_factory_make ("fakesrc", NULL));
+  fail_unless (tee = gst_element_factory_make ("tee", NULL));
+  fail_unless (queue = gst_element_factory_make ("queue", NULL));
+  fail_unless (sink = gst_element_factory_make ("fakesink", NULL));
+  fail_unless (queue2 = gst_element_factory_make ("queue", NULL));
+  fail_unless (sink2 = gst_element_factory_make ("fakesink", NULL));
+
+  gst_bin_add_many (GST_BIN (pipeline), src, tee, queue, sink, sink2_bin, NULL);
+  fail_unless (gst_element_link_many (src, tee, queue, sink, NULL));
+  fail_unless (gst_element_set_state (pipeline,
+          GST_STATE_PLAYING) == GST_STATE_CHANGE_ASYNC);
+
+  /* wait for a buffer to arrive at the sink */
+  bus = gst_element_get_bus (pipeline);
+  message = gst_bus_poll (bus, GST_MESSAGE_ASYNC_DONE, -1);
+  gst_message_unref (message);
+  gst_object_unref (bus);
+
+  gst_bin_add_many (GST_BIN (sink_bin), queue2, sink2, NULL);
+  fail_unless (gst_element_link (queue2, sink2));
+
+  gst_bin_add (GST_BIN (sink2_bin), sink_bin);
+  /* The two levels of bins with the outer bin in the running state is
+   * important, when the second ghost pad is created (from this
+   * gst_element_link()) in the running bin, we need to activate the
+   * created ghost pad */
+  fail_unless (gst_element_link (tee, queue2));
+
+  fail_unless (gst_element_set_state (pipeline,
+          GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS);
+
+  gst_object_unref (pipeline);
+}
+
+GST_END_TEST;
+
 static Suite *
 gst_utils_suite (void)
 {
@@ -1729,6 +1775,7 @@
 #endif
   tcase_add_test (tc_chain, test_element_found_tags);
   tcase_add_test (tc_chain, test_element_link);
+  tcase_add_test (tc_chain, test_element_link_with_ghost_pads);
   tcase_add_test (tc_chain, test_element_unlink);
   tcase_add_test (tc_chain, test_element_get_compatible_pad_request);
   tcase_add_test (tc_chain, test_set_value_from_string);
@@ -1739,6 +1786,7 @@
 
   tcase_add_test (tc_chain, test_read_macros);
   tcase_add_test (tc_chain, test_write_macros);
+
   return s;
 }
 
diff --git a/tests/check/gst/gstvalue.c b/tests/check/gst/gstvalue.c
index 7bb8955..64082c4 100644
--- a/tests/check/gst/gstvalue.c
+++ b/tests/check/gst/gstvalue.c
@@ -662,17 +662,22 @@
 
   /* GstFlagSet should always intersect with itself */
   g_value_unset (&dest);
+  fail_unless (gst_value_can_intersect (&value, &value));
   fail_unless (gst_value_intersect (&dest, &value, &value));
 
   /* GstFlagSet subtype should intersect with itself */
   g_value_unset (&dest);
+  fail_unless (gst_value_can_intersect (&value2, &value2));
   fail_unless (gst_value_intersect (&dest, &value2, &value2));
 
   /* Check we can intersect custom flagset subtype with flagset */
   g_value_unset (&dest);
+  fail_unless (gst_value_can_intersect (&value2, &value));
   fail_unless (gst_value_intersect (&dest, &value2, &value));
 
+  /* and in the other order */
   g_value_unset (&dest);
+  fail_unless (gst_value_can_intersect (&value, &value2));
   fail_unless (gst_value_intersect (&dest, &value, &value2));
 
   fail_unless (gst_value_get_flagset_flags (&dest) == test_flags,
diff --git a/tests/check/libs/adapter.c b/tests/check/libs/adapter.c
index 95d2952..f503245 100644
--- a/tests/check/libs/adapter.c
+++ b/tests/check/libs/adapter.c
@@ -364,6 +364,7 @@
   guint64 dist;
   guint8 *data;
   const guint8 *cdata;
+  guint64 offset;
 
   adapter = gst_adapter_new ();
   fail_unless (adapter != NULL);
@@ -380,6 +381,21 @@
   fail_unless (timestamp == GST_CLOCK_TIME_NONE);
   fail_unless (dist == 0);
 
+  timestamp = gst_adapter_pts_at_discont (adapter);
+  fail_unless (timestamp == GST_CLOCK_TIME_NONE);
+
+  /* Offset should be undefined */
+  offset = gst_adapter_prev_offset (adapter, &dist);
+  fail_unless (offset == GST_BUFFER_OFFSET_NONE);
+  fail_unless (dist == 0);
+
+  offset = gst_adapter_offset_at_discont (adapter);
+  fail_unless (offset == GST_CLOCK_TIME_NONE);
+
+  /* 0 bytes since discont */
+  dist = gst_adapter_distance_from_discont (adapter);
+  fail_unless (dist == 0);
+
   gst_adapter_flush (adapter, 50);
   avail = gst_adapter_available (adapter);
   fail_unless (avail == 50);
@@ -389,6 +405,21 @@
   fail_unless (timestamp == GST_CLOCK_TIME_NONE);
   fail_unless (dist == 50);
 
+  timestamp = gst_adapter_pts_at_discont (adapter);
+  fail_unless (timestamp == GST_CLOCK_TIME_NONE);
+
+  /* Offset still undefined */
+  offset = gst_adapter_prev_offset (adapter, &dist);
+  fail_unless (offset == GST_BUFFER_OFFSET_NONE);
+  fail_unless (dist == 50);
+
+  offset = gst_adapter_offset_at_discont (adapter);
+  fail_unless (offset == GST_CLOCK_TIME_NONE);
+
+  /* 50 bytes since discont */
+  dist = gst_adapter_distance_from_discont (adapter);
+  fail_unless (dist == 50);
+
   buffer = gst_buffer_new_and_alloc (100);
   GST_BUFFER_TIMESTAMP (buffer) = 1 * GST_SECOND;
 
@@ -402,6 +433,21 @@
   fail_unless (timestamp == GST_CLOCK_TIME_NONE);
   fail_unless (dist == 50);
 
+  timestamp = gst_adapter_pts_at_discont (adapter);
+  fail_unless (timestamp == GST_CLOCK_TIME_NONE);
+
+  /* Offset still undefined */
+  offset = gst_adapter_prev_offset (adapter, &dist);
+  fail_unless (offset == GST_BUFFER_OFFSET_NONE);
+  fail_unless (dist == 50);
+
+  offset = gst_adapter_offset_at_discont (adapter);
+  fail_unless (offset == GST_CLOCK_TIME_NONE);
+
+  /* 50 bytes since discont */
+  dist = gst_adapter_distance_from_discont (adapter);
+  fail_unless (dist == 50);
+
   /* flush out first buffer we are now at the second buffer timestamp */
   gst_adapter_flush (adapter, 50);
   avail = gst_adapter_available (adapter);
@@ -411,6 +457,14 @@
   fail_unless (timestamp == 1 * GST_SECOND);
   fail_unless (dist == 0);
 
+  /* timestamp was undefined at discont */
+  timestamp = gst_adapter_pts_at_discont (adapter);
+  fail_unless (timestamp == GST_CLOCK_TIME_NONE);
+
+  /* 100 bytes since discont */
+  dist = gst_adapter_distance_from_discont (adapter);
+  fail_unless (dist == 100);
+
   /* move some more, still the same timestamp but further away */
   gst_adapter_flush (adapter, 50);
   avail = gst_adapter_available (adapter);
@@ -420,6 +474,10 @@
   fail_unless (timestamp == 1 * GST_SECOND);
   fail_unless (dist == 50);
 
+  /* timestamp was undefined at discont */
+  timestamp = gst_adapter_pts_at_discont (adapter);
+  fail_unless (timestamp == GST_CLOCK_TIME_NONE);
+
   /* push a buffer without timestamp in the adapter */
   buffer = gst_buffer_new_and_alloc (100);
   gst_adapter_push (adapter, buffer);
@@ -437,6 +495,10 @@
   fail_unless (timestamp == 1 * GST_SECOND);
   fail_unless (dist == 50);
 
+  /* timestamp was undefined at discont */
+  timestamp = gst_adapter_pts_at_discont (adapter);
+  fail_unless (timestamp == GST_CLOCK_TIME_NONE);
+
   /* flush away buffer with the timestamp */
   gst_adapter_flush (adapter, 50);
   avail = gst_adapter_available (adapter);
@@ -445,6 +507,10 @@
   fail_unless (timestamp == 1 * GST_SECOND);
   fail_unless (dist == 100);
 
+  /* timestamp was undefined at discont */
+  timestamp = gst_adapter_pts_at_discont (adapter);
+  fail_unless (timestamp == GST_CLOCK_TIME_NONE);
+
   /* move into the second buffer */
   gst_adapter_flush (adapter, 50);
   avail = gst_adapter_available (adapter);
@@ -453,6 +519,10 @@
   fail_unless (timestamp == 1 * GST_SECOND);
   fail_unless (dist == 150);
 
+  /* timestamp was undefined at discont */
+  timestamp = gst_adapter_pts_at_discont (adapter);
+  fail_unless (timestamp == GST_CLOCK_TIME_NONE);
+
   /* move to third buffer we move to the new timestamp */
   gst_adapter_flush (adapter, 50);
   avail = gst_adapter_available (adapter);
@@ -461,6 +531,10 @@
   fail_unless (timestamp == 2 * GST_SECOND);
   fail_unless (dist == 0);
 
+  /* timestamp was undefined at discont */
+  timestamp = gst_adapter_pts_at_discont (adapter);
+  fail_unless (timestamp == GST_CLOCK_TIME_NONE);
+
   /* move everything out */
   gst_adapter_flush (adapter, 100);
   avail = gst_adapter_available (adapter);
@@ -477,6 +551,10 @@
   fail_unless (timestamp == GST_CLOCK_TIME_NONE);
   fail_unless (dist == 0);
 
+  /* timestamp was undefined at discont */
+  timestamp = gst_adapter_pts_at_discont (adapter);
+  fail_unless (timestamp == GST_CLOCK_TIME_NONE);
+
   /* push an empty buffer with timestamp in the adapter */
   buffer = gst_buffer_new ();
   GST_BUFFER_TIMESTAMP (buffer) = 2 * GST_SECOND;
@@ -487,6 +565,11 @@
   fail_unless (timestamp == 2 * GST_SECOND);
   fail_unless (dist == 0);
 
+  /* timestamp was undefined at discont (clearing the adapter is not
+   * necessarily a discont) */
+  timestamp = gst_adapter_pts_at_discont (adapter);
+  fail_unless (timestamp == GST_CLOCK_TIME_NONE);
+
   /* push another empty buffer */
   buffer = gst_buffer_new ();
   GST_BUFFER_TIMESTAMP (buffer) = 3 * GST_SECOND;
@@ -563,6 +646,198 @@
 
 GST_END_TEST;
 
+GST_START_TEST (test_offset)
+{
+  GstAdapter *adapter;
+  GstBuffer *buffer;
+  guint avail;
+  guint64 offset;
+  guint64 dist;
+
+  adapter = gst_adapter_new ();
+  fail_unless (adapter != NULL);
+
+  buffer = gst_buffer_new_and_alloc (100);
+
+  /* push in the adapter */
+  gst_adapter_push (adapter, buffer);
+  avail = gst_adapter_available (adapter);
+  fail_unless (avail == 100);
+
+  /* Offset should be undefined */
+  offset = gst_adapter_distance_from_discont (adapter);
+  fail_unless_equals_uint64 (offset, 0);
+  offset = gst_adapter_prev_offset (adapter, &dist);
+  fail_unless_equals_uint64 (offset, GST_BUFFER_OFFSET_NONE);
+  fail_unless_equals_int (dist, 0);
+
+  /* Offset is undefined */
+  offset = gst_adapter_offset_at_discont (adapter);
+  fail_unless_equals_uint64 (offset, GST_BUFFER_OFFSET_NONE);
+
+  gst_adapter_flush (adapter, 50);
+  avail = gst_adapter_available (adapter);
+  fail_unless (avail == 50);
+
+  /* Offset still undefined, dist changed though */
+  offset = gst_adapter_distance_from_discont (adapter);
+  fail_unless_equals_uint64 (offset, 50);
+  offset = gst_adapter_prev_offset (adapter, &dist);
+  fail_unless_equals_uint64 (offset, GST_BUFFER_OFFSET_NONE);
+  fail_unless_equals_int (dist, 50);
+
+  /* Offset is undefined */
+  offset = gst_adapter_offset_at_discont (adapter);
+  fail_unless_equals_uint64 (offset, GST_BUFFER_OFFSET_NONE);
+
+  /* Let's push in a discont buffer with a valid offset */
+  buffer = gst_buffer_new_and_alloc (100);
+  GST_BUFFER_OFFSET (buffer) = 10000;
+  GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
+
+  /* push in the adapter */
+  gst_adapter_push (adapter, buffer);
+  avail = gst_adapter_available (adapter);
+  fail_unless (avail == 150);
+
+  /* offset is still undefined */
+  offset = gst_adapter_distance_from_discont (adapter);
+  fail_unless_equals_uint64 (offset, 50);
+  offset = gst_adapter_prev_offset (adapter, &dist);
+  fail_unless_equals_uint64 (offset, GST_BUFFER_OFFSET_NONE);
+  fail_unless_equals_int (dist, 50);
+
+  /* Offset is undefined */
+  offset = gst_adapter_offset_at_discont (adapter);
+  fail_unless_equals_uint64 (offset, GST_BUFFER_OFFSET_NONE);
+
+  /* flush out first buffer we are now at the second buffer offset */
+  gst_adapter_flush (adapter, 50);
+  avail = gst_adapter_available (adapter);
+  fail_unless (avail == 100);
+
+  offset = gst_adapter_distance_from_discont (adapter);
+  fail_unless_equals_uint64 (offset, 0);
+  offset = gst_adapter_prev_offset (adapter, &dist);
+  fail_unless_equals_uint64 (offset, 10000);
+  fail_unless_equals_int (dist, 0);
+
+  /* Offset should be defined now */
+  offset = gst_adapter_offset_at_discont (adapter);
+  fail_unless_equals_uint64 (offset, 10000);
+
+  /* move some more, we should have an updated offset */
+  gst_adapter_flush (adapter, 50);
+  avail = gst_adapter_available (adapter);
+  fail_unless (avail == 50);
+
+  offset = gst_adapter_distance_from_discont (adapter);
+  fail_unless_equals_uint64 (offset, 50);
+  offset = gst_adapter_prev_offset (adapter, &dist);
+  fail_unless_equals_uint64 (offset, 10000);
+  fail_unless_equals_int (dist, 50);
+
+  offset = gst_adapter_offset_at_discont (adapter);
+  fail_unless_equals_uint64 (offset, 10000);
+
+  /* push a buffer without offset in the adapter (contiguous with the
+     other) */
+  buffer = gst_buffer_new_and_alloc (100);
+  gst_adapter_push (adapter, buffer);
+  avail = gst_adapter_available (adapter);
+  fail_unless (avail == 150);
+
+  /* push a buffer with offset in the adapter (but contiguous with the
+     other), the offset shouldn't be taken into account */
+  buffer = gst_buffer_new_and_alloc (100);
+  GST_BUFFER_OFFSET (buffer) = 50000;
+  gst_adapter_push (adapter, buffer);
+  avail = gst_adapter_available (adapter);
+  fail_unless (avail == 250);
+
+  /* offset still as it was before the push */
+  offset = gst_adapter_distance_from_discont (adapter);
+  fail_unless_equals_uint64 (offset, 50);
+  offset = gst_adapter_prev_offset (adapter, &dist);
+  fail_unless_equals_uint64 (offset, 10000);
+  fail_unless_equals_int (dist, 50);
+
+  offset = gst_adapter_offset_at_discont (adapter);
+  fail_unless_equals_uint64 (offset, 10000);
+
+  /* flush away buffer with the offset */
+  gst_adapter_flush (adapter, 50);
+  avail = gst_adapter_available (adapter);
+  fail_unless (avail == 200);
+  offset = gst_adapter_distance_from_discont (adapter);
+  fail_unless_equals_uint64 (offset, 100);
+  /* The previous valid offset seen is now 100 bytes away */
+  offset = gst_adapter_prev_offset (adapter, &dist);
+  fail_unless_equals_uint64 (offset, 10000);
+  fail_unless_equals_int (dist, 100);
+
+  offset = gst_adapter_offset_at_discont (adapter);
+  fail_unless_equals_uint64 (offset, 10000);
+
+  /* move into the second buffer */
+  gst_adapter_flush (adapter, 50);
+  avail = gst_adapter_available (adapter);
+  fail_unless (avail == 150);
+  offset = gst_adapter_distance_from_discont (adapter);
+  fail_unless_equals_uint64 (offset, 150);
+  offset = gst_adapter_prev_offset (adapter, &dist);
+  fail_unless_equals_uint64 (offset, 10000);
+  fail_unless_equals_int (dist, 150);
+
+  offset = gst_adapter_offset_at_discont (adapter);
+  fail_unless_equals_uint64 (offset, 10000);
+
+  /* move to third buffer, we should still see a continuously increasing
+   * offset and ignore the non-discont offset */
+  gst_adapter_flush (adapter, 50);
+  avail = gst_adapter_available (adapter);
+  fail_unless (avail == 100);
+  offset = gst_adapter_distance_from_discont (adapter);
+  fail_unless_equals_uint64 (offset, 200);
+  /* But the prev_offset *does* give us the actual buffer offset value */
+  offset = gst_adapter_prev_offset (adapter, &dist);
+  fail_unless_equals_uint64 (offset, 50000);
+  fail_unless_equals_int (dist, 0);
+
+  offset = gst_adapter_offset_at_discont (adapter);
+  fail_unless_equals_uint64 (offset, 10000);
+
+  /* move everything out, we end up at the last offset */
+  gst_adapter_flush (adapter, 100);
+  avail = gst_adapter_available (adapter);
+  fail_unless (avail == 0);
+  offset = gst_adapter_distance_from_discont (adapter);
+  fail_unless_equals_uint64 (offset, 300);
+  offset = gst_adapter_prev_offset (adapter, &dist);
+  fail_unless_equals_uint64 (offset, 50000);
+  fail_unless_equals_int (dist, 100);
+
+  offset = gst_adapter_offset_at_discont (adapter);
+  fail_unless_equals_uint64 (offset, 10000);
+
+  /* clear everything */
+  gst_adapter_clear (adapter);
+  avail = gst_adapter_available (adapter);
+  fail_unless (avail == 0);
+  offset = gst_adapter_distance_from_discont (adapter);
+  fail_unless_equals_uint64 (offset, 0);
+  offset = gst_adapter_prev_offset (adapter, &dist);
+  fail_unless_equals_uint64 (offset, GST_BUFFER_OFFSET_NONE);
+  fail_unless_equals_int (dist, 0);
+
+  offset = gst_adapter_offset_at_discont (adapter);
+  fail_unless_equals_uint64 (offset, GST_BUFFER_OFFSET_NONE);
+
+  g_object_unref (adapter);
+}
+
+GST_END_TEST;
+
 GST_START_TEST (test_scan)
 {
   GstAdapter *adapter;
@@ -1064,6 +1339,7 @@
   tcase_add_test (tc_chain, test_get_buffer_list);
   tcase_add_test (tc_chain, test_merge);
   tcase_add_test (tc_chain, test_take_buffer_fast);
+  tcase_add_test (tc_chain, test_offset);
 
   return s;
 }
diff --git a/tests/check/libs/baseparse.c b/tests/check/libs/baseparse.c
index 8113e30..cbd3b66 100644
--- a/tests/check/libs/baseparse.c
+++ b/tests/check/libs/baseparse.c
@@ -118,10 +118,8 @@
       GST_PAD_SRC, GST_PAD_ALWAYS,
       GST_STATIC_CAPS ("video/x-test-custom"));
 
-  gst_element_class_add_pad_template (element_class,
-      gst_static_pad_template_get (&sink_templ));
-  gst_element_class_add_pad_template (element_class,
-      gst_static_pad_template_get (&src_templ));
+  gst_element_class_add_static_pad_template (element_class, &sink_templ);
+  gst_element_class_add_static_pad_template (element_class, &src_templ);
 
   gst_element_class_set_metadata (element_class,
       "ParserTester", "Parser/Video", "yep", "me");
@@ -455,6 +453,23 @@
 
 GST_END_TEST;
 
+static void
+baseparse_setup (void)
+{
+  /* init/reset global state */
+  mysrcpad = mysinkpad = NULL;
+  parsetest = NULL;
+  bus = NULL;
+  loop = NULL;
+  have_eos = have_data = caps_set = FALSE;
+  buffer_count = 0;
+}
+
+static void
+baseparse_teardown (void)
+{
+}
+
 static Suite *
 gst_baseparse_suite (void)
 {
@@ -462,6 +477,7 @@
   TCase *tc = tcase_create ("general");
 
   suite_add_tcase (s, tc);
+  tcase_add_checked_fixture (tc, baseparse_setup, baseparse_teardown);
   tcase_add_test (tc, parser_playback);
   tcase_add_test (tc, parser_empty_stream);
   tcase_add_test (tc, parser_reverse_playback_on_passthrough);
diff --git a/tests/check/libs/collectpads.c b/tests/check/libs/collectpads.c
index 4ad0c2a..53a9d4c 100644
--- a/tests/check/libs/collectpads.c
+++ b/tests/check/libs/collectpads.c
@@ -217,10 +217,10 @@
 
   gobject_class->dispose = gst_aggregator_dispose;
 
-  gst_element_class_add_pad_template (gstelement_class,
-      gst_static_pad_template_get (&gst_aggregator_src_template));
-  gst_element_class_add_pad_template (gstelement_class,
-      gst_static_pad_template_get (&gst_aggregator_sink_template));
+  gst_element_class_add_static_pad_template (gstelement_class,
+      &gst_aggregator_src_template);
+  gst_element_class_add_static_pad_template (gstelement_class,
+      &gst_aggregator_sink_template);
   gst_element_class_set_static_metadata (gstelement_class, "Aggregator",
       "Testing", "Combine N buffers", "Stefan Sauer <ensonic@users.sf.net>");
 
@@ -423,9 +423,14 @@
 static void
 teardown (void)
 {
+  gst_object_unref (srcpad1);
+  gst_object_unref (srcpad2);
   gst_object_unref (sinkpad1);
   gst_object_unref (sinkpad2);
   gst_object_unref (collect);
+  srcpad1 = srcpad2 = NULL;
+  sinkpad1 = sinkpad2 = NULL;
+  collect = NULL;
 }
 
 GST_START_TEST (test_pad_add_remove)
@@ -857,6 +862,9 @@
   g_atomic_int_set (&flush_start_events, 0);
   g_atomic_int_set (&flush_stop_events, 0);
   gst_element_set_state (agg, GST_STATE_PLAYING);
+  outbuf1 = NULL;
+  outbuf2 = NULL;
+  collected = FALSE;
 }
 
 static void
@@ -869,6 +877,10 @@
   gst_object_unref (srcpad2);
   g_free (data1);
   g_free (data2);
+  agg = NULL;
+  agg_srcpad = NULL;
+  srcpad1 = srcpad2 = NULL;
+  data1 = data2 = NULL;
 }
 
 GST_START_TEST (test_flushing_seek_failure)
@@ -1071,6 +1083,7 @@
   suite_add_tcase (suite, general);
   tcase_add_checked_fixture (general, setup, teardown);
   tcase_add_test (general, test_pad_add_remove);
+
   tcase_add_test (general, test_collect);
   tcase_add_test (general, test_collect_eos);
   tcase_add_test (general, test_collect_twice);
diff --git a/tests/check/libs/gstlibscpp.cc b/tests/check/libs/gstlibscpp.cc
index f7f89e3..bee2588 100644
--- a/tests/check/libs/gstlibscpp.cc
+++ b/tests/check/libs/gstlibscpp.cc
@@ -22,27 +22,10 @@
 #endif
 
 #include <gst/gst.h>
-#include <gst/check/gstcheck.h>
-
-#include <gst/base/gstadapter.h>
-#include <gst/base/gstbasesink.h>
-#include <gst/base/gstbasesrc.h>
-#include <gst/base/gstbasetransform.h>
-#include <gst/base/gstbitreader.h>
-#include <gst/base/gstbytereader.h>
-#include <gst/base/gstbytewriter.h>
-#include <gst/base/gstcollectpads.h>
-#include <gst/base/gstpushsrc.h>
-#include <gst/base/gsttypefindhelper.h>
-
-#include <gst/controller/gstinterpolationcontrolsource.h>
-#include <gst/controller/gstlfocontrolsource.h>
-#include <gst/controller/gsttriggercontrolsource.h>
-
-#include <gst/net/gstnetclientclock.h>
-#include <gst/net/gstnet.h>
-#include <gst/net/gstnettimepacket.h>
-#include <gst/net/gstnettimeprovider.h>
+#include <gst/check/check.h>
+#include <gst/base/base.h>
+#include <gst/controller/controller.h>
+#include <gst/net/net.h>
 
 /* we mostly just want to make sure that our library headers don't
  * contain anything a C++ compiler might not like */
@@ -53,6 +36,17 @@
 
 GST_END_TEST;
 
+GST_START_TEST (test_init_macros)
+{
+  GstBitReader bit_reader = GST_BIT_READER_INIT (NULL, 0);
+  GstByteReader byte_reader = GST_BYTE_READER_INIT (NULL, 0);
+
+  fail_unless (bit_reader.data == NULL);
+  fail_unless (byte_reader.data == NULL);
+}
+
+GST_END_TEST;
+
 static Suite *
 libscpp_suite (void)
 {
@@ -61,6 +55,7 @@
 
   suite_add_tcase (s, tc_chain);
   tcase_add_test (tc_chain, test_nothing);
+  tcase_add_test (tc_chain, test_init_macros);
 
   return s;
 }
diff --git a/tests/check/libs/gstnetclientclock.c b/tests/check/libs/gstnetclientclock.c
index a37a1e0..1434dcb 100644
--- a/tests/check/libs/gstnetclientclock.c
+++ b/tests/check/libs/gstnetclientclock.c
@@ -52,7 +52,8 @@
   GstClock *client, *server;
   GstClockTime basex, basey, rate_num, rate_denom;
   GstClockTime servtime, clienttime, diff;
-  gint port, i;
+  gint port;
+  gchar sign;
 
   server = gst_system_clock_obtain ();
   fail_unless (server != NULL, "failed to get system clock");
@@ -73,36 +74,26 @@
   g_object_get (client, "port", &port, NULL);
 
   /* let the clocks synchronize */
-  for (i = 0; i < 11; ++i) {
-    gchar sign;
+  gst_clock_wait_for_sync (GST_CLOCK (client), GST_SECOND);
 
-    servtime = gst_clock_get_time (server);
-    clienttime = gst_clock_get_time (client);
+  servtime = gst_clock_get_time (server);
+  clienttime = gst_clock_get_time (client);
 
-    if (servtime > clienttime) {
-      sign = '-';
-      diff = servtime - clienttime;
-    } else {
-      sign = '+';
-      diff = clienttime - servtime;
-    }
-
-    GST_LOG ("server time:  %" GST_TIME_FORMAT, GST_TIME_ARGS (servtime));
-    GST_LOG ("client time:  %" GST_TIME_FORMAT, GST_TIME_ARGS (clienttime));
-    GST_LOG ("diff       : %c%" GST_TIME_FORMAT, sign, GST_TIME_ARGS (diff));
-
-    /* can't in general make a precise assertion here, because this depends on
-     * system load and a lot of things. however within half a second they should
-     * at least be within 1/10 of a second of each other... */
-    if (diff < 100 * GST_MSECOND)
-      break;
-
-    g_usleep (G_USEC_PER_SEC / 20);
+  if (servtime > clienttime) {
+    sign = '-';
+    diff = servtime - clienttime;
+  } else {
+    sign = '+';
+    diff = clienttime - servtime;
   }
 
-  GST_INFO ("done after %d iterations, diff: %" GST_TIME_FORMAT, i,
-      GST_TIME_ARGS (diff));
+  GST_LOG ("server time:  %" GST_TIME_FORMAT, GST_TIME_ARGS (servtime));
+  GST_LOG ("client time:  %" GST_TIME_FORMAT, GST_TIME_ARGS (clienttime));
+  GST_LOG ("diff       : %c%" GST_TIME_FORMAT, sign, GST_TIME_ARGS (diff));
 
+  /* can't in general make a precise assertion here, because this depends on
+   * system load and a lot of things. however within half a second they should
+   * at least be within 1/10 of a second of each other... */
   if (diff > 100 * GST_MSECOND)
     fail ("clocks not in sync (%" GST_TIME_FORMAT ")", diff);
 
diff --git a/tests/check/libs/test_transform.c b/tests/check/libs/test_transform.c
index dc45be0..5706f88 100644
--- a/tests/check/libs/test_transform.c
+++ b/tests/check/libs/test_transform.c
@@ -28,18 +28,7 @@
 typedef struct _GstTestTrans GstTestTrans;
 typedef struct _GstTestTransClass GstTestTransClass;
 
-#define GST_TYPE_TEST_TRANS \
-  (gst_test_trans_get_type())
-#define GST_TEST_TRANS(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_TEST_TRANS,GstTestTrans))
-#define GST_TEST_TRANS_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_TEST_TRANS,GstTestTransClass))
-#define GST_TEST_TRANS_GET_CLASS(obj) \
-  (G_TYPE_INSTANCE_GET_CLASS((obj), GST_TYPE_TEST_TRANS, GstTestTransClass))
-#define GST_IS_TEST_TRANS(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_TEST_TRANS))
-#define GST_IS_TEST_TRANS_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_TEST_TRANS))
+#define GST_TEST_TRANS(obj) ((GstTestTrans *)(obj))
 
 struct _GstTestTrans
 {
@@ -53,10 +42,6 @@
   GstBaseTransformClass parent_class;
 };
 
-GType gst_test_trans_get_type (void);
-
-G_DEFINE_TYPE (GstTestTrans, gst_test_trans, GST_TYPE_BASE_TRANSFORM);
-
 static GstFlowReturn (*klass_transform) (GstBaseTransform * trans,
     GstBuffer * inbuf, GstBuffer * outbuf) = NULL;
 static GstFlowReturn (*klass_transform_ip) (GstBaseTransform * trans,
@@ -89,10 +74,10 @@
   gst_element_class_set_metadata (element_class, "TestTrans",
       "Filter/Test", "Test transform", "Wim Taymans <wim.taymans@gmail.com>");
 
-  gst_element_class_add_pad_template (element_class,
-      gst_static_pad_template_get (sink_template));
-  gst_element_class_add_pad_template (element_class,
-      gst_static_pad_template_get (src_template));
+  gst_element_class_add_static_pad_template (element_class, sink_template);
+  gst_element_class_add_static_pad_template (element_class, src_template);
+
+  GST_INFO ("setting up %s", g_type_name (((GTypeClass *) klass)->g_type));
 
   trans_class->passthrough_on_same_caps = klass_passthrough_on_same_caps;
   if (klass_transform_ip != NULL)
@@ -158,9 +143,24 @@
   TestTransData *res;
   GstPad *tmp;
   GstPadTemplate *templ;
+  GType type;
+
+  /* we register a new sub-class for every test-run, so the class init
+   * function is called for every test run and can be set up properly
+   * even with CK_FORK=no */
+  {
+    static gint counter = 0;
+    gchar name[100];
+
+    g_snprintf (name, sizeof (name), "GstTestTrans%d", ++counter);
+
+    type = g_type_register_static_simple (GST_TYPE_BASE_TRANSFORM, name,
+        sizeof (GstTestTransClass), (GClassInitFunc) gst_test_trans_class_init,
+        sizeof (GstTestTrans), (GInstanceInitFunc) gst_test_trans_init, 0);
+  }
 
   res = g_new0 (TestTransData, 1);
-  res->trans = g_object_new (GST_TYPE_TEST_TRANS, NULL);
+  res->trans = g_object_new (type, NULL);
 
   templ = gst_static_pad_template_get (sink_template);
   templ->direction = GST_PAD_SRC;
diff --git a/tests/check/libs/transform1.c b/tests/check/libs/transform1.c
index f8f32e2..45e6477 100644
--- a/tests/check/libs/transform1.c
+++ b/tests/check/libs/transform1.c
@@ -96,6 +96,14 @@
   gst_test_trans_push_segment (trans);
 
   gst_test_trans_free (trans);
+
+  klass_transform_ip = NULL;
+  klass_transform = NULL;
+  klass_transform_caps = NULL;
+  klass_transform_size = NULL;
+  klass_set_caps = NULL;
+  klass_submit_input_buffer = NULL;
+  klass_generate_output = NULL;
 }
 
 GST_END_TEST;
@@ -879,6 +887,25 @@
 
 GST_END_TEST;
 
+static void
+transform1_setup (void)
+{
+  sink_template = &gst_test_trans_sink_template;
+  src_template = &gst_test_trans_src_template;
+}
+
+static void
+transform1_teardown (void)
+{
+  /* reset global state */
+  klass_transform_ip = NULL;
+  klass_transform = NULL;
+  klass_transform_caps = NULL;
+  klass_transform_size = NULL;
+  klass_set_caps = NULL;
+  klass_submit_input_buffer = NULL;
+  klass_generate_output = NULL;
+}
 
 static Suite *
 gst_basetransform_suite (void)
@@ -887,6 +914,8 @@
   TCase *tc = tcase_create ("general");
 
   suite_add_tcase (s, tc);
+  tcase_add_checked_fixture (tc, transform1_setup, transform1_teardown);
+
   /* pass through */
   tcase_add_test (tc, basetransform_chain_pt1);
   tcase_add_test (tc, basetransform_chain_pt2);
diff --git a/tests/check/libs/transform2.c b/tests/check/libs/transform2.c
index e8e746f..bc1f4d0 100644
--- a/tests/check/libs/transform2.c
+++ b/tests/check/libs/transform2.c
@@ -49,10 +49,13 @@
 collate_submit_input_buffer (GstBaseTransform * trans,
     gboolean is_discont, GstBuffer * input)
 {
-  GstFlowReturn ret =
-      GST_BASE_TRANSFORM_CLASS
-      (gst_test_trans_parent_class)->submit_input_buffer (trans, is_discont,
-      input);
+  GstBaseTransformClass *tt_parent_class;
+  GstFlowReturn ret;
+
+  tt_parent_class =
+      g_type_class_peek_parent (GST_BASE_TRANSFORM_GET_CLASS (trans));
+
+  ret = tt_parent_class->submit_input_buffer (trans, is_discont, input);
 
   if (ret != GST_FLOW_OK)
     return ret;
diff --git a/tests/check/pipelines/parse-launch.c b/tests/check/pipelines/parse-launch.c
index 091c747..6472070 100644
--- a/tests/check/pipelines/parse-launch.c
+++ b/tests/check/pipelines/parse-launch.c
@@ -22,11 +22,6 @@
 #  include "config.h"
 #endif
 
-#ifdef HAVE_VALGRIND_H
-# include <valgrind/valgrind.h>
-# include <valgrind/memcheck.h>
-#endif
-
 #include <gst/check/gstcheck.h>
 
 #define GST_TYPE_PARSE_TEST_ELEMENT (gst_parse_test_element_get_type())
@@ -131,6 +126,7 @@
   type = gst_element_factory_get_element_type (efac);
   fail_unless (type != 0);
   g_object_unref (efac);
+  g_object_unref (efac);
   fail_unless (gst_element_register (NULL, "1__dentity", GST_RANK_NONE, type));
 
   for (s = test_lines; *s != NULL; s++) {
@@ -396,19 +392,14 @@
   NULL
 };
 
+/* These don't seem to leak any longer? */
 GST_START_TEST (leaking_fail_pipes)
 {
   const gchar **s;
 
   for (s = leaking_failures; *s != NULL; s++) {
-    /* Uncomment if you want to try fixing the leaks */
-#if 0
-    g_print ("Trying pipe: %s\n", *s);
+    GST_INFO ("Trying pipe: %s", *s);
     expected_fail_pipe (*s);
-#endif
-#ifdef HAVE_VALGRIND_H
-    VALGRIND_DO_LEAK_CHECK;
-#endif
   }
 }
 
@@ -547,8 +538,8 @@
 {
   GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
 
-  gst_element_class_add_pad_template (gstelement_class,
-      gst_static_pad_template_get (&test_element_pad_template));
+  gst_element_class_add_static_pad_template (gstelement_class,
+      &test_element_pad_template);
 
   gst_element_class_set_metadata (gstelement_class,
       "Test element for parse launch tests", "Source",
diff --git a/tests/check/pipelines/seek.c b/tests/check/pipelines/seek.c
index ca7fd3b..5d030c5 100644
--- a/tests/check/pipelines/seek.c
+++ b/tests/check/pipelines/seek.c
@@ -75,8 +75,8 @@
   gstbasesrc_class->stop = timed_test_src_stop;
   gstbasesrc_class->create = timed_test_src_create;
 
-  gst_element_class_add_pad_template (GST_ELEMENT_CLASS (klass),
-      gst_static_pad_template_get (&timed_test_src_src_template));
+  gst_element_class_add_static_pad_template (GST_ELEMENT_CLASS (klass),
+      &timed_test_src_src_template);
 }
 
 static void
@@ -190,6 +190,7 @@
   fail_unless (res != GST_STATE_CHANGE_FAILURE, NULL);
 
   /* cleanup */
+  gst_bus_remove_signal_watch (bus);
   gst_object_unref (bus);
   gst_object_unref (bin);
 }
diff --git a/tests/examples/Makefile.in b/tests/examples/Makefile.in
index 91d8c1b..cc2e67c 100644
--- a/tests/examples/Makefile.in
+++ b/tests/examples/Makefile.in
@@ -293,6 +293,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -300,17 +301,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -435,6 +433,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/tests/examples/adapter/Makefile.in b/tests/examples/adapter/Makefile.in
index 70bf932..850046e 100644
--- a/tests/examples/adapter/Makefile.in
+++ b/tests/examples/adapter/Makefile.in
@@ -283,6 +283,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -290,17 +291,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -425,6 +423,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/tests/examples/controller/Makefile.in b/tests/examples/controller/Makefile.in
index 5a6ceb3..89e5f15 100644
--- a/tests/examples/controller/Makefile.in
+++ b/tests/examples/controller/Makefile.in
@@ -311,6 +311,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -318,17 +319,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -453,6 +451,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/tests/examples/helloworld/Makefile.in b/tests/examples/helloworld/Makefile.in
index 8212aa2..460a536 100644
--- a/tests/examples/helloworld/Makefile.in
+++ b/tests/examples/helloworld/Makefile.in
@@ -282,6 +282,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -289,17 +290,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -424,6 +422,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/tests/examples/manual/Makefile.in b/tests/examples/manual/Makefile.in
index 6deee10..7bd0a4d 100644
--- a/tests/examples/manual/Makefile.in
+++ b/tests/examples/manual/Makefile.in
@@ -643,6 +643,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -650,17 +651,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -785,6 +783,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/tests/examples/memory/Makefile.in b/tests/examples/memory/Makefile.in
index 072baf0..76c3924 100644
--- a/tests/examples/memory/Makefile.in
+++ b/tests/examples/memory/Makefile.in
@@ -284,6 +284,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -291,17 +292,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -426,6 +424,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/tests/examples/netclock/Makefile.in b/tests/examples/netclock/Makefile.in
index 54e24d0..8f621db 100644
--- a/tests/examples/netclock/Makefile.in
+++ b/tests/examples/netclock/Makefile.in
@@ -294,6 +294,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -301,17 +302,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -436,6 +434,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/tests/examples/ptp/Makefile.in b/tests/examples/ptp/Makefile.in
index d41397d..c55d331 100644
--- a/tests/examples/ptp/Makefile.in
+++ b/tests/examples/ptp/Makefile.in
@@ -285,6 +285,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -292,17 +293,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -427,6 +425,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/tests/examples/stepping/Makefile.in b/tests/examples/stepping/Makefile.in
index 05f63e6..d5a5065 100644
--- a/tests/examples/stepping/Makefile.in
+++ b/tests/examples/stepping/Makefile.in
@@ -282,6 +282,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -289,17 +290,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -424,6 +422,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/tests/examples/streamiddemux/Makefile.in b/tests/examples/streamiddemux/Makefile.in
index e7509ba..d0d31a3 100644
--- a/tests/examples/streamiddemux/Makefile.in
+++ b/tests/examples/streamiddemux/Makefile.in
@@ -284,6 +284,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -291,17 +292,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -426,6 +424,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/tests/examples/streams/Makefile.in b/tests/examples/streams/Makefile.in
index 2f37e88..8628d23 100644
--- a/tests/examples/streams/Makefile.in
+++ b/tests/examples/streams/Makefile.in
@@ -291,6 +291,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -298,17 +299,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -433,6 +431,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/tests/misc/Makefile.am b/tests/misc/Makefile.am
index 7ba8572..5aaede5 100644
--- a/tests/misc/Makefile.am
+++ b/tests/misc/Makefile.am
@@ -2,3 +2,11 @@
 	network-clock.scm \
 	network-clock-utils.scm \
 	plot-data
+
+noinst_PROGRAMS = netclock-replay
+
+netclock_replay_LDADD = \
+	$(top_builddir)/libs/gst/net/libgstnet-@GST_API_VERSION@.la \
+	$(GST_OBJ_LIBS) \
+	$(GIO_LIBS)
+netclock_replay_CFLAGS = $(GST_OBJ_CFLAGS) $(GIO_CFLAGS)
diff --git a/tests/misc/Makefile.in b/tests/misc/Makefile.in
index 3576ba0..fe5a046 100644
--- a/tests/misc/Makefile.in
+++ b/tests/misc/Makefile.in
@@ -13,6 +13,7 @@
 # PARTICULAR PURPOSE.
 
 @SET_MAKE@
+
 VPATH = @srcdir@
 am__is_gnu_make = { \
   if test -z '$(MAKELEVEL)'; then \
@@ -88,6 +89,7 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
+noinst_PROGRAMS = netclock-replay$(EXEEXT)
 subdir = tests/misc
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
@@ -133,6 +135,21 @@
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+netclock_replay_SOURCES = netclock-replay.c
+netclock_replay_OBJECTS = netclock_replay-netclock-replay.$(OBJEXT)
+am__DEPENDENCIES_1 =
+netclock_replay_DEPENDENCIES =  \
+	$(top_builddir)/libs/gst/net/libgstnet-@GST_API_VERSION@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+netclock_replay_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(netclock_replay_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
 AM_V_P = $(am__v_P_@AM_V@)
 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
 am__v_P_0 = false
@@ -145,15 +162,55 @@
 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
 am__v_at_0 = @
 am__v_at_1 = 
-SOURCES =
-DIST_SOURCES =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = netclock-replay.c
+DIST_SOURCES = netclock-replay.c
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-am__DIST_COMMON = $(srcdir)/Makefile.in
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -228,6 +285,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -235,17 +293,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -370,6 +425,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
@@ -452,9 +509,16 @@
 	network-clock-utils.scm \
 	plot-data
 
+netclock_replay_LDADD = \
+	$(top_builddir)/libs/gst/net/libgstnet-@GST_API_VERSION@.la \
+	$(GST_OBJ_LIBS) \
+	$(GIO_LIBS)
+
+netclock_replay_CFLAGS = $(GST_OBJ_CFLAGS) $(GIO_CFLAGS)
 all: all-am
 
 .SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
 $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
@@ -485,17 +549,122 @@
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 $(am__aclocal_m4_deps):
 
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+
+netclock-replay$(EXEEXT): $(netclock_replay_OBJECTS) $(netclock_replay_DEPENDENCIES) $(EXTRA_netclock_replay_DEPENDENCIES) 
+	@rm -f netclock-replay$(EXEEXT)
+	$(AM_V_CCLD)$(netclock_replay_LINK) $(netclock_replay_OBJECTS) $(netclock_replay_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netclock_replay-netclock-replay.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+netclock_replay-netclock-replay.o: netclock-replay.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(netclock_replay_CFLAGS) $(CFLAGS) -MT netclock_replay-netclock-replay.o -MD -MP -MF $(DEPDIR)/netclock_replay-netclock-replay.Tpo -c -o netclock_replay-netclock-replay.o `test -f 'netclock-replay.c' || echo '$(srcdir)/'`netclock-replay.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/netclock_replay-netclock-replay.Tpo $(DEPDIR)/netclock_replay-netclock-replay.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='netclock-replay.c' object='netclock_replay-netclock-replay.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(netclock_replay_CFLAGS) $(CFLAGS) -c -o netclock_replay-netclock-replay.o `test -f 'netclock-replay.c' || echo '$(srcdir)/'`netclock-replay.c
+
+netclock_replay-netclock-replay.obj: netclock-replay.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(netclock_replay_CFLAGS) $(CFLAGS) -MT netclock_replay-netclock-replay.obj -MD -MP -MF $(DEPDIR)/netclock_replay-netclock-replay.Tpo -c -o netclock_replay-netclock-replay.obj `if test -f 'netclock-replay.c'; then $(CYGPATH_W) 'netclock-replay.c'; else $(CYGPATH_W) '$(srcdir)/netclock-replay.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/netclock_replay-netclock-replay.Tpo $(DEPDIR)/netclock_replay-netclock-replay.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='netclock-replay.c' object='netclock_replay-netclock-replay.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(netclock_replay_CFLAGS) $(CFLAGS) -c -o netclock_replay-netclock-replay.obj `if test -f 'netclock-replay.c'; then $(CYGPATH_W) 'netclock-replay.c'; else $(CYGPATH_W) '$(srcdir)/netclock-replay.c'; fi`
+
 mostlyclean-libtool:
 	-rm -f *.lo
 
 clean-libtool:
 	-rm -rf .libs _libs
-tags TAGS:
 
-ctags CTAGS:
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
 
-cscope cscopelist:
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
 
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
 distdir: $(DISTFILES)
 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -529,7 +698,7 @@
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile
+all-am: Makefile $(PROGRAMS)
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -563,11 +732,14 @@
 	@echo "it deletes files that may require special tools to rebuild."
 clean: clean-am
 
-clean-am: clean-generic clean-libtool mostlyclean-am
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
 
 distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-distclean-am: clean-am distclean-generic
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
 
 dvi: dvi-am
 
@@ -610,12 +782,14 @@
 installcheck-am:
 
 maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
 
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
 
 pdf: pdf-am
 
@@ -629,17 +803,19 @@
 
 .MAKE: install-am install-strip
 
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	cscopelist-am ctags-am distclean distclean-generic \
-	distclean-libtool distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \
+	ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
 	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags-am uninstall uninstall-am
+	tags tags-am uninstall uninstall-am
 
 .PRECIOUS: Makefile
 
diff --git a/tests/misc/netclock-replay.c b/tests/misc/netclock-replay.c
new file mode 100644
index 0000000..531bbe7
--- /dev/null
+++ b/tests/misc/netclock-replay.c
@@ -0,0 +1,133 @@
+/* GStreamer
+ * Copyright (C) 2016 Centricular Ltd.
+ * Author: Arun Raghavan <arun@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <stdio.h>
+
+/* We need the internal netclock estimation function to (re)run the code on
+ * captured samples, plus its dependencies for the build to succeed. */
+#include "../../libs/gst/net/gstntppacket.c"
+#include "../../libs/gst/net/gstnetclientclock.c"
+
+static gchar *input = NULL;
+static gboolean debug = FALSE;
+static gint rtt_limit = 0;
+
+static GOptionEntry entries[] = {
+  {"input", 'i', 0, G_OPTION_ARG_FILENAME, &input,
+        "Clock reading file containing one local and remote time readings, one "
+        "per line",
+      "FILE"},
+  {"rtt-limit", 'r', 0, G_OPTION_ARG_INT64, &rtt_limit,
+      "Round trip time limit on packets (in ms)", "MSEC"},
+  {"debug", 'd', 0, G_OPTION_ARG_NONE, &debug, "Verbose debug output", NULL},
+  {NULL,}
+};
+
+int
+main (int argc, char *argv[])
+{
+  GstNetClientInternalClock *clock;
+  GstBus *bus;
+  GIOChannel *channel;
+  GIOStatus status;
+  GError *error = NULL;
+  GOptionContext *context;
+  gchar *line;
+  int ret = 1;
+
+  context = g_option_context_new (NULL);
+  g_option_context_add_main_entries (context, entries, NULL);
+  g_option_context_add_group (context, gst_init_get_option_group ());
+
+  if (!g_option_context_parse (context, &argc, &argv, &error)) {
+    g_print ("Failed to parse options: %s\n\n", error->message);
+    g_error_free (error);
+    return 1;
+  }
+
+  if (input) {
+    if (!(channel = g_io_channel_new_file (input, "r", NULL))) {
+      g_print ("Could not read input file: %s\n", input);
+      return 1;
+    }
+  } else {
+    if (!(channel = g_io_channel_unix_new (0))) {
+      g_print ("Could not read stdin");
+      return 1;
+    }
+  }
+
+  clock = g_object_new (GST_TYPE_NET_CLIENT_INTERNAL_CLOCK, NULL);
+  bus = gst_bus_new ();
+
+  /* FIXME: Find a way to do this without touching the structure internals */
+  if (rtt_limit)
+    clock->roundtrip_limit = rtt_limit * GST_MSECOND;
+  clock->busses = g_list_prepend (clock->busses, bus);
+
+  while ((status = g_io_channel_read_line (channel, &line, NULL, NULL,
+              &error)) == G_IO_STATUS_NORMAL) {
+    GstClockTime local_1, local_2, remote_1, remote_2;
+    GstMessage *message;
+
+    if (sscanf (line, "%" G_GUINT64_FORMAT " %" G_GUINT64_FORMAT " %"
+            G_GUINT64_FORMAT " %" G_GUINT64_FORMAT, &local_1, &remote_1,
+            &remote_2, &local_2) != 4) {
+      g_print ("Failed to get local/remote time values from: %s\n", line);
+      goto done;
+    }
+
+    if (debug)
+      g_print ("%s", line);
+
+    gst_net_client_internal_clock_observe_times (clock, local_1, remote_1,
+        remote_2, local_2);
+
+    g_free (line);
+
+    if ((message = gst_bus_pop_filtered (bus, GST_MESSAGE_ELEMENT))) {
+      const GstStructure *st;
+      gchar *str;
+
+      st = gst_message_get_structure (message);
+      str = gst_structure_to_string (st);
+
+      g_print ("%s\n", str);
+
+      g_free (str);
+      gst_message_unref (message);
+    }
+  }
+
+  if (status == G_IO_CHANNEL_ERROR) {
+    g_print ("Error reading file: %s\n", error->message);
+    g_error_free (error);
+    goto done;
+  }
+
+  g_io_channel_unref (channel);
+  g_free (input);
+  gst_object_unref (bus);
+
+  ret = 0;
+
+done:
+  return ret;
+}
diff --git a/tools/Makefile.in b/tools/Makefile.in
index f1eb96c..a560138 100644
--- a/tools/Makefile.in
+++ b/tools/Makefile.in
@@ -360,6 +360,7 @@
 GMSGFMT_015 = @GMSGFMT_015@
 GREP = @GREP@
 GSL_LIBS = @GSL_LIBS@
+GSTCONFIG_BUILT_WITH_MSVC = @GSTCONFIG_BUILT_WITH_MSVC@
 GST_AGE = @GST_AGE@
 GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
 GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
@@ -367,17 +368,14 @@
 GST_ALL_LIBS = @GST_ALL_LIBS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_CURRENT = @GST_CURRENT@
-GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
 GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
 GST_DISABLE_GST_TRACER_HOOKS_DEFINE = @GST_DISABLE_GST_TRACER_HOOKS_DEFINE@
 GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
 GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
 GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
 GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
-GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
 GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
 GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
-GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
 GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
 GST_LIBVERSION = @GST_LIBVERSION@
 GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
@@ -502,6 +500,8 @@
 SHELL = @SHELL@
 SOCKET_LIBS = @SOCKET_LIBS@
 STRIP = @STRIP@
+UNWIND_CFLAGS = @UNWIND_CFLAGS@
+UNWIND_LIBS = @UNWIND_LIBS@
 USE_NLS = @USE_NLS@
 VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
 VALGRIND_LIBS = @VALGRIND_LIBS@
diff --git a/tools/gst-inspect.c b/tools/gst-inspect.c
index 845f52e..3a59ef3 100644
--- a/tools/gst-inspect.c
+++ b/tools/gst-inspect.c
@@ -541,7 +541,6 @@
 static void
 print_pad_templates_info (GstElement * element, GstElementFactory * factory)
 {
-  GstElementClass *gstelement_class;
   const GList *pads;
   GstStaticPadTemplate *padtemplate;
 
@@ -551,8 +550,6 @@
     return;
   }
 
-  gstelement_class = GST_ELEMENT_CLASS (G_OBJECT_GET_CLASS (element));
-
   pads = gst_element_factory_get_static_pad_templates (factory);
   while (pads) {
     padtemplate = (GstStaticPadTemplate *) (pads->data);
@@ -571,8 +568,6 @@
       n_print ("    Availability: Sometimes\n");
     else if (padtemplate->presence == GST_PAD_REQUEST) {
       n_print ("    Availability: On request\n");
-      n_print ("      Has request_new_pad() function: %s\n",
-          GST_DEBUG_FUNCPTR_NAME (gstelement_class->request_new_pad));
     } else
       n_print ("    Availability: UNKNOWN!!!\n");
 
@@ -743,6 +738,19 @@
   return FALSE;
 }
 
+static gboolean
+gtype_needs_ptr_marker (GType type)
+{
+  if (type == G_TYPE_POINTER)
+    return FALSE;
+
+  if (G_TYPE_FUNDAMENTAL (type) == G_TYPE_POINTER || G_TYPE_IS_BOXED (type)
+      || G_TYPE_IS_OBJECT (type))
+    return TRUE;
+
+  return FALSE;
+}
+
 static void
 print_signal_info (GstElement * element)
 {
@@ -813,12 +821,7 @@
       indent_len = strlen (query->signal_name) +
           strlen (g_type_name (query->return_type)) + 24;
 
-
-      if (query->return_type == G_TYPE_POINTER) {
-        pmark = "";
-      } else if (G_TYPE_FUNDAMENTAL (query->return_type) == G_TYPE_POINTER
-          || G_TYPE_IS_BOXED (query->return_type)
-          || G_TYPE_IS_OBJECT (query->return_type)) {
+      if (gtype_needs_ptr_marker (query->return_type)) {
         pmark = "* ";
         indent_len += 2;
       } else {
@@ -833,17 +836,13 @@
           g_type_name (type));
 
       for (j = 0; j < query->n_params; j++) {
+        const gchar *type_name, *asterisk;
+
+        type_name = g_type_name (query->param_types[j]);
+        asterisk = gtype_needs_ptr_marker (query->param_types[j]) ? "*" : "";
+
         g_print (",\n");
-        if (G_TYPE_IS_FUNDAMENTAL (query->param_types[j])) {
-          n_print ("%s%s arg%d", indent,
-              g_type_name (query->param_types[j]), j);
-        } else if (G_TYPE_IS_ENUM (query->param_types[j])) {
-          n_print ("%s%s arg%d", indent,
-              g_type_name (query->param_types[j]), j);
-        } else {
-          n_print ("%s%s* arg%d", indent,
-              g_type_name (query->param_types[j]), j);
-        }
+        n_print ("%s%s%s arg%d", indent, type_name, asterisk, j);
       }
 
       if (k == 0) {
@@ -1561,6 +1560,9 @@
         } else {
           exit_code = 1;
         }
+
+        if (feature)
+          gst_object_unref (feature);
       } else {
         /* FIXME: support checking for plugins too */
         g_printerr ("Checking for plugins is not supported yet\n");
diff --git a/tools/gst-launch.1.in b/tools/gst-launch.1.in
index 409727f..5034f29 100644
--- a/tools/gst-launch.1.in
+++ b/tools/gst-launch.1.in
@@ -222,10 +222,10 @@
 .SH "PIPELINE EXAMPLES"
 
 The examples below assume that you have the correct plug-ins available.
-In general, "osssink" can be substituted with another audio output
-plug-in such as "esdsink", "alsasink", "osxaudiosink", or "artsdsink".
-Likewise, "xvimagesink" can be substituted with "ximagesink", "sdlvideosink",
-"osxvideosink", or "aasink". Keep in mind though that different sinks might
+In general, "pulsesink" can be substituted with another audio output
+plug-in such as "alsasink" or "osxaudiosink"
+Likewise, "xvimagesink" can be substituted with "ximagesink", "glimagesink",
+or "osxvideosink". Keep in mind though that different sinks might
 accept different formats and even the same sink might accept different formats
 on different machines, so you might need to add converter elements like
 audioconvert and audioresample (for audio) or videoconvert (for video)
@@ -234,45 +234,45 @@
 .B Audio playback
 
 .B
-        gst\-launch filesrc location=music.mp3 ! mad ! audioconvert ! audioresample ! osssink
+        gst\-launch filesrc location=music.mp3 ! mad ! audioconvert ! audioresample ! pulsesink
 .br
 Play the mp3 music file "music.mp3" using a libmad-based plug-in and
-output to an OSS device
+output to an Pulseaudio device
 
 .B
-        gst\-launch filesrc location=music.ogg ! oggdemux ! vorbisdec ! audioconvert ! audioresample ! osssink
+        gst\-launch filesrc location=music.ogg ! oggdemux ! vorbisdec ! audioconvert ! audioresample ! pulsesink
 .br
 Play an Ogg Vorbis format file
 
 .B
-        gst\-launch gnomevfssrc location=music.mp3 ! mad ! osssink
+        gst\-launch giosrc location=music.mp3 ! mpegaudioparse ! mad ! pulsesink
 .br
 .B
-        gst\-launch gnomevfssrc location=http://domain.com/music.mp3 ! mad ! audioconvert ! audioresample ! osssink
+        gst\-launch giosrc location=http://domain.com/music.mp3 ! mpegaudioparse ! mad ! audioconvert ! audioresample ! pulsesink
 .br
-Play an mp3 file or an http stream using GNOME\-VFS
+Play an mp3 file or an http stream using GIO
 
 .B
-        gst\-launch gnomevfssrc location=smb://computer/music.mp3 ! mad ! audioconvert ! audioresample ! osssink
+        gst\-launch giosrc location=smb://computer/music.mp3 ! mpegaudioparse ! mad ! audioconvert ! audioresample ! pulsesink
 .br
-Use GNOME\-VFS to play an mp3 file located on an SMB server
+Use GIO to play an mp3 file located on an SMB server
 
 .B Format conversion
 
 .B
-        gst\-launch filesrc location=music.mp3 ! mad ! audioconvert ! vorbisenc ! oggmux ! filesink location=music.ogg
+        gst\-launch filesrc location=music.mp3 ! mpegaudioparse ! mad ! audioconvert ! vorbisenc ! oggmux ! filesink location=music.ogg
 .br
 Convert an mp3 music file to an Ogg Vorbis file
 
 .B
-        gst\-launch filesrc location=music.mp3 ! mad ! audioconvert ! flacenc ! filesink location=test.flac
+        gst\-launch filesrc location=music.mp3 ! mpegaudioparse ! mad ! audioconvert ! flacenc ! filesink location=test.flac
 .br
 Convert to the FLAC format
 
 .B Other
 
 .B
-        gst\-launch filesrc location=music.wav ! wavparse ! audioconvert ! audioresample ! osssink
+        gst\-launch filesrc location=music.wav ! wavparse ! audioconvert ! audioresample ! pulsesink
 .br
 Plays a .WAV file that contains raw audio data (PCM).
 
@@ -285,12 +285,12 @@
 Convert a .WAV file containing raw audio data into an Ogg Vorbis or mp3 file
 
 .B
-        gst\-launch cdparanoiasrc mode=continuous ! audioconvert ! lame ! id3v2mux ! filesink location=cd.mp3
+        gst\-launch cdparanoiasrc mode=continuous ! audioconvert ! lame ! mpegaudioparse ! id3v2mux ! filesink location=cd.mp3
 .br
 rips all tracks from compact disc and convert them into a single mp3 file
 
 .B
-        gst\-launch cdparanoiasrc track=5 ! audioconvert ! lame ! id3v2mux ! filesink location=track5.mp3
+        gst\-launch cdparanoiasrc track=5 ! audioconvert ! lame ! mpegaudioparse ! id3v2mux ! filesink location=track5.mp3
 .br
 rips track 5 from the CD and converts it into a single mp3 file
 
@@ -302,31 +302,31 @@
        gst\-launch cdda://5 ! lame vbr=new vbr-quality=6 ! filesink location=track5.mp3
 
 .B
-        gst\-launch osssrc ! audioconvert ! vorbisenc ! oggmux ! filesink location=input.ogg
+        gst\-launch pulsesrc ! audioconvert ! vorbisenc ! oggmux ! filesink location=input.ogg
 .br
 records sound from your audio input and encodes it into an ogg file
 
 .B Video
 
 .B
-        gst\-launch filesrc location=JB_FF9_TheGravityOfLove.mpg ! dvddemux ! mpeg2dec ! xvimagesink
+        gst\-launch filesrc location=JB_FF9_TheGravityOfLove.mpg ! dvddemux ! mpegvideoparse ! mpeg2dec ! xvimagesink
 .br
 Display only the video portion of an MPEG-1 video file, outputting to
 an X display window
 
 .B
-        gst\-launch filesrc location=/flflfj.vob ! dvddemux ! mpeg2dec ! sdlvideosink
+        gst\-launch filesrc location=/flflfj.vob ! dvddemux ! mpegvideoparse ! mpeg2dec ! sdlvideosink
 .br
 Display the video portion of a .vob file (used on DVDs), outputting to
 an SDL window
 
 .B
-        gst\-launch filesrc location=movie.mpg ! dvddemux name=demuxer  demuxer. ! queue ! mpeg2dec ! sdlvideosink  demuxer. ! queue ! mad ! audioconvert ! audioresample ! osssink
+        gst\-launch filesrc location=movie.mpg ! dvddemux name=demuxer  demuxer. ! queue ! mpegvideoparse ! mpeg2dec ! sdlvideosink  demuxer. ! queue ! mpegaudioparse ! mad ! audioconvert ! audioresample ! pulsesink
 .br
 Play both video and audio portions of an MPEG movie
 
 .B
-        gst\-launch filesrc location=movie.mpg ! mpegdemux name=demuxer demuxer. ! queue ! mpeg2dec ! videoconvert ! sdlvideosink   demuxer. ! queue ! mad ! audioconvert ! audioresample ! osssink
+        gst\-launch filesrc location=movie.mpg ! mpegdemux name=demuxer demuxer. ! queue ! mpegvideoparse ! mpeg2dec ! videoconvert ! sdlvideosink   demuxer. ! queue ! mpegaudioparse ! mad ! audioconvert ! audioresample ! pulsesink
 .br
 Play an AVI movie with an external text subtitle stream
 
@@ -364,7 +364,7 @@
 Generate a null stream and ignore it (and print out details).
 
 .B
-        gst\-launch audiotestsrc ! audioconvert ! audioresample ! osssink
+        gst\-launch audiotestsrc ! audioconvert ! audioresample ! pulsesink
 .br
 Generate a pure sine tone to test the audio output
 
@@ -382,12 +382,12 @@
 to get a working pipeline.
 
 .B
-        gst\-launch filesrc location=musicfile ! decodebin ! audioconvert ! audioresample ! osssink
+        gst\-launch filesrc location=musicfile ! decodebin ! audioconvert ! audioresample ! pulsesink
 .br
 Play any supported audio format
 
 .B
-        gst\-launch filesrc location=videofile ! decodebin name=decoder decoder. ! queue ! audioconvert ! audioresample ! osssink   decoder. !  videoconvert ! xvimagesink
+        gst\-launch filesrc location=videofile ! decodebin name=decoder decoder. ! queue ! audioconvert ! audioresample ! pulsesink   decoder. !  videoconvert ! xvimagesink
 .br
 Play any supported video format with video and audio output. Threads are used
 automatically. To make this even easier, you can use the playbin element:
@@ -407,7 +407,7 @@
 Show a test image and use the YUY2 or YV12 video format for this.
 
 .B
-        gst\-launch osssrc !  'audio/x-raw,rate=[32000,64000],format={S16LE,S24LE,S32LE}' ! wavenc ! filesink location=recording.wav
+        gst\-launch pulsesrc !  'audio/x-raw,rate=[32000,64000],format={S16LE,S24LE,S32LE}' ! wavenc ! filesink location=recording.wav
 .br
 record audio and write it to a .wav file. Force usage of signed 16 to 32 bit
 samples and a sample rate between 32kHz and 64KHz.
diff --git a/tools/gst-launch.c b/tools/gst-launch.c
index 859f9db..2de754d 100644
--- a/tools/gst-launch.c
+++ b/tools/gst-launch.c
@@ -65,6 +65,7 @@
 static gboolean messages = FALSE;
 static gboolean is_live = FALSE;
 static gboolean waiting_eos = FALSE;
+static gchar **exclude_args = NULL;
 
 /* convenience macro so we don't have to litter the code with if(!quiet) */
 #define PRINT if(!quiet)g_print
@@ -834,6 +835,47 @@
         gst_context_unref (context);
         break;
       }
+      case GST_MESSAGE_PROPERTY_NOTIFY:{
+        const GValue *val;
+        const gchar *name;
+        GstObject *obj;
+        gchar *val_str = NULL;
+        gchar **ex_prop, *obj_name;
+
+        if (quiet)
+          break;
+
+        gst_message_parse_property_notify (message, &obj, &name, &val);
+
+        /* Let's not print anything for excluded properties... */
+        ex_prop = exclude_args;
+        while (ex_prop != NULL && *ex_prop != NULL) {
+          if (strcmp (name, *ex_prop) == 0)
+            break;
+          ex_prop++;
+        }
+        if (ex_prop != NULL && *ex_prop != NULL)
+          break;
+
+        obj_name = gst_object_get_path_string (GST_OBJECT (obj));
+        if (val != NULL) {
+          if (G_VALUE_HOLDS_STRING (val))
+            val_str = g_value_dup_string (val);
+          else if (G_VALUE_TYPE (val) == GST_TYPE_CAPS)
+            val_str = gst_caps_to_string (g_value_get_boxed (val));
+          else if (G_VALUE_TYPE (val) == GST_TYPE_TAG_LIST)
+            val_str = gst_tag_list_to_string (g_value_get_boxed (val));
+          else
+            val_str = gst_value_serialize (val);
+        } else {
+          val_str = g_strdup ("(no value)");
+        }
+
+        g_print ("%s: %s = %s\n", obj_name, name, val_str);
+        g_free (obj_name);
+        g_free (val_str);
+        break;
+      }
       default:
         /* just be quiet by default */
         break;
@@ -913,7 +955,6 @@
   gboolean check_index = FALSE;
 #endif
   gchar *savefile = NULL;
-  gchar **exclude_args = NULL;
 #ifndef GST_DISABLE_OPTION_PARSING
   GOptionEntry options[] = {
     {"tags", 't', 0, G_OPTION_ARG_NONE, &tags,
@@ -1032,8 +1073,8 @@
       pipeline = real_pipeline;
     }
     if (verbose) {
-      deep_notify_id = g_signal_connect (pipeline, "deep-notify",
-          G_CALLBACK (gst_object_default_deep_notify), exclude_args);
+      deep_notify_id =
+          gst_element_add_property_deep_notify_watch (pipeline, NULL, TRUE);
     }
 #if 0
     if (check_index) {
diff --git a/win32/common/config.h b/win32/common/config.h
index 0a804b2..9b86d4a 100644
--- a/win32/common/config.h
+++ b/win32/common/config.h
@@ -68,7 +68,7 @@
 #define GST_PACKAGE_ORIGIN "Unknown package origin"
 
 /* GStreamer package release date/time for plugins as YYYY-MM-DD */
-#define GST_PACKAGE_RELEASE_DATETIME "2016-08-19"
+#define GST_PACKAGE_RELEASE_DATETIME "2016-09-30"
 
 /* Define if static plugins should be built */
 #undef GST_PLUGIN_BUILD_STATIC
@@ -82,6 +82,9 @@
 /* Define to 1 if you have the `alarm' function. */
 #undef HAVE_ALARM
 
+/* Have backtrace */
+#undef HAVE_BACKTRACE
+
 /* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the
    CoreFoundation framework. */
 #undef HAVE_CFLOCALECOPYCURRENT
@@ -167,6 +170,9 @@
 /* Define to 1 if you have the <dlfcn.h> header file. */
 #undef HAVE_DLFCN_H
 
+/* Define to 1 if you have the <execinfo.h> header file. */
+#undef HAVE_EXECINFO_H
+
 /* Define to 1 if you have the `fgetpos' function. */
 #define HAVE_FGETPOS 1
 
@@ -400,15 +406,15 @@
 /* Have __uint128_t type */
 #undef HAVE_UINT128_T
 
-/* defined if unaligned memory access works correctly */
-#undef HAVE_UNALIGNED_ACCESS
-
 /* Define to 1 if you have the <unistd.h> header file. */
 #undef HAVE_UNISTD_H
 
 /* Define to 1 if the system has the type `unsigned long long int'. */
 #undef HAVE_UNSIGNED_LONG_LONG_INT
 
+/* libunwind available */
+#undef HAVE_UNWIND
+
 /* Define if valgrind should be used */
 #undef HAVE_VALGRIND
 
@@ -462,7 +468,7 @@
 #define PACKAGE_NAME "GStreamer"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "GStreamer 1.8.3"
+#define PACKAGE_STRING "GStreamer 1.9.90"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "gstreamer"
@@ -471,7 +477,7 @@
 #undef PACKAGE_URL
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "1.8.3"
+#define PACKAGE_VERSION "1.9.90"
 
 /* directory where plugins are located */
 #ifdef _DEBUG
@@ -515,7 +521,7 @@
 #undef USE_POISONING
 
 /* Version number of package */
-#define VERSION "1.8.3"
+#define VERSION "1.9.90"
 
 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */
diff --git a/win32/common/gstconfig.h b/win32/common/gstconfig.h
index d893411..684a2e0 100644
--- a/win32/common/gstconfig.h
+++ b/win32/common/gstconfig.h
@@ -56,8 +56,6 @@
 #define GST_DISABLE_GST_DEBUG 1
 #define GST_DISABLE_LOADSAVE 1
 #define GST_DISABLE_PARSE 1
-#define GST_DISABLE_TRACE 1
-#define GST_DISABLE_ALLOC_TRACE 1
 #define GST_DISABLE_REGISTRY 1
 #define GST_DISABLE_PLUGIN 1
 #define GST_HAVE_GLIB_2_8 1
@@ -77,18 +75,9 @@
 /* #undef GST_DISABLE_GST_DEBUG */
 
 /* DOES NOT WORK */
-/* #undef GST_DISABLE_LOADSAVE */
-
-/* DOES NOT WORK */
 /* #undef GST_DISABLE_PARSE */
 
 /* DOES NOT WORK */
-/* #undef GST_DISABLE_TRACE */
-
-/* DOES NOT WORK */
-/* #undef GST_DISABLE_ALLOC_TRACE */
-
-/* DOES NOT WORK */
 /* #undef GST_DISABLE_REGISTRY */
 
 /* DOES NOT WORK */
diff --git a/win32/common/gstenumtypes.c b/win32/common/gstenumtypes.c
index 757bc6b..346613b 100644
--- a/win32/common/gstenumtypes.c
+++ b/win32/common/gstenumtypes.c
@@ -13,6 +13,8 @@
 {
   static gsize id = 0;
   static const GFlagsValue values[] = {
+    {C_FLAGS (GST_OBJECT_FLAG_MAY_BE_LEAKED), "GST_OBJECT_FLAG_MAY_BE_LEAKED",
+        "may-be-leaked"},
     {C_FLAGS (GST_OBJECT_FLAG_LAST), "GST_OBJECT_FLAG_LAST", "last"},
     {0, NULL, NULL}
   };
@@ -606,9 +608,13 @@
     {C_ENUM (GST_EVENT_STREAM_START), "GST_EVENT_STREAM_START", "stream-start"},
     {C_ENUM (GST_EVENT_CAPS), "GST_EVENT_CAPS", "caps"},
     {C_ENUM (GST_EVENT_SEGMENT), "GST_EVENT_SEGMENT", "segment"},
+    {C_ENUM (GST_EVENT_STREAM_COLLECTION), "GST_EVENT_STREAM_COLLECTION",
+        "stream-collection"},
     {C_ENUM (GST_EVENT_TAG), "GST_EVENT_TAG", "tag"},
     {C_ENUM (GST_EVENT_BUFFERSIZE), "GST_EVENT_BUFFERSIZE", "buffersize"},
     {C_ENUM (GST_EVENT_SINK_MESSAGE), "GST_EVENT_SINK_MESSAGE", "sink-message"},
+    {C_ENUM (GST_EVENT_STREAM_GROUP_DONE), "GST_EVENT_STREAM_GROUP_DONE",
+        "stream-group-done"},
     {C_ENUM (GST_EVENT_EOS), "GST_EVENT_EOS", "eos"},
     {C_ENUM (GST_EVENT_TOC), "GST_EVENT_TOC", "toc"},
     {C_ENUM (GST_EVENT_PROTECTION), "GST_EVENT_PROTECTION", "protection"},
@@ -621,6 +627,8 @@
     {C_ENUM (GST_EVENT_STEP), "GST_EVENT_STEP", "step"},
     {C_ENUM (GST_EVENT_RECONFIGURE), "GST_EVENT_RECONFIGURE", "reconfigure"},
     {C_ENUM (GST_EVENT_TOC_SELECT), "GST_EVENT_TOC_SELECT", "toc-select"},
+    {C_ENUM (GST_EVENT_SELECT_STREAMS), "GST_EVENT_SELECT_STREAMS",
+        "select-streams"},
     {C_ENUM (GST_EVENT_CUSTOM_UPSTREAM), "GST_EVENT_CUSTOM_UPSTREAM",
         "custom-upstream"},
     {C_ENUM (GST_EVENT_CUSTOM_DOWNSTREAM), "GST_EVENT_CUSTOM_DOWNSTREAM",
@@ -644,25 +652,6 @@
 }
 
 GType
-gst_qos_type_get_type (void)
-{
-  static gsize id = 0;
-  static const GEnumValue values[] = {
-    {C_ENUM (GST_QOS_TYPE_OVERFLOW), "GST_QOS_TYPE_OVERFLOW", "overflow"},
-    {C_ENUM (GST_QOS_TYPE_UNDERFLOW), "GST_QOS_TYPE_UNDERFLOW", "underflow"},
-    {C_ENUM (GST_QOS_TYPE_THROTTLE), "GST_QOS_TYPE_THROTTLE", "throttle"},
-    {0, NULL, NULL}
-  };
-
-  if (g_once_init_enter (&id)) {
-    GType tmp = g_enum_register_static ("GstQOSType", values);
-    g_once_init_leave (&id, tmp);
-  }
-
-  return (GType) id;
-}
-
-GType
 gst_stream_flags_get_type (void)
 {
   static gsize id = 0;
@@ -683,6 +672,25 @@
   return (GType) id;
 }
 
+GType
+gst_qos_type_get_type (void)
+{
+  static gsize id = 0;
+  static const GEnumValue values[] = {
+    {C_ENUM (GST_QOS_TYPE_OVERFLOW), "GST_QOS_TYPE_OVERFLOW", "overflow"},
+    {C_ENUM (GST_QOS_TYPE_UNDERFLOW), "GST_QOS_TYPE_UNDERFLOW", "underflow"},
+    {C_ENUM (GST_QOS_TYPE_THROTTLE), "GST_QOS_TYPE_THROTTLE", "throttle"},
+    {0, NULL, NULL}
+  };
+
+  if (g_once_init_enter (&id)) {
+    GType tmp = g_enum_register_static ("GstQOSType", values);
+    g_once_init_leave (&id, tmp);
+  }
+
+  return (GType) id;
+}
+
 /* enumerations from "gstformat.h" */
 GType
 gst_format_get_type (void)
@@ -883,6 +891,13 @@
         "device-added"},
     {C_FLAGS (GST_MESSAGE_DEVICE_REMOVED), "GST_MESSAGE_DEVICE_REMOVED",
         "device-removed"},
+    {C_FLAGS (GST_MESSAGE_PROPERTY_NOTIFY), "GST_MESSAGE_PROPERTY_NOTIFY",
+        "property-notify"},
+    {C_FLAGS (GST_MESSAGE_STREAM_COLLECTION), "GST_MESSAGE_STREAM_COLLECTION",
+        "stream-collection"},
+    {C_FLAGS (GST_MESSAGE_STREAMS_SELECTED), "GST_MESSAGE_STREAMS_SELECTED",
+        "streams-selected"},
+    {C_FLAGS (GST_MESSAGE_REDIRECT), "GST_MESSAGE_REDIRECT", "redirect"},
     {C_FLAGS (GST_MESSAGE_ANY), "GST_MESSAGE_ANY", "any"},
     {0, NULL, NULL}
   };
@@ -1050,6 +1065,8 @@
         "lockable"},
     {C_FLAGS (GST_MINI_OBJECT_FLAG_LOCK_READONLY),
         "GST_MINI_OBJECT_FLAG_LOCK_READONLY", "lock-readonly"},
+    {C_FLAGS (GST_MINI_OBJECT_FLAG_MAY_BE_LEAKED),
+        "GST_MINI_OBJECT_FLAG_MAY_BE_LEAKED", "may-be-leaked"},
     {C_FLAGS (GST_MINI_OBJECT_FLAG_LAST), "GST_MINI_OBJECT_FLAG_LAST", "last"},
     {0, NULL, NULL}
   };
@@ -1650,6 +1667,29 @@
   return (GType) id;
 }
 
+/* enumerations from "gststreams.h" */
+GType
+gst_stream_type_get_type (void)
+{
+  static gsize id = 0;
+  static const GFlagsValue values[] = {
+    {C_FLAGS (GST_STREAM_TYPE_UNKNOWN), "GST_STREAM_TYPE_UNKNOWN", "unknown"},
+    {C_FLAGS (GST_STREAM_TYPE_AUDIO), "GST_STREAM_TYPE_AUDIO", "audio"},
+    {C_FLAGS (GST_STREAM_TYPE_VIDEO), "GST_STREAM_TYPE_VIDEO", "video"},
+    {C_FLAGS (GST_STREAM_TYPE_CONTAINER), "GST_STREAM_TYPE_CONTAINER",
+        "container"},
+    {C_FLAGS (GST_STREAM_TYPE_TEXT), "GST_STREAM_TYPE_TEXT", "text"},
+    {0, NULL, NULL}
+  };
+
+  if (g_once_init_enter (&id)) {
+    GType tmp = g_flags_register_static ("GstStreamType", values);
+    g_once_init_leave (&id, tmp);
+  }
+
+  return (GType) id;
+}
+
 /* enumerations from "gstsystemclock.h" */
 GType
 gst_clock_type_get_type (void)
@@ -1994,6 +2034,8 @@
         "fatal-errors"},
     {C_FLAGS (GST_PARSE_FLAG_NO_SINGLE_ELEMENT_BINS),
         "GST_PARSE_FLAG_NO_SINGLE_ELEMENT_BINS", "no-single-element-bins"},
+    {C_FLAGS (GST_PARSE_FLAG_PLACE_IN_BIN), "GST_PARSE_FLAG_PLACE_IN_BIN",
+        "place-in-bin"},
     {0, NULL, NULL}
   };
 
diff --git a/win32/common/gstenumtypes.h b/win32/common/gstenumtypes.h
index bfe9a01..08d16c5 100644
--- a/win32/common/gstenumtypes.h
+++ b/win32/common/gstenumtypes.h
@@ -79,10 +79,10 @@
 #define GST_TYPE_EVENT_TYPE_FLAGS (gst_event_type_flags_get_type())
 GType gst_event_type_get_type (void);
 #define GST_TYPE_EVENT_TYPE (gst_event_type_get_type())
-GType gst_qos_type_get_type (void);
-#define GST_TYPE_QOS_TYPE (gst_qos_type_get_type())
 GType gst_stream_flags_get_type (void);
 #define GST_TYPE_STREAM_FLAGS (gst_stream_flags_get_type())
+GType gst_qos_type_get_type (void);
+#define GST_TYPE_QOS_TYPE (gst_qos_type_get_type())
 
 /* enumerations from "gstformat.h" */
 GType gst_format_get_type (void);
@@ -186,6 +186,10 @@
 GType gst_segment_flags_get_type (void);
 #define GST_TYPE_SEGMENT_FLAGS (gst_segment_flags_get_type())
 
+/* enumerations from "gststreams.h" */
+GType gst_stream_type_get_type (void);
+#define GST_TYPE_STREAM_TYPE (gst_stream_type_get_type())
+
 /* enumerations from "gstsystemclock.h" */
 GType gst_clock_type_get_type (void);
 #define GST_TYPE_CLOCK_TYPE (gst_clock_type_get_type())
diff --git a/win32/common/gstversion.h b/win32/common/gstversion.h
index 17afba5..020bf82 100644
--- a/win32/common/gstversion.h
+++ b/win32/common/gstversion.h
@@ -54,13 +54,13 @@
  *
  * The minor version of GStreamer at compile time:
  */
-#define GST_VERSION_MINOR (8)
+#define GST_VERSION_MINOR (9)
 /**
  * GST_VERSION_MICRO:
  *
  * The micro version of GStreamer at compile time:
  */
-#define GST_VERSION_MICRO (3)
+#define GST_VERSION_MICRO (90)
 /**
  * GST_VERSION_NANO:
  *
diff --git a/win32/common/libgstbase.def b/win32/common/libgstbase.def
index ff25b51..783f1af 100644
--- a/win32/common/libgstbase.def
+++ b/win32/common/libgstbase.def
@@ -4,6 +4,8 @@
 	gst_adapter_clear
 	gst_adapter_copy
 	gst_adapter_copy_bytes
+	gst_adapter_distance_from_discont
+	gst_adapter_dts_at_discont
 	gst_adapter_flush
 	gst_adapter_get_buffer
 	gst_adapter_get_buffer_fast
@@ -14,10 +16,13 @@
 	gst_adapter_masked_scan_uint32
 	gst_adapter_masked_scan_uint32_peek
 	gst_adapter_new
+	gst_adapter_offset_at_discont
 	gst_adapter_prev_dts
 	gst_adapter_prev_dts_at_offset
+	gst_adapter_prev_offset
 	gst_adapter_prev_pts
 	gst_adapter_prev_pts_at_offset
+	gst_adapter_pts_at_discont
 	gst_adapter_push
 	gst_adapter_take
 	gst_adapter_take_buffer
diff --git a/win32/common/libgstreamer.def b/win32/common/libgstreamer.def
index 3fa3c40..79fe904 100644
--- a/win32/common/libgstreamer.def
+++ b/win32/common/libgstreamer.def
@@ -69,7 +69,6 @@
 	_gst_tag_list_type DATA
 	_gst_toc_entry_type DATA
 	_gst_toc_type DATA
-	_gst_trace_mutex DATA
 	_gst_value_array_type DATA
 	_gst_value_list_type DATA
 	gst_allocation_params_copy
@@ -99,6 +98,7 @@
 	gst_bin_get_by_interface
 	gst_bin_get_by_name
 	gst_bin_get_by_name_recurse_up
+	gst_bin_get_suppressed_flags
 	gst_bin_get_type
 	gst_bin_iterate_all_by_interface
 	gst_bin_iterate_elements
@@ -110,6 +110,7 @@
 	gst_bin_recalculate_latency
 	gst_bin_remove
 	gst_bin_remove_many
+	gst_bin_set_suppressed_flags
 	gst_bin_sync_children_states
 	gst_bitmask_get_type
 	gst_buffer_add_meta
@@ -129,6 +130,7 @@
 	gst_buffer_flags_get_type
 	gst_buffer_foreach_meta
 	gst_buffer_get_all_memory
+	gst_buffer_get_flags
 	gst_buffer_get_max_memory
 	gst_buffer_get_memory
 	gst_buffer_get_memory_range
@@ -137,6 +139,7 @@
 	gst_buffer_get_sizes
 	gst_buffer_get_sizes_range
 	gst_buffer_get_type
+	gst_buffer_has_flags
 	gst_buffer_insert_memory
 	gst_buffer_is_all_memory_writable
 	gst_buffer_is_memory_range_writable
@@ -191,8 +194,10 @@
 	gst_buffer_replace_memory_range
 	gst_buffer_resize
 	gst_buffer_resize_range
+	gst_buffer_set_flags
 	gst_buffer_set_size
 	gst_buffer_unmap
+	gst_buffer_unset_flags
 	gst_buffering_mode_get_type
 	gst_bus_add_signal_watch
 	gst_bus_add_signal_watch_full
@@ -476,6 +481,9 @@
 	gst_double_range_get_type
 	gst_element_abort_state
 	gst_element_add_pad
+	gst_element_add_property_deep_notify_watch
+	gst_element_add_property_notify_watch
+	gst_element_call_async
 	gst_element_change_state
 	gst_element_class_add_metadata
 	gst_element_class_add_pad_template
@@ -535,6 +543,7 @@
 	gst_element_lost_state
 	gst_element_make_from_uri
 	gst_element_message_full
+	gst_element_message_full_with_details
 	gst_element_no_more_pads
 	gst_element_post_message
 	gst_element_provide_clock
@@ -545,6 +554,7 @@
 	gst_element_register
 	gst_element_release_request_pad
 	gst_element_remove_pad
+	gst_element_remove_property_notify_watch
 	gst_element_request_pad
 	gst_element_seek
 	gst_element_seek_simple
@@ -584,8 +594,11 @@
 	gst_event_new_seek
 	gst_event_new_segment
 	gst_event_new_segment_done
+	gst_event_new_select_streams
 	gst_event_new_sink_message
 	gst_event_new_step
+	gst_event_new_stream_collection
+	gst_event_new_stream_group_done
 	gst_event_new_stream_start
 	gst_event_new_tag
 	gst_event_new_toc
@@ -601,9 +614,13 @@
 	gst_event_parse_seek
 	gst_event_parse_segment
 	gst_event_parse_segment_done
+	gst_event_parse_select_streams
 	gst_event_parse_sink_message
 	gst_event_parse_step
+	gst_event_parse_stream
+	gst_event_parse_stream_collection
 	gst_event_parse_stream_flags
+	gst_event_parse_stream_group_done
 	gst_event_parse_stream_start
 	gst_event_parse_tag
 	gst_event_parse_toc
@@ -611,6 +628,7 @@
 	gst_event_set_group_id
 	gst_event_set_running_time_offset
 	gst_event_set_seqnum
+	gst_event_set_stream
 	gst_event_set_stream_flags
 	gst_event_type_flags_get_type
 	gst_event_type_get_flags
@@ -673,6 +691,7 @@
 	gst_library_error_get_type
 	gst_library_error_quark
 	gst_lock_flags_get_type
+	gst_make_element_message_details
 	gst_map_flags_get_type
 	gst_memory_alignment DATA
 	gst_memory_copy
@@ -688,6 +707,8 @@
 	gst_memory_resize
 	gst_memory_share
 	gst_memory_unmap
+	gst_message_add_redirect_entry
+	gst_message_get_num_redirect_entries
 	gst_message_get_seqnum
 	gst_message_get_stream_status_object
 	gst_message_get_structure
@@ -706,13 +727,17 @@
 	gst_message_new_element
 	gst_message_new_eos
 	gst_message_new_error
+	gst_message_new_error_with_details
 	gst_message_new_have_context
 	gst_message_new_info
+	gst_message_new_info_with_details
 	gst_message_new_latency
 	gst_message_new_need_context
 	gst_message_new_new_clock
 	gst_message_new_progress
+	gst_message_new_property_notify
 	gst_message_new_qos
+	gst_message_new_redirect
 	gst_message_new_request_state
 	gst_message_new_reset_time
 	gst_message_new_segment_done
@@ -721,12 +746,15 @@
 	gst_message_new_state_dirty
 	gst_message_new_step_done
 	gst_message_new_step_start
+	gst_message_new_stream_collection
 	gst_message_new_stream_start
 	gst_message_new_stream_status
+	gst_message_new_streams_selected
 	gst_message_new_structure_change
 	gst_message_new_tag
 	gst_message_new_toc
 	gst_message_new_warning
+	gst_message_new_warning_with_details
 	gst_message_parse_async_done
 	gst_message_parse_buffering
 	gst_message_parse_buffering_stats
@@ -736,14 +764,18 @@
 	gst_message_parse_device_added
 	gst_message_parse_device_removed
 	gst_message_parse_error
+	gst_message_parse_error_details
 	gst_message_parse_group_id
 	gst_message_parse_have_context
 	gst_message_parse_info
+	gst_message_parse_info_details
 	gst_message_parse_new_clock
 	gst_message_parse_progress
+	gst_message_parse_property_notify
 	gst_message_parse_qos
 	gst_message_parse_qos_stats
 	gst_message_parse_qos_values
+	gst_message_parse_redirect_entry
 	gst_message_parse_request_state
 	gst_message_parse_reset_time
 	gst_message_parse_segment_done
@@ -751,17 +783,23 @@
 	gst_message_parse_state_changed
 	gst_message_parse_step_done
 	gst_message_parse_step_start
+	gst_message_parse_stream_collection
 	gst_message_parse_stream_status
+	gst_message_parse_streams_selected
 	gst_message_parse_structure_change
 	gst_message_parse_tag
 	gst_message_parse_toc
 	gst_message_parse_warning
+	gst_message_parse_warning_details
 	gst_message_set_buffering_stats
 	gst_message_set_group_id
 	gst_message_set_qos_stats
 	gst_message_set_qos_values
 	gst_message_set_seqnum
 	gst_message_set_stream_status_object
+	gst_message_streams_selected_add
+	gst_message_streams_selected_get_size
+	gst_message_streams_selected_get_stream
 	gst_message_type_get_name
 	gst_message_type_get_type
 	gst_message_type_to_quark
@@ -844,6 +882,7 @@
 	gst_pad_get_peer
 	gst_pad_get_range
 	gst_pad_get_sticky_event
+	gst_pad_get_stream
 	gst_pad_get_stream_id
 	gst_pad_get_type
 	gst_pad_has_current_caps
@@ -857,6 +896,8 @@
 	gst_pad_link_check_get_type
 	gst_pad_link_full
 	gst_pad_link_get_name
+	gst_pad_link_maybe_ghosting
+	gst_pad_link_maybe_ghosting_full
 	gst_pad_link_return_get_type
 	gst_pad_mark_reconfigure
 	gst_pad_mode_get_name
@@ -1184,10 +1225,29 @@
 	gst_static_pad_template_get
 	gst_static_pad_template_get_caps
 	gst_static_pad_template_get_type
+	gst_stream_collection_add_stream
+	gst_stream_collection_get_size
+	gst_stream_collection_get_stream
+	gst_stream_collection_get_type
+	gst_stream_collection_get_upstream_id
+	gst_stream_collection_new
 	gst_stream_error_get_type
 	gst_stream_error_quark
 	gst_stream_flags_get_type
+	gst_stream_get_caps
+	gst_stream_get_stream_flags
+	gst_stream_get_stream_id
+	gst_stream_get_stream_type
+	gst_stream_get_tags
+	gst_stream_get_type
+	gst_stream_new
+	gst_stream_set_caps
+	gst_stream_set_stream_flags
+	gst_stream_set_stream_type
+	gst_stream_set_tags
 	gst_stream_status_type_get_type
+	gst_stream_type_get_name
+	gst_stream_type_get_type
 	gst_structure_can_intersect
 	gst_structure_change_type_get_type
 	gst_structure_copy