Imported Upstream version 0.11.93
diff --git a/Makefile.am b/Makefile.am
index 9638883..0a9284f 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -51,14 +51,22 @@
 		 gst/udp/gstudp-enumtypes.c \
 		 gst/udp/gstudp-enumtypes.h \
 		 gst/rtpmanager/gstrtpbin-marshal.c \
-		 gst/rtpmanager/gstrtpbin-marshal.h ; do \
+		 gst/rtpmanager/gstrtpbin-marshal.h \
+		 sys/v4l2/tuner-enumtypes.c \
+		 sys/v4l2/tuner-enumtypes.h \
+		 sys/v4l2/tuner-marshal.c \
+		 sys/v4l2/tuner-marshal.h; do \
 		cp $(top_builddir)/$$f win32/common; done
 	$(top_srcdir)/common/gst-indent win32/common/gstudp-marshal.c
 	$(top_srcdir)/common/gst-indent win32/common/gstudp-marshal.c
 	$(top_srcdir)/common/gst-indent win32/common/gstudp-enumtypes.c
 	$(top_srcdir)/common/gst-indent win32/common/gstudp-enumtypes.c
-	$(top_srcdir)/common/gst-indent gst/rtpmanager/gstrtpbin-marshal.c
-	$(top_srcdir)/common/gst-indent gst/rtpmanager/gstrtpbin-marshal.c
+	$(top_srcdir)/common/gst-indent win32/common/gstrtpbin-marshal.c
+	$(top_srcdir)/common/gst-indent win32/common/gstrtpbin-marshal.c
+	$(top_srcdir)/common/gst-indent win32/common/tuner-enumtypes.c
+	$(top_srcdir)/common/gst-indent win32/common/tuner-enumtypes.c
+	$(top_srcdir)/common/gst-indent win32/common/tuner-marshal.c
+	$(top_srcdir)/common/gst-indent win32/common/tuner-marshal.c
 	cp $(top_builddir)/win32/common/config.h-new \
 	    $(top_srcdir)/win32/common/config.h
 
diff --git a/Makefile.in b/Makefile.in
index ab69a8b..4d58934 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -257,7 +257,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
@@ -886,7 +888,7 @@
 	*.zip*) \
 	  unzip $(distdir).zip ;;\
 	esac
-	chmod -R a-w $(distdir); chmod a+w $(distdir)
+	chmod -R a-w $(distdir); chmod u+w $(distdir)
 	mkdir $(distdir)/_build
 	mkdir $(distdir)/_inst
 	chmod a-w $(distdir)
@@ -1173,14 +1175,22 @@
 		 gst/udp/gstudp-enumtypes.c \
 		 gst/udp/gstudp-enumtypes.h \
 		 gst/rtpmanager/gstrtpbin-marshal.c \
-		 gst/rtpmanager/gstrtpbin-marshal.h ; do \
+		 gst/rtpmanager/gstrtpbin-marshal.h \
+		 sys/v4l2/tuner-enumtypes.c \
+		 sys/v4l2/tuner-enumtypes.h \
+		 sys/v4l2/tuner-marshal.c \
+		 sys/v4l2/tuner-marshal.h; do \
 		cp $(top_builddir)/$$f win32/common; done
 	$(top_srcdir)/common/gst-indent win32/common/gstudp-marshal.c
 	$(top_srcdir)/common/gst-indent win32/common/gstudp-marshal.c
 	$(top_srcdir)/common/gst-indent win32/common/gstudp-enumtypes.c
 	$(top_srcdir)/common/gst-indent win32/common/gstudp-enumtypes.c
-	$(top_srcdir)/common/gst-indent gst/rtpmanager/gstrtpbin-marshal.c
-	$(top_srcdir)/common/gst-indent gst/rtpmanager/gstrtpbin-marshal.c
+	$(top_srcdir)/common/gst-indent win32/common/gstrtpbin-marshal.c
+	$(top_srcdir)/common/gst-indent win32/common/gstrtpbin-marshal.c
+	$(top_srcdir)/common/gst-indent win32/common/tuner-enumtypes.c
+	$(top_srcdir)/common/gst-indent win32/common/tuner-enumtypes.c
+	$(top_srcdir)/common/gst-indent win32/common/tuner-marshal.c
+	$(top_srcdir)/common/gst-indent win32/common/tuner-marshal.c
 	cp $(top_builddir)/win32/common/config.h-new \
 	    $(top_srcdir)/win32/common/config.h
 .PHONY: lcov-reset lcov lcov-run lcov-report lcov-upload
diff --git a/aclocal.m4 b/aclocal.m4
index 64a643a..a65bacf 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,4 +1,4 @@
-# generated automatically by aclocal 1.11.5 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.6 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 # 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
@@ -38,7 +38,7 @@
 [am__api_version='1.11'
 dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
 dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.11.5], [],
+m4_if([$1], [1.11.6], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -54,7 +54,7 @@
 # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
 # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.11.5])dnl
+[AM_AUTOMAKE_VERSION([1.11.6])dnl
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
diff --git a/common/Makefile.in b/common/Makefile.in
index 54ba879..a632276 100644
--- a/common/Makefile.in
+++ b/common/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -220,7 +220,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/common/gst-glib-gen.mak b/common/gst-glib-gen.mak
index cc82bbd..0b0a5e9 100644
--- a/common/gst-glib-gen.mak
+++ b/common/gst-glib-gen.mak
@@ -10,16 +10,16 @@
 
 # these are all the rules generating the relevant files
 $(glib_gen_basename)-marshal.h: $(glib_gen_basename)-marshal.list
-	$(AM_V_GEN)glib-genmarshal --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
+	$(AM_V_GEN)$(GLIB_GENMARSHAL) --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
 	mv $(glib_gen_basename)-marshal.h.tmp $(glib_gen_basename)-marshal.h
 
 $(glib_gen_basename)-marshal.c: $(glib_gen_basename)-marshal.list
 	$(AM_V_GEN)echo "#include \"$(glib_gen_basename)-marshal.h\"" >> $(glib_gen_basename)-marshal.c.tmp && \
-	glib-genmarshal --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
+	$(GLIB_GENMARSHAL) --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
 	mv $(glib_gen_basename)-marshal.c.tmp $(glib_gen_basename)-marshal.c
 
 $(glib_gen_basename)-enumtypes.h: $(glib_enum_headers)
-	$(AM_V_GEN)glib-mkenums \
+	$(AM_V_GEN)$(GLIB_MKENUMS) \
 	--fhead "#ifndef __$(glib_enum_define)_ENUM_TYPES_H__\n#define __$(glib_enum_define)_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
 	--fprod "\n/* enumerations from \"@filename@\" */\n" \
 	--vhead "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n"         \
@@ -28,7 +28,7 @@
 
 $(glib_gen_basename)-enumtypes.c: $(glib_enum_headers)
 	@if test "x$(glib_enum_headers)" = "x"; then echo "ERROR: glib_enum_headers is empty, please fix Makefile"; exit 1; fi
-	$(AM_V_GEN)glib-mkenums \
+	$(AM_V_GEN)$(GLIB_MKENUMS) \
 	--fhead "#include \"$(glib_gen_basename)-enumtypes.h\"\n$(enum_headers)" \
 	--fprod "\n/* enumerations from \"@filename@\" */" \
 	--vhead "GType\n@enum_name@_get_type (void)\n{\n  static volatile gsize g_define_type_id__volatile = 0;\n  if (g_once_init_enter (&g_define_type_id__volatile)) {\n    static const G@Type@Value values[] = {"     \
diff --git a/common/m4/Makefile.in b/common/m4/Makefile.in
index 0339945..88752cb 100644
--- a/common/m4/Makefile.in
+++ b/common/m4/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -180,7 +180,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/common/m4/gst-arch.m4 b/common/m4/gst-arch.m4
index ff0954a..077a20b 100644
--- a/common/m4/gst-arch.m4
+++ b/common/m4/gst-arch.m4
@@ -5,9 +5,6 @@
 
 AC_DEFUN([AG_GST_ARCH],
 [
-  AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use host_ variables
-  AC_REQUIRE([AC_CANONICAL_TARGET]) dnl we use target_ variables
-
   dnl Determine CPU
   case "x${target_cpu}" in
     xi?86 | xk? | xi?86_64)
diff --git a/common/m4/gst-glib2.m4 b/common/m4/gst-glib2.m4
index b141bee..3f3d565 100644
--- a/common/m4/gst-glib2.m4
+++ b/common/m4/gst-glib2.m4
@@ -68,6 +68,44 @@
     GLIB_EXTRA_CFLAGS="$GLIB_EXTRA_CFLAGS -DG_DISABLE_ASSERT"
   fi
 
+  dnl Find location of glib utils. People may want to or have to override these,
+  dnl e.g. in a cross-compile situation where PATH is a bit messed up. We need
+  dnl for these tools to work on the host, so can't just use the one from the
+  dnl GLib installation that pkg-config picks up, as that might be for a
+  dnl different target architecture.
+  dnl
+  dnl glib-genmarshal:
+  AC_MSG_CHECKING(for glib-genmarshal)
+  if test "x$GLIB_GENMARSHAL" != "x"; then
+    AC_MSG_RESULT([$GLIB_GENMARSHAL (from environment)])
+  else
+    GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0`
+    if $GLIB_GENMARSHAL --version 2>/dev/null >/dev/null; then
+      AC_MSG_RESULT([$GLIB_GENMARSHAL (from pkg-config path)])
+    else
+      AC_PATH_PROG(GLIB_GENMARSHAL, [glib-genmarshal], [glib-genmarshal])
+      AC_MSG_RESULT([$GLIB_GENMARSHAL])
+    fi
+  fi
+  if ! $GLIB_GENMARSHAL --version 2>/dev/null >/dev/null; then
+    AC_MSG_WARN([$GLIB_GENMARSHAL does not seem to work!])
+  fi
+  AC_SUBST(GLIB_GENMARSHAL)
+
+  dnl glib-mkenums:
+  AC_MSG_CHECKING(for glib-mkenums)
+  if test "x$GLIB_MKENUMS" != "x"; then
+    AC_MSG_RESULT([$GLIB_MKENUMS (from environment)])
+  else
+    dnl glib-mkenums is written in perl so should always work really
+    GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
+    AC_MSG_RESULT([$GLIB_MKENUMS])
+  fi
+  if ! $GLIB_MKENUMS --version 2>/dev/null >/dev/null; then
+    AC_MSG_WARN([$GLIB_MKENUMS does not seem to work!])
+  fi
+  AC_SUBST(GLIB_MKENUMS)
+
   dnl for the poor souls who for example have glib in /usr/local
   AS_SCRUB_INCLUDE(GLIB_CFLAGS)
 
diff --git a/common/m4/gst-parser.m4 b/common/m4/gst-parser.m4
index 2cae45d..710da89 100644
--- a/common/m4/gst-parser.m4
+++ b/common/m4/gst-parser.m4
@@ -34,7 +34,7 @@
   dnl we need version >= 2.5.31 for the reentrancy support
   dnl in the parser.
   flex_min_version=2.5.31
-  flex_version=`$FLEX_PATH --version | head -n 1 | sed 's/^.* //' | sed 's/[[a-zA-Z]]*$//' | cut -d' ' -f1`
+  flex_version=`$FLEX_PATH --version | head -n 1 | awk '{print $2}'`
   AC_MSG_CHECKING([flex version $flex_version >= $flex_min_version])
   if perl -w <<EOF
     (\$min_version_major, \$min_version_minor, \$min_version_micro ) = "$flex_min_version" =~ /(\d+)\.(\d+)\.(\d+)/;
diff --git a/common/m4/gst.m4 b/common/m4/gst.m4
index ddfde51..d4c53cb 100644
--- a/common/m4/gst.m4
+++ b/common/m4/gst.m4
@@ -3,10 +3,15 @@
 dnl all GStreamer autoconf macros are prefixed
 dnl with AG_GST_ for public macros
 dnl with _AG_GST_ for private macros
+dnl
+dnl We call AC_CANONICAL_TARGET and AC_CANONICAL_HOST so that
+dnl it is valid before AC_ARG_PROGRAM is called
 
 AC_DEFUN([AG_GST_INIT],
 [
   m4_pattern_forbid(^_?AG_GST_)
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use host_ variables
+  AC_REQUIRE([AC_CANONICAL_TARGET]) dnl we use target_ variables
 ])
 
 dnl AG_GST_PKG_CONFIG_PATH
diff --git a/compile b/compile
index b1f4749..862a14e 100755
--- a/compile
+++ b/compile
@@ -1,7 +1,7 @@
 #! /bin/sh
 # Wrapper for compilers which do not understand '-c -o'.
 
-scriptversion=2012-01-04.17; # UTC
+scriptversion=2012-03-05.13; # UTC
 
 # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009, 2010, 2012 Free
 # Software Foundation, Inc.
@@ -79,6 +79,48 @@
   esac
 }
 
+# func_cl_dashL linkdir
+# Make cl look for libraries in LINKDIR
+func_cl_dashL ()
+{
+  func_file_conv "$1"
+  if test -z "$lib_path"; then
+    lib_path=$file
+  else
+    lib_path="$lib_path;$file"
+  fi
+  linker_opts="$linker_opts -LIBPATH:$file"
+}
+
+# func_cl_dashl library
+# Do a library search-path lookup for cl
+func_cl_dashl ()
+{
+  lib=$1
+  found=no
+  save_IFS=$IFS
+  IFS=';'
+  for dir in $lib_path $LIB
+  do
+    IFS=$save_IFS
+    if $shared && test -f "$dir/$lib.dll.lib"; then
+      found=yes
+      lib=$dir/$lib.dll.lib
+      break
+    fi
+    if test -f "$dir/$lib.lib"; then
+      found=yes
+      lib=$dir/$lib.lib
+      break
+    fi
+  done
+  IFS=$save_IFS
+
+  if test "$found" != yes; then
+    lib=$lib.lib
+  fi
+}
+
 # func_cl_wrapper cl arg...
 # Adjust compile command to suit cl
 func_cl_wrapper ()
@@ -109,43 +151,34 @@
 	      ;;
 	  esac
 	  ;;
+	-I)
+	  eat=1
+	  func_file_conv "$2" mingw
+	  set x "$@" -I"$file"
+	  shift
+	  ;;
 	-I*)
 	  func_file_conv "${1#-I}" mingw
 	  set x "$@" -I"$file"
 	  shift
 	  ;;
-	-l*)
-	  lib=${1#-l}
-	  found=no
-	  save_IFS=$IFS
-	  IFS=';'
-	  for dir in $lib_path $LIB
-	  do
-	    IFS=$save_IFS
-	    if $shared && test -f "$dir/$lib.dll.lib"; then
-	      found=yes
-	      set x "$@" "$dir/$lib.dll.lib"
-	      break
-	    fi
-	    if test -f "$dir/$lib.lib"; then
-	      found=yes
-	      set x "$@" "$dir/$lib.lib"
-	      break
-	    fi
-	  done
-	  IFS=$save_IFS
-
-	  test "$found" != yes && set x "$@" "$lib.lib"
+	-l)
+	  eat=1
+	  func_cl_dashl "$2"
+	  set x "$@" "$lib"
 	  shift
 	  ;;
+	-l*)
+	  func_cl_dashl "${1#-l}"
+	  set x "$@" "$lib"
+	  shift
+	  ;;
+	-L)
+	  eat=1
+	  func_cl_dashL "$2"
+	  ;;
 	-L*)
-	  func_file_conv "${1#-L}"
-	  if test -z "$lib_path"; then
-	    lib_path=$file
-	  else
-	    lib_path="$lib_path;$file"
-	  fi
-	  linker_opts="$linker_opts -LIBPATH:$file"
+	  func_cl_dashL "${1#-L}"
 	  ;;
 	-static)
 	  shared=false
diff --git a/config.sub b/config.sub
index c894da4..6205f84 100755
--- a/config.sub
+++ b/config.sub
@@ -4,7 +4,7 @@
 #   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
 #   2011, 2012 Free Software Foundation, Inc.
 
-timestamp='2012-02-10'
+timestamp='2012-04-18'
 
 # This file is (in principle) common to ALL GNU software.
 # The presence of a machine in this file suggests that SOME GNU software
@@ -225,6 +225,12 @@
 	-isc*)
 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
 		;;
+	-lynx*178)
+		os=-lynxos178
+		;;
+	-lynx*5)
+		os=-lynxos5
+		;;
 	-lynx*)
 		os=-lynxos
 		;;
@@ -1537,6 +1543,9 @@
 	c4x-* | tic4x-*)
 		os=-coff
 		;;
+	hexagon-*)
+		os=-elf
+		;;
 	tic54x-*)
 		os=-coff
 		;;
diff --git a/configure b/configure
index 46a9ac2..44dc827 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 Good Plug-ins 0.11.92.
+# Generated by GNU Autoconf 2.69 for GStreamer Good Plug-ins 0.11.93.
 #
 # Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer>.
 #
@@ -591,8 +591,8 @@
 # Identity of this package.
 PACKAGE_NAME='GStreamer Good Plug-ins'
 PACKAGE_TARNAME='gst-plugins-good'
-PACKAGE_VERSION='0.11.92'
-PACKAGE_STRING='GStreamer Good Plug-ins 0.11.92'
+PACKAGE_VERSION='0.11.93'
+PACKAGE_STRING='GStreamer Good Plug-ins 0.11.93'
 PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer'
 PACKAGE_URL=''
 
@@ -921,6 +921,8 @@
 GIO_LIBS
 GIO_CFLAGS
 GLIB_EXTRA_CFLAGS
+GLIB_MKENUMS
+GLIB_GENMARSHAL
 GLIB_LIBS
 GLIB_CFLAGS
 GLIB_REQ
@@ -1004,10 +1006,6 @@
 HAVE_CPU_PPC_TRUE
 HAVE_CPU_I386_FALSE
 HAVE_CPU_I386_TRUE
-target_os
-target_vendor
-target_cpu
-target
 BUILD_EXPERIMENTAL_FALSE
 BUILD_EXPERIMENTAL_TRUE
 USE_EXPERIMENTAL_FALSE
@@ -1104,14 +1102,6 @@
 AM_DEFAULT_VERBOSITY
 AM_DEFAULT_V
 AM_V
-host_os
-host_vendor
-host_cpu
-host
-build_os
-build_vendor
-build_cpu
-build
 MAINT
 MAINTAINER_MODE_FALSE
 MAINTAINER_MODE_TRUE
@@ -1143,6 +1133,18 @@
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
+target_os
+target_vendor
+target_cpu
+target
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
 target_alias
 host_alias
 build_alias
@@ -1221,7 +1223,6 @@
 enable_gobject_cast_checks
 enable_glib_asserts
 enable_orc
-with_gtk
 with_default_audiosink
 with_default_audiosrc
 with_default_videosink
@@ -1936,7 +1937,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 Good Plug-ins 0.11.92 to adapt to many kinds of systems.
+\`configure' configures GStreamer Good Plug-ins 0.11.93 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -2012,7 +2013,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of GStreamer Good Plug-ins 0.11.92:";;
+     short | recursive ) echo "Configuration of GStreamer Good Plug-ins 0.11.93:";;
    esac
   cat <<\_ACEOF
 
@@ -2152,7 +2153,6 @@
   --with-plugins          comma-separated list of dependencyless plug-ins to
                           compile
   --with-html-dir=PATH    path to installed docs
-  --with-gtk=3.0|2.0      which gtk+ version to compile against (default: 2.0)
   --with-default-audiosink
                           specify default audio sink
   --with-default-audiosrc specify default audio source
@@ -2369,7 +2369,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-GStreamer Good Plug-ins configure 0.11.92
+GStreamer Good Plug-ins configure 0.11.93
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -3180,7 +3180,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 Good Plug-ins $as_me 0.11.92, which was
+It was created by GStreamer Good Plug-ins $as_me 0.11.93, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3533,12 +3533,6 @@
 
 
 
-
-
-
-
-am__api_version='1.11'
-
 ac_aux_dir=
 for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
   if test -f "$ac_dir/install-sh"; then
@@ -3568,6 +3562,122 @@
 ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
 
 
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if ${ac_cv_build+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if ${ac_cv_host+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
+$as_echo_n "checking target system type... " >&6; }
+if ${ac_cv_target+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$target_alias" = x; then
+  ac_cv_target=$ac_cv_host
+else
+  ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
+$as_echo "$ac_cv_target" >&6; }
+case $ac_cv_target in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
+esac
+target=$ac_cv_target
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_target
+shift
+target_cpu=$1
+target_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+target_os=$*
+IFS=$ac_save_IFS
+case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
+
+
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+test -n "$target_alias" &&
+  test "$program_prefix$program_suffix$program_transform_name" = \
+    NONENONEs,x,x, &&
+  program_prefix=${target_alias}-
+
+
+
+
+am__api_version='1.11'
+
 # Find a good install program.  We prefer a C program (faster),
 # so one script is as good as another.  But avoid the broken or
 # incompatible versions:
@@ -4004,7 +4114,7 @@
 
 # Define the identity of the package.
  PACKAGE='gst-plugins-good'
- VERSION='0.11.92'
+ VERSION='0.11.93'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -4127,9 +4237,9 @@
 
 
 
-  PACKAGE_VERSION_MAJOR=$(echo 0.11.92 | cut -d'.' -f1)
-  PACKAGE_VERSION_MINOR=$(echo 0.11.92 | cut -d'.' -f2)
-  PACKAGE_VERSION_MICRO=$(echo 0.11.92 | cut -d'.' -f3)
+  PACKAGE_VERSION_MAJOR=$(echo 0.11.93 | cut -d'.' -f1)
+  PACKAGE_VERSION_MINOR=$(echo 0.11.93 | cut -d'.' -f2)
+  PACKAGE_VERSION_MICRO=$(echo 0.11.93 | cut -d'.' -f3)
 
 
 
@@ -4140,7 +4250,7 @@
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5
 $as_echo_n "checking nano version... " >&6; }
 
-  NANO=$(echo 0.11.92 | cut -d'.' -f4)
+  NANO=$(echo 0.11.93 | cut -d'.' -f4)
 
   if test x"$NANO" = x || test "x$NANO" = "x0" ; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5
@@ -4192,76 +4302,6 @@
 
 
 
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_build_alias=$build_alias
-test "x$ac_build_alias" = x &&
-  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
-test "x$ac_build_alias" = x &&
-  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
-esac
-build=$ac_cv_build
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_build
-shift
-build_cpu=$1
-build_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-build_os=$*
-IFS=$ac_save_IFS
-case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "x$host_alias" = x; then
-  ac_cv_host=$ac_cv_build
-else
-  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
-esac
-host=$ac_cv_host
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_host
-shift
-host_cpu=$1
-host_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-host_os=$*
-IFS=$ac_save_IFS
-case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
 
 
 # Check whether --enable-silent-rules was given.
@@ -6511,10 +6551,6 @@
   fi
   ;;
 
-gnu*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
 haiku*)
   lt_cv_deplibs_check_method=pass_all
   ;;
@@ -6553,7 +6589,7 @@
   ;;
 
 # This must be glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
@@ -9791,7 +9827,7 @@
       lt_prog_compiler_static='-non_shared'
       ;;
 
-    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+    linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
       case $cc_basename in
       # old Intel for x86_64 which still supported -KPIC.
       ecc*)
@@ -11961,17 +11997,6 @@
   esac
   ;;
 
-gnu*)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
 haiku*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
@@ -12088,7 +12113,7 @@
   ;;
 
 # This must be glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
@@ -13136,8 +13161,8 @@
 
 
 
-GST_REQ=0.11.91
-GSTPB_REQ=0.11.91
+GST_REQ=0.11.93
+GSTPB_REQ=0.11.93
 
 
 
@@ -15863,46 +15888,6 @@
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
-$as_echo_n "checking target system type... " >&6; }
-if ${ac_cv_target+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "x$target_alias" = x; then
-  ac_cv_target=$ac_cv_host
-else
-  ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
-    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
-$as_echo "$ac_cv_target" >&6; }
-case $ac_cv_target in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
-esac
-target=$ac_cv_target
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_target
-shift
-target_cpu=$1
-target_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-target_os=$*
-IFS=$ac_save_IFS
-case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
-
-
-# The aliases save the names the user supplied, while $host etc.
-# will get canonicalized.
-test -n "$target_alias" &&
-  test "$program_prefix$program_suffix$program_transform_name" = \
-    NONENONEs,x,x, &&
-  program_prefix=${target_alias}-
-
 
     case "x${target_cpu}" in
     xi?86 | xk? | xi?86_64)
@@ -18749,9 +18734,6 @@
         ld_shlibs_CXX=yes
         ;;
 
-      gnu*)
-        ;;
-
       haiku*)
         archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
         link_all_deplibs_CXX=yes
@@ -18913,7 +18895,7 @@
         inherit_rpath_CXX=yes
         ;;
 
-      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
         case $cc_basename in
           KCC*)
 	    # Kuck and Associates, Inc. (KAI) C++ Compiler
@@ -19773,7 +19755,7 @@
 	    ;;
 	esac
 	;;
-      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
 	case $cc_basename in
 	  KCC*)
 	    # KAI C++ Compiler
@@ -20645,17 +20627,6 @@
   esac
   ;;
 
-gnu*)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
 haiku*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
@@ -20772,7 +20743,7 @@
   ;;
 
 # This must be glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
@@ -23755,7 +23726,7 @@
 
 
 
-GLIB_REQ=2.31.14
+GLIB_REQ=2.32.0
 
 
 
@@ -23912,6 +23883,84 @@
     GLIB_EXTRA_CFLAGS="$GLIB_EXTRA_CFLAGS -DG_DISABLE_ASSERT"
   fi
 
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for glib-genmarshal" >&5
+$as_echo_n "checking for glib-genmarshal... " >&6; }
+  if test "x$GLIB_GENMARSHAL" != "x"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GLIB_GENMARSHAL (from environment)" >&5
+$as_echo "$GLIB_GENMARSHAL (from environment)" >&6; }
+  else
+    GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0`
+    if $GLIB_GENMARSHAL --version 2>/dev/null >/dev/null; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GLIB_GENMARSHAL (from pkg-config path)" >&5
+$as_echo "$GLIB_GENMARSHAL (from pkg-config path)" >&6; }
+    else
+      # Extract the first word of "glib-genmarshal", so it can be a program name with args.
+set dummy glib-genmarshal; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_GLIB_GENMARSHAL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $GLIB_GENMARSHAL in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_GLIB_GENMARSHAL="$GLIB_GENMARSHAL" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_GLIB_GENMARSHAL="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_GLIB_GENMARSHAL" && ac_cv_path_GLIB_GENMARSHAL="glib-genmarshal"
+  ;;
+esac
+fi
+GLIB_GENMARSHAL=$ac_cv_path_GLIB_GENMARSHAL
+if test -n "$GLIB_GENMARSHAL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GLIB_GENMARSHAL" >&5
+$as_echo "$GLIB_GENMARSHAL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GLIB_GENMARSHAL" >&5
+$as_echo "$GLIB_GENMARSHAL" >&6; }
+    fi
+  fi
+  if ! $GLIB_GENMARSHAL --version 2>/dev/null >/dev/null; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $GLIB_GENMARSHAL does not seem to work!" >&5
+$as_echo "$as_me: WARNING: $GLIB_GENMARSHAL does not seem to work!" >&2;}
+  fi
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for glib-mkenums" >&5
+$as_echo_n "checking for glib-mkenums... " >&6; }
+  if test "x$GLIB_MKENUMS" != "x"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GLIB_MKENUMS (from environment)" >&5
+$as_echo "$GLIB_MKENUMS (from environment)" >&6; }
+  else
+        GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GLIB_MKENUMS" >&5
+$as_echo "$GLIB_MKENUMS" >&6; }
+  fi
+  if ! $GLIB_MKENUMS --version 2>/dev/null >/dev/null; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $GLIB_MKENUMS does not seem to work!" >&5
+$as_echo "$as_me: WARNING: $GLIB_MKENUMS does not seem to work!" >&2;}
+  fi
+
+
 
   GIVEN_CFLAGS=$GLIB_CFLAGS
   INCLUDE_DIRS=`echo | cpp -v 2>&1`
@@ -24037,7 +24086,7 @@
 
 
 
-  ORC_REQ=0.4.11
+  ORC_REQ=0.4.16
 
   # Check whether --enable-orc was given.
 if test "${enable_orc+set}" = set; then :
@@ -24867,26 +24916,8 @@
 
 
 HAVE_GTK=no
-GTK2_REQ=2.14.0
-GTK3_REQ=2.91.3
+GT_REQ=3.0.0
 if test "x$BUILD_EXAMPLES" = "xyes"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking which gtk+ version to compile examples against (optional)" >&5
-$as_echo_n "checking which gtk+ version to compile examples against (optional)... " >&6; }
-
-# Check whether --with-gtk was given.
-if test "${with_gtk+set}" = set; then :
-  withval=$with_gtk; case "$with_gtk" in
-        2.0) GTK_REQ=$GTK2_REQ ;;
-        3.0) GTK_REQ=$GTK3_REQ ;;
-        *) as_fn_error $? "invalid gtk+ version specified" "$LINENO" 5;;
-    esac
-else
-  with_gtk=2.0
-     GTK_REQ=$GTK2_REQ
-fi
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_gtk (>= $GTK_REQ)" >&5
-$as_echo "$with_gtk (>= $GTK_REQ)" >&6; }
 
 pkg_failed=no
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK" >&5
@@ -26705,9 +26736,7 @@
 
 
 
-GST_PLUGINS_NONPORTED="deinterlace \
- cairo cairo_gobject gdk_pixbuf \
- osx_audio "
+GST_PLUGINS_NONPORTED="cairo cairo_gobject gdk_pixbuf osx_audio "
 
 
 
@@ -34464,12 +34493,12 @@
         pkg_cv_SOUP_CFLAGS="$SOUP_CFLAGS"
     else
         if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsoup-2.4 >= 2.26\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "libsoup-2.4 >= 2.26") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsoup-2.4 >= 2.26.1\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libsoup-2.4 >= 2.26.1") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_SOUP_CFLAGS=`$PKG_CONFIG --cflags "libsoup-2.4 >= 2.26" 2>/dev/null`
+  pkg_cv_SOUP_CFLAGS=`$PKG_CONFIG --cflags "libsoup-2.4 >= 2.26.1" 2>/dev/null`
 else
   pkg_failed=yes
 fi
@@ -34482,12 +34511,12 @@
         pkg_cv_SOUP_LIBS="$SOUP_LIBS"
     else
         if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsoup-2.4 >= 2.26\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "libsoup-2.4 >= 2.26") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsoup-2.4 >= 2.26.1\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libsoup-2.4 >= 2.26.1") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_SOUP_LIBS=`$PKG_CONFIG --libs "libsoup-2.4 >= 2.26" 2>/dev/null`
+  pkg_cv_SOUP_LIBS=`$PKG_CONFIG --libs "libsoup-2.4 >= 2.26.1" 2>/dev/null`
 else
   pkg_failed=yes
 fi
@@ -34506,9 +34535,9 @@
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-	        SOUP_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libsoup-2.4 >= 2.26"`
+	        SOUP_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libsoup-2.4 >= 2.26.1"`
         else
-	        SOUP_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libsoup-2.4 >= 2.26"`
+	        SOUP_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libsoup-2.4 >= 2.26.1"`
         fi
 	# Put the nasty error message in config.log where it belongs
 	echo "$SOUP_PKG_ERRORS" >&5
@@ -34542,12 +34571,12 @@
         pkg_cv_SOUP_CFLAGS="$SOUP_CFLAGS"
     else
         if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsoup-2.4 >= 2.26\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "libsoup-2.4 >= 2.26") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsoup-2.4 >= 2.26.1\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libsoup-2.4 >= 2.26.1") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_SOUP_CFLAGS=`$PKG_CONFIG --cflags "libsoup-2.4 >= 2.26" 2>/dev/null`
+  pkg_cv_SOUP_CFLAGS=`$PKG_CONFIG --cflags "libsoup-2.4 >= 2.26.1" 2>/dev/null`
 else
   pkg_failed=yes
 fi
@@ -34560,12 +34589,12 @@
         pkg_cv_SOUP_LIBS="$SOUP_LIBS"
     else
         if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsoup-2.4 >= 2.26\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "libsoup-2.4 >= 2.26") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsoup-2.4 >= 2.26.1\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libsoup-2.4 >= 2.26.1") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_SOUP_LIBS=`$PKG_CONFIG --libs "libsoup-2.4 >= 2.26" 2>/dev/null`
+  pkg_cv_SOUP_LIBS=`$PKG_CONFIG --libs "libsoup-2.4 >= 2.26.1" 2>/dev/null`
 else
   pkg_failed=yes
 fi
@@ -34584,9 +34613,9 @@
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-	        SOUP_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libsoup-2.4 >= 2.26"`
+	        SOUP_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libsoup-2.4 >= 2.26.1"`
         else
-	        SOUP_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libsoup-2.4 >= 2.26"`
+	        SOUP_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libsoup-2.4 >= 2.26.1"`
         fi
 	# Put the nasty error message in config.log where it belongs
 	echo "$SOUP_PKG_ERRORS" >&5
@@ -37325,7 +37354,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by GStreamer Good Plug-ins $as_me 0.11.92, which was
+This file was extended by GStreamer Good Plug-ins $as_me 0.11.93, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -37391,7 +37420,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 Good Plug-ins config.status 0.11.92
+GStreamer Good Plug-ins config.status 0.11.93
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/configure.ac b/configure.ac
index 7aa6543..b957f7a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -5,7 +5,7 @@
 dnl initialize autoconf
 dnl releases only do -Wall, git and prerelease does -Werror too
 dnl use a three digit version number for releases, and four for git/pre
-AC_INIT(GStreamer Good Plug-ins, 0.11.92,
+AC_INIT(GStreamer Good Plug-ins, 0.11.93,
     http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer,
     gst-plugins-good)
 
@@ -48,8 +48,8 @@
 AS_LIBTOOL(GST, 0, 0, 0)
 
 dnl *** required versions of GStreamer stuff ***
-GST_REQ=0.11.91
-GSTPB_REQ=0.11.91
+GST_REQ=0.11.93
+GSTPB_REQ=0.11.93
 
 dnl *** autotools stuff ****
 
@@ -198,11 +198,11 @@
 
 
 dnl GLib
-GLIB_REQ=2.31.14
+GLIB_REQ=2.32.0
 AG_GST_GLIB_CHECK([$GLIB_REQ])
 
 dnl Orc
-ORC_CHECK([0.4.11])
+ORC_CHECK([0.4.16])
 
 dnl checks for gstreamer
 dnl uninstalled is selected preferentially -- see pkg-config(1)
@@ -234,21 +234,8 @@
 
 dnl GTK is optional and used in examples
 HAVE_GTK=no
-GTK2_REQ=2.14.0
-GTK3_REQ=2.91.3
+GT_REQ=3.0.0
 if test "x$BUILD_EXAMPLES" = "xyes"; then
-  AC_MSG_CHECKING([which gtk+ version to compile examples against (optional)])
-  AC_ARG_WITH([gtk],
-    AC_HELP_STRING([--with-gtk=3.0|2.0],
-                   [which gtk+ version to compile against (default: 2.0)]),
-    [case "$with_gtk" in
-        2.0) GTK_REQ=$GTK2_REQ ;;
-        3.0) GTK_REQ=$GTK3_REQ ;;
-        *) AC_MSG_ERROR([invalid gtk+ version specified]);;
-    esac],
-    [with_gtk=2.0
-     GTK_REQ=$GTK2_REQ])
-  AC_MSG_RESULT([$with_gtk (>= $GTK_REQ)])
   PKG_CHECK_MODULES(GTK, gtk+-$with_gtk >= $GTK_REQ, HAVE_GTK=yes, HAVE_GTK=no)
   dnl some examples need gtk+-x11
   PKG_CHECK_MODULES(GTK_X11, gtk+-x11-$with_gtk >= $GTK_REQ, HAVE_GTK_X11=yes, HAVE_GTK_X11=no)
@@ -310,9 +297,7 @@
 
 dnl Non ported plugins (non-dependant, then dependant)
 dnl Make sure you have a space before and after all plugins
-GST_PLUGINS_NONPORTED="deinterlace \
- cairo cairo_gobject gdk_pixbuf \
- osx_audio "
+GST_PLUGINS_NONPORTED="cairo cairo_gobject gdk_pixbuf osx_audio "
 AC_SUBST(GST_PLUGINS_NONPORTED)
 
 dnl these are all the gst plug-ins, compilable without additional libs
@@ -843,7 +828,7 @@
     HAVE_SOUP="yes"
     AC_DEFINE(HAVE_LIBSOUP_GNOME, 1, [soup gnome integration])
   ],[
-    PKG_CHECK_MODULES(SOUP, libsoup-2.4 >= 2.26, HAVE_SOUP="yes", [
+    PKG_CHECK_MODULES(SOUP, libsoup-2.4 >= 2.26.1, HAVE_SOUP="yes", [
       HAVE_SOUP="no"
     ])
   ])
diff --git a/depcomp b/depcomp
index bd0ac08..25a39e6 100755
--- a/depcomp
+++ b/depcomp
@@ -1,10 +1,10 @@
 #! /bin/sh
 # depcomp - compile a program generating dependencies as side-effects
 
-scriptversion=2011-12-04.11; # UTC
+scriptversion=2012-03-27.16; # UTC
 
 # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
-# 2011 Free Software Foundation, Inc.
+# 2011, 2012 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -28,7 +28,7 @@
 
 case $1 in
   '')
-     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
      exit 1;
      ;;
   -h | --h*)
@@ -40,8 +40,8 @@
 
 Environment variables:
   depmode     Dependency tracking mode.
-  source      Source file read by `PROGRAMS ARGS'.
-  object      Object file output by `PROGRAMS ARGS'.
+  source      Source file read by 'PROGRAMS ARGS'.
+  object      Object file output by 'PROGRAMS ARGS'.
   DEPDIR      directory where to store dependencies.
   depfile     Dependency file to output.
   tmpdepfile  Temporary file to use when outputting dependencies.
@@ -57,6 +57,12 @@
     ;;
 esac
 
+# A tabulation character.
+tab='	'
+# A newline character.
+nl='
+'
+
 if test -z "$depmode" || test -z "$source" || test -z "$object"; then
   echo "depcomp: Variables source, object and depmode must be set" 1>&2
   exit 1
@@ -102,6 +108,12 @@
    depmode=msvc7
 fi
 
+if test "$depmode" = xlc; then
+   # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations.
+   gccflag=-qmakedep=gcc,-MF
+   depmode=gcc
+fi
+
 case "$depmode" in
 gcc3)
 ## gcc 3 implements dependency tracking that does exactly what
@@ -156,15 +168,14 @@
 ## The second -e expression handles DOS-style file names with drive letters.
   sed -e 's/^[^:]*: / /' \
       -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
-## This next piece of magic avoids the `deleted header file' problem.
+## This next piece of magic avoids the "deleted header file" problem.
 ## The problem is that when a header file which appears in a .P file
 ## is deleted, the dependency causes make to die (because there is
 ## typically no way to rebuild the header).  We avoid this by adding
 ## dummy dependencies for each header file.  Too bad gcc doesn't do
 ## this for us directly.
-  tr ' ' '
-' < "$tmpdepfile" |
-## Some versions of gcc put a space before the `:'.  On the theory
+  tr ' ' "$nl" < "$tmpdepfile" |
+## Some versions of gcc put a space before the ':'.  On the theory
 ## that the space means something, we add a space to the output as
 ## well.  hp depmode also adds that space, but also prefixes the VPATH
 ## to the object.  Take care to not repeat it in the output.
@@ -203,18 +214,15 @@
     # clever and replace this with sed code, as IRIX sed won't handle
     # lines with more than a fixed number of characters (4096 in
     # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
-    # the IRIX cc adds comments like `#:fec' to the end of the
+    # the IRIX cc adds comments like '#:fec' to the end of the
     # dependency line.
-    tr ' ' '
-' < "$tmpdepfile" \
+    tr ' ' "$nl" < "$tmpdepfile" \
     | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
-    tr '
-' ' ' >> "$depfile"
+    tr "$nl" ' ' >> "$depfile"
     echo >> "$depfile"
 
     # The second pass generates a dummy entry for each header file.
-    tr ' ' '
-' < "$tmpdepfile" \
+    tr ' ' "$nl" < "$tmpdepfile" \
    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
    >> "$depfile"
   else
@@ -226,10 +234,17 @@
   rm -f "$tmpdepfile"
   ;;
 
+xlc)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
 aix)
   # The C for AIX Compiler uses -M and outputs the dependencies
   # in a .u file.  In older versions, this file always lives in the
-  # current directory.  Also, the AIX compiler puts `$object:' at the
+  # current directory.  Also, the AIX compiler puts '$object:' at the
   # start of each line; $object doesn't have directory information.
   # Version 6 uses the directory in both cases.
   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
@@ -259,12 +274,11 @@
     test -f "$tmpdepfile" && break
   done
   if test -f "$tmpdepfile"; then
-    # Each line is of the form `foo.o: dependent.h'.
+    # Each line is of the form 'foo.o: dependent.h'.
     # Do two passes, one to just change these to
-    # `$object: dependent.h' and one to simply `dependent.h:'.
+    # '$object: dependent.h' and one to simply 'dependent.h:'.
     sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
-    # That's a tab and a space in the [].
-    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+    sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
   else
     # The sourcefile does not contain any dependencies, so just
     # store a dummy comment line, to avoid errors with the Makefile
@@ -275,23 +289,26 @@
   ;;
 
 icc)
-  # Intel's C compiler understands `-MD -MF file'.  However on
-  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+  # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'.
+  # However on
+  #    $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c
   # ICC 7.0 will fill foo.d with something like
   #    foo.o: sub/foo.c
   #    foo.o: sub/foo.h
-  # which is wrong.  We want:
+  # which is wrong.  We want
   #    sub/foo.o: sub/foo.c
   #    sub/foo.o: sub/foo.h
   #    sub/foo.c:
   #    sub/foo.h:
   # ICC 7.1 will output
   #    foo.o: sub/foo.c sub/foo.h
-  # and will wrap long lines using \ :
+  # and will wrap long lines using '\':
   #    foo.o: sub/foo.c ... \
   #     sub/foo.h ... \
   #     ...
-
+  # tcc 0.9.26 (FIXME still under development at the moment of writing)
+  # will emit a similar output, but also prepend the continuation lines
+  # with horizontal tabulation characters.
   "$@" -MD -MF "$tmpdepfile"
   stat=$?
   if test $stat -eq 0; then :
@@ -300,15 +317,21 @@
     exit $stat
   fi
   rm -f "$depfile"
-  # Each line is of the form `foo.o: dependent.h',
-  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+  # Each line is of the form 'foo.o: dependent.h',
+  # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'.
   # Do two passes, one to just change these to
-  # `$object: dependent.h' and one to simply `dependent.h:'.
-  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
-  # Some versions of the HPUX 10.20 sed can't process this invocation
-  # correctly.  Breaking it into two sed invocations is a workaround.
-  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
-    sed -e 's/$/ :/' >> "$depfile"
+  # '$object: dependent.h' and one to simply 'dependent.h:'.
+  sed -e "s/^[ $tab][ $tab]*/  /" -e "s,^[^:]*:,$object :," \
+    < "$tmpdepfile" > "$depfile"
+  sed '
+    s/[ '"$tab"'][ '"$tab"']*/ /g
+    s/^ *//
+    s/ *\\*$//
+    s/^[^:]*: *//
+    /^$/d
+    /:$/d
+    s/$/ :/
+  ' < "$tmpdepfile" >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
@@ -344,7 +367,7 @@
   done
   if test -f "$tmpdepfile"; then
     sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
-    # Add `dependent.h:' lines.
+    # Add 'dependent.h:' lines.
     sed -ne '2,${
 	       s/^ *//
 	       s/ \\*$//
@@ -359,9 +382,9 @@
 
 tru64)
    # The Tru64 compiler uses -MD to generate dependencies as a side
-   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+   # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
    # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
-   # dependencies in `foo.d' instead, so we check for that too.
+   # dependencies in 'foo.d' instead, so we check for that too.
    # Subdirectories are respected.
    dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
    test "x$dir" = "x$object" && dir=
@@ -407,8 +430,7 @@
    done
    if test -f "$tmpdepfile"; then
       sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
-      # That's a tab and a space in the [].
-      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+      sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
    else
       echo "#dummy" > "$depfile"
    fi
@@ -443,11 +465,11 @@
   p
 }' | $cygpath_u | sort -u | sed -n '
 s/ /\\ /g
-s/\(.*\)/	\1 \\/p
+s/\(.*\)/'"$tab"'\1 \\/p
 s/.\(.*\) \\/\1:/
 H
 $ {
-  s/.*/	/
+  s/.*/'"$tab"'/
   G
   p
 }' >> "$depfile"
@@ -478,7 +500,7 @@
     shift
   fi
 
-  # Remove `-o $object'.
+  # Remove '-o $object'.
   IFS=" "
   for arg
   do
@@ -498,15 +520,14 @@
   done
 
   test -z "$dashmflag" && dashmflag=-M
-  # Require at least two characters before searching for `:'
+  # Require at least two characters before searching for ':'
   # in the target name.  This is to cope with DOS-style filenames:
-  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
   "$@" $dashmflag |
-    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
+    sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile"
   rm -f "$depfile"
   cat < "$tmpdepfile" > "$depfile"
-  tr ' ' '
-' < "$tmpdepfile" | \
+  tr ' ' "$nl" < "$tmpdepfile" | \
 ## Some versions of the HPUX 10.20 sed can't process this invocation
 ## correctly.  Breaking it into two sed invocations is a workaround.
     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
@@ -562,8 +583,7 @@
   # makedepend may prepend the VPATH from the source file name to the object.
   # No need to regex-escape $object, excess matching of '.' is harmless.
   sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
-  sed '1,2d' "$tmpdepfile" | tr ' ' '
-' | \
+  sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \
 ## Some versions of the HPUX 10.20 sed can't process this invocation
 ## correctly.  Breaking it into two sed invocations is a workaround.
     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
@@ -583,7 +603,7 @@
     shift
   fi
 
-  # Remove `-o $object'.
+  # Remove '-o $object'.
   IFS=" "
   for arg
   do
@@ -652,8 +672,8 @@
   sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
   rm -f "$depfile"
   echo "$object : \\" > "$depfile"
-  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
-  echo "	" >> "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
+  echo "$tab" >> "$depfile"
   sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
diff --git a/docs/Makefile.in b/docs/Makefile.in
index 9b826c4..4b58d2e 100644
--- a/docs/Makefile.in
+++ b/docs/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -220,7 +220,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/docs/plugins/Makefile.in b/docs/plugins/Makefile.in
index c73bb1d..da2a718 100644
--- a/docs/plugins/Makefile.in
+++ b/docs/plugins/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -199,7 +199,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/docs/plugins/html/ch01.html b/docs/plugins/html/ch01.html
index f36f651..36febcc 100644
--- a/docs/plugins/html/ch01.html
+++ b/docs/plugins/html/ch01.html
@@ -21,7 +21,7 @@
 </tr></table>
 <div class="chapter">
 <div class="titlepage"><div><div><h2 class="title">
-<a name="idp281824"></a>gst-plugins-good Elements</h2></div></div></div>
+<a name="idp180256"></a>gst-plugins-good Elements</h2></div></div></div>
 <div class="toc"><dl>
 <dt>
 <span class="refentrytitle"><a href="gst-plugins-good-plugins-3gppmux.html">3gppmux</a></span><span class="refpurpose"> — Muxer for 3GPP (.3gp) files</span>
diff --git a/docs/plugins/html/ch02.html b/docs/plugins/html/ch02.html
index cae3ad9..1234a84 100644
--- a/docs/plugins/html/ch02.html
+++ b/docs/plugins/html/ch02.html
@@ -21,7 +21,7 @@
 </tr></table>
 <div class="chapter">
 <div class="titlepage"><div><div><h2 class="title">
-<a name="idp5378064"></a>gst-plugins-good Plugins</h2></div></div></div>
+<a name="idp5432704"></a>gst-plugins-good Plugins</h2></div></div></div>
 <div class="toc"><dl>
 <dt>
 <span class="refentrytitle"><a href="gst-plugins-good-plugins-plugin-1394.html">1394</a></span><span class="refpurpose"> — <a name="plugin-1394"></a>Source for video data via IEEE1394 interface</span>
diff --git a/docs/plugins/html/ch03.html b/docs/plugins/html/ch03.html
index 9d9e775..18c4ce7 100644
--- a/docs/plugins/html/ch03.html
+++ b/docs/plugins/html/ch03.html
@@ -21,7 +21,7 @@
 </tr></table>
 <div class="chapter">
 <div class="titlepage"><div><div><h2 class="title">
-<a name="idp5413056"></a>gst-plugins-good Base Classes</h2></div></div></div>
+<a name="idp5467696"></a>gst-plugins-good Base Classes</h2></div></div></div>
 <div class="toc"><dl>
 <dt>
 <span class="refentrytitle"><a href="GstIirEqualizer.html">GstIirEqualizer</a></span><span class="refpurpose"></span>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-3gppmux.html b/docs/plugins/html/gst-plugins-good-plugins-3gppmux.html
index fed32fb..d0bb4b0 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-3gppmux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-3gppmux.html
@@ -56,7 +56,7 @@
 ISO 14496-12 (except for some media specific parts).
 In turn, the latter ISO Base Media format was further specialized as a
 Motion JPEG-2000 file format in ISO 15444-3 (mj2mux)
-and in various 3GPP(2) specs (gppmux).
+and in various 3GPP(2) specs (3gppmux).
 The fragmented file features defined (only) in ISO Base Media are used by
 ISMV files making up (a.o.) Smooth Streaming (ismlmux).
 </p>
@@ -96,13 +96,13 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp8328720"></a><h3>Example pipelines</h3>
+<a name="idp6208480"></a><h3>Example pipelines</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch v4l2src num<span class="gtkdoc opt">-</span>buffers<span class="gtkdoc opt">=</span><span class="number">50</span> <span class="gtkdoc opt">!</span> queue <span class="gtkdoc opt">!</span> ffenc_h263 <span class="gtkdoc opt">!</span> gppmux <span class="gtkdoc opt">!</span> filesink location<span class="gtkdoc opt">=</span>video<span class="number">.3</span>gp</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch v4l2src num<span class="gtkdoc opt">-</span>buffers<span class="gtkdoc opt">=</span><span class="number">50</span> <span class="gtkdoc opt">!</span> queue <span class="gtkdoc opt">!</span> ffenc_h263 <span class="gtkdoc opt">!</span> <span class="number">3</span>gppmux <span class="gtkdoc opt">!</span> filesink location<span class="gtkdoc opt">=</span>video<span class="number">.3</span>gp</pre></td>
       </tr>
     </tbody>
   </table>
@@ -119,7 +119,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp6518336"></a><h3>Element Information</h3>
+<a name="idp7337184"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -142,7 +142,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp6229168"></a><h3>Element Pads</h3>
+<a name="idp6801616"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-aacparse.html b/docs/plugins/html/gst-plugins-good-plugins-aacparse.html
index 9fc7ccb..4993ba8 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-aacparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-aacparse.html
@@ -66,7 +66,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp9559600"></a><h3>Example launch line</h3>
+<a name="idm36816"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -84,7 +84,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp6596800"></a><h3>Element Information</h3>
+<a name="idp8750912"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -107,7 +107,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp7982560"></a><h3>Element Pads</h3>
+<a name="idp8802736"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-aasink.html b/docs/plugins/html/gst-plugins-good-plugins-aasink.html
index 0ddc10c..547aa1b 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-aasink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-aasink.html
@@ -86,7 +86,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp8268384"></a><h3>Element Information</h3>
+<a name="idm31792"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -109,7 +109,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp7952176"></a><h3>Element Pads</h3>
+<a name="idp7012192"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-ac3parse.html b/docs/plugins/html/gst-plugins-good-plugins-ac3parse.html
index 808f2fd..94a41ae 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-ac3parse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-ac3parse.html
@@ -61,7 +61,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp9335856"></a><h3>Example launch line</h3>
+<a name="idp7867424"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -79,7 +79,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp6399376"></a><h3>Element Information</h3>
+<a name="idp8374016"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -102,7 +102,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp7492656"></a><h3>Element Pads</h3>
+<a name="idp6397712"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-agingtv.html b/docs/plugins/html/gst-plugins-good-plugins-agingtv.html
index 98d3a07..55163a0 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-agingtv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-agingtv.html
@@ -74,7 +74,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp9746128"></a><h3>Example launch line</h3>
+<a name="idp6010544"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -92,7 +92,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp5701344"></a><h3>Element Information</h3>
+<a name="idp9026096"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -115,7 +115,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp9838144"></a><h3>Element Pads</h3>
+<a name="idp7914864"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-alawdec.html b/docs/plugins/html/gst-plugins-good-plugins-alawdec.html
index f9b02d6..f831c11 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-alawdec.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-alawdec.html
@@ -60,7 +60,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp5919136"></a><h3>Element Information</h3>
+<a name="idp7081440"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -83,7 +83,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp9205920"></a><h3>Element Pads</h3>
+<a name="idp9270640"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-alawenc.html b/docs/plugins/html/gst-plugins-good-plugins-alawenc.html
index a9488cd..7e9ebf6 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-alawenc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-alawenc.html
@@ -49,7 +49,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp7084208"></a><h3>Element Information</h3>
+<a name="idp10540240"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -72,7 +72,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp7973840"></a><h3>Element Pads</h3>
+<a name="idp7069712"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-alpha.html b/docs/plugins/html/gst-plugins-good-plugins-alpha.html
index 1c3cf5a..ddadd28 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-alpha.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-alpha.html
@@ -105,7 +105,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp6436096"></a><h3>Element Information</h3>
+<a name="idp7104224"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -130,7 +130,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp10122416"></a><h3>Element Pads</h3>
+<a name="idp8954032"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-alphacolor.html b/docs/plugins/html/gst-plugins-good-plugins-alphacolor.html
index 4211126..a8b9552 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-alphacolor.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-alphacolor.html
@@ -82,7 +82,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp5533136"></a><h3>Element Information</h3>
+<a name="idp7941184"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -105,7 +105,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp9398432"></a><h3>Element Pads</h3>
+<a name="idp9874768"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-amrparse.html b/docs/plugins/html/gst-plugins-good-plugins-amrparse.html
index 2256d3e..cb29a7d 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-amrparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-amrparse.html
@@ -62,7 +62,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp7826944"></a><h3>Example launch line</h3>
+<a name="idp9300272"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -80,7 +80,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp8715728"></a><h3>Element Information</h3>
+<a name="idp6211120"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -103,7 +103,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idm32288"></a><h3>Element Pads</h3>
+<a name="idp5694032"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -175,7 +175,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-good-plugins-amrparse.see-also"></a><h2>See Also</h2>
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-ugly/html/gst-plugins-ugly-plugins-amrnbdec.html#GstAmrnbDec"><span class="type">GstAmrnbDec</span></a>, <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-ugly/html/gst-plugins-ugly-plugins-amrnbenc.html#GstAmrnbEnc"><span class="type">GstAmrnbEnc</span></a>
+<span class="type">GstAmrnbDec</span>, <span class="type">GstAmrnbEnc</span>
 </div>
 </div>
 <div class="footer">
diff --git a/docs/plugins/html/gst-plugins-good-plugins-apedemux.html b/docs/plugins/html/gst-plugins-good-plugins-apedemux.html
index 05fa89b..0cdccb2 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-apedemux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-apedemux.html
@@ -72,7 +72,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp9161520"></a><h3>Example launch line</h3>
+<a name="idp6139904"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -92,7 +92,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp8269344"></a><h3>Element Information</h3>
+<a name="idp8599248"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -115,7 +115,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp7065776"></a><h3>Element Pads</h3>
+<a name="idp9243584"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-apev2mux.html b/docs/plugins/html/gst-plugins-good-plugins-apev2mux.html
index 06fa287..c682a38 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-apev2mux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-apev2mux.html
@@ -66,7 +66,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp5917840"></a><h3>Element Information</h3>
+<a name="idp6430144"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -89,7 +89,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp6930672"></a><h3>Element Pads</h3>
+<a name="idp7787728"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-aspectratiocrop.html b/docs/plugins/html/gst-plugins-good-plugins-aspectratiocrop.html
index d0fca24..06a7beb 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-aspectratiocrop.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-aspectratiocrop.html
@@ -81,7 +81,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp8880032"></a><h3>Example launch line</h3>
+<a name="idp7151824"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -99,7 +99,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp10181968"></a><h3>Element Information</h3>
+<a name="idp8094240"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -122,7 +122,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp8844816"></a><h3>Element Pads</h3>
+<a name="idp8295296"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-audioamplify.html b/docs/plugins/html/gst-plugins-good-plugins-audioamplify.html
index 5bbfaeb..46046dc 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-audioamplify.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-audioamplify.html
@@ -72,7 +72,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp9991504"></a><h3>Example launch line</h3>
+<a name="idp6603536"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -94,7 +94,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp8439776"></a><h3>Element Information</h3>
+<a name="idp9960256"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -117,7 +117,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp8274080"></a><h3>Element Pads</h3>
+<a name="idp8943104"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-audiochebband.html b/docs/plugins/html/gst-plugins-good-plugins-audiochebband.html
index fd59c4d..df21000 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-audiochebband.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-audiochebband.html
@@ -103,7 +103,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp8513472"></a><h3>Example launch line</h3>
+<a name="idp9953952"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -125,7 +125,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp8843520"></a><h3>Element Information</h3>
+<a name="idp3032128"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -148,7 +148,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp7544080"></a><h3>Element Pads</h3>
+<a name="idp9402576"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-audiocheblimit.html b/docs/plugins/html/gst-plugins-good-plugins-audiocheblimit.html
index 3549aae..3825855 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-audiocheblimit.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-audiocheblimit.html
@@ -100,7 +100,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp6782368"></a><h3>Example launch line</h3>
+<a name="idp10597408"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -122,7 +122,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp8527136"></a><h3>Element Information</h3>
+<a name="idp9915776"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -145,7 +145,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp7678736"></a><h3>Element Pads</h3>
+<a name="idp3247456"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-audiodynamic.html b/docs/plugins/html/gst-plugins-good-plugins-audiodynamic.html
index 527a4e6..1f30f9e 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-audiodynamic.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-audiodynamic.html
@@ -76,7 +76,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp10827520"></a><h3>Example launch line</h3>
+<a name="idp10382224"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -98,7 +98,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp9888192"></a><h3>Element Information</h3>
+<a name="idp8946464"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -121,7 +121,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp7949072"></a><h3>Element Pads</h3>
+<a name="idp8596896"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-audioecho.html b/docs/plugins/html/gst-plugins-good-plugins-audioecho.html
index 65117eb..ab363e6 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-audioecho.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-audioecho.html
@@ -84,7 +84,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp8803856"></a><h3>Example launch line</h3>
+<a name="idp8473856"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -104,7 +104,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp8686672"></a><h3>Element Information</h3>
+<a name="idp9602064"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -127,7 +127,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp9744128"></a><h3>Element Pads</h3>
+<a name="idp7672608"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-audiofirfilter.html b/docs/plugins/html/gst-plugins-good-plugins-audiofirfilter.html
index 30ba431..470a8ac 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-audiofirfilter.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-audiofirfilter.html
@@ -95,7 +95,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp11231552"></a><h3>Example application</h3>
+<a name="idp10441424"></a><h3>Example application</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -441,7 +441,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp9528224"></a><h3>Element Information</h3>
+<a name="idp5885264"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -464,7 +464,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp10238000"></a><h3>Element Pads</h3>
+<a name="idp10140592"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-audioiirfilter.html b/docs/plugins/html/gst-plugins-good-plugins-audioiirfilter.html
index 521f36d..80c7552 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-audioiirfilter.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-audioiirfilter.html
@@ -91,7 +91,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp9177520"></a><h3>Example application</h3>
+<a name="idp9331104"></a><h3>Example application</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -389,7 +389,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp2790368"></a><h3>Element Information</h3>
+<a name="idp10067568"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -412,7 +412,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp6233376"></a><h3>Element Pads</h3>
+<a name="idp8333056"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-audioinvert.html b/docs/plugins/html/gst-plugins-good-plugins-audioinvert.html
index 18f430b..ca98bad 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-audioinvert.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-audioinvert.html
@@ -72,7 +72,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp10929664"></a><h3>Example launch line</h3>
+<a name="idp7039232"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -94,7 +94,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp8620496"></a><h3>Element Information</h3>
+<a name="idp6695536"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -117,7 +117,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp7399888"></a><h3>Element Pads</h3>
+<a name="idp8506064"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-audiokaraoke.html b/docs/plugins/html/gst-plugins-good-plugins-audiokaraoke.html
index 0f64c20..7b94c24 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-audiokaraoke.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-audiokaraoke.html
@@ -74,7 +74,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp4884352"></a><h3>Example launch line</h3>
+<a name="idp10895824"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -92,7 +92,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp6238576"></a><h3>Element Information</h3>
+<a name="idp7677984"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -115,7 +115,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idm6320"></a><h3>Element Pads</h3>
+<a name="idp11370864"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-audiopanorama.html b/docs/plugins/html/gst-plugins-good-plugins-audiopanorama.html
index a4d0e41..5095b99 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-audiopanorama.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-audiopanorama.html
@@ -71,7 +71,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp10565616"></a><h3>Example launch line</h3>
+<a name="idp5513024"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -95,7 +95,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp7714992"></a><h3>Element Information</h3>
+<a name="idp6296928"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -118,7 +118,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp6869376"></a><h3>Element Pads</h3>
+<a name="idp6983920"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-audiowsincband.html b/docs/plugins/html/gst-plugins-good-plugins-audiowsincband.html
index f908976..c503418 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-audiowsincband.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-audiowsincband.html
@@ -83,7 +83,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp8942528"></a><h3>Example launch line</h3>
+<a name="idp10887712"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -105,7 +105,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp8261168"></a><h3>Element Information</h3>
+<a name="idp8194096"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -128,7 +128,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp6138256"></a><h3>Element Pads</h3>
+<a name="idp6437056"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-audiowsinclimit.html b/docs/plugins/html/gst-plugins-good-plugins-audiowsinclimit.html
index 417af7f..b1d13e3 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-audiowsinclimit.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-audiowsinclimit.html
@@ -83,7 +83,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp6850720"></a><h3>Example launch line</h3>
+<a name="idp9529936"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -105,7 +105,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp10982944"></a><h3>Element Information</h3>
+<a name="idp6156448"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -128,7 +128,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp6873056"></a><h3>Element Pads</h3>
+<a name="idp6200064"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-auparse.html b/docs/plugins/html/gst-plugins-good-plugins-auparse.html
index 0ebbc72..d1ccd9d 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-auparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-auparse.html
@@ -60,7 +60,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp6093648"></a><h3>Element Information</h3>
+<a name="idp7607904"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -83,7 +83,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp9170592"></a><h3>Element Pads</h3>
+<a name="idp6357424"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-autoaudiosink.html b/docs/plugins/html/gst-plugins-good-plugins-autoaudiosink.html
index 40b476a..c41b3de 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-autoaudiosink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-autoaudiosink.html
@@ -80,7 +80,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp5485152"></a><h3>Example launch line</h3>
+<a name="idp10370240"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -98,7 +98,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp10627184"></a><h3>Element Information</h3>
+<a name="idp11529200"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -121,7 +121,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp9738464"></a><h3>Element Pads</h3>
+<a name="idp10476704"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-autoaudiosrc.html b/docs/plugins/html/gst-plugins-good-plugins-autoaudiosrc.html
index ce4befc..e0ec303 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-autoaudiosrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-autoaudiosrc.html
@@ -80,7 +80,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp11817920"></a><h3>Example launch line</h3>
+<a name="idp11808896"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -98,7 +98,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp1882064"></a><h3>Element Information</h3>
+<a name="idp5886352"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -121,7 +121,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp6081344"></a><h3>Element Pads</h3>
+<a name="idp9690384"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-autovideosink.html b/docs/plugins/html/gst-plugins-good-plugins-autovideosink.html
index 0af7ece..4b4262b 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-autovideosink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-autovideosink.html
@@ -80,7 +80,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp7435376"></a><h3>Example launch line</h3>
+<a name="idp5681712"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -98,7 +98,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp5800176"></a><h3>Element Information</h3>
+<a name="idp6214064"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -121,7 +121,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp6481776"></a><h3>Element Pads</h3>
+<a name="idp10000336"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-autovideosrc.html b/docs/plugins/html/gst-plugins-good-plugins-autovideosrc.html
index 3fd4a7e..c7f0bda 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-autovideosrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-autovideosrc.html
@@ -80,7 +80,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp8726784"></a><h3>Example launch line</h3>
+<a name="idp10345152"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -98,7 +98,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp11712912"></a><h3>Element Information</h3>
+<a name="idp6985808"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -121,7 +121,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp11996464"></a><h3>Element Pads</h3>
+<a name="idp11128192"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-avidemux.html b/docs/plugins/html/gst-plugins-good-plugins-avidemux.html
index 5ca3189..e92819d 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-avidemux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-avidemux.html
@@ -64,7 +64,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp11770896"></a><h3>Example launch line</h3>
+<a name="idp11919536"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -88,7 +88,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp11768592"></a><h3>Element Information</h3>
+<a name="idp11916336"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -111,7 +111,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp7449344"></a><h3>Element Pads</h3>
+<a name="idp11910560"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-avimux.html b/docs/plugins/html/gst-plugins-good-plugins-avimux.html
index 0fbe5d8..9d5e3ea 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-avimux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-avimux.html
@@ -76,7 +76,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp6898096"></a><h3>Example launch lines</h3>
+<a name="idp10785168"></a><h3>Example launch lines</h3>
 <p>(write everything in one line, without the backslash characters)</p>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
@@ -130,7 +130,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp11140432"></a><h3>Element Information</h3>
+<a name="idp12289696"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -153,7 +153,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp11273712"></a><h3>Element Pads</h3>
+<a name="idp8587312"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-avisubtitle.html b/docs/plugins/html/gst-plugins-good-plugins-avisubtitle.html
index 079eadb..d12cbc1 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-avisubtitle.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-avisubtitle.html
@@ -57,7 +57,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp8874720"></a><h3>Example launch line</h3>
+<a name="idp7956672"></a><h3>Example launch line</h3>
 <p>
 Parses the subtitle stream from an avi file.
 </p>
@@ -78,7 +78,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp6866848"></a><h3>Element Information</h3>
+<a name="idp8915120"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -101,7 +101,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp9114720"></a><h3>Element Pads</h3>
+<a name="idp8892544"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-cacasink.html b/docs/plugins/html/gst-plugins-good-plugins-cacasink.html
index fd57b6b..58da6ad 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-cacasink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-cacasink.html
@@ -69,7 +69,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp8935536"></a><h3>Element Information</h3>
+<a name="idp8684768"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -92,7 +92,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp11904096"></a><h3>Element Pads</h3>
+<a name="idp12125760"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-cairooverlay.html b/docs/plugins/html/gst-plugins-good-plugins-cairooverlay.html
index e8941a5..5a208ee 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-cairooverlay.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-cairooverlay.html
@@ -54,7 +54,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp5975568"></a><h3>Element Information</h3>
+<a name="idp6310128"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -77,7 +77,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp6409152"></a><h3>Element Pads</h3>
+<a name="idp6294288"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-cairorender.html b/docs/plugins/html/gst-plugins-good-plugins-cairorender.html
index 34ce31b..56efc60 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-cairorender.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-cairorender.html
@@ -45,7 +45,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp12788464"></a><h3>Element Information</h3>
+<a name="idp12819152"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -68,7 +68,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp5654080"></a><h3>Element Pads</h3>
+<a name="idp10143968"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-cairotextoverlay.html b/docs/plugins/html/gst-plugins-good-plugins-cairotextoverlay.html
index c504d2d..23ae108 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-cairotextoverlay.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-cairotextoverlay.html
@@ -62,7 +62,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp9043296"></a><h3>Element Information</h3>
+<a name="idp7298480"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -85,7 +85,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp2670656"></a><h3>Element Pads</h3>
+<a name="idp3251584"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-cairotimeoverlay.html b/docs/plugins/html/gst-plugins-good-plugins-cairotimeoverlay.html
index 602d64f..0541e53 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-cairotimeoverlay.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-cairotimeoverlay.html
@@ -45,7 +45,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp9081552"></a><h3>Element Information</h3>
+<a name="idp10005120"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -68,7 +68,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp5598848"></a><h3>Element Pads</h3>
+<a name="idp5840592"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-capssetter.html b/docs/plugins/html/gst-plugins-good-plugins-capssetter.html
index 9e77965..c499d7c 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-capssetter.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-capssetter.html
@@ -68,7 +68,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp11329776"></a><p>
+<a name="idp10973136"></a><p>
 Sets or merges caps on a stream's buffers.
 That is, a buffer's caps are updated using (fields of)
 <a class="link" href="gst-plugins-good-plugins-capssetter.html#GstCapsSetter--caps" title='The "caps" property'>caps</a>.  Note that this may
@@ -99,7 +99,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp9102800"></a><h3>Element Information</h3>
+<a name="idp7929248"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -122,7 +122,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp13297232"></a><h3>Element Pads</h3>
+<a name="idp7803568"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-cutter.html b/docs/plugins/html/gst-plugins-good-plugins-cutter.html
index 70407af..87921eb 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-cutter.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-cutter.html
@@ -89,7 +89,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp6357504"></a><h3>Example launch line</h3>
+<a name="idp10854432"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -107,7 +107,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp11153952"></a><h3>Element Information</h3>
+<a name="idp9904912"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -130,7 +130,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp5732816"></a><h3>Element Pads</h3>
+<a name="idp6219408"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-dcaparse.html b/docs/plugins/html/gst-plugins-good-plugins-dcaparse.html
index 4b3664f..df3e372 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-dcaparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-dcaparse.html
@@ -61,7 +61,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp8712592"></a><h3>Example launch line</h3>
+<a name="idp3197584"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -79,7 +79,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp6418704"></a><h3>Element Information</h3>
+<a name="idp7912928"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -102,7 +102,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp11837600"></a><h3>Element Pads</h3>
+<a name="idp13422640"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-deinterlace.html b/docs/plugins/html/gst-plugins-good-plugins-deinterlace.html
index d9b5a44..71af389 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-deinterlace.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-deinterlace.html
@@ -71,7 +71,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp9660032"></a><h3>Example launch line</h3>
+<a name="idp8497696"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -89,7 +89,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp8786960"></a><h3>Element Information</h3>
+<a name="idp12195232"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -112,7 +112,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp7331136"></a><h3>Element Pads</h3>
+<a name="idp11827840"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-deinterleave.html b/docs/plugins/html/gst-plugins-good-plugins-deinterleave.html
index af3a25b..ccd466c 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-deinterleave.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-deinterleave.html
@@ -78,7 +78,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp10126080"></a><h3>Example launch line</h3>
+<a name="idp6704656"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -110,7 +110,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp6979312"></a><h3>Element Information</h3>
+<a name="idp12252000"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -133,7 +133,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp2710896"></a><h3>Element Pads</h3>
+<a name="idp8629856"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-dicetv.html b/docs/plugins/html/gst-plugins-good-plugins-dicetv.html
index 218a878..dc781e9 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-dicetv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-dicetv.html
@@ -83,7 +83,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp5734848"></a><h3>Example launch line</h3>
+<a name="idp8803504"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -101,7 +101,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp11133024"></a><h3>Element Information</h3>
+<a name="idp10446672"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -124,7 +124,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp6606032"></a><h3>Element Pads</h3>
+<a name="idp13141264"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-directsoundsink.html b/docs/plugins/html/gst-plugins-good-plugins-directsoundsink.html
index 1da577c..956283b 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-directsoundsink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-directsoundsink.html
@@ -45,7 +45,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp4543536"></a><h3>Element Information</h3>
+<a name="idp10137824"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -68,7 +68,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp10870960"></a><h3>Element Pads</h3>
+<a name="idp6414496"></a><h3>Element Pads</h3>
 </div>
 </div>
 <p>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-dv1394src.html b/docs/plugins/html/gst-plugins-good-plugins-dv1394src.html
index 23e5cd0..448c0c1 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-dv1394src.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-dv1394src.html
@@ -90,7 +90,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp11892656"></a><h3>Element Information</h3>
+<a name="idp6847312"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -113,7 +113,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp10643440"></a><h3>Element Pads</h3>
+<a name="idp8058960"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-dvdec.html b/docs/plugins/html/gst-plugins-good-plugins-dvdec.html
index eac5a28..baa39c5 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-dvdec.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-dvdec.html
@@ -68,7 +68,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp11066512"></a><h3>Element Information</h3>
+<a name="idp6265136"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -91,7 +91,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp11540880"></a><h3>Element Pads</h3>
+<a name="idp6443520"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-dvdemux.html b/docs/plugins/html/gst-plugins-good-plugins-dvdemux.html
index 6e30ad2..6902f53 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-dvdemux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-dvdemux.html
@@ -57,7 +57,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp2690912"></a><h3>Element Information</h3>
+<a name="idp11131760"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -80,7 +80,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp7547488"></a><h3>Element Pads</h3>
+<a name="idp8973888"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-edgetv.html b/docs/plugins/html/gst-plugins-good-plugins-edgetv.html
index 9d1876f..c2dbc4a 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-edgetv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-edgetv.html
@@ -63,7 +63,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp2704416"></a><h3>Example launch line</h3>
+<a name="idp9574256"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -81,7 +81,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp7328208"></a><h3>Element Information</h3>
+<a name="idp7723744"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -104,7 +104,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp10036848"></a><h3>Element Pads</h3>
+<a name="idp10593904"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-equalizer-10bands.html b/docs/plugins/html/gst-plugins-good-plugins-equalizer-10bands.html
index 1e1504f..db2708f 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-equalizer-10bands.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-equalizer-10bands.html
@@ -89,7 +89,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp12681408"></a><h3>Example launch line</h3>
+<a name="idp14333376"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -107,7 +107,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp6681536"></a><h3>Element Information</h3>
+<a name="idp5770256"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -130,7 +130,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp13272720"></a><h3>Element Pads</h3>
+<a name="idp7063392"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-equalizer-3bands.html b/docs/plugins/html/gst-plugins-good-plugins-equalizer-3bands.html
index 0ed17d2..26e0112 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-equalizer-3bands.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-equalizer-3bands.html
@@ -82,7 +82,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp13457696"></a><h3>Example launch line</h3>
+<a name="idp12467376"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -100,7 +100,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp12006848"></a><h3>Element Information</h3>
+<a name="idp14230320"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -123,7 +123,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp11650640"></a><h3>Element Pads</h3>
+<a name="idp8724848"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-equalizer-nbands.html b/docs/plugins/html/gst-plugins-good-plugins-equalizer-nbands.html
index b6b0190..50fe94d 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-equalizer-nbands.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-equalizer-nbands.html
@@ -81,7 +81,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp12256624"></a><h3>Example launch line</h3>
+<a name="idp8082352"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -98,7 +98,7 @@
 </p>
 <hr>
 <div class="refsect2">
-<a name="idp11701904"></a><h3>Example code</h3>
+<a name="idp10087056"></a><h3>Example code</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -190,7 +190,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp7105376"></a><h3>Element Information</h3>
+<a name="idp14304320"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -213,7 +213,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp6945472"></a><h3>Element Pads</h3>
+<a name="idp12924512"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-flacdec.html b/docs/plugins/html/gst-plugins-good-plugins-flacdec.html
index 2b052e9..44a7de1 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-flacdec.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-flacdec.html
@@ -58,7 +58,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp8757696"></a><h3>Element Information</h3>
+<a name="idp5923824"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -81,7 +81,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp11093664"></a><h3>Element Pads</h3>
+<a name="idp13413648"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-flacenc.html b/docs/plugins/html/gst-plugins-good-plugins-flacenc.html
index 0e3d2cf..500a1af 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-flacenc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-flacenc.html
@@ -88,7 +88,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp5780272"></a><h3>Element Information</h3>
+<a name="idp14131424"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -111,7 +111,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp11581408"></a><h3>Element Pads</h3>
+<a name="idp14122528"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-flacparse.html b/docs/plugins/html/gst-plugins-good-plugins-flacparse.html
index c1ff6c5..1ac6018 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-flacparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-flacparse.html
@@ -80,7 +80,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp5278112"></a><h3>Example pipelines</h3>
+<a name="idp11591312"></a><h3>Example pipelines</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -102,7 +102,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp9516336"></a><h3>Element Information</h3>
+<a name="idp8033664"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -125,7 +125,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp2264560"></a><h3>Element Pads</h3>
+<a name="idp9826528"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-flactag.html b/docs/plugins/html/gst-plugins-good-plugins-flactag.html
index 56f6b5a..ce5c82b 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-flactag.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-flactag.html
@@ -65,7 +65,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp7725664"></a><h3>Element Information</h3>
+<a name="idp9078976"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -88,7 +88,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp11325344"></a><h3>Element Pads</h3>
+<a name="idp9347696"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-flvdemux.html b/docs/plugins/html/gst-plugins-good-plugins-flvdemux.html
index 154ce74..4f66cad 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-flvdemux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-flvdemux.html
@@ -60,7 +60,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp8181024"></a><h3>Example launch line</h3>
+<a name="idp9203600"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -78,7 +78,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp11678112"></a><h3>Element Information</h3>
+<a name="idp13044864"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -101,7 +101,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp5862512"></a><h3>Element Pads</h3>
+<a name="idp9476576"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-flvmux.html b/docs/plugins/html/gst-plugins-good-plugins-flvmux.html
index 53dd9ba..3706bdc 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-flvmux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-flvmux.html
@@ -77,7 +77,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp11936272"></a><h3>Example launch line</h3>
+<a name="idp13147376"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -95,7 +95,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp6450800"></a><h3>Element Information</h3>
+<a name="idp11327712"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -118,7 +118,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp10194192"></a><h3>Element Pads</h3>
+<a name="idp6870144"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-flxdec.html b/docs/plugins/html/gst-plugins-good-plugins-flxdec.html
index 443949a..2643d99 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-flxdec.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-flxdec.html
@@ -60,7 +60,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp8838624"></a><h3>Element Information</h3>
+<a name="idp8967152"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -83,7 +83,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp9990176"></a><h3>Element Pads</h3>
+<a name="idp13584480"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-gamma.html b/docs/plugins/html/gst-plugins-good-plugins-gamma.html
index 7661c7c..ba9f6fe 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-gamma.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-gamma.html
@@ -70,7 +70,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp7831248"></a><h3>Example launch line</h3>
+<a name="idp11779792"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -102,7 +102,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp8374064"></a><h3>Element Information</h3>
+<a name="idp12452368"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -125,7 +125,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp11971904"></a><h3>Element Pads</h3>
+<a name="idp8933504"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-gdkpixbufsink.html b/docs/plugins/html/gst-plugins-good-plugins-gdkpixbufsink.html
index e0c91c7..cedb3f3 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-gdkpixbufsink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-gdkpixbufsink.html
@@ -45,7 +45,7 @@
 <div class="refsect1">
 <a name="gst-plugins-good-plugins-gdkpixbufsink.properties"></a><h2>Properties</h2>
 <pre class="synopsis">
-  "<a class="link" href="gst-plugins-good-plugins-gdkpixbufsink.html#GstGdkPixbufSink--last-pixbuf" title='The "last-pixbuf" property'>last-pixbuf</a>"              <a href="http://library.gnome.org/devel/gdk-pixbuf/unstable/gdk-pixbuf-The-GdkPixbuf-Structure.html#GdkPixbuf"><span class="type">GdkPixbuf</span></a>*            : Read
+  "<a class="link" href="gst-plugins-good-plugins-gdkpixbufsink.html#GstGdkPixbufSink--last-pixbuf" title='The "last-pixbuf" property'>last-pixbuf</a>"              <span class="type">GdkPixbuf</span>*            : Read
   "<a class="link" href="gst-plugins-good-plugins-gdkpixbufsink.html#GstGdkPixbufSink--send-messages" title='The "send-messages" property'>send-messages</a>"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
   "<a class="link" href="gst-plugins-good-plugins-gdkpixbufsink.html#GstGdkPixbufSink--post-messages" title='The "post-messages" property'>post-messages</a>"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
 </pre>
@@ -55,7 +55,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp10826272"></a><h3>Element Information</h3>
+<a name="idp6571584"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -78,7 +78,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp11380528"></a><h3>Element Pads</h3>
+<a name="idp11818064"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -125,7 +125,7 @@
 <a name="gst-plugins-good-plugins-gdkpixbufsink.property-details"></a><h2>Property Details</h2>
 <div class="refsect2">
 <a name="GstGdkPixbufSink--last-pixbuf"></a><h3>The <code class="literal">"last-pixbuf"</code> property</h3>
-<pre class="programlisting">  "last-pixbuf"              <a href="http://library.gnome.org/devel/gdk-pixbuf/unstable/gdk-pixbuf-The-GdkPixbuf-Structure.html#GdkPixbuf"><span class="type">GdkPixbuf</span></a>*            : Read</pre>
+<pre class="programlisting">  "last-pixbuf"              <span class="type">GdkPixbuf</span>*            : Read</pre>
 <p>Last GdkPixbuf object rendered.</p>
 </div>
 <hr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-goom.html b/docs/plugins/html/gst-plugins-good-plugins-goom.html
index c7285ec..eb155f7 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-goom.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-goom.html
@@ -61,7 +61,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp13676048"></a><h3>Example launch line</h3>
+<a name="idp12894848"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -79,7 +79,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp5812672"></a><h3>Element Information</h3>
+<a name="idp7569040"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -102,7 +102,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp10060656"></a><h3>Element Pads</h3>
+<a name="idp6657312"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-goom2k1.html b/docs/plugins/html/gst-plugins-good-plugins-goom2k1.html
index 1762d84..ca66e56 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-goom2k1.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-goom2k1.html
@@ -62,7 +62,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp8087296"></a><h3>Example launch line</h3>
+<a name="idp8895024"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -80,7 +80,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp2828400"></a><h3>Element Information</h3>
+<a name="idp11762288"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -103,7 +103,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp11687600"></a><h3>Element Pads</h3>
+<a name="idp11626624"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-halaudiosink.html b/docs/plugins/html/gst-plugins-good-plugins-halaudiosink.html
index 878d38c..7487971 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-halaudiosink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-halaudiosink.html
@@ -44,7 +44,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp14160688"></a><h3>Element Information</h3>
+<a name="idp9813296"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -67,7 +67,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp14692672"></a><h3>Element Pads</h3>
+<a name="idp12480080"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-halaudiosrc.html b/docs/plugins/html/gst-plugins-good-plugins-halaudiosrc.html
index 13d599c..03f1431 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-halaudiosrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-halaudiosrc.html
@@ -44,7 +44,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp6929200"></a><h3>Element Information</h3>
+<a name="idp5920880"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -67,7 +67,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp13351728"></a><h3>Element Pads</h3>
+<a name="idp10115680"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-hdv1394src.html b/docs/plugins/html/gst-plugins-good-plugins-hdv1394src.html
index cea8cb6..e45760c 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-hdv1394src.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-hdv1394src.html
@@ -79,7 +79,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp14566048"></a><h3>Element Information</h3>
+<a name="idp14486608"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -102,7 +102,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp11549312"></a><h3>Element Pads</h3>
+<a name="idp13003296"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-icydemux.html b/docs/plugins/html/gst-plugins-good-plugins-icydemux.html
index d6103ce..d73cfae 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-icydemux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-icydemux.html
@@ -64,7 +64,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp8752736"></a><h3>Example launch line</h3>
+<a name="idp11712848"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -85,7 +85,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp6852624"></a><h3>Element Information</h3>
+<a name="idp13509056"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -108,7 +108,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp7234704"></a><h3>Element Pads</h3>
+<a name="idp5485952"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-id3demux.html b/docs/plugins/html/gst-plugins-good-plugins-id3demux.html
index d116742..c7f7721 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-id3demux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-id3demux.html
@@ -83,7 +83,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp1554832"></a><h3>Example launch line</h3>
+<a name="idp12933904"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -103,7 +103,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp8865840"></a><h3>Element Information</h3>
+<a name="idp9773552"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -126,7 +126,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp12020096"></a><h3>Element Pads</h3>
+<a name="idp9938576"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-id3v2mux.html b/docs/plugins/html/gst-plugins-good-plugins-id3v2mux.html
index 2478229..9f2b7bb 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-id3v2mux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-id3v2mux.html
@@ -66,7 +66,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp6447088"></a><h3>Element Information</h3>
+<a name="idp12796832"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -89,7 +89,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp13280416"></a><h3>Element Pads</h3>
+<a name="idp13305392"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-imagefreeze.html b/docs/plugins/html/gst-plugins-good-plugins-imagefreeze.html
index 971e0ec..1b3f546 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-imagefreeze.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-imagefreeze.html
@@ -62,7 +62,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp11896576"></a><h3>Example launch line</h3>
+<a name="idp14310704"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -80,7 +80,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp10630384"></a><h3>Element Information</h3>
+<a name="idp10794624"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -103,7 +103,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp8437888"></a><h3>Element Pads</h3>
+<a name="idp13457184"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-interleave.html b/docs/plugins/html/gst-plugins-good-plugins-interleave.html
index 78da256..afedfa4 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-interleave.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-interleave.html
@@ -82,7 +82,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp14622416"></a><h3>Example launch line</h3>
+<a name="idp11052288"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -113,7 +113,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp14085984"></a><h3>Element Information</h3>
+<a name="idp10927472"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -136,7 +136,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp6309776"></a><h3>Element Pads</h3>
+<a name="idp11749296"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-ismlmux.html b/docs/plugins/html/gst-plugins-good-plugins-ismlmux.html
index ecba103..b5500f7 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-ismlmux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-ismlmux.html
@@ -56,7 +56,7 @@
 ISO 14496-12 (except for some media specific parts).
 In turn, the latter ISO Base Media format was further specialized as a
 Motion JPEG-2000 file format in ISO 15444-3 (mj2mux)
-and in various 3GPP(2) specs (gppmux).
+and in various 3GPP(2) specs (3gppmux).
 The fragmented file features defined (only) in ISO Base Media are used by
 ISMV files making up (a.o.) Smooth Streaming (ismlmux).
 </p>
@@ -96,7 +96,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp12445088"></a><h3>Example pipelines</h3>
+<a name="idp11996000"></a><h3>Example pipelines</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -119,7 +119,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp8296592"></a><h3>Element Information</h3>
+<a name="idp13520976"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -142,7 +142,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp5735360"></a><h3>Element Pads</h3>
+<a name="idp2111536"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-jackaudiosink.html b/docs/plugins/html/gst-plugins-good-plugins-jackaudiosink.html
index 9850bde..fb11db8 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-jackaudiosink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-jackaudiosink.html
@@ -52,7 +52,7 @@
          +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
                +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
                      +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html">GstBaseSink</a>
-                           +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSink">GstAudioBaseSink</a>
+                           +----GstAudioBaseSink
                                  +----GstJackAudioSink
 </pre>
 </div>
@@ -71,7 +71,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp14199808"></a><h3>Element Information</h3>
+<a name="idp11351712"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -94,7 +94,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp12583040"></a><h3>Element Pads</h3>
+<a name="idp3040816"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-jackaudiosrc.html b/docs/plugins/html/gst-plugins-good-plugins-jackaudiosrc.html
index 76b871b..ca640fb 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-jackaudiosrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-jackaudiosrc.html
@@ -53,7 +53,7 @@
                +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
                      +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSrc.html">GstBaseSrc</a>
                            +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstPushSrc.html">GstPushSrc</a>
-                                 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiobasesrc.html#GstAudioBaseSrc">GstAudioBaseSrc</a>
+                                 +----GstAudioBaseSrc
                                        +----GstJackAudioSrc
 </pre>
 </div>
@@ -72,7 +72,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp14932784"></a><h3>Element Information</h3>
+<a name="idp11547568"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -95,7 +95,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp7660400"></a><h3>Element Pads</h3>
+<a name="idp6028736"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-jpegdec.html b/docs/plugins/html/gst-plugins-good-plugins-jpegdec.html
index eec11c3..fb2906c 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-jpegdec.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-jpegdec.html
@@ -51,7 +51,7 @@
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
          +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
                +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
-                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-GstVideoDecoder.html#GstVideoDecoder">GstVideoDecoder</a>
+                     +----GstVideoDecoder
                            +----GstJpegDec
 </pre>
 </div>
@@ -67,7 +67,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp11913216"></a><h3>Element Information</h3>
+<a name="idp13020896"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -90,7 +90,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp5547968"></a><h3>Element Pads</h3>
+<a name="idp10621456"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-jpegenc.html b/docs/plugins/html/gst-plugins-good-plugins-jpegenc.html
index b5f8725..ebb5633 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-jpegenc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-jpegenc.html
@@ -55,7 +55,7 @@
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
          +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
                +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
-                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-GstVideoEncoder.html#GstVideoEncoder">GstVideoEncoder</a>
+                     +----GstVideoEncoder
                            +----GstJpegEnc
 </pre>
 </div>
@@ -83,7 +83,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp5863408"></a><h3>Element Information</h3>
+<a name="idp13585120"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -106,7 +106,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp13358688"></a><h3>Element Pads</h3>
+<a name="idp7128304"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-level.html b/docs/plugins/html/gst-plugins-good-plugins-level.html
index 6f106dd..32284ff 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-level.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-level.html
@@ -127,7 +127,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp10054000"></a><h3>Example application</h3>
+<a name="idp14067184"></a><h3>Example application</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -401,7 +401,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp12188624"></a><h3>Element Information</h3>
+<a name="idp15231584"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -424,7 +424,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp15134432"></a><h3>Element Pads</h3>
+<a name="idp10897040"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-matroskademux.html b/docs/plugins/html/gst-plugins-good-plugins-matroskademux.html
index 622555b..feca2a9 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-matroskademux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-matroskademux.html
@@ -68,7 +68,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp12150016"></a><h3>Example launch line</h3>
+<a name="idp7858688"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -86,7 +86,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp10071664"></a><h3>Element Information</h3>
+<a name="idp11469104"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -109,7 +109,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp15544336"></a><h3>Element Pads</h3>
+<a name="idp13845984"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-matroskamux.html b/docs/plugins/html/gst-plugins-good-plugins-matroskamux.html
index 4fd442b..bbf1630 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-matroskamux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-matroskamux.html
@@ -61,7 +61,7 @@
 <a name="gst-plugins-good-plugins-matroskamux.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
 <p>
 GstMatroskaMux implements
- <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagSetter.html">GstTagSetter</a> and  <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTocSetter.html#GstTocSetter">GstTocSetter</a>.</p>
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagSetter.html">GstTagSetter</a> and  GstTocSetter.</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-good-plugins-matroskamux.properties"></a><h2>Properties</h2>
@@ -80,7 +80,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp14139872"></a><h3>Example launch line</h3>
+<a name="idp15352928"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -109,7 +109,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp7143184"></a><h3>Element Information</h3>
+<a name="idp13528912"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -132,7 +132,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp14871456"></a><h3>Element Pads</h3>
+<a name="idp15038080"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-mj2mux.html b/docs/plugins/html/gst-plugins-good-plugins-mj2mux.html
index dfba81c..887b726 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-mj2mux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-mj2mux.html
@@ -93,7 +93,7 @@
 ISO 14496-12 (except for some media specific parts).
 In turn, the latter ISO Base Media format was further specialized as a
 Motion JPEG-2000 file format in ISO 15444-3 (mj2mux)
-and in various 3GPP(2) specs (gppmux).
+and in various 3GPP(2) specs (3gppmux).
 The fragmented file features defined (only) in ISO Base Media are used by
 ISMV files making up (a.o.) Smooth Streaming (ismlmux).
 </p>
@@ -133,7 +133,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp14947264"></a><h3>Example pipelines</h3>
+<a name="idp16379776"></a><h3>Example pipelines</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -156,7 +156,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp14950608"></a><h3>Element Information</h3>
+<a name="idp16383120"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -179,7 +179,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp13684256"></a><h3>Element Pads</h3>
+<a name="idp13655488"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-monoscope.html b/docs/plugins/html/gst-plugins-good-plugins-monoscope.html
index b5785e7..86de295 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-monoscope.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-monoscope.html
@@ -49,7 +49,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp15098752"></a><h3>Example launch line</h3>
+<a name="idp14634032"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -67,7 +67,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp10557040"></a><h3>Element Information</h3>
+<a name="idp13144176"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -90,7 +90,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp14622192"></a><h3>Element Pads</h3>
+<a name="idp16556256"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-mp4mux.html b/docs/plugins/html/gst-plugins-good-plugins-mp4mux.html
index 8028e8f..e95506f 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-mp4mux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-mp4mux.html
@@ -93,7 +93,7 @@
 ISO 14496-12 (except for some media specific parts).
 In turn, the latter ISO Base Media format was further specialized as a
 Motion JPEG-2000 file format in ISO 15444-3 (mj2mux)
-and in various 3GPP(2) specs (gppmux).
+and in various 3GPP(2) specs (3gppmux).
 The fragmented file features defined (only) in ISO Base Media are used by
 ISMV files making up (a.o.) Smooth Streaming (ismlmux).
 </p>
@@ -133,7 +133,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp13718864"></a><h3>Example pipelines</h3>
+<a name="idp11215424"></a><h3>Example pipelines</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -156,7 +156,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp16971472"></a><h3>Element Information</h3>
+<a name="idp16346192"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -179,7 +179,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp14772880"></a><h3>Element Pads</h3>
+<a name="idp14421760"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-mpegaudioparse.html b/docs/plugins/html/gst-plugins-good-plugins-mpegaudioparse.html
index cae13ae..539e439 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-mpegaudioparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-mpegaudioparse.html
@@ -61,7 +61,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp15916176"></a><h3>Example launch line</h3>
+<a name="idp10058000"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -79,7 +79,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp12368368"></a><h3>Element Information</h3>
+<a name="idp10365648"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -102,7 +102,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp5454560"></a><h3>Element Pads</h3>
+<a name="idp12821264"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-mulawdec.html b/docs/plugins/html/gst-plugins-good-plugins-mulawdec.html
index 72fbb45..1f996aa 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-mulawdec.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-mulawdec.html
@@ -60,7 +60,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp7932992"></a><h3>Element Information</h3>
+<a name="idp6390896"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -83,7 +83,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp13612640"></a><h3>Element Pads</h3>
+<a name="idp6743376"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-mulawenc.html b/docs/plugins/html/gst-plugins-good-plugins-mulawenc.html
index 68a6c6f..7127610 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-mulawenc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-mulawenc.html
@@ -49,7 +49,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp15582992"></a><h3>Element Information</h3>
+<a name="idp12671616"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -72,7 +72,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp15600032"></a><h3>Element Pads</h3>
+<a name="idp11638912"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-multifilesink.html b/docs/plugins/html/gst-plugins-good-plugins-multifilesink.html
index 665a1b5..d69d325 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-multifilesink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-multifilesink.html
@@ -132,7 +132,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp11279248"></a><h3>Example launch line</h3>
+<a name="idp16984192"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -155,7 +155,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp12899488"></a><h3>Element Information</h3>
+<a name="idp15017088"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -178,7 +178,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp13672064"></a><h3>Element Pads</h3>
+<a name="idp8195056"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-multifilesrc.html b/docs/plugins/html/gst-plugins-good-plugins-multifilesrc.html
index 2ae5603..84e2d77 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-multifilesrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-multifilesrc.html
@@ -81,7 +81,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp13648928"></a><h3>Example launch line</h3>
+<a name="idp16445136"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -104,7 +104,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp14462128"></a><h3>Element Information</h3>
+<a name="idp6057696"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -127,7 +127,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp13053824"></a><h3>Element Pads</h3>
+<a name="idp15996928"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-multipartdemux.html b/docs/plugins/html/gst-plugins-good-plugins-multipartdemux.html
index 29cf6ef..a83c2a9 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-multipartdemux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-multipartdemux.html
@@ -83,7 +83,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp13627088"></a><h3>Sample pipelines</h3>
+<a name="idp14969952"></a><h3>Sample pipelines</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -102,7 +102,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp15846352"></a><h3>Element Information</h3>
+<a name="idp7024064"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -125,7 +125,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp12900448"></a><h3>Element Pads</h3>
+<a name="idp16683584"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-multipartmux.html b/docs/plugins/html/gst-plugins-good-plugins-multipartmux.html
index d1339e4..50b4679 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-multipartmux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-multipartmux.html
@@ -70,7 +70,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp7198176"></a><h3>Sample pipelines</h3>
+<a name="idp15901952"></a><h3>Sample pipelines</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -89,7 +89,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp12671808"></a><h3>Element Information</h3>
+<a name="idp3128720"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -112,7 +112,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp14974560"></a><h3>Element Pads</h3>
+<a name="idp14213872"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-multiudpsink.html b/docs/plugins/html/gst-plugins-good-plugins-multiudpsink.html
index 554c94c..200c310 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-multiudpsink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-multiudpsink.html
@@ -100,7 +100,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp13416368"></a><h3>Element Information</h3>
+<a name="idp15182992"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -123,7 +123,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp14614272"></a><h3>Element Pads</h3>
+<a name="idp14663680"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-optv.html b/docs/plugins/html/gst-plugins-good-plugins-optv.html
index f87bdc9..c7ebc25 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-optv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-optv.html
@@ -74,7 +74,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp15603072"></a><h3>Example launch line</h3>
+<a name="idp9675584"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -92,7 +92,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp11528464"></a><h3>Element Information</h3>
+<a name="idp13501936"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -115,7 +115,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp15019408"></a><h3>Element Pads</h3>
+<a name="idp7227808"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-oss4sink.html b/docs/plugins/html/gst-plugins-good-plugins-oss4sink.html
index 139ad25..40ce727 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-oss4sink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-oss4sink.html
@@ -54,7 +54,7 @@
          +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
                +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
                      +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html">GstBaseSink</a>
-                           +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSink">GstAudioBaseSink</a>
+                           +----GstAudioBaseSink
                                  +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiosink.html#GstAudioSink">GstAudioSink</a>
                                        +----GstOss4Sink
 </pre>
@@ -79,7 +79,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp16061408"></a><h3>Element Information</h3>
+<a name="idp14166736"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -102,7 +102,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp13535600"></a><h3>Element Pads</h3>
+<a name="idp13591312"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-oss4src.html b/docs/plugins/html/gst-plugins-good-plugins-oss4src.html
index b38cdfe..10b5c7e 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-oss4src.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-oss4src.html
@@ -55,7 +55,7 @@
                +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
                      +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSrc.html">GstBaseSrc</a>
                            +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstPushSrc.html">GstPushSrc</a>
-                                 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiobasesrc.html#GstAudioBaseSrc">GstAudioBaseSrc</a>
+                                 +----GstAudioBaseSrc
                                        +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiosrc.html#GstAudioSrc">GstAudioSrc</a>
                                              +----GstOss4Source
 </pre>
@@ -78,7 +78,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp13893984"></a><h3>Element Information</h3>
+<a name="idp16960352"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -101,7 +101,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp13665600"></a><h3>Element Pads</h3>
+<a name="idp15252448"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-osssink.html b/docs/plugins/html/gst-plugins-good-plugins-osssink.html
index 3348d2f..687df59 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-osssink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-osssink.html
@@ -52,7 +52,7 @@
          +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
                +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
                      +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html">GstBaseSink</a>
-                           +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSink">GstAudioBaseSink</a>
+                           +----GstAudioBaseSink
                                  +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiosink.html#GstAudioSink">GstAudioSink</a>
                                        +----GstOssSink
 </pre>
@@ -68,7 +68,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp17396592"></a><h3>Element Information</h3>
+<a name="idp13042544"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -91,7 +91,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp12343984"></a><h3>Element Pads</h3>
+<a name="idp15048208"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-osssrc.html b/docs/plugins/html/gst-plugins-good-plugins-osssrc.html
index 5aaf721..a823ca7 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-osssrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-osssrc.html
@@ -55,7 +55,7 @@
                +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
                      +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSrc.html">GstBaseSrc</a>
                            +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstPushSrc.html">GstPushSrc</a>
-                                 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiobasesrc.html#GstAudioBaseSrc">GstAudioBaseSrc</a>
+                                 +----GstAudioBaseSrc
                                        +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiosrc.html#GstAudioSrc">GstAudioSrc</a>
                                              +----GstOssSrc
 </pre>
@@ -78,7 +78,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp14875536"></a><h3>Element Information</h3>
+<a name="idp14918800"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -101,7 +101,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp12837568"></a><h3>Element Pads</h3>
+<a name="idp16633296"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-osxaudiosink.html b/docs/plugins/html/gst-plugins-good-plugins-osxaudiosink.html
index 02a4f51..d9990d4 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-osxaudiosink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-osxaudiosink.html
@@ -53,7 +53,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp15465232"></a><h3>Element Information</h3>
+<a name="idp14466992"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -76,7 +76,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp11952400"></a><h3>Element Pads</h3>
+<a name="idp14449936"></a><h3>Element Pads</h3>
 </div>
 </div>
 <p>
@@ -90,8 +90,10 @@
   GstBaseAudioSink sink;
 
   AudioDeviceID device_id;
+
   AudioUnit audiounit;
   double volume;
+  GstCaps *cached_caps;
 };
 </pre>
 <p>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-osxaudiosrc.html b/docs/plugins/html/gst-plugins-good-plugins-osxaudiosrc.html
index f7e300a..a88cee6 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-osxaudiosrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-osxaudiosrc.html
@@ -53,7 +53,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp14176992"></a><h3>Element Information</h3>
+<a name="idp13749760"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -76,7 +76,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp13268544"></a><h3>Element Pads</h3>
+<a name="idp12698672"></a><h3>Element Pads</h3>
 </div>
 </div>
 <p>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-osxvideosink.html b/docs/plugins/html/gst-plugins-good-plugins-osxvideosink.html
index 24c9bd9..8fd6f71 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-osxvideosink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-osxvideosink.html
@@ -54,7 +54,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp16997200"></a><h3>Element Information</h3>
+<a name="idp14476656"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -77,7 +77,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp14990512"></a><h3>Element Pads</h3>
+<a name="idp11391024"></a><h3>Element Pads</h3>
 </div>
 </div>
 <p>
@@ -100,6 +100,10 @@
 #else
   guint cocoa_timeout;
 #endif
+  GMutex *mrl_check_lock;
+  GCond *mrl_check_cond;
+  gboolean mrl_check_done;
+  gboolean main_run_loop_running;
   gboolean app_started;
   gboolean keep_par;
   gboolean embed;
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-1394.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-1394.html
index a938dca..d3973ec 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-1394.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-1394.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp22781584"></a><h2>Plugin Information</h2>
+<a name="idp24582576"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp20322912"></a><h2>Elements</h2>
+<a name="idp23109216"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-aasink.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-aasink.html
index 9d6ce8c..bbccf6e 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-aasink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-aasink.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp24986464"></a><h2>Plugin Information</h2>
+<a name="idp24753904"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp21925168"></a><h2>Elements</h2>
+<a name="idp23558624"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-alaw.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-alaw.html
index 8be4730..9d572ce 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-alaw.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-alaw.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp17811504"></a><h2>Plugin Information</h2>
+<a name="idp24871056"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp24819504"></a><h2>Elements</h2>
+<a name="idp23217984"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-alpha.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-alpha.html
index 99894eb..f5a085e 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-alpha.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-alpha.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp14805360"></a><h2>Plugin Information</h2>
+<a name="idp24081152"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp13735680"></a><h2>Elements</h2>
+<a name="idp21948656"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-alphacolor.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-alphacolor.html
index df5eedd..0ea01f1 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-alphacolor.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-alphacolor.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp23892144"></a><h2>Plugin Information</h2>
+<a name="idp20194608"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp21454288"></a><h2>Elements</h2>
+<a name="idp24939344"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-apetag.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-apetag.html
index 49d4c4a..e4669d9 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-apetag.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-apetag.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp25063344"></a><h2>Plugin Information</h2>
+<a name="idp23271728"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp21453504"></a><h2>Elements</h2>
+<a name="idp24795392"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-audiofx.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-audiofx.html
index c2fadf4..d2eadd2 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-audiofx.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-audiofx.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp22788656"></a><h2>Plugin Information</h2>
+<a name="idp23056256"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp22740064"></a><h2>Elements</h2>
+<a name="idp20230160"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-auparse.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-auparse.html
index 655492c..20f5cca 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-auparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-auparse.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp16218880"></a><h2>Plugin Information</h2>
+<a name="idp19823648"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp22094448"></a><h2>Elements</h2>
+<a name="idp24833632"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-autodetect.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-autodetect.html
index 8ec29d2..3441914 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-autodetect.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-autodetect.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp23780592"></a><h2>Plugin Information</h2>
+<a name="idp22728128"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp24000144"></a><h2>Elements</h2>
+<a name="idp24636288"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-avi.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-avi.html
index f503123..c795ac1 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-avi.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-avi.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp21423312"></a><h2>Plugin Information</h2>
+<a name="idp23129088"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp23572032"></a><h2>Elements</h2>
+<a name="idp25835568"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-cacasink.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-cacasink.html
index 54f3dc2..0a29b11 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-cacasink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-cacasink.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp25238256"></a><h2>Plugin Information</h2>
+<a name="idp24489488"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp23849024"></a><h2>Elements</h2>
+<a name="idp24156704"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-cairo.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-cairo.html
index 0214029..8d3b2a0 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-cairo.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-cairo.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp21926816"></a><h2>Plugin Information</h2>
+<a name="idp24676880"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp25247312"></a><h2>Elements</h2>
+<a name="idp22516016"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-cutter.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-cutter.html
index f157d71..dc80f07 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-cutter.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-cutter.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp24721696"></a><h2>Plugin Information</h2>
+<a name="idp25852224"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp24658896"></a><h2>Elements</h2>
+<a name="idp24545392"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-debug.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-debug.html
index 83dcbb1..cbb6967 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-debug.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-debug.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp21543296"></a><h2>Plugin Information</h2>
+<a name="idp24944432"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp23194208"></a><h2>Elements</h2>
+<a name="idp17188624"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-deinterlace.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-deinterlace.html
index 374026c..638f7bf 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-deinterlace.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-deinterlace.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp12233792"></a><h2>Plugin Information</h2>
+<a name="idp19826752"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp20855856"></a><h2>Elements</h2>
+<a name="idp9993856"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-directsound.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-directsound.html
index a333062..0f62fd1 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-directsound.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-directsound.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp24875616"></a><h2>Plugin Information</h2>
+<a name="idp25053552"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp19639328"></a><h2>Elements</h2>
+<a name="idp23678864"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-dv.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-dv.html
index 59b5dd6..231d673 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-dv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-dv.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp20431056"></a><h2>Plugin Information</h2>
+<a name="idp21749552"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp22006400"></a><h2>Elements</h2>
+<a name="idp22737504"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-effectv.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-effectv.html
index 678b583..ed5954b 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-effectv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-effectv.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp25029616"></a><h2>Plugin Information</h2>
+<a name="idp23057184"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp22703360"></a><h2>Elements</h2>
+<a name="idp24027776"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-equalizer.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-equalizer.html
index 89f1661..db3af5e 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-equalizer.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-equalizer.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp24669920"></a><h2>Plugin Information</h2>
+<a name="idp20258560"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp22018208"></a><h2>Elements</h2>
+<a name="idp22354128"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-flac.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-flac.html
index a8010ef..3bd751e 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-flac.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-flac.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp20426768"></a><h2>Plugin Information</h2>
+<a name="idp23222224"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp24582224"></a><h2>Elements</h2>
+<a name="idp24937120"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-flv.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-flv.html
index aa7650b..c5f42d9 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-flv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-flv.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp24922080"></a><h2>Plugin Information</h2>
+<a name="idp23492560"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp22424640"></a><h2>Elements</h2>
+<a name="idp24192112"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-flxdec.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-flxdec.html
index 208fa1c..a055bb1 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-flxdec.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-flxdec.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp25306016"></a><h2>Plugin Information</h2>
+<a name="idp25789920"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp24566240"></a><h2>Elements</h2>
+<a name="idp25507488"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-gdkpixbuf.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-gdkpixbuf.html
index d668273..4518712 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-gdkpixbuf.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-gdkpixbuf.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp22618848"></a><h2>Plugin Information</h2>
+<a name="idp24688256"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp25040768"></a><h2>Elements</h2>
+<a name="idp20247616"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-goom.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-goom.html
index ef9bf13..663fbd2 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-goom.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-goom.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp22609920"></a><h2>Plugin Information</h2>
+<a name="idp19545920"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp11144400"></a><h2>Elements</h2>
+<a name="idp18907360"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-goom2k1.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-goom2k1.html
index 6045c50..452cb1b 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-goom2k1.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-goom2k1.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp25302064"></a><h2>Plugin Information</h2>
+<a name="idp24238576"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp24659600"></a><h2>Elements</h2>
+<a name="idp20017296"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-halelements.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-halelements.html
index 395e408..a7cf253 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-halelements.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-halelements.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp25361824"></a><h2>Plugin Information</h2>
+<a name="idp23718832"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp24316272"></a><h2>Elements</h2>
+<a name="idp23165600"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-icydemux.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-icydemux.html
index f7e21ca..5de79f1 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-icydemux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-icydemux.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp8043056"></a><h2>Plugin Information</h2>
+<a name="idp25075600"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp5675520"></a><h2>Elements</h2>
+<a name="idp24404432"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-id3demux.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-id3demux.html
index 3e16557..07138fa 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-id3demux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-id3demux.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp3606736"></a><h2>Plugin Information</h2>
+<a name="idp18107424"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp19925808"></a><h2>Elements</h2>
+<a name="idp20238928"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-imagefreeze.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-imagefreeze.html
index c9860ca..486f6a5 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-imagefreeze.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-imagefreeze.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp24775136"></a><h2>Plugin Information</h2>
+<a name="idp21831072"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp24032640"></a><h2>Elements</h2>
+<a name="idp23282480"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-interleave.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-interleave.html
index fbfd053..296eb9d 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-interleave.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-interleave.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp25453072"></a><h2>Plugin Information</h2>
+<a name="idp13857072"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp22660608"></a><h2>Elements</h2>
+<a name="idp6976720"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-isomp4.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-isomp4.html
index 7e40a9e..a5f55da 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-isomp4.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-isomp4.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp20474992"></a><h2>Plugin Information</h2>
+<a name="idp25796832"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp25481232"></a><h2>Elements</h2>
+<a name="idp22219088"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-jack.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-jack.html
index e1601a8..d9abf24 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-jack.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-jack.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp24886016"></a><h2>Plugin Information</h2>
+<a name="idp24477872"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp24537232"></a><h2>Elements</h2>
+<a name="idp20368400"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-jpeg.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-jpeg.html
index 4a5d85d..dba012f 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-jpeg.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-jpeg.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp23833504"></a><h2>Plugin Information</h2>
+<a name="idp25960864"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp25594608"></a><h2>Elements</h2>
+<a name="idp23475456"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-level.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-level.html
index 62dfa3c..f91f670 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-level.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-level.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp24051248"></a><h2>Plugin Information</h2>
+<a name="idp24720768"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp25245536"></a><h2>Elements</h2>
+<a name="idp19589456"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-matroska.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-matroska.html
index 6dab448..d662233 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-matroska.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-matroska.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp25225968"></a><h2>Plugin Information</h2>
+<a name="idp24018000"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp23829280"></a><h2>Elements</h2>
+<a name="idp20323760"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-monoscope.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-monoscope.html
index 387ddba..0e902be 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-monoscope.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-monoscope.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp24069584"></a><h2>Plugin Information</h2>
+<a name="idp24875024"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp24600528"></a><h2>Elements</h2>
+<a name="idp24383264"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-mulaw.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-mulaw.html
index 83470bc..eb6600d 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-mulaw.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-mulaw.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp24551376"></a><h2>Plugin Information</h2>
+<a name="idp23148640"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp25979856"></a><h2>Elements</h2>
+<a name="idp22738896"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-multifile.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-multifile.html
index c9c568e..9514894 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-multifile.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-multifile.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp22067616"></a><h2>Plugin Information</h2>
+<a name="idp26044176"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp24966240"></a><h2>Elements</h2>
+<a name="idp24833760"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-multipart.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-multipart.html
index 1f458e4..5f03771 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-multipart.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-multipart.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp25485184"></a><h2>Plugin Information</h2>
+<a name="idp24250224"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp23208016"></a><h2>Elements</h2>
+<a name="idp22157808"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-navigationtest.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-navigationtest.html
index 61a1c86..e330774 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-navigationtest.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-navigationtest.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp25243376"></a><h2>Plugin Information</h2>
+<a name="idp26135728"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp25561648"></a><h2>Elements</h2>
+<a name="idp23687200"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-oss4.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-oss4.html
index 53da264..a958542 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-oss4.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-oss4.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp25292144"></a><h2>Plugin Information</h2>
+<a name="idp26232048"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp25457904"></a><h2>Elements</h2>
+<a name="idp24425328"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-ossaudio.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-ossaudio.html
index bc96510..5b9d599 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-ossaudio.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-ossaudio.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp24255776"></a><h2>Plugin Information</h2>
+<a name="idp24994128"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp24308256"></a><h2>Elements</h2>
+<a name="idp24834448"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-osxaudio.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-osxaudio.html
index a9416f9..609ab74 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-osxaudio.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-osxaudio.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp24041120"></a><h2>Plugin Information</h2>
+<a name="idp26153264"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp24336544"></a><h2>Elements</h2>
+<a name="idp23751648"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-osxvideo.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-osxvideo.html
index bcabc1a..3ac44ad 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-osxvideo.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-osxvideo.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp24241888"></a><h2>Plugin Information</h2>
+<a name="idp25132816"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp25384000"></a><h2>Elements</h2>
+<a name="idp24858496"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-png.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-png.html
index 5442fd4..801f472 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-png.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-png.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp24267792"></a><h2>Plugin Information</h2>
+<a name="idp25755072"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp19747168"></a><h2>Elements</h2>
+<a name="idp24024624"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-pulseaudio.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-pulseaudio.html
index 8d32f63..7bb7872 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-pulseaudio.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-pulseaudio.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp25585120"></a><h2>Plugin Information</h2>
+<a name="idp25065872"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp22058112"></a><h2>Elements</h2>
+<a name="idp23574400"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-replaygain.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-replaygain.html
index 528cff9..39cbe8b 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-replaygain.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-replaygain.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp25171600"></a><h2>Plugin Information</h2>
+<a name="idp8479904"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp23837600"></a><h2>Elements</h2>
+<a name="idp24446656"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-rtp.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtp.html
index b0d5577..b9dcd39 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-rtp.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtp.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp24338912"></a><h2>Plugin Information</h2>
+<a name="idp26092768"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp25162896"></a><h2>Elements</h2>
+<a name="idp22789504"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-rtpmanager.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtpmanager.html
index 662b5f1..d3566db 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-rtpmanager.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtpmanager.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp25617888"></a><h2>Plugin Information</h2>
+<a name="idp25528912"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp25413856"></a><h2>Elements</h2>
+<a name="idp23222880"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-rtsp.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtsp.html
index 5cd62c9..5c2f81a 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-rtsp.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtsp.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp24608160"></a><h2>Plugin Information</h2>
+<a name="idp25480896"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp23625248"></a><h2>Elements</h2>
+<a name="idp24821152"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-shapewipe.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-shapewipe.html
index 3ff9d4d..668ce0b 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-shapewipe.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-shapewipe.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp25996640"></a><h2>Plugin Information</h2>
+<a name="idp18746224"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp24972048"></a><h2>Elements</h2>
+<a name="idp26267552"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-shout2send.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-shout2send.html
index b27334b..ed22b42 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-shout2send.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-shout2send.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp24125632"></a><h2>Plugin Information</h2>
+<a name="idp22476176"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp22082912"></a><h2>Elements</h2>
+<a name="idp22668288"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-smpte.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-smpte.html
index a5e2047..64c9c3a 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-smpte.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-smpte.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp16493008"></a><h2>Plugin Information</h2>
+<a name="idp24616480"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp25036272"></a><h2>Elements</h2>
+<a name="idp26285616"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-soup.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-soup.html
index 14d8fb6..37a6956 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-soup.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-soup.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp24671136"></a><h2>Plugin Information</h2>
+<a name="idp23339984"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp24309696"></a><h2>Elements</h2>
+<a name="idp22813664"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-spectrum.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-spectrum.html
index ad5d741..075ee0b 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-spectrum.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-spectrum.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp25131056"></a><h2>Plugin Information</h2>
+<a name="idp24474016"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp24898128"></a><h2>Elements</h2>
+<a name="idp24481296"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-speex.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-speex.html
index 2bd5263..b77bd08 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-speex.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-speex.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp24341712"></a><h2>Plugin Information</h2>
+<a name="idp25056064"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp23098432"></a><h2>Elements</h2>
+<a name="idp24620384"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-taglib.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-taglib.html
index 9130e32..390320b 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-taglib.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-taglib.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp23613664"></a><h2>Plugin Information</h2>
+<a name="idp22092832"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp24065536"></a><h2>Elements</h2>
+<a name="idp24941456"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-udp.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-udp.html
index 9c75722..83f24a4 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-udp.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-udp.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp25965760"></a><h2>Plugin Information</h2>
+<a name="idp25938960"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp25343008"></a><h2>Elements</h2>
+<a name="idp24773232"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-video4linux2.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-video4linux2.html
index 90f85ba..596fa20 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-video4linux2.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-video4linux2.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp24529152"></a><h2>Plugin Information</h2>
+<a name="idp25954832"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp25577952"></a><h2>Elements</h2>
+<a name="idp24020048"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-videobox.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-videobox.html
index c04124e..c769d9a 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-videobox.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-videobox.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp26006752"></a><h2>Plugin Information</h2>
+<a name="idp25725024"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp23207488"></a><h2>Elements</h2>
+<a name="idp21649328"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-videocrop.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-videocrop.html
index 18d01a0..d235073 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-videocrop.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-videocrop.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp23207616"></a><h2>Plugin Information</h2>
+<a name="idp24408480"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp24495712"></a><h2>Elements</h2>
+<a name="idp26248784"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-videofilter.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-videofilter.html
index f2fa1d2..e24f774 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-videofilter.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-videofilter.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp24878176"></a><h2>Plugin Information</h2>
+<a name="idp25505632"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp26380544"></a><h2>Elements</h2>
+<a name="idp24178112"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-videomixer.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-videomixer.html
index a4c5a77..e5c1f74 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-videomixer.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-videomixer.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp19015376"></a><h2>Plugin Information</h2>
+<a name="idp25549360"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp24088336"></a><h2>Elements</h2>
+<a name="idp25473808"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-waveform.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-waveform.html
index 68b98f4..9db09d1 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-waveform.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-waveform.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp25201280"></a><h2>Plugin Information</h2>
+<a name="idp26101440"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp24790320"></a><h2>Elements</h2>
+<a name="idp26253760"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-wavenc.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-wavenc.html
index e0c933d..1638923 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-wavenc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-wavenc.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp25256224"></a><h2>Plugin Information</h2>
+<a name="idp20971056"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp22658224"></a><h2>Elements</h2>
+<a name="idp24759920"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-wavpack.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-wavpack.html
index f7f1bdb..ca3af2c 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-wavpack.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-wavpack.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp24577856"></a><h2>Plugin Information</h2>
+<a name="idp26757552"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp25990224"></a><h2>Elements</h2>
+<a name="idp17943568"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-wavparse.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-wavparse.html
index 74ca12d..ac2517a 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-wavparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-wavparse.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp25155728"></a><h2>Plugin Information</h2>
+<a name="idp22552592"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp25534896"></a><h2>Elements</h2>
+<a name="idp22763968"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-ximagesrc.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-ximagesrc.html
index f630714..c5cee45 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-ximagesrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-ximagesrc.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp24077392"></a><h2>Plugin Information</h2>
+<a name="idp25720384"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp24753360"></a><h2>Elements</h2>
+<a name="idp10229296"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-y4menc.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-y4menc.html
index 1a04d50..d779715 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-y4menc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-y4menc.html
@@ -29,7 +29,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp26435280"></a><h2>Plugin Information</h2>
+<a name="idp26690160"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -57,7 +57,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp25437584"></a><h2>Elements</h2>
+<a name="idp26737904"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-pngdec.html b/docs/plugins/html/gst-plugins-good-plugins-pngdec.html
index 51d8853..9ec9c96 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-pngdec.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-pngdec.html
@@ -49,7 +49,7 @@
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
          +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
                +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
-                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-GstVideoDecoder.html#GstVideoDecoder">GstVideoDecoder</a>
+                     +----GstVideoDecoder
                            +----GstPngDec
 </pre>
 </div>
@@ -58,7 +58,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp17045680"></a><h3>Element Information</h3>
+<a name="idp13348768"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -81,7 +81,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp12461632"></a><h3>Element Pads</h3>
+<a name="idp17448528"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-pngenc.html b/docs/plugins/html/gst-plugins-good-plugins-pngenc.html
index 4535725..ec1cd69 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-pngenc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-pngenc.html
@@ -53,7 +53,7 @@
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
          +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
                +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
-                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-GstVideoEncoder.html#GstVideoEncoder">GstVideoEncoder</a>
+                     +----GstVideoEncoder
                            +----GstPngEnc
 </pre>
 </div>
@@ -75,7 +75,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp8801328"></a><h3>Element Information</h3>
+<a name="idp16802192"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -98,7 +98,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp17387600"></a><h3>Element Pads</h3>
+<a name="idp17219808"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-progressreport.html b/docs/plugins/html/gst-plugins-good-plugins-progressreport.html
index 2144ac4..ce530c9 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-progressreport.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-progressreport.html
@@ -104,7 +104,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp16573728"></a><h3>Example launch line</h3>
+<a name="idp16876784"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -133,7 +133,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp14888352"></a><h3>Element Information</h3>
+<a name="idp17475792"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -156,7 +156,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp17620800"></a><h3>Element Pads</h3>
+<a name="idp18411504"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-pulsesink.html b/docs/plugins/html/gst-plugins-good-plugins-pulsesink.html
index 88cc29d..dc27335 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-pulsesink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-pulsesink.html
@@ -54,7 +54,7 @@
          +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
                +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
                      +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html">GstBaseSink</a>
-                           +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSink">GstAudioBaseSink</a>
+                           +----GstAudioBaseSink
                                  +----GstPulseSink
 </pre>
 </div>
@@ -82,7 +82,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp14226496"></a><h3>Element Information</h3>
+<a name="idp18505952"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -105,7 +105,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp18533488"></a><h3>Element Pads</h3>
+<a name="idp18169792"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-pulsesrc.html b/docs/plugins/html/gst-plugins-good-plugins-pulsesrc.html
index 14a4066..cddfd33 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-pulsesrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-pulsesrc.html
@@ -55,7 +55,7 @@
                +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
                      +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSrc.html">GstBaseSrc</a>
                            +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstPushSrc.html">GstPushSrc</a>
-                                 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiobasesrc.html#GstAudioBaseSrc">GstAudioBaseSrc</a>
+                                 +----GstAudioBaseSrc
                                        +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiosrc.html#GstAudioSrc">GstAudioSrc</a>
                                              +----GstPulseSrc
 </pre>
@@ -85,7 +85,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp15830176"></a><h3>Element Information</h3>
+<a name="idp18467712"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -108,7 +108,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp16137760"></a><h3>Element Pads</h3>
+<a name="idp16571856"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-qtdemux.html b/docs/plugins/html/gst-plugins-good-plugins-qtdemux.html
index e077485..a839aec 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-qtdemux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-qtdemux.html
@@ -72,7 +72,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp18579184"></a><h3>Example launch line</h3>
+<a name="idp16508992"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -96,7 +96,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp18396848"></a><h3>Element Information</h3>
+<a name="idp11555520"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -119,7 +119,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp14995312"></a><h3>Element Pads</h3>
+<a name="idp18441568"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-qtmoovrecover.html b/docs/plugins/html/gst-plugins-good-plugins-qtmoovrecover.html
index afe1b1d..8a4f92c 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-qtmoovrecover.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-qtmoovrecover.html
@@ -81,7 +81,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp16289536"></a><h3>Example pipelines</h3>
+<a name="idp19021920"></a><h3>Example pipelines</h3>
 <p>
 This element recovers quicktime files created with qtmux using the moov
 recovery feature.
@@ -102,7 +102,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp17935520"></a><h3>Element Information</h3>
+<a name="idp14994016"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -125,7 +125,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp13683776"></a><h3>Element Pads</h3>
+<a name="idp18410608"></a><h3>Element Pads</h3>
 </div>
 </div>
 <p>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-qtmux.html b/docs/plugins/html/gst-plugins-good-plugins-qtmux.html
index cf48bb4..cd7324a 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-qtmux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-qtmux.html
@@ -133,7 +133,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp14533840"></a><h3>Example pipelines</h3>
+<a name="idp15040608"></a><h3>Example pipelines</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -155,7 +155,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp18089440"></a><h3>Element Information</h3>
+<a name="idp17984064"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -178,7 +178,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp18220912"></a><h3>Element Pads</h3>
+<a name="idp16286576"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-quarktv.html b/docs/plugins/html/gst-plugins-good-plugins-quarktv.html
index 41ef034..dce1981 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-quarktv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-quarktv.html
@@ -65,32 +65,31 @@
 <div class="refsect1">
 <a name="gst-plugins-good-plugins-quarktv.description"></a><h2>Description</h2>
 <p>
-RevTV acts like a video waveform monitor for each line of video
-processed. This creates a pseudo 3D effect based on the brightness
-of the video along each line.
+QuarkTV disolves moving objects. It picks up pixels from
+the last frames randomly.
 </p>
 <p>
 </p>
 <div class="refsect2">
-<a name="idp16982704"></a><h3>Example launch line</h3>
+<a name="idp16931968"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> revtv <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> quarktv <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
       </tr>
     </tbody>
   </table>
 </div>
- This pipeline shows the effect of revtv on a test stream.
+ This pipeline shows the effect of quarktv on a test stream.
 </div>
 <p>
 </p>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp12094928"></a><h3>Element Information</h3>
+<a name="idp16592720"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -113,7 +112,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp7666208"></a><h3>Element Pads</h3>
+<a name="idp18151408"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-radioactv.html b/docs/plugins/html/gst-plugins-good-plugins-radioactv.html
index f6406ca..ee691f3 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-radioactv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-radioactv.html
@@ -83,7 +83,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp17938752"></a><h3>Example launch line</h3>
+<a name="idp15095104"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -101,7 +101,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp17974720"></a><h3>Element Information</h3>
+<a name="idp18423808"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -124,7 +124,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp18371584"></a><h3>Element Pads</h3>
+<a name="idp18965008"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-revtv.html b/docs/plugins/html/gst-plugins-good-plugins-revtv.html
index 06a01ab..77f9615 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-revtv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-revtv.html
@@ -69,7 +69,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp15114448"></a><h3>Element Information</h3>
+<a name="idp18985248"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -92,7 +92,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp18604560"></a><h3>Element Pads</h3>
+<a name="idp18508432"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rganalysis.html b/docs/plugins/html/gst-plugins-good-plugins-rganalysis.html
index 925288a..e3c227f 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rganalysis.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rganalysis.html
@@ -90,7 +90,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp18377488"></a><h3>Example launch lines</h3>
+<a name="idp17336704"></a><h3>Example launch lines</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -138,7 +138,7 @@
 </p>
 <hr>
 <div class="refsect2">
-<a name="idp16057808"></a><h3>Acknowledgements</h3>
+<a name="idp17701760"></a><h3>Acknowledgements</h3>
 <p>
 This element is based on code used in the <a class="ulink" href="http://sjeng.org/vorbisgain.html" target="_top">vorbisgain</a> program and many
 others.  The relevant parts are copyrighted by David Robinson, Glen Sawyer
@@ -150,7 +150,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp16076176"></a><h3>Element Information</h3>
+<a name="idp16660448"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -173,7 +173,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp16534736"></a><h3>Element Pads</h3>
+<a name="idp15233984"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rglimiter.html b/docs/plugins/html/gst-plugins-good-plugins-rglimiter.html
index 99dbbcf..42173b2 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rglimiter.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rglimiter.html
@@ -71,7 +71,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp17417984"></a><h3>Example launch line</h3>
+<a name="idp16576208"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -93,7 +93,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp16095728"></a><h3>Element Information</h3>
+<a name="idp13916960"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -116,7 +116,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp12715696"></a><h3>Element Pads</h3>
+<a name="idp18335424"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rgvolume.html b/docs/plugins/html/gst-plugins-good-plugins-rgvolume.html
index 139a0fe..c5eec8e 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rgvolume.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rgvolume.html
@@ -104,7 +104,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp11662896"></a><h3>Example launch line</h3>
+<a name="idp19014832"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -124,7 +124,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp15798384"></a><h3>Element Information</h3>
+<a name="idp18625824"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -147,7 +147,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp17320768"></a><h3>Element Pads</h3>
+<a name="idp19948352"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rippletv.html b/docs/plugins/html/gst-plugins-good-plugins-rippletv.html
index 8e48a1e..c759a7f 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rippletv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rippletv.html
@@ -72,7 +72,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp14494592"></a><h3>Example launch line</h3>
+<a name="idp18655552"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -90,7 +90,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp18386560"></a><h3>Element Information</h3>
+<a name="idp12788160"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -113,7 +113,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp12922656"></a><h3>Element Pads</h3>
+<a name="idp17201552"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpbin.html b/docs/plugins/html/gst-plugins-good-plugins-rtpbin.html
index e1cfb98..2642d15 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rtpbin.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rtpbin.html
@@ -105,7 +105,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp19963648"></a><h3>Element Information</h3>
+<a name="idp20413840"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -128,7 +128,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp19971104"></a><h3>Element Pads</h3>
+<a name="idp20707808"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpdec.html b/docs/plugins/html/gst-plugins-good-plugins-rtpdec.html
index 60ecfde..f8495de 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rtpdec.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rtpdec.html
@@ -87,7 +87,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp18422528"></a><h3>Element Information</h3>
+<a name="idp17158784"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -110,7 +110,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp15775200"></a><h3>Element Pads</h3>
+<a name="idp19145984"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpj2kpay.html b/docs/plugins/html/gst-plugins-good-plugins-rtpj2kpay.html
index 17c742f..fd39092 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rtpj2kpay.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rtpj2kpay.html
@@ -51,7 +51,7 @@
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
          +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
                +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
-                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstrtpbasepayload.html#GstRTPBasePayload">GstRTPBasePayload</a>
+                     +----GstRTPBasePayload
                            +----GstRtpJ2KPay
 </pre>
 </div>
@@ -75,7 +75,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp15023856"></a><h3>Element Information</h3>
+<a name="idp19010752"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -98,7 +98,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp15432080"></a><h3>Element Pads</h3>
+<a name="idp17027424"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpjitterbuffer.html b/docs/plugins/html/gst-plugins-good-plugins-rtpjitterbuffer.html
index d121db5..73a406f 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rtpjitterbuffer.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rtpjitterbuffer.html
@@ -82,7 +82,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp15909456"></a><h3>Element Information</h3>
+<a name="idp14811488"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -105,7 +105,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp17936192"></a><h3>Element Pads</h3>
+<a name="idp17208800"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpjpegpay.html b/docs/plugins/html/gst-plugins-good-plugins-rtpjpegpay.html
index 30b6340..a1bf28a 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rtpjpegpay.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rtpjpegpay.html
@@ -51,7 +51,7 @@
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
          +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
                +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
-                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstrtpbasepayload.html#GstRTPBasePayload">GstRTPBasePayload</a>
+                     +----GstRTPBasePayload
                            +----GstRtpJPEGPay
 </pre>
 </div>
@@ -80,7 +80,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp19262176"></a><h3>Element Information</h3>
+<a name="idp15939184"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -103,7 +103,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp16372944"></a><h3>Element Pads</h3>
+<a name="idp18477600"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpptdemux.html b/docs/plugins/html/gst-plugins-good-plugins-rtpptdemux.html
index 6ad4019..859afbd 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rtpptdemux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rtpptdemux.html
@@ -68,7 +68,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp18333344"></a><h3>Element Information</h3>
+<a name="idp17960880"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -91,7 +91,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp18026816"></a><h3>Element Pads</h3>
+<a name="idp19988096"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpsession.html b/docs/plugins/html/gst-plugins-good-plugins-rtpsession.html
index 6193057..b42a783 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rtpsession.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rtpsession.html
@@ -93,7 +93,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp20768944"></a><h3>Element Information</h3>
+<a name="idp18754992"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -116,7 +116,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp9068560"></a><h3>Element Pads</h3>
+<a name="idp15781728"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpssrcdemux.html b/docs/plugins/html/gst-plugins-good-plugins-rtpssrcdemux.html
index 3438f8a..dbf0070 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rtpssrcdemux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rtpssrcdemux.html
@@ -67,7 +67,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp18338576"></a><h3>Element Information</h3>
+<a name="idp16913344"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -90,7 +90,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp17846320"></a><h3>Element Pads</h3>
+<a name="idp9722384"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtspsrc.html b/docs/plugins/html/gst-plugins-good-plugins-rtspsrc.html
index 32fffd1..d24212d 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rtspsrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rtspsrc.html
@@ -120,7 +120,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp16812576"></a><h3>Example launch line</h3>
+<a name="idp19933040"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -142,7 +142,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp16968336"></a><h3>Element Information</h3>
+<a name="idp19780176"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -165,7 +165,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp14126928"></a><h3>Element Pads</h3>
+<a name="idp16008368"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-shagadelictv.html b/docs/plugins/html/gst-plugins-good-plugins-shagadelictv.html
index 3c55c32..63cb1e7 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-shagadelictv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-shagadelictv.html
@@ -62,7 +62,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp11613744"></a><h3>Example launch line</h3>
+<a name="idp19823328"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -80,7 +80,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp19951856"></a><h3>Element Information</h3>
+<a name="idp10051232"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -103,7 +103,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp19820576"></a><h3>Element Pads</h3>
+<a name="idp17856288"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-shapewipe.html b/docs/plugins/html/gst-plugins-good-plugins-shapewipe.html
index 6b8b6da..5e2628d 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-shapewipe.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-shapewipe.html
@@ -77,7 +77,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp19928560"></a><h3>Example launch line</h3>
+<a name="idp17990864"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -95,7 +95,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp13802976"></a><h3>Element Information</h3>
+<a name="idp19575648"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -118,7 +118,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp17159696"></a><h3>Element Pads</h3>
+<a name="idp18799072"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-smpte.html b/docs/plugins/html/gst-plugins-good-plugins-smpte.html
index 1b5e32f..1911238 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-smpte.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-smpte.html
@@ -80,7 +80,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp16930224"></a><h3>Sample pipelines</h3>
+<a name="idp10946432"></a><h3>Sample pipelines</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -101,7 +101,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp15005712"></a><h3>Element Information</h3>
+<a name="idp20619216"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -124,7 +124,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp15773936"></a><h3>Element Pads</h3>
+<a name="idp18176672"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-smptealpha.html b/docs/plugins/html/gst-plugins-good-plugins-smptealpha.html
index 429b473..957b690 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-smptealpha.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-smptealpha.html
@@ -87,7 +87,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp17815568"></a><h3>Sample pipelines</h3>
+<a name="idp17131920"></a><h3>Sample pipelines</h3>
 <p>
 Here is a pipeline to demonstrate the smpte transition :
 </p>
@@ -106,7 +106,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp17461872"></a><h3>Element Information</h3>
+<a name="idp16816768"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -129,7 +129,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp20163440"></a><h3>Element Pads</h3>
+<a name="idp20958128"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-souphttpsrc.html b/docs/plugins/html/gst-plugins-good-plugins-souphttpsrc.html
index 31220a7..1cc9c09 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-souphttpsrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-souphttpsrc.html
@@ -91,7 +91,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp18458304"></a><h3>Element Information</h3>
+<a name="idp19864112"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -114,7 +114,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp16526672"></a><h3>Element Pads</h3>
+<a name="idp15376432"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-spectrum.html b/docs/plugins/html/gst-plugins-good-plugins-spectrum.html
index 5f63d61..7ae5369 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-spectrum.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-spectrum.html
@@ -132,7 +132,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp18637312"></a><h3>Example application</h3>
+<a name="idp22892608"></a><h3>Example application</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -399,7 +399,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp21504352"></a><h3>Element Information</h3>
+<a name="idp19860928"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -422,7 +422,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp19198720"></a><h3>Element Pads</h3>
+<a name="idp22422640"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-speexdec.html b/docs/plugins/html/gst-plugins-good-plugins-speexdec.html
index 977741c..9dcddcc 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-speexdec.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-speexdec.html
@@ -66,7 +66,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp19233488"></a><h3>Element Information</h3>
+<a name="idp22237456"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -89,7 +89,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp17066736"></a><h3>Element Pads</h3>
+<a name="idp19549824"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-speexenc.html b/docs/plugins/html/gst-plugins-good-plugins-speexenc.html
index f2ae642..f5443b9 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-speexenc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-speexenc.html
@@ -83,7 +83,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp18777776"></a><h3>Element Information</h3>
+<a name="idp18580720"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -106,7 +106,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp20790096"></a><h3>Element Pads</h3>
+<a name="idp22106928"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-splitfilesrc.html b/docs/plugins/html/gst-plugins-good-plugins-splitfilesrc.html
index 575a4ac..5f7f44c 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-splitfilesrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-splitfilesrc.html
@@ -77,25 +77,36 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp22243216"></a><h3>Example launch line</h3>
+<a name="idp16789024"></a><h3>Example launch lines</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch splitfilesrc location<span class="gtkdoc opt">=</span><span class="string">&quot;/path/to/part-*.mpg&quot;</span> <span class="gtkdoc opt">!</span> decodebin <span class="gtkdoc opt">! ...</span> \</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch splitfilesrc location<span class="gtkdoc opt">=</span><span class="string">&quot;/path/to/part-*.mpg&quot;</span> <span class="gtkdoc opt">!</span> decodebin <span class="gtkdoc opt">! ...</span></pre></td>
       </tr>
     </tbody>
   </table>
 </div>
  Plays the different parts as if they were one single MPEG file.
+<div class="informalexample">
+  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+    <tbody>
+      <tr>
+        <td class="listing_lines" align="right"><pre>1</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch playbin uri<span class="gtkdoc opt">=</span><span class="string">&quot;splitfile://path/to/foo.avi.*&quot;</span></pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+ Plays the different parts as if they were one single AVI file.
 </div>
 <p>
 </p>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp16819744"></a><h3>Element Information</h3>
+<a name="idp20089056"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -118,7 +129,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp22268880"></a><h3>Element Pads</h3>
+<a name="idp19955104"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-streaktv.html b/docs/plugins/html/gst-plugins-good-plugins-streaktv.html
index c0e10da..7f55a2e 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-streaktv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-streaktv.html
@@ -70,7 +70,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp18778064"></a><h3>Example launch line</h3>
+<a name="idp22225152"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -88,7 +88,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp17921024"></a><h3>Element Information</h3>
+<a name="idp16626048"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -111,7 +111,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp18701600"></a><h3>Element Pads</h3>
+<a name="idp18885472"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-taginject.html b/docs/plugins/html/gst-plugins-good-plugins-taginject.html
index 0363016..ac459f3 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-taginject.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-taginject.html
@@ -70,7 +70,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp22819360"></a><h3>Example launch lines</h3>
+<a name="idp18581328"></a><h3>Example launch lines</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -99,7 +99,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp18904192"></a><h3>Element Information</h3>
+<a name="idp11157696"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -122,7 +122,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp17806352"></a><h3>Element Pads</h3>
+<a name="idp20668656"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-udpsink.html b/docs/plugins/html/gst-plugins-good-plugins-udpsink.html
index cd14929..97a9d84 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-udpsink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-udpsink.html
@@ -80,7 +80,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp15516560"></a><h3>Examples</h3>
+<a name="idp3071616"></a><h3>Examples</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -98,7 +98,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp16561840"></a><h3>Element Information</h3>
+<a name="idp22393792"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -121,7 +121,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp18907088"></a><h3>Element Pads</h3>
+<a name="idp18345792"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-udpsrc.html b/docs/plugins/html/gst-plugins-good-plugins-udpsrc.html
index cfc8db7..4dbb760 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-udpsrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-udpsrc.html
@@ -160,7 +160,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp21272048"></a><h3>Examples</h3>
+<a name="idp22467472"></a><h3>Examples</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -206,7 +206,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp19556576"></a><h3>Element Information</h3>
+<a name="idp22547968"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -229,7 +229,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp21319664"></a><h3>Element Pads</h3>
+<a name="idp22500000"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-v4l2radio.html b/docs/plugins/html/gst-plugins-good-plugins-v4l2radio.html
index cd50b22..4ce6846 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-v4l2radio.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-v4l2radio.html
@@ -74,7 +74,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp21518464"></a><h3>Element Information</h3>
+<a name="idp19448208"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -97,7 +97,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp20192112"></a><h3>Element Pads</h3>
+<a name="idp21862112"></a><h3>Element Pads</h3>
 </div>
 </div>
 <p>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-v4l2sink.html b/docs/plugins/html/gst-plugins-good-plugins-v4l2sink.html
index 5ac2d37..7bc5bb4 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-v4l2sink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-v4l2sink.html
@@ -62,7 +62,7 @@
 <a name="gst-plugins-good-plugins-v4l2sink.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
 <p>
 GstV4l2Sink implements
- <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gsttuner.html#GstTuner">GstTuner</a>,  <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideooverlay.html#GstVideoOverlay">GstVideoOverlay</a>,  <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstnavigation.html#GstNavigation">GstNavigation</a>,  <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance">GstColorBalance</a> and  <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation">GstVideoOrientation</a>.</p>
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gsttuner.html#GstTuner">GstTuner</a>,  GstVideoOverlay,  <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstnavigation.html#GstNavigation">GstNavigation</a>,  <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance">GstColorBalance</a> and  <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation">GstVideoOrientation</a>.</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-good-plugins-v4l2sink.properties"></a><h2>Properties</h2>
@@ -94,7 +94,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp21397760"></a><h3>Element Information</h3>
+<a name="idp16913024"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -117,7 +117,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp16891888"></a><h3>Element Pads</h3>
+<a name="idp21633392"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-v4l2src.html b/docs/plugins/html/gst-plugins-good-plugins-v4l2src.html
index 9145577..7e353b3 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-v4l2src.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-v4l2src.html
@@ -95,7 +95,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp19246304"></a><h3>Element Information</h3>
+<a name="idp18072752"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -118,7 +118,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp14972000"></a><h3>Element Pads</h3>
+<a name="idp21393312"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-vertigotv.html b/docs/plugins/html/gst-plugins-good-plugins-vertigotv.html
index aacdcea..adfc5c6 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-vertigotv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-vertigotv.html
@@ -79,7 +79,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp18881200"></a><h3>Example launch line</h3>
+<a name="idp23553024"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -97,7 +97,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp17294656"></a><h3>Element Information</h3>
+<a name="idp19179520"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -120,7 +120,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp21864656"></a><h3>Element Pads</h3>
+<a name="idp21506112"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-videobalance.html b/docs/plugins/html/gst-plugins-good-plugins-videobalance.html
index 5ce27a4..7e15580 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-videobalance.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-videobalance.html
@@ -81,7 +81,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp19492112"></a><h3>Example launch line</h3>
+<a name="idp22055584"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -103,7 +103,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp21329760"></a><h3>Element Information</h3>
+<a name="idp18622896"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -126,7 +126,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp17245296"></a><h3>Element Pads</h3>
+<a name="idp21859952"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-videobox.html b/docs/plugins/html/gst-plugins-good-plugins-videobox.html
index 13dd11a..65ccc7d 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-videobox.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-videobox.html
@@ -122,7 +122,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp23145904"></a><h3>Element Information</h3>
+<a name="idp20363008"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -145,7 +145,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp22489632"></a><h3>Element Pads</h3>
+<a name="idp24371136"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-videocrop.html b/docs/plugins/html/gst-plugins-good-plugins-videocrop.html
index a97868d..1fd966c 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-videocrop.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-videocrop.html
@@ -91,7 +91,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp22560576"></a><h3>Example launch line</h3>
+<a name="idp16561088"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -109,7 +109,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp19679072"></a><h3>Element Information</h3>
+<a name="idp24392016"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -132,7 +132,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp21264960"></a><h3>Element Pads</h3>
+<a name="idp19751408"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-videoflip.html b/docs/plugins/html/gst-plugins-good-plugins-videoflip.html
index 1b7d5c3..e4b32d0 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-videoflip.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-videoflip.html
@@ -71,7 +71,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp19600080"></a><h3>Example launch line</h3>
+<a name="idp22740720"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -92,7 +92,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp5522368"></a><h3>Element Information</h3>
+<a name="idp23680176"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -115,7 +115,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp16687744"></a><h3>Element Pads</h3>
+<a name="idp24428704"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-videomixer.html b/docs/plugins/html/gst-plugins-good-plugins-videomixer.html
index 6f48030..cf487b9 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-videomixer.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-videomixer.html
@@ -59,7 +59,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp23886704"></a><h3>Sample pipelines</h3>
+<a name="idp21583136"></a><h3>Sample pipelines</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -160,7 +160,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp23762656"></a><h3>Element Information</h3>
+<a name="idp15210672"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -183,7 +183,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp16908720"></a><h3>Element Pads</h3>
+<a name="idp17254032"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-warptv.html b/docs/plugins/html/gst-plugins-good-plugins-warptv.html
index f72d18a..97dc50e 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-warptv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-warptv.html
@@ -62,7 +62,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp20134176"></a><h3>Example launch line</h3>
+<a name="idp21833952"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -80,7 +80,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp20859648"></a><h3>Element Information</h3>
+<a name="idp17943440"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -103,7 +103,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp22745664"></a><h3>Element Pads</h3>
+<a name="idp22009536"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-waveformsink.html b/docs/plugins/html/gst-plugins-good-plugins-waveformsink.html
index 7803249..d5988ab 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-waveformsink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-waveformsink.html
@@ -45,7 +45,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp21828608"></a><h3>Element Information</h3>
+<a name="idp24407968"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -68,7 +68,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp23069872"></a><h3>Element Pads</h3>
+<a name="idp18153312"></a><h3>Element Pads</h3>
 </div>
 </div>
 <p>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-wavenc.html b/docs/plugins/html/gst-plugins-good-plugins-wavenc.html
index 75bef15..e3294c1 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-wavenc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-wavenc.html
@@ -60,7 +60,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp22184928"></a><h3>Element Information</h3>
+<a name="idp23292704"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -83,7 +83,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp19908336"></a><h3>Element Pads</h3>
+<a name="idp23280992"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-wavpackdec.html b/docs/plugins/html/gst-plugins-good-plugins-wavpackdec.html
index f4a549b..e68bfa4 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-wavpackdec.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-wavpackdec.html
@@ -58,7 +58,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp13004288"></a><h3>Element Information</h3>
+<a name="idp22579248"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -81,7 +81,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp22012256"></a><h3>Element Pads</h3>
+<a name="idp20026976"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-wavpackenc.html b/docs/plugins/html/gst-plugins-good-plugins-wavpackenc.html
index 817e008..4a4206a 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-wavpackenc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-wavpackenc.html
@@ -80,7 +80,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp2320880"></a><h3>Element Information</h3>
+<a name="idp21401344"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -103,7 +103,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp21195552"></a><h3>Element Pads</h3>
+<a name="idp22125760"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-wavpackparse.html b/docs/plugins/html/gst-plugins-good-plugins-wavpackparse.html
index e2035e0..a11eb14 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-wavpackparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-wavpackparse.html
@@ -61,7 +61,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp23728944"></a><h3>Example launch line</h3>
+<a name="idp24376096"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -79,7 +79,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp8829824"></a><h3>Element Information</h3>
+<a name="idp20254752"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -102,7 +102,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp17510176"></a><h3>Element Pads</h3>
+<a name="idp13848544"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-wavparse.html b/docs/plugins/html/gst-plugins-good-plugins-wavparse.html
index 71d7ce7..099a5f2 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-wavparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-wavparse.html
@@ -72,7 +72,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp22784432"></a><h3>Example launch line</h3>
+<a name="idp21427840"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -105,7 +105,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp23820656"></a><h3>Element Information</h3>
+<a name="idp23384256"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -128,7 +128,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp23731424"></a><h3>Element Pads</h3>
+<a name="idp24161712"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-webmmux.html b/docs/plugins/html/gst-plugins-good-plugins-webmmux.html
index fbe12d5..4c6e4b0 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-webmmux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-webmmux.html
@@ -59,7 +59,7 @@
 <a name="gst-plugins-good-plugins-webmmux.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
 <p>
 GstWebMMux implements
- <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagSetter.html">GstTagSetter</a> and  <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTocSetter.html#GstTocSetter">GstTocSetter</a>.</p>
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagSetter.html">GstTagSetter</a> and  GstTocSetter.</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-good-plugins-webmmux.description"></a><h2>Description</h2>
@@ -69,7 +69,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp21854480"></a><h3>Example launch line</h3>
+<a name="idp22537760"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -108,7 +108,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp21557888"></a><h3>Element Information</h3>
+<a name="idp21435968"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -131,7 +131,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp21767952"></a><h3>Element Pads</h3>
+<a name="idp22051392"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-ximagesrc.html b/docs/plugins/html/gst-plugins-good-plugins-ximagesrc.html
index 8e0b030..0c8b3b0 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-ximagesrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-ximagesrc.html
@@ -77,7 +77,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp23579168"></a><h3>Element Information</h3>
+<a name="idp22141536"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -100,7 +100,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp23595360"></a><h3>Element Pads</h3>
+<a name="idp24512224"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-y4menc.html b/docs/plugins/html/gst-plugins-good-plugins-y4menc.html
index f07d99e..94f1bef 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-y4menc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-y4menc.html
@@ -57,7 +57,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp23695536"></a><h3>Example launch line</h3>
+<a name="idp23366304"></a><h3>Example launch line</h3>
 <p>
 Creates a YU4MPEG2 raw video stream as defined by the mjpegtools project.
 </p>
@@ -77,7 +77,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp19658528"></a><h3>Element Information</h3>
+<a name="idp22138016"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -100,7 +100,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp14827680"></a><h3>Element Pads</h3>
+<a name="idp23763952"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins.devhelp2 b/docs/plugins/html/gst-plugins-good-plugins.devhelp2
index ae6cc98..1357942 100644
--- a/docs/plugins/html/gst-plugins-good-plugins.devhelp2
+++ b/docs/plugins/html/gst-plugins-good-plugins.devhelp2
@@ -240,15 +240,15 @@
     </sub>
   </chapters>
   <functions>
-    <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-3gppmux.html#idp8328720"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-3gppmux.html#idp6518336"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-3gppmux.html#idp6229168"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-aacparse.html#idp9559600"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-aacparse.html#idp6596800"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-aacparse.html#idp7982560"/>
+    <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-3gppmux.html#idp6208480"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-3gppmux.html#idp7337184"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-3gppmux.html#idp6801616"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-aacparse.html#idm36816"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-aacparse.html#idp8750912"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-aacparse.html#idp8802736"/>
     <keyword type="struct" name="struct GstAacParse" link="gst-plugins-good-plugins-aacparse.html#GstAacParse-struct"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-aasink.html#idp8268384"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-aasink.html#idp7952176"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-aasink.html#idm31792"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-aasink.html#idp7012192"/>
     <keyword type="struct" name="struct GstAASink" link="gst-plugins-good-plugins-aasink.html#GstAASink-struct"/>
     <keyword type="property" name="The &quot;brightness&quot; property" link="gst-plugins-good-plugins-aasink.html#GstAASink--brightness"/>
     <keyword type="property" name="The &quot;contrast&quot; property" link="gst-plugins-good-plugins-aasink.html#GstAASink--contrast"/>
@@ -263,20 +263,20 @@
     <keyword type="property" name="The &quot;width&quot; property" link="gst-plugins-good-plugins-aasink.html#GstAASink--width"/>
     <keyword type="signal" name="The &quot;frame-displayed&quot; signal" link="gst-plugins-good-plugins-aasink.html#GstAASink-frame-displayed"/>
     <keyword type="signal" name="The &quot;have-size&quot; signal" link="gst-plugins-good-plugins-aasink.html#GstAASink-have-size"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-ac3parse.html#idp9335856"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-ac3parse.html#idp6399376"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-ac3parse.html#idp7492656"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-ac3parse.html#idp7867424"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-ac3parse.html#idp8374016"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-ac3parse.html#idp6397712"/>
     <keyword type="struct" name="struct GstAc3Parse" link="gst-plugins-good-plugins-ac3parse.html#GstAc3Parse-struct"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-agingtv.html#idp9746128"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-agingtv.html#idp5701344"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-agingtv.html#idp9838144"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-agingtv.html#idp6010544"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-agingtv.html#idp9026096"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-agingtv.html#idp7914864"/>
     <keyword type="struct" name="struct GstAgingTV" link="gst-plugins-good-plugins-agingtv.html#GstAgingTV-struct"/>
     <keyword type="property" name="The &quot;color-aging&quot; property" link="gst-plugins-good-plugins-agingtv.html#GstAgingTV--color-aging"/>
     <keyword type="property" name="The &quot;dusts&quot; property" link="gst-plugins-good-plugins-agingtv.html#GstAgingTV--dusts"/>
     <keyword type="property" name="The &quot;pits&quot; property" link="gst-plugins-good-plugins-agingtv.html#GstAgingTV--pits"/>
     <keyword type="property" name="The &quot;scratch-lines&quot; property" link="gst-plugins-good-plugins-agingtv.html#GstAgingTV--scratch-lines"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-alpha.html#idp6436096"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-alpha.html#idp10122416"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-alpha.html#idp7104224"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-alpha.html#idp8954032"/>
     <keyword type="struct" name="struct GstAlpha" link="gst-plugins-good-plugins-alpha.html#GstAlpha-struct"/>
     <keyword type="enum" name="enum GstAlphaMethod" link="gst-plugins-good-plugins-alpha.html#GstAlphaMethod"/>
     <keyword type="property" name="The &quot;alpha&quot; property" link="gst-plugins-good-plugins-alpha.html#GstAlpha--alpha"/>
@@ -289,41 +289,41 @@
     <keyword type="property" name="The &quot;black-sensitivity&quot; property" link="gst-plugins-good-plugins-alpha.html#GstAlpha--black-sensitivity"/>
     <keyword type="property" name="The &quot;white-sensitivity&quot; property" link="gst-plugins-good-plugins-alpha.html#GstAlpha--white-sensitivity"/>
     <keyword type="property" name="The &quot;prefer-passthrough&quot; property" link="gst-plugins-good-plugins-alpha.html#GstAlpha--prefer-passthrough"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-alphacolor.html#idp5533136"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-alphacolor.html#idp9398432"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-alphacolor.html#idp7941184"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-alphacolor.html#idp9874768"/>
     <keyword type="struct" name="struct GstAlphaColor" link="gst-plugins-good-plugins-alphacolor.html#GstAlphaColor-struct"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-alawdec.html#idp5919136"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-alawdec.html#idp9205920"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-alawdec.html#idp7081440"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-alawdec.html#idp9270640"/>
     <keyword type="struct" name="struct GstALawDec" link="gst-plugins-good-plugins-alawdec.html#GstALawDec-struct"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-alawenc.html#idp7084208"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-alawenc.html#idp7973840"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-alawenc.html#idp10540240"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-alawenc.html#idp7069712"/>
     <keyword type="struct" name="struct GstALawDec" link="gst-plugins-good-plugins-alawenc.html#GstALawDec-struct"/>
     <keyword type="struct" name="struct GstALawEnc" link="gst-plugins-good-plugins-alawenc.html#GstALawEnc"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-amrparse.html#idp7826944"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-amrparse.html#idp8715728"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-amrparse.html#idm32288"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-amrparse.html#idp9300272"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-amrparse.html#idp6211120"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-amrparse.html#idp5694032"/>
     <keyword type="struct" name="struct GstAmrParse" link="gst-plugins-good-plugins-amrparse.html#GstAmrParse-struct"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-apedemux.html#idp9161520"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-apedemux.html#idp8269344"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-apedemux.html#idp7065776"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-apedemux.html#idp6139904"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-apedemux.html#idp8599248"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-apedemux.html#idp9243584"/>
     <keyword type="struct" name="struct GstApeDemux" link="gst-plugins-good-plugins-apedemux.html#GstApeDemux-struct"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-apev2mux.html#idp5917840"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-apev2mux.html#idp6930672"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-apev2mux.html#idp6430144"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-apev2mux.html#idp7787728"/>
     <keyword type="struct" name="struct GstApev2Mux" link="gst-plugins-good-plugins-apev2mux.html#GstApev2Mux-struct"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-aspectratiocrop.html#idp8880032"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-aspectratiocrop.html#idp10181968"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-aspectratiocrop.html#idp8844816"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-aspectratiocrop.html#idp7151824"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-aspectratiocrop.html#idp8094240"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-aspectratiocrop.html#idp8295296"/>
     <keyword type="struct" name="struct GstAspectRatioCrop" link="gst-plugins-good-plugins-aspectratiocrop.html#GstAspectRatioCrop-struct"/>
     <keyword type="property" name="The &quot;aspect-ratio&quot; property" link="gst-plugins-good-plugins-aspectratiocrop.html#GstAspectRatioCrop--aspect-ratio"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audioamplify.html#idp9991504"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audioamplify.html#idp8439776"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audioamplify.html#idp8274080"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audioamplify.html#idp6603536"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audioamplify.html#idp9960256"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audioamplify.html#idp8943104"/>
     <keyword type="struct" name="struct GstAudioAmplify" link="gst-plugins-good-plugins-audioamplify.html#GstAudioAmplify-struct"/>
     <keyword type="property" name="The &quot;amplification&quot; property" link="gst-plugins-good-plugins-audioamplify.html#GstAudioAmplify--amplification"/>
     <keyword type="property" name="The &quot;clipping-method&quot; property" link="gst-plugins-good-plugins-audioamplify.html#GstAudioAmplify--clipping-method"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audiochebband.html#idp8513472"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiochebband.html#idp8843520"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiochebband.html#idp7544080"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audiochebband.html#idp9953952"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiochebband.html#idp3032128"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiochebband.html#idp9402576"/>
     <keyword type="struct" name="struct GstAudioChebBand" link="gst-plugins-good-plugins-audiochebband.html#GstAudioChebBand-struct"/>
     <keyword type="property" name="The &quot;lower-frequency&quot; property" link="gst-plugins-good-plugins-audiochebband.html#GstAudioChebBand--lower-frequency"/>
     <keyword type="property" name="The &quot;mode&quot; property" link="gst-plugins-good-plugins-audiochebband.html#GstAudioChebBand--mode"/>
@@ -331,127 +331,127 @@
     <keyword type="property" name="The &quot;ripple&quot; property" link="gst-plugins-good-plugins-audiochebband.html#GstAudioChebBand--ripple"/>
     <keyword type="property" name="The &quot;type&quot; property" link="gst-plugins-good-plugins-audiochebband.html#GstAudioChebBand--type"/>
     <keyword type="property" name="The &quot;upper-frequency&quot; property" link="gst-plugins-good-plugins-audiochebband.html#GstAudioChebBand--upper-frequency"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audiocheblimit.html#idp6782368"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiocheblimit.html#idp8527136"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiocheblimit.html#idp7678736"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audiocheblimit.html#idp10597408"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiocheblimit.html#idp9915776"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiocheblimit.html#idp3247456"/>
     <keyword type="struct" name="struct GstAudioChebLimit" link="gst-plugins-good-plugins-audiocheblimit.html#GstAudioChebLimit-struct"/>
     <keyword type="property" name="The &quot;cutoff&quot; property" link="gst-plugins-good-plugins-audiocheblimit.html#GstAudioChebLimit--cutoff"/>
     <keyword type="property" name="The &quot;mode&quot; property" link="gst-plugins-good-plugins-audiocheblimit.html#GstAudioChebLimit--mode"/>
     <keyword type="property" name="The &quot;poles&quot; property" link="gst-plugins-good-plugins-audiocheblimit.html#GstAudioChebLimit--poles"/>
     <keyword type="property" name="The &quot;ripple&quot; property" link="gst-plugins-good-plugins-audiocheblimit.html#GstAudioChebLimit--ripple"/>
     <keyword type="property" name="The &quot;type&quot; property" link="gst-plugins-good-plugins-audiocheblimit.html#GstAudioChebLimit--type"/>
-    <keyword type="" name="Example application" link="gst-plugins-good-plugins-audiofirfilter.html#idp11231552"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiofirfilter.html#idp9528224"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiofirfilter.html#idp10238000"/>
+    <keyword type="" name="Example application" link="gst-plugins-good-plugins-audiofirfilter.html#idp10441424"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiofirfilter.html#idp5885264"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiofirfilter.html#idp10140592"/>
     <keyword type="struct" name="struct GstAudioFIRFilter" link="gst-plugins-good-plugins-audiofirfilter.html#GstAudioFIRFilter-struct"/>
     <keyword type="property" name="The &quot;kernel&quot; property" link="gst-plugins-good-plugins-audiofirfilter.html#GstAudioFIRFilter--kernel"/>
     <keyword type="property" name="The &quot;latency&quot; property" link="gst-plugins-good-plugins-audiofirfilter.html#GstAudioFIRFilter--latency"/>
     <keyword type="signal" name="The &quot;rate-changed&quot; signal" link="gst-plugins-good-plugins-audiofirfilter.html#GstAudioFIRFilter-rate-changed"/>
-    <keyword type="" name="Example application" link="gst-plugins-good-plugins-audioiirfilter.html#idp9177520"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audioiirfilter.html#idp2790368"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audioiirfilter.html#idp6233376"/>
+    <keyword type="" name="Example application" link="gst-plugins-good-plugins-audioiirfilter.html#idp9331104"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audioiirfilter.html#idp10067568"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audioiirfilter.html#idp8333056"/>
     <keyword type="struct" name="struct GstAudioIIRFilter" link="gst-plugins-good-plugins-audioiirfilter.html#GstAudioIIRFilter-struct"/>
     <keyword type="property" name="The &quot;a&quot; property" link="gst-plugins-good-plugins-audioiirfilter.html#GstAudioIIRFilter--a"/>
     <keyword type="property" name="The &quot;b&quot; property" link="gst-plugins-good-plugins-audioiirfilter.html#GstAudioIIRFilter--b"/>
     <keyword type="signal" name="The &quot;rate-changed&quot; signal" link="gst-plugins-good-plugins-audioiirfilter.html#GstAudioIIRFilter-rate-changed"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audiowsincband.html#idp8942528"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiowsincband.html#idp8261168"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiowsincband.html#idp6138256"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audiowsincband.html#idp10887712"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiowsincband.html#idp8194096"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiowsincband.html#idp6437056"/>
     <keyword type="struct" name="struct GstAudioWSincBand" link="gst-plugins-good-plugins-audiowsincband.html#GstAudioWSincBand-struct"/>
     <keyword type="property" name="The &quot;lower-frequency&quot; property" link="gst-plugins-good-plugins-audiowsincband.html#GstAudioWSincBand--lower-frequency"/>
     <keyword type="property" name="The &quot;upper-frequency&quot; property" link="gst-plugins-good-plugins-audiowsincband.html#GstAudioWSincBand--upper-frequency"/>
     <keyword type="property" name="The &quot;mode&quot; property" link="gst-plugins-good-plugins-audiowsincband.html#GstAudioWSincBand--mode"/>
     <keyword type="property" name="The &quot;window&quot; property" link="gst-plugins-good-plugins-audiowsincband.html#GstAudioWSincBand--window"/>
     <keyword type="property" name="The &quot;length&quot; property" link="gst-plugins-good-plugins-audiowsincband.html#GstAudioWSincBand--length"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audiowsinclimit.html#idp6850720"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiowsinclimit.html#idp10982944"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiowsinclimit.html#idp6873056"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audiowsinclimit.html#idp9529936"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiowsinclimit.html#idp6156448"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiowsinclimit.html#idp6200064"/>
     <keyword type="struct" name="struct GstAudioWSincLimit" link="gst-plugins-good-plugins-audiowsinclimit.html#GstAudioWSincLimit-struct"/>
     <keyword type="property" name="The &quot;frequency&quot; property" link="gst-plugins-good-plugins-audiowsinclimit.html#GstAudioWSincLimit--frequency"/>
     <keyword type="property" name="The &quot;length&quot; property" link="gst-plugins-good-plugins-audiowsinclimit.html#GstAudioWSincLimit--length"/>
     <keyword type="property" name="The &quot;mode&quot; property" link="gst-plugins-good-plugins-audiowsinclimit.html#GstAudioWSincLimit--mode"/>
     <keyword type="property" name="The &quot;window&quot; property" link="gst-plugins-good-plugins-audiowsinclimit.html#GstAudioWSincLimit--window"/>
     <keyword type="property" name="The &quot;cutoff&quot; property" link="gst-plugins-good-plugins-audiowsinclimit.html#GstAudioWSincLimit--cutoff"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audioecho.html#idp8803856"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audioecho.html#idp8686672"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audioecho.html#idp9744128"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audioecho.html#idp8473856"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audioecho.html#idp9602064"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audioecho.html#idp7672608"/>
     <keyword type="struct" name="struct GstAudioEcho" link="gst-plugins-good-plugins-audioecho.html#GstAudioEcho-struct"/>
     <keyword type="property" name="The &quot;delay&quot; property" link="gst-plugins-good-plugins-audioecho.html#GstAudioEcho--delay"/>
     <keyword type="property" name="The &quot;feedback&quot; property" link="gst-plugins-good-plugins-audioecho.html#GstAudioEcho--feedback"/>
     <keyword type="property" name="The &quot;intensity&quot; property" link="gst-plugins-good-plugins-audioecho.html#GstAudioEcho--intensity"/>
     <keyword type="property" name="The &quot;max-delay&quot; property" link="gst-plugins-good-plugins-audioecho.html#GstAudioEcho--max-delay"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audiodynamic.html#idp10827520"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiodynamic.html#idp9888192"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiodynamic.html#idp7949072"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audiodynamic.html#idp10382224"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiodynamic.html#idp8946464"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiodynamic.html#idp8596896"/>
     <keyword type="struct" name="struct GstAudioDynamic" link="gst-plugins-good-plugins-audiodynamic.html#GstAudioDynamic-struct"/>
     <keyword type="property" name="The &quot;characteristics&quot; property" link="gst-plugins-good-plugins-audiodynamic.html#GstAudioDynamic--characteristics"/>
     <keyword type="property" name="The &quot;mode&quot; property" link="gst-plugins-good-plugins-audiodynamic.html#GstAudioDynamic--mode"/>
     <keyword type="property" name="The &quot;ratio&quot; property" link="gst-plugins-good-plugins-audiodynamic.html#GstAudioDynamic--ratio"/>
     <keyword type="property" name="The &quot;threshold&quot; property" link="gst-plugins-good-plugins-audiodynamic.html#GstAudioDynamic--threshold"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audioinvert.html#idp10929664"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audioinvert.html#idp8620496"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audioinvert.html#idp7399888"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audioinvert.html#idp7039232"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audioinvert.html#idp6695536"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audioinvert.html#idp8506064"/>
     <keyword type="struct" name="struct GstAudioInvert" link="gst-plugins-good-plugins-audioinvert.html#GstAudioInvert-struct"/>
     <keyword type="property" name="The &quot;degree&quot; property" link="gst-plugins-good-plugins-audioinvert.html#GstAudioInvert--degree"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audiopanorama.html#idp10565616"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiopanorama.html#idp7714992"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiopanorama.html#idp6869376"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audiopanorama.html#idp5513024"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiopanorama.html#idp6296928"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiopanorama.html#idp6983920"/>
     <keyword type="struct" name="struct GstAudioPanorama" link="gst-plugins-good-plugins-audiopanorama.html#GstAudioPanorama-struct"/>
     <keyword type="property" name="The &quot;panorama&quot; property" link="gst-plugins-good-plugins-audiopanorama.html#GstAudioPanorama--panorama"/>
     <keyword type="property" name="The &quot;method&quot; property" link="gst-plugins-good-plugins-audiopanorama.html#GstAudioPanorama--method"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audiokaraoke.html#idp4884352"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiokaraoke.html#idp6238576"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiokaraoke.html#idm6320"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audiokaraoke.html#idp10895824"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiokaraoke.html#idp7677984"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiokaraoke.html#idp11370864"/>
     <keyword type="struct" name="struct GstAudioKaraoke" link="gst-plugins-good-plugins-audiokaraoke.html#GstAudioKaraoke-struct"/>
     <keyword type="property" name="The &quot;filter-band&quot; property" link="gst-plugins-good-plugins-audiokaraoke.html#GstAudioKaraoke--filter-band"/>
     <keyword type="property" name="The &quot;filter-width&quot; property" link="gst-plugins-good-plugins-audiokaraoke.html#GstAudioKaraoke--filter-width"/>
     <keyword type="property" name="The &quot;level&quot; property" link="gst-plugins-good-plugins-audiokaraoke.html#GstAudioKaraoke--level"/>
     <keyword type="property" name="The &quot;mono-level&quot; property" link="gst-plugins-good-plugins-audiokaraoke.html#GstAudioKaraoke--mono-level"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-auparse.html#idp6093648"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-auparse.html#idp9170592"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-auparse.html#idp7607904"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-auparse.html#idp6357424"/>
     <keyword type="struct" name="struct GstAuParse" link="gst-plugins-good-plugins-auparse.html#GstAuParse-struct"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-autoaudiosink.html#idp5485152"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-autoaudiosink.html#idp10627184"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-autoaudiosink.html#idp9738464"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-autoaudiosink.html#idp10370240"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-autoaudiosink.html#idp11529200"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-autoaudiosink.html#idp10476704"/>
     <keyword type="struct" name="GstAutoAudioSink" link="gst-plugins-good-plugins-autoaudiosink.html#GstAutoAudioSink-struct"/>
     <keyword type="property" name="The &quot;filter-caps&quot; property" link="gst-plugins-good-plugins-autoaudiosink.html#GstAutoAudioSink--filter-caps"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-autoaudiosrc.html#idp11817920"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-autoaudiosrc.html#idp1882064"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-autoaudiosrc.html#idp6081344"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-autoaudiosrc.html#idp11808896"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-autoaudiosrc.html#idp5886352"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-autoaudiosrc.html#idp9690384"/>
     <keyword type="struct" name="GstAutoAudioSrc" link="gst-plugins-good-plugins-autoaudiosrc.html#GstAutoAudioSrc-struct"/>
     <keyword type="property" name="The &quot;filter-caps&quot; property" link="gst-plugins-good-plugins-autoaudiosrc.html#GstAutoAudioSrc--filter-caps"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-autovideosink.html#idp7435376"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-autovideosink.html#idp5800176"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-autovideosink.html#idp6481776"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-autovideosink.html#idp5681712"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-autovideosink.html#idp6214064"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-autovideosink.html#idp10000336"/>
     <keyword type="struct" name="GstAutoVideoSink" link="gst-plugins-good-plugins-autovideosink.html#GstAutoVideoSink-struct"/>
     <keyword type="property" name="The &quot;filter-caps&quot; property" link="gst-plugins-good-plugins-autovideosink.html#GstAutoVideoSink--filter-caps"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-autovideosrc.html#idp8726784"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-autovideosrc.html#idp11712912"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-autovideosrc.html#idp11996464"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-autovideosrc.html#idp10345152"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-autovideosrc.html#idp6985808"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-autovideosrc.html#idp11128192"/>
     <keyword type="struct" name="GstAutoVideoSrc" link="gst-plugins-good-plugins-autovideosrc.html#GstAutoVideoSrc-struct"/>
     <keyword type="property" name="The &quot;filter-caps&quot; property" link="gst-plugins-good-plugins-autovideosrc.html#GstAutoVideoSrc--filter-caps"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-avidemux.html#idp11770896"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-avidemux.html#idp11768592"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-avidemux.html#idp7449344"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-avidemux.html#idp11919536"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-avidemux.html#idp11916336"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-avidemux.html#idp11910560"/>
     <keyword type="struct" name="GstAviDemux" link="gst-plugins-good-plugins-avidemux.html#GstAviDemux-struct"/>
-    <keyword type="" name="Example launch lines" link="gst-plugins-good-plugins-avimux.html#idp6898096"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-avimux.html#idp11140432"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-avimux.html#idp11273712"/>
+    <keyword type="" name="Example launch lines" link="gst-plugins-good-plugins-avimux.html#idp10785168"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-avimux.html#idp12289696"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-avimux.html#idp8587312"/>
     <keyword type="struct" name="struct GstAviMux" link="gst-plugins-good-plugins-avimux.html#GstAviMux-struct"/>
     <keyword type="property" name="The &quot;bigfile&quot; property" link="gst-plugins-good-plugins-avimux.html#GstAviMux--bigfile"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-avisubtitle.html#idp8874720"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-avisubtitle.html#idp6866848"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-avisubtitle.html#idp9114720"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-avisubtitle.html#idp7956672"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-avisubtitle.html#idp8915120"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-avisubtitle.html#idp8892544"/>
     <keyword type="struct" name="struct GstAviSubtitle" link="gst-plugins-good-plugins-avisubtitle.html#GstAviSubtitle-struct"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-cacasink.html#idp8935536"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-cacasink.html#idp11904096"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-cacasink.html#idp8684768"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-cacasink.html#idp12125760"/>
     <keyword type="struct" name="struct GstCACASink" link="gst-plugins-good-plugins-cacasink.html#GstCACASink-struct"/>
     <keyword type="property" name="The &quot;anti-aliasing&quot; property" link="gst-plugins-good-plugins-cacasink.html#GstCACASink--anti-aliasing"/>
     <keyword type="property" name="The &quot;dither&quot; property" link="gst-plugins-good-plugins-cacasink.html#GstCACASink--dither"/>
     <keyword type="property" name="The &quot;screen-height&quot; property" link="gst-plugins-good-plugins-cacasink.html#GstCACASink--screen-height"/>
     <keyword type="property" name="The &quot;screen-width&quot; property" link="gst-plugins-good-plugins-cacasink.html#GstCACASink--screen-width"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-cairotextoverlay.html#idp9043296"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-cairotextoverlay.html#idp2670656"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-cairotextoverlay.html#idp7298480"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-cairotextoverlay.html#idp3251584"/>
     <keyword type="struct" name="struct GstCairoTextOverlay" link="gst-plugins-good-plugins-cairotextoverlay.html#GstCairoTextOverlay"/>
     <keyword type="property" name="The &quot;deltax&quot; property" link="gst-plugins-good-plugins-cairotextoverlay.html#GstCairoTextOverlay--deltax"/>
     <keyword type="property" name="The &quot;deltay&quot; property" link="gst-plugins-good-plugins-cairotextoverlay.html#GstCairoTextOverlay--deltay"/>
@@ -463,40 +463,40 @@
     <keyword type="property" name="The &quot;xpad&quot; property" link="gst-plugins-good-plugins-cairotextoverlay.html#GstCairoTextOverlay--xpad"/>
     <keyword type="property" name="The &quot;ypad&quot; property" link="gst-plugins-good-plugins-cairotextoverlay.html#GstCairoTextOverlay--ypad"/>
     <keyword type="property" name="The &quot;silent&quot; property" link="gst-plugins-good-plugins-cairotextoverlay.html#GstCairoTextOverlay--silent"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-cairotimeoverlay.html#idp9081552"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-cairotimeoverlay.html#idp5598848"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-cairotimeoverlay.html#idp10005120"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-cairotimeoverlay.html#idp5840592"/>
     <keyword type="struct" name="GstCairoTimeOverlay" link="gst-plugins-good-plugins-cairotimeoverlay.html#GstCairoTimeOverlay"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-cairorender.html#idp12788464"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-cairorender.html#idp5654080"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-cairorender.html#idp12819152"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-cairorender.html#idp10143968"/>
     <keyword type="struct" name="struct GstCairoRender" link="gst-plugins-good-plugins-cairorender.html#GstCairoRender"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-cairooverlay.html#idp5975568"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-cairooverlay.html#idp6409152"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-cairooverlay.html#idp6310128"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-cairooverlay.html#idp6294288"/>
     <keyword type="struct" name="struct GstCairoOverlay" link="gst-plugins-good-plugins-cairooverlay.html#GstCairoOverlay"/>
     <keyword type="signal" name="The &quot;caps-changed&quot; signal" link="gst-plugins-good-plugins-cairooverlay.html#GstCairoOverlay-caps-changed"/>
     <keyword type="signal" name="The &quot;draw&quot; signal" link="gst-plugins-good-plugins-cairooverlay.html#GstCairoOverlay-draw"/>
-    <keyword type="" name="" link="gst-plugins-good-plugins-capssetter.html#idp11329776"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-capssetter.html#idp9102800"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-capssetter.html#idp13297232"/>
+    <keyword type="" name="" link="gst-plugins-good-plugins-capssetter.html#idp10973136"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-capssetter.html#idp7929248"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-capssetter.html#idp7803568"/>
     <keyword type="struct" name="struct GstCapsSetter" link="gst-plugins-good-plugins-capssetter.html#GstCapsSetter-struct"/>
     <keyword type="property" name="The &quot;caps&quot; property" link="gst-plugins-good-plugins-capssetter.html#GstCapsSetter--caps"/>
     <keyword type="property" name="The &quot;join&quot; property" link="gst-plugins-good-plugins-capssetter.html#GstCapsSetter--join"/>
     <keyword type="property" name="The &quot;replace&quot; property" link="gst-plugins-good-plugins-capssetter.html#GstCapsSetter--replace"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-cutter.html#idp6357504"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-cutter.html#idp11153952"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-cutter.html#idp5732816"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-cutter.html#idp10854432"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-cutter.html#idp9904912"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-cutter.html#idp6219408"/>
     <keyword type="struct" name="struct GstCutter" link="gst-plugins-good-plugins-cutter.html#GstCutter-struct"/>
     <keyword type="property" name="The &quot;leaky&quot; property" link="gst-plugins-good-plugins-cutter.html#GstCutter--leaky"/>
     <keyword type="property" name="The &quot;pre-length&quot; property" link="gst-plugins-good-plugins-cutter.html#GstCutter--pre-length"/>
     <keyword type="property" name="The &quot;run-length&quot; property" link="gst-plugins-good-plugins-cutter.html#GstCutter--run-length"/>
     <keyword type="property" name="The &quot;threshold&quot; property" link="gst-plugins-good-plugins-cutter.html#GstCutter--threshold"/>
     <keyword type="property" name="The &quot;threshold-dB&quot; property" link="gst-plugins-good-plugins-cutter.html#GstCutter--threshold-dB"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-dcaparse.html#idp8712592"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-dcaparse.html#idp6418704"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-dcaparse.html#idp11837600"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-dcaparse.html#idp3197584"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-dcaparse.html#idp7912928"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-dcaparse.html#idp13422640"/>
     <keyword type="struct" name="struct GstDcaParse" link="gst-plugins-good-plugins-dcaparse.html#GstDcaParse-struct"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-deinterlace.html#idp9660032"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-deinterlace.html#idp8786960"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-deinterlace.html#idp7331136"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-deinterlace.html#idp8497696"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-deinterlace.html#idp12195232"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-deinterlace.html#idp11827840"/>
     <keyword type="struct" name="struct GstDeinterlace" link="gst-plugins-good-plugins-deinterlace.html#GstDeinterlace"/>
     <keyword type="property" name="The &quot;fields&quot; property" link="gst-plugins-good-plugins-deinterlace.html#GstDeinterlace--fields"/>
     <keyword type="property" name="The &quot;method&quot; property" link="gst-plugins-good-plugins-deinterlace.html#GstDeinterlace--method"/>
@@ -505,22 +505,22 @@
     <keyword type="property" name="The &quot;drop-orphans&quot; property" link="gst-plugins-good-plugins-deinterlace.html#GstDeinterlace--drop-orphans"/>
     <keyword type="property" name="The &quot;ignore-obscure&quot; property" link="gst-plugins-good-plugins-deinterlace.html#GstDeinterlace--ignore-obscure"/>
     <keyword type="property" name="The &quot;locking&quot; property" link="gst-plugins-good-plugins-deinterlace.html#GstDeinterlace--locking"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-deinterleave.html#idp10126080"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-deinterleave.html#idp6979312"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-deinterleave.html#idp2710896"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-deinterleave.html#idp6704656"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-deinterleave.html#idp12252000"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-deinterleave.html#idp8629856"/>
     <keyword type="struct" name="struct GstDeinterleave" link="gst-plugins-good-plugins-deinterleave.html#GstDeinterleave-struct"/>
     <keyword type="property" name="The &quot;keep-positions&quot; property" link="gst-plugins-good-plugins-deinterleave.html#GstDeinterleave--keep-positions"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-dicetv.html#idp5734848"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-dicetv.html#idp11133024"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-dicetv.html#idp6606032"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-dicetv.html#idp8803504"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-dicetv.html#idp10446672"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-dicetv.html#idp13141264"/>
     <keyword type="struct" name="struct GstDiceTV" link="gst-plugins-good-plugins-dicetv.html#GstDiceTV-struct"/>
     <keyword type="property" name="The &quot;square-bits&quot; property" link="gst-plugins-good-plugins-dicetv.html#GstDiceTV--square-bits"/>
     <keyword type="signal" name="The &quot;reset&quot; signal" link="gst-plugins-good-plugins-dicetv.html#GstDiceTV-reset"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-directsoundsink.html#idp4543536"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-directsoundsink.html#idp10870960"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-directsoundsink.html#idp10137824"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-directsoundsink.html#idp6414496"/>
     <keyword type="struct" name="struct GstDirectSoundSink" link="gst-plugins-good-plugins-directsoundsink.html#GstDirectSoundSink"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-dv1394src.html#idp11892656"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-dv1394src.html#idp10643440"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-dv1394src.html#idp6847312"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-dv1394src.html#idp8058960"/>
     <keyword type="struct" name="struct GstDV1394Src" link="gst-plugins-good-plugins-dv1394src.html#GstDV1394Src-struct"/>
     <keyword type="property" name="The &quot;channel&quot; property" link="gst-plugins-good-plugins-dv1394src.html#GstDV1394Src--channel"/>
     <keyword type="property" name="The &quot;consecutive&quot; property" link="gst-plugins-good-plugins-dv1394src.html#GstDV1394Src--consecutive"/>
@@ -531,23 +531,23 @@
     <keyword type="property" name="The &quot;use-avc&quot; property" link="gst-plugins-good-plugins-dv1394src.html#GstDV1394Src--use-avc"/>
     <keyword type="property" name="The &quot;device-name&quot; property" link="gst-plugins-good-plugins-dv1394src.html#GstDV1394Src--device-name"/>
     <keyword type="signal" name="The &quot;frame-dropped&quot; signal" link="gst-plugins-good-plugins-dv1394src.html#GstDV1394Src-frame-dropped"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-dvdec.html#idp11066512"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-dvdec.html#idp11540880"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-dvdec.html#idp6265136"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-dvdec.html#idp6443520"/>
     <keyword type="struct" name="struct GstDVDec" link="gst-plugins-good-plugins-dvdec.html#GstDVDec-struct"/>
     <keyword type="property" name="The &quot;clamp-chroma&quot; property" link="gst-plugins-good-plugins-dvdec.html#GstDVDec--clamp-chroma"/>
     <keyword type="property" name="The &quot;clamp-luma&quot; property" link="gst-plugins-good-plugins-dvdec.html#GstDVDec--clamp-luma"/>
     <keyword type="property" name="The &quot;drop-factor&quot; property" link="gst-plugins-good-plugins-dvdec.html#GstDVDec--drop-factor"/>
     <keyword type="property" name="The &quot;quality&quot; property" link="gst-plugins-good-plugins-dvdec.html#GstDVDec--quality"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-dvdemux.html#idp2690912"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-dvdemux.html#idp7547488"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-dvdemux.html#idp11131760"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-dvdemux.html#idp8973888"/>
     <keyword type="struct" name="struct GstDVDemux" link="gst-plugins-good-plugins-dvdemux.html#GstDVDemux-struct"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-edgetv.html#idp2704416"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-edgetv.html#idp7328208"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-edgetv.html#idp10036848"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-edgetv.html#idp9574256"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-edgetv.html#idp7723744"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-edgetv.html#idp10593904"/>
     <keyword type="struct" name="struct GstEdgeTV" link="gst-plugins-good-plugins-edgetv.html#GstEdgeTV-struct"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-equalizer-10bands.html#idp12681408"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-equalizer-10bands.html#idp6681536"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-equalizer-10bands.html#idp13272720"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-equalizer-10bands.html#idp14333376"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-equalizer-10bands.html#idp5770256"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-equalizer-10bands.html#idp7063392"/>
     <keyword type="struct" name="struct GstIirEqualizer10Bands" link="gst-plugins-good-plugins-equalizer-10bands.html#GstIirEqualizer10Bands-struct"/>
     <keyword type="property" name="The &quot;band0&quot; property" link="gst-plugins-good-plugins-equalizer-10bands.html#GstIirEqualizer10Bands--band0"/>
     <keyword type="property" name="The &quot;band1&quot; property" link="gst-plugins-good-plugins-equalizer-10bands.html#GstIirEqualizer10Bands--band1"/>
@@ -559,24 +559,24 @@
     <keyword type="property" name="The &quot;band7&quot; property" link="gst-plugins-good-plugins-equalizer-10bands.html#GstIirEqualizer10Bands--band7"/>
     <keyword type="property" name="The &quot;band8&quot; property" link="gst-plugins-good-plugins-equalizer-10bands.html#GstIirEqualizer10Bands--band8"/>
     <keyword type="property" name="The &quot;band9&quot; property" link="gst-plugins-good-plugins-equalizer-10bands.html#GstIirEqualizer10Bands--band9"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-equalizer-3bands.html#idp13457696"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-equalizer-3bands.html#idp12006848"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-equalizer-3bands.html#idp11650640"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-equalizer-3bands.html#idp12467376"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-equalizer-3bands.html#idp14230320"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-equalizer-3bands.html#idp8724848"/>
     <keyword type="struct" name="struct GstIirEqualizer3Bands" link="gst-plugins-good-plugins-equalizer-3bands.html#GstIirEqualizer3Bands-struct"/>
     <keyword type="property" name="The &quot;band0&quot; property" link="gst-plugins-good-plugins-equalizer-3bands.html#GstIirEqualizer3Bands--band0"/>
     <keyword type="property" name="The &quot;band1&quot; property" link="gst-plugins-good-plugins-equalizer-3bands.html#GstIirEqualizer3Bands--band1"/>
     <keyword type="property" name="The &quot;band2&quot; property" link="gst-plugins-good-plugins-equalizer-3bands.html#GstIirEqualizer3Bands--band2"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-equalizer-nbands.html#idp12256624"/>
-    <keyword type="" name="Example code" link="gst-plugins-good-plugins-equalizer-nbands.html#idp11701904"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-equalizer-nbands.html#idp7105376"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-equalizer-nbands.html#idp6945472"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-equalizer-nbands.html#idp8082352"/>
+    <keyword type="" name="Example code" link="gst-plugins-good-plugins-equalizer-nbands.html#idp10087056"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-equalizer-nbands.html#idp14304320"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-equalizer-nbands.html#idp12924512"/>
     <keyword type="struct" name="struct GstIirEqualizerNBands" link="gst-plugins-good-plugins-equalizer-nbands.html#GstIirEqualizerNBands-struct"/>
     <keyword type="property" name="The &quot;num-bands&quot; property" link="gst-plugins-good-plugins-equalizer-nbands.html#GstIirEqualizerNBands--num-bands"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-flacdec.html#idp8757696"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-flacdec.html#idp11093664"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-flacdec.html#idp5923824"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-flacdec.html#idp13413648"/>
     <keyword type="struct" name="struct GstFlacDec" link="gst-plugins-good-plugins-flacdec.html#GstFlacDec-struct"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-flacenc.html#idp5780272"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-flacenc.html#idp11581408"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-flacenc.html#idp14131424"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-flacenc.html#idp14122528"/>
     <keyword type="struct" name="struct GstFlacEnc" link="gst-plugins-good-plugins-flacenc.html#GstFlacEnc-struct"/>
     <keyword type="property" name="The &quot;blocksize&quot; property" link="gst-plugins-good-plugins-flacenc.html#GstFlacEnc--blocksize"/>
     <keyword type="property" name="The &quot;escape-coding&quot; property" link="gst-plugins-good-plugins-flacenc.html#GstFlacEnc--escape-coding"/>
@@ -593,134 +593,134 @@
     <keyword type="property" name="The &quot;streamable-subset&quot; property" link="gst-plugins-good-plugins-flacenc.html#GstFlacEnc--streamable-subset"/>
     <keyword type="property" name="The &quot;padding&quot; property" link="gst-plugins-good-plugins-flacenc.html#GstFlacEnc--padding"/>
     <keyword type="property" name="The &quot;seekpoints&quot; property" link="gst-plugins-good-plugins-flacenc.html#GstFlacEnc--seekpoints"/>
-    <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-flacparse.html#idp5278112"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-flacparse.html#idp9516336"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-flacparse.html#idp2264560"/>
+    <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-flacparse.html#idp11591312"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-flacparse.html#idp8033664"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-flacparse.html#idp9826528"/>
     <keyword type="struct" name="struct GstFlacParse" link="gst-plugins-good-plugins-flacparse.html#GstFlacParse-struct"/>
     <keyword type="property" name="The &quot;check-frame-checksums&quot; property" link="gst-plugins-good-plugins-flacparse.html#GstFlacParse--check-frame-checksums"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-flactag.html#idp7725664"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-flactag.html#idp11325344"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-flactag.html#idp9078976"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-flactag.html#idp9347696"/>
     <keyword type="struct" name="struct GstFlacTag" link="gst-plugins-good-plugins-flactag.html#GstFlacTag-struct"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-flvdemux.html#idp8181024"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-flvdemux.html#idp11678112"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-flvdemux.html#idp5862512"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-flvdemux.html#idp9203600"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-flvdemux.html#idp13044864"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-flvdemux.html#idp9476576"/>
     <keyword type="struct" name="struct GstFlvDemux" link="gst-plugins-good-plugins-flvdemux.html#GstFlvDemux-struct"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-flvmux.html#idp11936272"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-flvmux.html#idp6450800"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-flvmux.html#idp10194192"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-flvmux.html#idp13147376"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-flvmux.html#idp11327712"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-flvmux.html#idp6870144"/>
     <keyword type="struct" name="GstFlvMux" link="gst-plugins-good-plugins-flvmux.html#GstFlvMux-struct"/>
     <keyword type="property" name="The &quot;is-live&quot; property" link="gst-plugins-good-plugins-flvmux.html#GstFlvMux--is-live"/>
     <keyword type="property" name="The &quot;streamable&quot; property" link="gst-plugins-good-plugins-flvmux.html#GstFlvMux--streamable"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-flxdec.html#idp8838624"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-flxdec.html#idp9990176"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-flxdec.html#idp8967152"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-flxdec.html#idp13584480"/>
     <keyword type="struct" name="struct GstFlxDec" link="gst-plugins-good-plugins-flxdec.html#GstFlxDec-struct"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-gamma.html#idp7831248"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-gamma.html#idp8374064"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-gamma.html#idp11971904"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-gamma.html#idp11779792"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-gamma.html#idp12452368"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-gamma.html#idp8933504"/>
     <keyword type="struct" name="struct GstGamma" link="gst-plugins-good-plugins-gamma.html#GstGamma-struct"/>
     <keyword type="property" name="The &quot;gamma&quot; property" link="gst-plugins-good-plugins-gamma.html#GstGamma--gamma"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-gdkpixbufsink.html#idp10826272"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-gdkpixbufsink.html#idp11380528"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-gdkpixbufsink.html#idp6571584"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-gdkpixbufsink.html#idp11818064"/>
     <keyword type="struct" name="struct GstGdkPixbufSink" link="gst-plugins-good-plugins-gdkpixbufsink.html#GstGdkPixbufSink"/>
     <keyword type="property" name="The &quot;last-pixbuf&quot; property" link="gst-plugins-good-plugins-gdkpixbufsink.html#GstGdkPixbufSink--last-pixbuf"/>
     <keyword type="property" name="The &quot;send-messages&quot; property" link="gst-plugins-good-plugins-gdkpixbufsink.html#GstGdkPixbufSink--send-messages"/>
     <keyword type="property" name="The &quot;post-messages&quot; property" link="gst-plugins-good-plugins-gdkpixbufsink.html#GstGdkPixbufSink--post-messages"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-goom.html#idp13676048"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-goom.html#idp5812672"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-goom.html#idp10060656"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-goom.html#idp12894848"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-goom.html#idp7569040"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-goom.html#idp6657312"/>
     <keyword type="struct" name="struct GstGoom" link="gst-plugins-good-plugins-goom.html#GstGoom-struct"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-goom2k1.html#idp8087296"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-goom2k1.html#idp2828400"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-goom2k1.html#idp11687600"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-goom2k1.html#idp8895024"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-goom2k1.html#idp11762288"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-goom2k1.html#idp11626624"/>
     <keyword type="struct" name="struct GstGoom" link="gst-plugins-good-plugins-goom2k1.html#GstGoom-struct"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-halaudiosink.html#idp14160688"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-halaudiosink.html#idp14692672"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-halaudiosrc.html#idp6929200"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-halaudiosrc.html#idp13351728"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-hdv1394src.html#idp14566048"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-hdv1394src.html#idp11549312"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-halaudiosink.html#idp9813296"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-halaudiosink.html#idp12480080"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-halaudiosrc.html#idp5920880"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-halaudiosrc.html#idp10115680"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-hdv1394src.html#idp14486608"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-hdv1394src.html#idp13003296"/>
     <keyword type="struct" name="struct GstHDV1394Src" link="gst-plugins-good-plugins-hdv1394src.html#GstHDV1394Src-struct"/>
     <keyword type="property" name="The &quot;channel&quot; property" link="gst-plugins-good-plugins-hdv1394src.html#GstHDV1394Src--channel"/>
     <keyword type="property" name="The &quot;device-name&quot; property" link="gst-plugins-good-plugins-hdv1394src.html#GstHDV1394Src--device-name"/>
     <keyword type="property" name="The &quot;guid&quot; property" link="gst-plugins-good-plugins-hdv1394src.html#GstHDV1394Src--guid"/>
     <keyword type="property" name="The &quot;port&quot; property" link="gst-plugins-good-plugins-hdv1394src.html#GstHDV1394Src--port"/>
     <keyword type="property" name="The &quot;use-avc&quot; property" link="gst-plugins-good-plugins-hdv1394src.html#GstHDV1394Src--use-avc"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-icydemux.html#idp8752736"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-icydemux.html#idp6852624"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-icydemux.html#idp7234704"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-icydemux.html#idp11712848"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-icydemux.html#idp13509056"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-icydemux.html#idp5485952"/>
     <keyword type="struct" name="struct GstICYDemux" link="gst-plugins-good-plugins-icydemux.html#GstICYDemux-struct"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-id3demux.html#idp1554832"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-id3demux.html#idp8865840"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-id3demux.html#idp12020096"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-id3demux.html#idp12933904"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-id3demux.html#idp9773552"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-id3demux.html#idp9938576"/>
     <keyword type="struct" name="struct GstID3Demux" link="gst-plugins-good-plugins-id3demux.html#GstID3Demux-struct"/>
     <keyword type="property" name="The &quot;prefer-v1&quot; property" link="gst-plugins-good-plugins-id3demux.html#GstID3Demux--prefer-v1"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-id3v2mux.html#idp6447088"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-id3v2mux.html#idp13280416"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-id3v2mux.html#idp12796832"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-id3v2mux.html#idp13305392"/>
     <keyword type="struct" name="struct GstId3v2Mux" link="gst-plugins-good-plugins-id3v2mux.html#GstId3v2Mux-struct"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-imagefreeze.html#idp11896576"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-imagefreeze.html#idp10630384"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-imagefreeze.html#idp8437888"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-imagefreeze.html#idp14310704"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-imagefreeze.html#idp10794624"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-imagefreeze.html#idp13457184"/>
     <keyword type="struct" name="struct GstImageFreeze" link="gst-plugins-good-plugins-imagefreeze.html#GstImageFreeze-struct"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-interleave.html#idp14622416"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-interleave.html#idp14085984"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-interleave.html#idp6309776"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-interleave.html#idp11052288"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-interleave.html#idp10927472"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-interleave.html#idp11749296"/>
     <keyword type="struct" name="struct GstInterleave" link="gst-plugins-good-plugins-interleave.html#GstInterleave-struct"/>
     <keyword type="property" name="The &quot;channel-positions&quot; property" link="gst-plugins-good-plugins-interleave.html#GstInterleave--channel-positions"/>
     <keyword type="property" name="The &quot;channel-positions-from-input&quot; property" link="gst-plugins-good-plugins-interleave.html#GstInterleave--channel-positions-from-input"/>
-    <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-ismlmux.html#idp12445088"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-ismlmux.html#idp8296592"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-ismlmux.html#idp5735360"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-jackaudiosrc.html#idp14932784"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-jackaudiosrc.html#idp7660400"/>
+    <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-ismlmux.html#idp11996000"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-ismlmux.html#idp13520976"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-ismlmux.html#idp2111536"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-jackaudiosrc.html#idp11547568"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-jackaudiosrc.html#idp6028736"/>
     <keyword type="struct" name="struct GstJackAudioSrc" link="gst-plugins-good-plugins-jackaudiosrc.html#GstJackAudioSrc-struct"/>
     <keyword type="property" name="The &quot;client&quot; property" link="gst-plugins-good-plugins-jackaudiosrc.html#GstJackAudioSrc--client"/>
     <keyword type="property" name="The &quot;connect&quot; property" link="gst-plugins-good-plugins-jackaudiosrc.html#GstJackAudioSrc--connect"/>
     <keyword type="property" name="The &quot;server&quot; property" link="gst-plugins-good-plugins-jackaudiosrc.html#GstJackAudioSrc--server"/>
     <keyword type="property" name="The &quot;client-name&quot; property" link="gst-plugins-good-plugins-jackaudiosrc.html#GstJackAudioSrc--client-name"/>
     <keyword type="property" name="The &quot;transport&quot; property" link="gst-plugins-good-plugins-jackaudiosrc.html#GstJackAudioSrc--transport"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-jackaudiosink.html#idp14199808"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-jackaudiosink.html#idp12583040"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-jackaudiosink.html#idp11351712"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-jackaudiosink.html#idp3040816"/>
     <keyword type="struct" name="struct GstJackAudioSink" link="gst-plugins-good-plugins-jackaudiosink.html#GstJackAudioSink-struct"/>
     <keyword type="property" name="The &quot;client&quot; property" link="gst-plugins-good-plugins-jackaudiosink.html#GstJackAudioSink--client"/>
     <keyword type="property" name="The &quot;connect&quot; property" link="gst-plugins-good-plugins-jackaudiosink.html#GstJackAudioSink--connect"/>
     <keyword type="property" name="The &quot;server&quot; property" link="gst-plugins-good-plugins-jackaudiosink.html#GstJackAudioSink--server"/>
     <keyword type="property" name="The &quot;client-name&quot; property" link="gst-plugins-good-plugins-jackaudiosink.html#GstJackAudioSink--client-name"/>
     <keyword type="property" name="The &quot;transport&quot; property" link="gst-plugins-good-plugins-jackaudiosink.html#GstJackAudioSink--transport"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-jpegdec.html#idp11913216"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-jpegdec.html#idp5547968"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-jpegdec.html#idp13020896"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-jpegdec.html#idp10621456"/>
     <keyword type="struct" name="struct GstJpegDec" link="gst-plugins-good-plugins-jpegdec.html#GstJpegDec-struct"/>
     <keyword type="property" name="The &quot;idct-method&quot; property" link="gst-plugins-good-plugins-jpegdec.html#GstJpegDec--idct-method"/>
     <keyword type="property" name="The &quot;max-errors&quot; property" link="gst-plugins-good-plugins-jpegdec.html#GstJpegDec--max-errors"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-jpegenc.html#idp5863408"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-jpegenc.html#idp13358688"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-jpegenc.html#idp13585120"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-jpegenc.html#idp7128304"/>
     <keyword type="struct" name="struct GstJpegEnc" link="gst-plugins-good-plugins-jpegenc.html#GstJpegEnc-struct"/>
     <keyword type="property" name="The &quot;quality&quot; property" link="gst-plugins-good-plugins-jpegenc.html#GstJpegEnc--quality"/>
     <keyword type="property" name="The &quot;idct-method&quot; property" link="gst-plugins-good-plugins-jpegenc.html#GstJpegEnc--idct-method"/>
     <keyword type="signal" name="The &quot;frame-encoded&quot; signal" link="gst-plugins-good-plugins-jpegenc.html#GstJpegEnc-frame-encoded"/>
-    <keyword type="" name="Example application" link="gst-plugins-good-plugins-level.html#idp10054000"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-level.html#idp12188624"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-level.html#idp15134432"/>
+    <keyword type="" name="Example application" link="gst-plugins-good-plugins-level.html#idp14067184"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-level.html#idp15231584"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-level.html#idp10897040"/>
     <keyword type="struct" name="struct GstLevel" link="gst-plugins-good-plugins-level.html#GstLevel-struct"/>
     <keyword type="property" name="The &quot;interval&quot; property" link="gst-plugins-good-plugins-level.html#GstLevel--interval"/>
     <keyword type="property" name="The &quot;message&quot; property" link="gst-plugins-good-plugins-level.html#GstLevel--message"/>
     <keyword type="property" name="The &quot;peak-falloff&quot; property" link="gst-plugins-good-plugins-level.html#GstLevel--peak-falloff"/>
     <keyword type="property" name="The &quot;peak-ttl&quot; property" link="gst-plugins-good-plugins-level.html#GstLevel--peak-ttl"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-matroskamux.html#idp14139872"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-matroskamux.html#idp7143184"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-matroskamux.html#idp14871456"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-matroskamux.html#idp15352928"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-matroskamux.html#idp13528912"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-matroskamux.html#idp15038080"/>
     <keyword type="struct" name="GstMatroskaMux" link="gst-plugins-good-plugins-matroskamux.html#GstMatroskaMux-struct"/>
     <keyword type="property" name="The &quot;writing-app&quot; property" link="gst-plugins-good-plugins-matroskamux.html#GstMatroskaMux--writing-app"/>
     <keyword type="property" name="The &quot;version&quot; property" link="gst-plugins-good-plugins-matroskamux.html#GstMatroskaMux--version"/>
     <keyword type="property" name="The &quot;min-index-interval&quot; property" link="gst-plugins-good-plugins-matroskamux.html#GstMatroskaMux--min-index-interval"/>
     <keyword type="property" name="The &quot;streamable&quot; property" link="gst-plugins-good-plugins-matroskamux.html#GstMatroskaMux--streamable"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-matroskademux.html#idp12150016"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-matroskademux.html#idp10071664"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-matroskademux.html#idp15544336"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-matroskademux.html#idp7858688"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-matroskademux.html#idp11469104"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-matroskademux.html#idp13845984"/>
     <keyword type="struct" name="GstMatroskaDemux" link="gst-plugins-good-plugins-matroskademux.html#GstMatroskaDemux-struct"/>
     <keyword type="property" name="The &quot;max-gap-time&quot; property" link="gst-plugins-good-plugins-matroskademux.html#GstMatroskaDemux--max-gap-time"/>
-    <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-mj2mux.html#idp14947264"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-mj2mux.html#idp14950608"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-mj2mux.html#idp13684256"/>
+    <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-mj2mux.html#idp16379776"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-mj2mux.html#idp16383120"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-mj2mux.html#idp13655488"/>
     <keyword type="struct" name="GstMJ2Mux" link="gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux-struct"/>
     <keyword type="property" name="The &quot;dts-method&quot; property" link="gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--dts-method"/>
     <keyword type="property" name="The &quot;faststart&quot; property" link="gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--faststart"/>
@@ -731,17 +731,17 @@
     <keyword type="property" name="The &quot;presentation-time&quot; property" link="gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--presentation-time"/>
     <keyword type="property" name="The &quot;streamable&quot; property" link="gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--streamable"/>
     <keyword type="property" name="The &quot;trak-timescale&quot; property" link="gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--trak-timescale"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-monoscope.html#idp15098752"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-monoscope.html#idp10557040"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-monoscope.html#idp14622192"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-monoscope.html#idp14634032"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-monoscope.html#idp13144176"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-monoscope.html#idp16556256"/>
     <keyword type="struct" name="struct GstMonoscope" link="gst-plugins-good-plugins-monoscope.html#GstMonoscope"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-mpegaudioparse.html#idp15916176"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-mpegaudioparse.html#idp12368368"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-mpegaudioparse.html#idp5454560"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-mpegaudioparse.html#idp10058000"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-mpegaudioparse.html#idp10365648"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-mpegaudioparse.html#idp12821264"/>
     <keyword type="struct" name="struct GstMpegAudioParse" link="gst-plugins-good-plugins-mpegaudioparse.html#GstMpegAudioParse-struct"/>
-    <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-mp4mux.html#idp13718864"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-mp4mux.html#idp16971472"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-mp4mux.html#idp14772880"/>
+    <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-mp4mux.html#idp11215424"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-mp4mux.html#idp16346192"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-mp4mux.html#idp14421760"/>
     <keyword type="typedef" name="GstMP4Mux" link="gst-plugins-good-plugins-mp4mux.html#GstMP4Mux"/>
     <keyword type="property" name="The &quot;dts-method&quot; property" link="gst-plugins-good-plugins-mp4mux.html#GstMP4Mux--dts-method"/>
     <keyword type="property" name="The &quot;faststart&quot; property" link="gst-plugins-good-plugins-mp4mux.html#GstMP4Mux--faststart"/>
@@ -752,16 +752,16 @@
     <keyword type="property" name="The &quot;presentation-time&quot; property" link="gst-plugins-good-plugins-mp4mux.html#GstMP4Mux--presentation-time"/>
     <keyword type="property" name="The &quot;streamable&quot; property" link="gst-plugins-good-plugins-mp4mux.html#GstMP4Mux--streamable"/>
     <keyword type="property" name="The &quot;trak-timescale&quot; property" link="gst-plugins-good-plugins-mp4mux.html#GstMP4Mux--trak-timescale"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-mulawdec.html#idp7932992"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-mulawdec.html#idp13612640"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-mulawdec.html#idp6390896"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-mulawdec.html#idp6743376"/>
     <keyword type="struct" name="struct GstMuLawDec" link="gst-plugins-good-plugins-mulawdec.html#GstMuLawDec-struct"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-mulawenc.html#idp15582992"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-mulawenc.html#idp15600032"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-mulawenc.html#idp12671616"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-mulawenc.html#idp11638912"/>
     <keyword type="struct" name="struct GstMuLawDec" link="gst-plugins-good-plugins-mulawenc.html#GstMuLawDec-struct"/>
     <keyword type="struct" name="struct GstMuLawEnc" link="gst-plugins-good-plugins-mulawenc.html#GstMuLawEnc"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-multifilesink.html#idp11279248"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-multifilesink.html#idp12899488"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-multifilesink.html#idp13672064"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-multifilesink.html#idp16984192"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-multifilesink.html#idp15017088"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-multifilesink.html#idp8195056"/>
     <keyword type="struct" name="struct GstMultiFileSink" link="gst-plugins-good-plugins-multifilesink.html#GstMultiFileSink-struct"/>
     <keyword type="enum" name="enum GstMultiFileSinkNext" link="gst-plugins-good-plugins-multifilesink.html#GstMultiFileSinkNext"/>
     <keyword type="property" name="The &quot;location&quot; property" link="gst-plugins-good-plugins-multifilesink.html#GstMultiFileSink--location"/>
@@ -770,9 +770,9 @@
     <keyword type="property" name="The &quot;post-messages&quot; property" link="gst-plugins-good-plugins-multifilesink.html#GstMultiFileSink--post-messages"/>
     <keyword type="property" name="The &quot;max-files&quot; property" link="gst-plugins-good-plugins-multifilesink.html#GstMultiFileSink--max-files"/>
     <keyword type="property" name="The &quot;max-file-size&quot; property" link="gst-plugins-good-plugins-multifilesink.html#GstMultiFileSink--max-file-size"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-multifilesrc.html#idp13648928"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-multifilesrc.html#idp14462128"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-multifilesrc.html#idp13053824"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-multifilesrc.html#idp16445136"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-multifilesrc.html#idp6057696"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-multifilesrc.html#idp15996928"/>
     <keyword type="struct" name="struct GstMultiFileSrc" link="gst-plugins-good-plugins-multifilesrc.html#GstMultiFileSrc-struct"/>
     <keyword type="property" name="The &quot;caps&quot; property" link="gst-plugins-good-plugins-multifilesrc.html#GstMultiFileSrc--caps"/>
     <keyword type="property" name="The &quot;index&quot; property" link="gst-plugins-good-plugins-multifilesrc.html#GstMultiFileSrc--index"/>
@@ -780,20 +780,20 @@
     <keyword type="property" name="The &quot;loop&quot; property" link="gst-plugins-good-plugins-multifilesrc.html#GstMultiFileSrc--loop"/>
     <keyword type="property" name="The &quot;start-index&quot; property" link="gst-plugins-good-plugins-multifilesrc.html#GstMultiFileSrc--start-index"/>
     <keyword type="property" name="The &quot;stop-index&quot; property" link="gst-plugins-good-plugins-multifilesrc.html#GstMultiFileSrc--stop-index"/>
-    <keyword type="" name="Sample pipelines" link="gst-plugins-good-plugins-multipartdemux.html#idp13627088"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-multipartdemux.html#idp15846352"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-multipartdemux.html#idp12900448"/>
+    <keyword type="" name="Sample pipelines" link="gst-plugins-good-plugins-multipartdemux.html#idp14969952"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-multipartdemux.html#idp7024064"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-multipartdemux.html#idp16683584"/>
     <keyword type="struct" name="struct GstMultipartDemux" link="gst-plugins-good-plugins-multipartdemux.html#GstMultipartDemux-struct"/>
     <keyword type="property" name="The &quot;autoscan&quot; property" link="gst-plugins-good-plugins-multipartdemux.html#GstMultipartDemux--autoscan"/>
     <keyword type="property" name="The &quot;boundary&quot; property" link="gst-plugins-good-plugins-multipartdemux.html#GstMultipartDemux--boundary"/>
     <keyword type="property" name="The &quot;single-stream&quot; property" link="gst-plugins-good-plugins-multipartdemux.html#GstMultipartDemux--single-stream"/>
-    <keyword type="" name="Sample pipelines" link="gst-plugins-good-plugins-multipartmux.html#idp7198176"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-multipartmux.html#idp12671808"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-multipartmux.html#idp14974560"/>
+    <keyword type="" name="Sample pipelines" link="gst-plugins-good-plugins-multipartmux.html#idp15901952"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-multipartmux.html#idp3128720"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-multipartmux.html#idp14213872"/>
     <keyword type="struct" name="struct GstMultipartMux" link="gst-plugins-good-plugins-multipartmux.html#GstMultipartMux-struct"/>
     <keyword type="property" name="The &quot;boundary&quot; property" link="gst-plugins-good-plugins-multipartmux.html#GstMultipartMux--boundary"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-multiudpsink.html#idp13416368"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-multiudpsink.html#idp14614272"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-multiudpsink.html#idp15182992"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-multiudpsink.html#idp14663680"/>
     <keyword type="struct" name="struct GstMultiUDPSink" link="gst-plugins-good-plugins-multiudpsink.html#GstMultiUDPSink-struct"/>
     <keyword type="property" name="The &quot;bytes-served&quot; property" link="gst-plugins-good-plugins-multiudpsink.html#GstMultiUDPSink--bytes-served"/>
     <keyword type="property" name="The &quot;bytes-to-serve&quot; property" link="gst-plugins-good-plugins-multiudpsink.html#GstMultiUDPSink--bytes-to-serve"/>
@@ -817,65 +817,65 @@
     <keyword type="signal" name="The &quot;client-removed&quot; signal" link="gst-plugins-good-plugins-multiudpsink.html#GstMultiUDPSink-client-removed"/>
     <keyword type="signal" name="The &quot;get-stats&quot; signal" link="gst-plugins-good-plugins-multiudpsink.html#GstMultiUDPSink-get-stats"/>
     <keyword type="signal" name="The &quot;remove&quot; signal" link="gst-plugins-good-plugins-multiudpsink.html#GstMultiUDPSink-remove"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-optv.html#idp15603072"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-optv.html#idp11528464"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-optv.html#idp15019408"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-optv.html#idp9675584"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-optv.html#idp13501936"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-optv.html#idp7227808"/>
     <keyword type="struct" name="struct GstOpTV" link="gst-plugins-good-plugins-optv.html#GstOpTV-struct"/>
     <keyword type="property" name="The &quot;mode&quot; property" link="gst-plugins-good-plugins-optv.html#GstOpTV--mode"/>
     <keyword type="property" name="The &quot;speed&quot; property" link="gst-plugins-good-plugins-optv.html#GstOpTV--speed"/>
     <keyword type="property" name="The &quot;threshold&quot; property" link="gst-plugins-good-plugins-optv.html#GstOpTV--threshold"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-oss4sink.html#idp16061408"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-oss4sink.html#idp13535600"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-oss4sink.html#idp14166736"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-oss4sink.html#idp13591312"/>
     <keyword type="struct" name="struct GstOss4Sink" link="gst-plugins-good-plugins-oss4sink.html#GstOss4Sink-struct"/>
     <keyword type="property" name="The &quot;device&quot; property" link="gst-plugins-good-plugins-oss4sink.html#GstOss4Sink--device"/>
     <keyword type="property" name="The &quot;device-name&quot; property" link="gst-plugins-good-plugins-oss4sink.html#GstOss4Sink--device-name"/>
     <keyword type="property" name="The &quot;mute&quot; property" link="gst-plugins-good-plugins-oss4sink.html#GstOss4Sink--mute"/>
     <keyword type="property" name="The &quot;volume&quot; property" link="gst-plugins-good-plugins-oss4sink.html#GstOss4Sink--volume"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-oss4src.html#idp13893984"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-oss4src.html#idp13665600"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-oss4src.html#idp16960352"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-oss4src.html#idp15252448"/>
     <keyword type="struct" name="struct GstOss4Source" link="gst-plugins-good-plugins-oss4src.html#GstOss4Source-struct"/>
     <keyword type="property" name="The &quot;device&quot; property" link="gst-plugins-good-plugins-oss4src.html#GstOss4Source--device"/>
     <keyword type="property" name="The &quot;device-name&quot; property" link="gst-plugins-good-plugins-oss4src.html#GstOss4Source--device-name"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-osssink.html#idp17396592"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-osssink.html#idp12343984"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-osssink.html#idp13042544"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-osssink.html#idp15048208"/>
     <keyword type="struct" name="struct GstOssSink" link="gst-plugins-good-plugins-osssink.html#GstOssSink-struct"/>
     <keyword type="property" name="The &quot;device&quot; property" link="gst-plugins-good-plugins-osssink.html#GstOssSink--device"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-osssrc.html#idp14875536"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-osssrc.html#idp12837568"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-osssrc.html#idp14918800"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-osssrc.html#idp16633296"/>
     <keyword type="struct" name="struct GstOssSrc" link="gst-plugins-good-plugins-osssrc.html#GstOssSrc-struct"/>
     <keyword type="property" name="The &quot;device&quot; property" link="gst-plugins-good-plugins-osssrc.html#GstOssSrc--device"/>
     <keyword type="property" name="The &quot;device-name&quot; property" link="gst-plugins-good-plugins-osssrc.html#GstOssSrc--device-name"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-osxaudiosink.html#idp15465232"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-osxaudiosink.html#idp11952400"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-osxaudiosink.html#idp14466992"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-osxaudiosink.html#idp14449936"/>
     <keyword type="struct" name="struct GstOsxAudioSink" link="gst-plugins-good-plugins-osxaudiosink.html#GstOsxAudioSink"/>
     <keyword type="property" name="The &quot;device&quot; property" link="gst-plugins-good-plugins-osxaudiosink.html#GstOsxAudioSink--device"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-osxaudiosrc.html#idp14176992"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-osxaudiosrc.html#idp13268544"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-osxaudiosrc.html#idp13749760"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-osxaudiosrc.html#idp12698672"/>
     <keyword type="struct" name="struct GstOsxAudioSrc" link="gst-plugins-good-plugins-osxaudiosrc.html#GstOsxAudioSrc"/>
     <keyword type="property" name="The &quot;device&quot; property" link="gst-plugins-good-plugins-osxaudiosrc.html#GstOsxAudioSrc--device"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-osxvideosink.html#idp16997200"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-osxvideosink.html#idp14990512"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-osxvideosink.html#idp14476656"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-osxvideosink.html#idp11391024"/>
     <keyword type="struct" name="struct GstOSXVideoSink" link="gst-plugins-good-plugins-osxvideosink.html#GstOSXVideoSink"/>
     <keyword type="property" name="The &quot;embed&quot; property" link="gst-plugins-good-plugins-osxvideosink.html#GstOSXVideoSink--embed"/>
     <keyword type="property" name="The &quot;fullscreen&quot; property" link="gst-plugins-good-plugins-osxvideosink.html#GstOSXVideoSink--fullscreen"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-pngdec.html#idp17045680"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-pngdec.html#idp12461632"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-pngdec.html#idp13348768"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-pngdec.html#idp17448528"/>
     <keyword type="struct" name="struct GstPngDec" link="gst-plugins-good-plugins-pngdec.html#GstPngDec-struct"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-pngenc.html#idp8801328"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-pngenc.html#idp17387600"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-pngenc.html#idp16802192"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-pngenc.html#idp17219808"/>
     <keyword type="struct" name="struct GstPngEnc" link="gst-plugins-good-plugins-pngenc.html#GstPngEnc-struct"/>
     <keyword type="property" name="The &quot;compression-level&quot; property" link="gst-plugins-good-plugins-pngenc.html#GstPngEnc--compression-level"/>
     <keyword type="property" name="The &quot;snapshot&quot; property" link="gst-plugins-good-plugins-pngenc.html#GstPngEnc--snapshot"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-progressreport.html#idp16573728"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-progressreport.html#idp14888352"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-progressreport.html#idp17620800"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-progressreport.html#idp16876784"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-progressreport.html#idp17475792"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-progressreport.html#idp18411504"/>
     <keyword type="struct" name="struct GstProgressReport" link="gst-plugins-good-plugins-progressreport.html#GstProgressReport-struct"/>
     <keyword type="property" name="The &quot;silent&quot; property" link="gst-plugins-good-plugins-progressreport.html#GstProgressReport--silent"/>
     <keyword type="property" name="The &quot;update-freq&quot; property" link="gst-plugins-good-plugins-progressreport.html#GstProgressReport--update-freq"/>
     <keyword type="property" name="The &quot;format&quot; property" link="gst-plugins-good-plugins-progressreport.html#GstProgressReport--format"/>
     <keyword type="property" name="The &quot;do-query&quot; property" link="gst-plugins-good-plugins-progressreport.html#GstProgressReport--do-query"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-pulsesink.html#idp14226496"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-pulsesink.html#idp18533488"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-pulsesink.html#idp18505952"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-pulsesink.html#idp18169792"/>
     <keyword type="struct" name="struct GstPulseSink" link="gst-plugins-good-plugins-pulsesink.html#GstPulseSink-struct"/>
     <keyword type="property" name="The &quot;device&quot; property" link="gst-plugins-good-plugins-pulsesink.html#GstPulseSink--device"/>
     <keyword type="property" name="The &quot;server&quot; property" link="gst-plugins-good-plugins-pulsesink.html#GstPulseSink--server"/>
@@ -885,8 +885,8 @@
     <keyword type="property" name="The &quot;client&quot; property" link="gst-plugins-good-plugins-pulsesink.html#GstPulseSink--client"/>
     <keyword type="property" name="The &quot;stream-properties&quot; property" link="gst-plugins-good-plugins-pulsesink.html#GstPulseSink--stream-properties"/>
     <keyword type="property" name="The &quot;client-name&quot; property" link="gst-plugins-good-plugins-pulsesink.html#GstPulseSink--client-name"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-pulsesrc.html#idp15830176"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-pulsesrc.html#idp16137760"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-pulsesrc.html#idp18467712"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-pulsesrc.html#idp16571856"/>
     <keyword type="struct" name="struct GstPulseSrc" link="gst-plugins-good-plugins-pulsesrc.html#GstPulseSrc-struct"/>
     <keyword type="property" name="The &quot;device&quot; property" link="gst-plugins-good-plugins-pulsesrc.html#GstPulseSrc--device"/>
     <keyword type="property" name="The &quot;server&quot; property" link="gst-plugins-good-plugins-pulsesrc.html#GstPulseSrc--server"/>
@@ -897,19 +897,19 @@
     <keyword type="property" name="The &quot;source-output-index&quot; property" link="gst-plugins-good-plugins-pulsesrc.html#GstPulseSrc--source-output-index"/>
     <keyword type="property" name="The &quot;volume&quot; property" link="gst-plugins-good-plugins-pulsesrc.html#GstPulseSrc--volume"/>
     <keyword type="property" name="The &quot;client-name&quot; property" link="gst-plugins-good-plugins-pulsesrc.html#GstPulseSrc--client-name"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-quarktv.html#idp16982704"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-quarktv.html#idp12094928"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-quarktv.html#idp7666208"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-quarktv.html#idp16931968"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-quarktv.html#idp16592720"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-quarktv.html#idp18151408"/>
     <keyword type="struct" name="struct GstQuarkTV" link="gst-plugins-good-plugins-quarktv.html#GstQuarkTV-struct"/>
     <keyword type="property" name="The &quot;planes&quot; property" link="gst-plugins-good-plugins-quarktv.html#GstQuarkTV--planes"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-qtdemux.html#idp18579184"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-qtdemux.html#idp18396848"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-qtdemux.html#idp14995312"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-qtdemux.html#idp16508992"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-qtdemux.html#idp11555520"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-qtdemux.html#idp18441568"/>
     <keyword type="struct" name="struct GstQTDemux" link="gst-plugins-good-plugins-qtdemux.html#GstQTDemux-struct"/>
     <keyword type="signal" name="The &quot;got-redirect&quot; signal" link="gst-plugins-good-plugins-qtdemux.html#GstQTDemux-got-redirect"/>
-    <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-qtmux.html#idp14533840"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-qtmux.html#idp18089440"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-qtmux.html#idp18220912"/>
+    <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-qtmux.html#idp15040608"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-qtmux.html#idp17984064"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-qtmux.html#idp16286576"/>
     <keyword type="struct" name="struct GstQTMux" link="gst-plugins-good-plugins-qtmux.html#GstQTMux-struct"/>
     <keyword type="property" name="The &quot;dts-method&quot; property" link="gst-plugins-good-plugins-qtmux.html#GstQTMux--dts-method"/>
     <keyword type="property" name="The &quot;faststart&quot; property" link="gst-plugins-good-plugins-qtmux.html#GstQTMux--faststart"/>
@@ -920,9 +920,9 @@
     <keyword type="property" name="The &quot;presentation-time&quot; property" link="gst-plugins-good-plugins-qtmux.html#GstQTMux--presentation-time"/>
     <keyword type="property" name="The &quot;streamable&quot; property" link="gst-plugins-good-plugins-qtmux.html#GstQTMux--streamable"/>
     <keyword type="property" name="The &quot;trak-timescale&quot; property" link="gst-plugins-good-plugins-qtmux.html#GstQTMux--trak-timescale"/>
-    <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-qtmoovrecover.html#idp16289536"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-qtmoovrecover.html#idp17935520"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-qtmoovrecover.html#idp13683776"/>
+    <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-qtmoovrecover.html#idp19021920"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-qtmoovrecover.html#idp14994016"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-qtmoovrecover.html#idp18410608"/>
     <keyword type="struct" name="struct GstQTMoovRecover" link="gst-plugins-good-plugins-qtmoovrecover.html#GstQTMoovRecover-struct"/>
     <keyword type="struct" name="struct GstQTMoovRecoverClass" link="gst-plugins-good-plugins-qtmoovrecover.html#GstQTMoovRecoverClass"/>
     <keyword type="function" name="gst_qt_moov_recover_get_type ()" link="gst-plugins-good-plugins-qtmoovrecover.html#gst-qt-moov-recover-get-type"/>
@@ -931,37 +931,37 @@
     <keyword type="property" name="The &quot;faststart-mode&quot; property" link="gst-plugins-good-plugins-qtmoovrecover.html#GstQTMoovRecover--faststart-mode"/>
     <keyword type="property" name="The &quot;fixed-output&quot; property" link="gst-plugins-good-plugins-qtmoovrecover.html#GstQTMoovRecover--fixed-output"/>
     <keyword type="property" name="The &quot;recovery-input&quot; property" link="gst-plugins-good-plugins-qtmoovrecover.html#GstQTMoovRecover--recovery-input"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-radioactv.html#idp17938752"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-radioactv.html#idp17974720"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-radioactv.html#idp18371584"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-radioactv.html#idp15095104"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-radioactv.html#idp18423808"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-radioactv.html#idp18965008"/>
     <keyword type="struct" name="struct GstRadioacTV" link="gst-plugins-good-plugins-radioactv.html#GstRadioacTV-struct"/>
     <keyword type="property" name="The &quot;color&quot; property" link="gst-plugins-good-plugins-radioactv.html#GstRadioacTV--color"/>
     <keyword type="property" name="The &quot;interval&quot; property" link="gst-plugins-good-plugins-radioactv.html#GstRadioacTV--interval"/>
     <keyword type="property" name="The &quot;mode&quot; property" link="gst-plugins-good-plugins-radioactv.html#GstRadioacTV--mode"/>
     <keyword type="property" name="The &quot;trigger&quot; property" link="gst-plugins-good-plugins-radioactv.html#GstRadioacTV--trigger"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-revtv.html#idp15114448"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-revtv.html#idp18604560"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-revtv.html#idp18985248"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-revtv.html#idp18508432"/>
     <keyword type="struct" name="struct GstRevTV" link="gst-plugins-good-plugins-revtv.html#GstRevTV-struct"/>
     <keyword type="property" name="The &quot;delay&quot; property" link="gst-plugins-good-plugins-revtv.html#GstRevTV--delay"/>
     <keyword type="property" name="The &quot;gain&quot; property" link="gst-plugins-good-plugins-revtv.html#GstRevTV--gain"/>
     <keyword type="property" name="The &quot;linespace&quot; property" link="gst-plugins-good-plugins-revtv.html#GstRevTV--linespace"/>
-    <keyword type="" name="Example launch lines" link="gst-plugins-good-plugins-rganalysis.html#idp18377488"/>
-    <keyword type="" name="Acknowledgements" link="gst-plugins-good-plugins-rganalysis.html#idp16057808"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rganalysis.html#idp16076176"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rganalysis.html#idp16534736"/>
+    <keyword type="" name="Example launch lines" link="gst-plugins-good-plugins-rganalysis.html#idp17336704"/>
+    <keyword type="" name="Acknowledgements" link="gst-plugins-good-plugins-rganalysis.html#idp17701760"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rganalysis.html#idp16660448"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rganalysis.html#idp15233984"/>
     <keyword type="struct" name="struct GstRgAnalysis" link="gst-plugins-good-plugins-rganalysis.html#GstRgAnalysis-struct"/>
     <keyword type="property" name="The &quot;forced&quot; property" link="gst-plugins-good-plugins-rganalysis.html#GstRgAnalysis--forced"/>
     <keyword type="property" name="The &quot;num-tracks&quot; property" link="gst-plugins-good-plugins-rganalysis.html#GstRgAnalysis--num-tracks"/>
     <keyword type="property" name="The &quot;reference-level&quot; property" link="gst-plugins-good-plugins-rganalysis.html#GstRgAnalysis--reference-level"/>
     <keyword type="property" name="The &quot;message&quot; property" link="gst-plugins-good-plugins-rganalysis.html#GstRgAnalysis--message"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-rglimiter.html#idp17417984"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rglimiter.html#idp16095728"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rglimiter.html#idp12715696"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-rglimiter.html#idp16576208"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rglimiter.html#idp13916960"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rglimiter.html#idp18335424"/>
     <keyword type="struct" name="struct GstRgLimiter" link="gst-plugins-good-plugins-rglimiter.html#GstRgLimiter-struct"/>
     <keyword type="property" name="The &quot;enabled&quot; property" link="gst-plugins-good-plugins-rglimiter.html#GstRgLimiter--enabled"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-rgvolume.html#idp11662896"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rgvolume.html#idp15798384"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rgvolume.html#idp17320768"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-rgvolume.html#idp19014832"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rgvolume.html#idp18625824"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rgvolume.html#idp19948352"/>
     <keyword type="struct" name="struct GstRgVolume" link="gst-plugins-good-plugins-rgvolume.html#GstRgVolume-struct"/>
     <keyword type="property" name="The &quot;album-mode&quot; property" link="gst-plugins-good-plugins-rgvolume.html#GstRgVolume--album-mode"/>
     <keyword type="property" name="The &quot;fallback-gain&quot; property" link="gst-plugins-good-plugins-rgvolume.html#GstRgVolume--fallback-gain"/>
@@ -969,14 +969,14 @@
     <keyword type="property" name="The &quot;pre-amp&quot; property" link="gst-plugins-good-plugins-rgvolume.html#GstRgVolume--pre-amp"/>
     <keyword type="property" name="The &quot;result-gain&quot; property" link="gst-plugins-good-plugins-rgvolume.html#GstRgVolume--result-gain"/>
     <keyword type="property" name="The &quot;target-gain&quot; property" link="gst-plugins-good-plugins-rgvolume.html#GstRgVolume--target-gain"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-rippletv.html#idp14494592"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rippletv.html#idp18386560"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rippletv.html#idp12922656"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-rippletv.html#idp18655552"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rippletv.html#idp12788160"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rippletv.html#idp17201552"/>
     <keyword type="struct" name="struct GstRippleTV" link="gst-plugins-good-plugins-rippletv.html#GstRippleTV-struct"/>
     <keyword type="property" name="The &quot;mode&quot; property" link="gst-plugins-good-plugins-rippletv.html#GstRippleTV--mode"/>
     <keyword type="property" name="The &quot;reset&quot; property" link="gst-plugins-good-plugins-rippletv.html#GstRippleTV--reset"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpdec.html#idp18422528"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpdec.html#idp15775200"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpdec.html#idp17158784"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpdec.html#idp19145984"/>
     <keyword type="struct" name="struct GstRTPDec" link="gst-plugins-good-plugins-rtpdec.html#GstRTPDec-struct"/>
     <keyword type="property" name="The &quot;skip&quot; property" link="gst-plugins-good-plugins-rtpdec.html#GstRTPDec--skip"/>
     <keyword type="property" name="The &quot;latency&quot; property" link="gst-plugins-good-plugins-rtpdec.html#GstRTPDec--latency"/>
@@ -988,19 +988,19 @@
     <keyword type="signal" name="The &quot;on-ssrc-collision&quot; signal" link="gst-plugins-good-plugins-rtpdec.html#GstRTPDec-on-ssrc-collision"/>
     <keyword type="signal" name="The &quot;on-ssrc-validated&quot; signal" link="gst-plugins-good-plugins-rtpdec.html#GstRTPDec-on-ssrc-validated"/>
     <keyword type="signal" name="The &quot;on-timeout&quot; signal" link="gst-plugins-good-plugins-rtpdec.html#GstRTPDec-on-timeout"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpj2kpay.html#idp15023856"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpj2kpay.html#idp15432080"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpj2kpay.html#idp19010752"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpj2kpay.html#idp17027424"/>
     <keyword type="struct" name="struct GstRtpJ2KPay" link="gst-plugins-good-plugins-rtpj2kpay.html#GstRtpJ2KPay-struct"/>
     <keyword type="property" name="The &quot;buffer-list&quot; property" link="gst-plugins-good-plugins-rtpj2kpay.html#GstRtpJ2KPay--buffer-list"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpjpegpay.html#idp19262176"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpjpegpay.html#idp16372944"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpjpegpay.html#idp15939184"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpjpegpay.html#idp18477600"/>
     <keyword type="struct" name="struct GstRtpJPEGPay" link="gst-plugins-good-plugins-rtpjpegpay.html#GstRtpJPEGPay-struct"/>
     <keyword type="property" name="The &quot;quality&quot; property" link="gst-plugins-good-plugins-rtpjpegpay.html#GstRtpJPEGPay--quality"/>
     <keyword type="property" name="The &quot;type&quot; property" link="gst-plugins-good-plugins-rtpjpegpay.html#GstRtpJPEGPay--type"/>
     <keyword type="property" name="The &quot;buffer-list&quot; property" link="gst-plugins-good-plugins-rtpjpegpay.html#GstRtpJPEGPay--buffer-list"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-rtspsrc.html#idp16812576"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtspsrc.html#idp16968336"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtspsrc.html#idp14126928"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-rtspsrc.html#idp19933040"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtspsrc.html#idp19780176"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtspsrc.html#idp16008368"/>
     <keyword type="struct" name="struct GstRTSPSrc" link="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc-struct"/>
     <keyword type="property" name="The &quot;debug&quot; property" link="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc--debug"/>
     <keyword type="property" name="The &quot;location&quot; property" link="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc--location"/>
@@ -1021,8 +1021,8 @@
     <keyword type="property" name="The &quot;udp-buffer-size&quot; property" link="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc--udp-buffer-size"/>
     <keyword type="property" name="The &quot;short-header&quot; property" link="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc--short-header"/>
     <keyword type="property" name="The &quot;do-rtsp-keep-alive&quot; property" link="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc--do-rtsp-keep-alive"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpbin.html#idp19963648"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpbin.html#idp19971104"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpbin.html#idp20413840"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpbin.html#idp20707808"/>
     <keyword type="struct" name="struct GstRtpBin" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-struct"/>
     <keyword type="property" name="The &quot;do-lost&quot; property" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin--do-lost"/>
     <keyword type="property" name="The &quot;latency&quot; property" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin--latency"/>
@@ -1049,8 +1049,8 @@
     <keyword type="signal" name="The &quot;request-pt-map&quot; signal" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-request-pt-map"/>
     <keyword type="signal" name="The &quot;reset-sync&quot; signal" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-reset-sync"/>
     <keyword type="signal" name="The &quot;payload-type-change&quot; signal" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-payload-type-change"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpjitterbuffer.html#idp15909456"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpjitterbuffer.html#idp17936192"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpjitterbuffer.html#idp14811488"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpjitterbuffer.html#idp17208800"/>
     <keyword type="struct" name="struct GstRtpJitterBuffer" link="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer-struct"/>
     <keyword type="property" name="The &quot;do-lost&quot; property" link="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer--do-lost"/>
     <keyword type="property" name="The &quot;drop-on-latency&quot; property" link="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer--drop-on-latency"/>
@@ -1063,15 +1063,15 @@
     <keyword type="signal" name="The &quot;on-npt-stop&quot; signal" link="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer-on-npt-stop"/>
     <keyword type="signal" name="The &quot;request-pt-map&quot; signal" link="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer-request-pt-map"/>
     <keyword type="signal" name="The &quot;set-active&quot; signal" link="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer-set-active"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpptdemux.html#idp18333344"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpptdemux.html#idp18026816"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpptdemux.html#idp17960880"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpptdemux.html#idp19988096"/>
     <keyword type="struct" name="struct GstRtpPtDemux" link="gst-plugins-good-plugins-rtpptdemux.html#GstRtpPtDemux-struct"/>
     <keyword type="signal" name="The &quot;clear-pt-map&quot; signal" link="gst-plugins-good-plugins-rtpptdemux.html#GstRtpPtDemux-clear-pt-map"/>
     <keyword type="signal" name="The &quot;new-payload-type&quot; signal" link="gst-plugins-good-plugins-rtpptdemux.html#GstRtpPtDemux-new-payload-type"/>
     <keyword type="signal" name="The &quot;payload-type-change&quot; signal" link="gst-plugins-good-plugins-rtpptdemux.html#GstRtpPtDemux-payload-type-change"/>
     <keyword type="signal" name="The &quot;request-pt-map&quot; signal" link="gst-plugins-good-plugins-rtpptdemux.html#GstRtpPtDemux-request-pt-map"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpsession.html#idp20768944"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpsession.html#idp9068560"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpsession.html#idp18754992"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpsession.html#idp15781728"/>
     <keyword type="struct" name="struct GstRtpSession" link="gst-plugins-good-plugins-rtpsession.html#GstRtpSession-struct"/>
     <keyword type="property" name="The &quot;bandwidth&quot; property" link="gst-plugins-good-plugins-rtpsession.html#GstRtpSession--bandwidth"/>
     <keyword type="property" name="The &quot;internal-session&quot; property" link="gst-plugins-good-plugins-rtpsession.html#GstRtpSession--internal-session"/>
@@ -1095,19 +1095,19 @@
     <keyword type="signal" name="The &quot;on-ssrc-validated&quot; signal" link="gst-plugins-good-plugins-rtpsession.html#GstRtpSession-on-ssrc-validated"/>
     <keyword type="signal" name="The &quot;on-timeout&quot; signal" link="gst-plugins-good-plugins-rtpsession.html#GstRtpSession-on-timeout"/>
     <keyword type="signal" name="The &quot;request-pt-map&quot; signal" link="gst-plugins-good-plugins-rtpsession.html#GstRtpSession-request-pt-map"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpssrcdemux.html#idp18338576"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpssrcdemux.html#idp17846320"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpssrcdemux.html#idp16913344"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpssrcdemux.html#idp9722384"/>
     <keyword type="struct" name="struct GstRtpSsrcDemux" link="gst-plugins-good-plugins-rtpssrcdemux.html#GstRtpSsrcDemux-struct"/>
     <keyword type="signal" name="The &quot;clear-ssrc&quot; signal" link="gst-plugins-good-plugins-rtpssrcdemux.html#GstRtpSsrcDemux-clear-ssrc"/>
     <keyword type="signal" name="The &quot;new-ssrc-pad&quot; signal" link="gst-plugins-good-plugins-rtpssrcdemux.html#GstRtpSsrcDemux-new-ssrc-pad"/>
     <keyword type="signal" name="The &quot;removed-ssrc-pad&quot; signal" link="gst-plugins-good-plugins-rtpssrcdemux.html#GstRtpSsrcDemux-removed-ssrc-pad"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-shagadelictv.html#idp11613744"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-shagadelictv.html#idp19951856"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-shagadelictv.html#idp19820576"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-shagadelictv.html#idp19823328"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-shagadelictv.html#idp10051232"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-shagadelictv.html#idp17856288"/>
     <keyword type="struct" name="struct GstShagadelicTV" link="gst-plugins-good-plugins-shagadelictv.html#GstShagadelicTV-struct"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-shapewipe.html#idp19928560"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-shapewipe.html#idp13802976"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-shapewipe.html#idp17159696"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-shapewipe.html#idp17990864"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-shapewipe.html#idp19575648"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-shapewipe.html#idp18799072"/>
     <keyword type="struct" name="struct GstShapeWipe" link="gst-plugins-good-plugins-shapewipe.html#GstShapeWipe-struct"/>
     <keyword type="property" name="The &quot;border&quot; property" link="gst-plugins-good-plugins-shapewipe.html#GstShapeWipe--border"/>
     <keyword type="property" name="The &quot;position&quot; property" link="gst-plugins-good-plugins-shapewipe.html#GstShapeWipe--position"/>
@@ -1117,9 +1117,9 @@
     <keyword type="property" name="The &quot;qmax&quot; property" link="gst-plugins-good-plugins-smokeenc.html#GstSmokeEnc--qmax"/>
     <keyword type="property" name="The &quot;qmin&quot; property" link="gst-plugins-good-plugins-smokeenc.html#GstSmokeEnc--qmin"/>
     <keyword type="property" name="The &quot;threshold&quot; property" link="gst-plugins-good-plugins-smokeenc.html#GstSmokeEnc--threshold"/>
-    <keyword type="" name="Sample pipelines" link="gst-plugins-good-plugins-smpte.html#idp16930224"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-smpte.html#idp15005712"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-smpte.html#idp15773936"/>
+    <keyword type="" name="Sample pipelines" link="gst-plugins-good-plugins-smpte.html#idp10946432"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-smpte.html#idp20619216"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-smpte.html#idp18176672"/>
     <keyword type="struct" name="struct GstSMPTE" link="gst-plugins-good-plugins-smpte.html#GstSMPTE-struct"/>
     <keyword type="property" name="The &quot;border&quot; property" link="gst-plugins-good-plugins-smpte.html#GstSMPTE--border"/>
     <keyword type="property" name="The &quot;depth&quot; property" link="gst-plugins-good-plugins-smpte.html#GstSMPTE--depth"/>
@@ -1127,17 +1127,17 @@
     <keyword type="property" name="The &quot;type&quot; property" link="gst-plugins-good-plugins-smpte.html#GstSMPTE--type"/>
     <keyword type="property" name="The &quot;duration&quot; property" link="gst-plugins-good-plugins-smpte.html#GstSMPTE--duration"/>
     <keyword type="property" name="The &quot;invert&quot; property" link="gst-plugins-good-plugins-smpte.html#GstSMPTE--invert"/>
-    <keyword type="" name="Sample pipelines" link="gst-plugins-good-plugins-smptealpha.html#idp17815568"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-smptealpha.html#idp17461872"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-smptealpha.html#idp20163440"/>
+    <keyword type="" name="Sample pipelines" link="gst-plugins-good-plugins-smptealpha.html#idp17131920"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-smptealpha.html#idp16816768"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-smptealpha.html#idp20958128"/>
     <keyword type="struct" name="struct GstSMPTEAlpha" link="gst-plugins-good-plugins-smptealpha.html#GstSMPTEAlpha-struct"/>
     <keyword type="property" name="The &quot;border&quot; property" link="gst-plugins-good-plugins-smptealpha.html#GstSMPTEAlpha--border"/>
     <keyword type="property" name="The &quot;depth&quot; property" link="gst-plugins-good-plugins-smptealpha.html#GstSMPTEAlpha--depth"/>
     <keyword type="property" name="The &quot;position&quot; property" link="gst-plugins-good-plugins-smptealpha.html#GstSMPTEAlpha--position"/>
     <keyword type="property" name="The &quot;type&quot; property" link="gst-plugins-good-plugins-smptealpha.html#GstSMPTEAlpha--type"/>
     <keyword type="property" name="The &quot;invert&quot; property" link="gst-plugins-good-plugins-smptealpha.html#GstSMPTEAlpha--invert"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-souphttpsrc.html#idp18458304"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-souphttpsrc.html#idp16526672"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-souphttpsrc.html#idp19864112"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-souphttpsrc.html#idp15376432"/>
     <keyword type="struct" name="struct GstSoupHTTPSrc" link="gst-plugins-good-plugins-souphttpsrc.html#GstSoupHTTPSrc-struct"/>
     <keyword type="property" name="The &quot;automatic-redirect&quot; property" link="gst-plugins-good-plugins-souphttpsrc.html#GstSoupHTTPSrc--automatic-redirect"/>
     <keyword type="property" name="The &quot;cookies&quot; property" link="gst-plugins-good-plugins-souphttpsrc.html#GstSoupHTTPSrc--cookies"/>
@@ -1156,9 +1156,9 @@
     <keyword type="property" name="The &quot;user-pw&quot; property" link="gst-plugins-good-plugins-souphttpsrc.html#GstSoupHTTPSrc--user-pw"/>
     <keyword type="property" name="The &quot;extra-headers&quot; property" link="gst-plugins-good-plugins-souphttpsrc.html#GstSoupHTTPSrc--extra-headers"/>
     <keyword type="property" name="The &quot;timeout&quot; property" link="gst-plugins-good-plugins-souphttpsrc.html#GstSoupHTTPSrc--timeout"/>
-    <keyword type="" name="Example application" link="gst-plugins-good-plugins-spectrum.html#idp18637312"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-spectrum.html#idp21504352"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-spectrum.html#idp19198720"/>
+    <keyword type="" name="Example application" link="gst-plugins-good-plugins-spectrum.html#idp22892608"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-spectrum.html#idp19860928"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-spectrum.html#idp22422640"/>
     <keyword type="struct" name="struct GstSpectrum" link="gst-plugins-good-plugins-spectrum.html#GstSpectrum-struct"/>
     <keyword type="property" name="The &quot;bands&quot; property" link="gst-plugins-good-plugins-spectrum.html#GstSpectrum--bands"/>
     <keyword type="property" name="The &quot;interval&quot; property" link="gst-plugins-good-plugins-spectrum.html#GstSpectrum--interval"/>
@@ -1168,8 +1168,8 @@
     <keyword type="property" name="The &quot;message-phase&quot; property" link="gst-plugins-good-plugins-spectrum.html#GstSpectrum--message-phase"/>
     <keyword type="property" name="The &quot;post-messages&quot; property" link="gst-plugins-good-plugins-spectrum.html#GstSpectrum--post-messages"/>
     <keyword type="property" name="The &quot;multi-channel&quot; property" link="gst-plugins-good-plugins-spectrum.html#GstSpectrum--multi-channel"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-speexenc.html#idp18777776"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-speexenc.html#idp20790096"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-speexenc.html#idp18580720"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-speexenc.html#idp22106928"/>
     <keyword type="struct" name="struct GstSpeexEnc" link="gst-plugins-good-plugins-speexenc.html#GstSpeexEnc-struct"/>
     <keyword type="property" name="The &quot;abr&quot; property" link="gst-plugins-good-plugins-speexenc.html#GstSpeexEnc--abr"/>
     <keyword type="property" name="The &quot;bitrate&quot; property" link="gst-plugins-good-plugins-speexenc.html#GstSpeexEnc--bitrate"/>
@@ -1181,28 +1181,28 @@
     <keyword type="property" name="The &quot;vad&quot; property" link="gst-plugins-good-plugins-speexenc.html#GstSpeexEnc--vad"/>
     <keyword type="property" name="The &quot;vbr&quot; property" link="gst-plugins-good-plugins-speexenc.html#GstSpeexEnc--vbr"/>
     <keyword type="property" name="The &quot;mode&quot; property" link="gst-plugins-good-plugins-speexenc.html#GstSpeexEnc--mode"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-speexdec.html#idp19233488"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-speexdec.html#idp17066736"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-speexdec.html#idp22237456"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-speexdec.html#idp19549824"/>
     <keyword type="struct" name="struct GstSpeexDec" link="gst-plugins-good-plugins-speexdec.html#GstSpeexDec-struct"/>
     <keyword type="property" name="The &quot;enh&quot; property" link="gst-plugins-good-plugins-speexdec.html#GstSpeexDec--enh"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-splitfilesrc.html#idp22243216"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-splitfilesrc.html#idp16819744"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-splitfilesrc.html#idp22268880"/>
+    <keyword type="" name="Example launch lines" link="gst-plugins-good-plugins-splitfilesrc.html#idp16789024"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-splitfilesrc.html#idp20089056"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-splitfilesrc.html#idp19955104"/>
     <keyword type="struct" name="struct GstSplitFileSrc" link="gst-plugins-good-plugins-splitfilesrc.html#GstSplitFileSrc-struct"/>
     <keyword type="property" name="The &quot;location&quot; property" link="gst-plugins-good-plugins-splitfilesrc.html#GstSplitFileSrc--location"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-streaktv.html#idp18778064"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-streaktv.html#idp17921024"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-streaktv.html#idp18701600"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-streaktv.html#idp22225152"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-streaktv.html#idp16626048"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-streaktv.html#idp18885472"/>
     <keyword type="struct" name="struct GstStreakTV" link="gst-plugins-good-plugins-streaktv.html#GstStreakTV-struct"/>
     <keyword type="property" name="The &quot;feedback&quot; property" link="gst-plugins-good-plugins-streaktv.html#GstStreakTV--feedback"/>
-    <keyword type="" name="Example launch lines" link="gst-plugins-good-plugins-taginject.html#idp22819360"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-taginject.html#idp18904192"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-taginject.html#idp17806352"/>
+    <keyword type="" name="Example launch lines" link="gst-plugins-good-plugins-taginject.html#idp18581328"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-taginject.html#idp11157696"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-taginject.html#idp20668656"/>
     <keyword type="struct" name="struct GstTagInject" link="gst-plugins-good-plugins-taginject.html#GstTagInject-struct"/>
     <keyword type="property" name="The &quot;tags&quot; property" link="gst-plugins-good-plugins-taginject.html#GstTagInject--tags"/>
-    <keyword type="" name="Examples" link="gst-plugins-good-plugins-udpsrc.html#idp21272048"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-udpsrc.html#idp19556576"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-udpsrc.html#idp21319664"/>
+    <keyword type="" name="Examples" link="gst-plugins-good-plugins-udpsrc.html#idp22467472"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-udpsrc.html#idp22547968"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-udpsrc.html#idp22500000"/>
     <keyword type="struct" name="struct GstUDPSrc" link="gst-plugins-good-plugins-udpsrc.html#GstUDPSrc-struct"/>
     <keyword type="property" name="The &quot;caps&quot; property" link="gst-plugins-good-plugins-udpsrc.html#GstUDPSrc--caps"/>
     <keyword type="property" name="The &quot;multicast-group&quot; property" link="gst-plugins-good-plugins-udpsrc.html#GstUDPSrc--multicast-group"/>
@@ -1220,14 +1220,14 @@
     <keyword type="property" name="The &quot;close-socket&quot; property" link="gst-plugins-good-plugins-udpsrc.html#GstUDPSrc--close-socket"/>
     <keyword type="property" name="The &quot;socket&quot; property" link="gst-plugins-good-plugins-udpsrc.html#GstUDPSrc--socket"/>
     <keyword type="property" name="The &quot;used-socket&quot; property" link="gst-plugins-good-plugins-udpsrc.html#GstUDPSrc--used-socket"/>
-    <keyword type="" name="Examples" link="gst-plugins-good-plugins-udpsink.html#idp15516560"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-udpsink.html#idp16561840"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-udpsink.html#idp18907088"/>
+    <keyword type="" name="Examples" link="gst-plugins-good-plugins-udpsink.html#idp3071616"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-udpsink.html#idp22393792"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-udpsink.html#idp18345792"/>
     <keyword type="struct" name="struct GstUDPSink" link="gst-plugins-good-plugins-udpsink.html#GstUDPSink-struct"/>
     <keyword type="property" name="The &quot;host&quot; property" link="gst-plugins-good-plugins-udpsink.html#GstUDPSink--host"/>
     <keyword type="property" name="The &quot;port&quot; property" link="gst-plugins-good-plugins-udpsink.html#GstUDPSink--port"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-v4l2src.html#idp19246304"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-v4l2src.html#idp14972000"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-v4l2src.html#idp18072752"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-v4l2src.html#idp21393312"/>
     <keyword type="struct" name="struct GstV4l2Src" link="gst-plugins-good-plugins-v4l2src.html#GstV4l2Src-struct"/>
     <keyword type="property" name="The &quot;device&quot; property" link="gst-plugins-good-plugins-v4l2src.html#GstV4l2Src--device"/>
     <keyword type="property" name="The &quot;device-name&quot; property" link="gst-plugins-good-plugins-v4l2src.html#GstV4l2Src--device-name"/>
@@ -1243,8 +1243,8 @@
     <keyword type="property" name="The &quot;norm&quot; property" link="gst-plugins-good-plugins-v4l2src.html#GstV4l2Src--norm"/>
     <keyword type="property" name="The &quot;io-mode&quot; property" link="gst-plugins-good-plugins-v4l2src.html#GstV4l2Src--io-mode"/>
     <keyword type="signal" name="The &quot;prepare-format&quot; signal" link="gst-plugins-good-plugins-v4l2src.html#GstV4l2Src-prepare-format"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-v4l2sink.html#idp21397760"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-v4l2sink.html#idp16891888"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-v4l2sink.html#idp16913024"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-v4l2sink.html#idp21633392"/>
     <keyword type="struct" name="struct GstV4l2Sink" link="gst-plugins-good-plugins-v4l2sink.html#GstV4l2Sink-struct"/>
     <keyword type="property" name="The &quot;device&quot; property" link="gst-plugins-good-plugins-v4l2sink.html#GstV4l2Sink--device"/>
     <keyword type="property" name="The &quot;device-fd&quot; property" link="gst-plugins-good-plugins-v4l2sink.html#GstV4l2Sink--device-fd"/>
@@ -1266,28 +1266,28 @@
     <keyword type="property" name="The &quot;min-queued-bufs&quot; property" link="gst-plugins-good-plugins-v4l2sink.html#GstV4l2Sink--min-queued-bufs"/>
     <keyword type="property" name="The &quot;io-mode&quot; property" link="gst-plugins-good-plugins-v4l2sink.html#GstV4l2Sink--io-mode"/>
     <keyword type="property" name="The &quot;norm&quot; property" link="gst-plugins-good-plugins-v4l2sink.html#GstV4l2Sink--norm"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-v4l2radio.html#idp21518464"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-v4l2radio.html#idp20192112"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-v4l2radio.html#idp19448208"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-v4l2radio.html#idp21862112"/>
     <keyword type="struct" name="struct GstV4l2Radio" link="gst-plugins-good-plugins-v4l2radio.html#GstV4l2Radio-struct"/>
     <keyword type="property" name="The &quot;device&quot; property" link="gst-plugins-good-plugins-v4l2radio.html#GstV4l2Radio--device"/>
     <keyword type="property" name="The &quot;frequency&quot; property" link="gst-plugins-good-plugins-v4l2radio.html#GstV4l2Radio--frequency"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-vertigotv.html#idp18881200"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-vertigotv.html#idp17294656"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-vertigotv.html#idp21864656"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-vertigotv.html#idp23553024"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-vertigotv.html#idp19179520"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-vertigotv.html#idp21506112"/>
     <keyword type="struct" name="struct GstVertigoTV" link="gst-plugins-good-plugins-vertigotv.html#GstVertigoTV-struct"/>
     <keyword type="property" name="The &quot;speed&quot; property" link="gst-plugins-good-plugins-vertigotv.html#GstVertigoTV--speed"/>
     <keyword type="property" name="The &quot;zoom-speed&quot; property" link="gst-plugins-good-plugins-vertigotv.html#GstVertigoTV--zoom-speed"/>
     <keyword type="signal" name="The &quot;reset-parms&quot; signal" link="gst-plugins-good-plugins-vertigotv.html#GstVertigoTV-reset-parms"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-videobalance.html#idp19492112"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-videobalance.html#idp21329760"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-videobalance.html#idp17245296"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-videobalance.html#idp22055584"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-videobalance.html#idp18622896"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-videobalance.html#idp21859952"/>
     <keyword type="struct" name="struct GstVideoBalance" link="gst-plugins-good-plugins-videobalance.html#GstVideoBalance-struct"/>
     <keyword type="property" name="The &quot;brightness&quot; property" link="gst-plugins-good-plugins-videobalance.html#GstVideoBalance--brightness"/>
     <keyword type="property" name="The &quot;contrast&quot; property" link="gst-plugins-good-plugins-videobalance.html#GstVideoBalance--contrast"/>
     <keyword type="property" name="The &quot;hue&quot; property" link="gst-plugins-good-plugins-videobalance.html#GstVideoBalance--hue"/>
     <keyword type="property" name="The &quot;saturation&quot; property" link="gst-plugins-good-plugins-videobalance.html#GstVideoBalance--saturation"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-videobox.html#idp23145904"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-videobox.html#idp22489632"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-videobox.html#idp20363008"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-videobox.html#idp24371136"/>
     <keyword type="struct" name="struct GstVideoBox" link="gst-plugins-good-plugins-videobox.html#GstVideoBox-struct"/>
     <keyword type="property" name="The &quot;alpha&quot; property" link="gst-plugins-good-plugins-videobox.html#GstVideoBox--alpha"/>
     <keyword type="property" name="The &quot;border-alpha&quot; property" link="gst-plugins-good-plugins-videobox.html#GstVideoBox--border-alpha"/>
@@ -1297,41 +1297,41 @@
     <keyword type="property" name="The &quot;right&quot; property" link="gst-plugins-good-plugins-videobox.html#GstVideoBox--right"/>
     <keyword type="property" name="The &quot;top&quot; property" link="gst-plugins-good-plugins-videobox.html#GstVideoBox--top"/>
     <keyword type="property" name="The &quot;autocrop&quot; property" link="gst-plugins-good-plugins-videobox.html#GstVideoBox--autocrop"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-videocrop.html#idp22560576"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-videocrop.html#idp19679072"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-videocrop.html#idp21264960"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-videocrop.html#idp16561088"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-videocrop.html#idp24392016"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-videocrop.html#idp19751408"/>
     <keyword type="struct" name="struct GstVideoCrop" link="gst-plugins-good-plugins-videocrop.html#GstVideoCrop-struct"/>
     <keyword type="property" name="The &quot;bottom&quot; property" link="gst-plugins-good-plugins-videocrop.html#GstVideoCrop--bottom"/>
     <keyword type="property" name="The &quot;left&quot; property" link="gst-plugins-good-plugins-videocrop.html#GstVideoCrop--left"/>
     <keyword type="property" name="The &quot;right&quot; property" link="gst-plugins-good-plugins-videocrop.html#GstVideoCrop--right"/>
     <keyword type="property" name="The &quot;top&quot; property" link="gst-plugins-good-plugins-videocrop.html#GstVideoCrop--top"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-videoflip.html#idp19600080"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-videoflip.html#idp5522368"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-videoflip.html#idp16687744"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-videoflip.html#idp22740720"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-videoflip.html#idp23680176"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-videoflip.html#idp24428704"/>
     <keyword type="struct" name="struct GstVideoFlip" link="gst-plugins-good-plugins-videoflip.html#GstVideoFlip-struct"/>
     <keyword type="enum" name="enum GstVideoFlipMethod" link="gst-plugins-good-plugins-videoflip.html#GstVideoFlipMethod"/>
     <keyword type="property" name="The &quot;method&quot; property" link="gst-plugins-good-plugins-videoflip.html#GstVideoFlip--method"/>
-    <keyword type="" name="Sample pipelines" link="gst-plugins-good-plugins-videomixer.html#idp23886704"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-videomixer.html#idp23762656"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-videomixer.html#idp16908720"/>
+    <keyword type="" name="Sample pipelines" link="gst-plugins-good-plugins-videomixer.html#idp21583136"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-videomixer.html#idp15210672"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-videomixer.html#idp17254032"/>
     <keyword type="struct" name="struct GstVideoMixer2" link="gst-plugins-good-plugins-videomixer2.html#GstVideoMixer2-struct"/>
     <keyword type="enum" name="enum GstVideoMixer2Background" link="gst-plugins-good-plugins-videomixer2.html#GstVideoMixer2Background"/>
     <keyword type="property" name="The &quot;background&quot; property" link="gst-plugins-good-plugins-videomixer2.html#GstVideoMixer2--background"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-warptv.html#idp20134176"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-warptv.html#idp20859648"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-warptv.html#idp22745664"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-warptv.html#idp21833952"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-warptv.html#idp17943440"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-warptv.html#idp22009536"/>
     <keyword type="struct" name="struct GstWarpTV" link="gst-plugins-good-plugins-warptv.html#GstWarpTV-struct"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-wavenc.html#idp22184928"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-wavenc.html#idp19908336"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-wavenc.html#idp23292704"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-wavenc.html#idp23280992"/>
     <keyword type="struct" name="struct GstWavEnc" link="gst-plugins-good-plugins-wavenc.html#GstWavEnc-struct"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-waveformsink.html#idp21828608"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-waveformsink.html#idp23069872"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-waveformsink.html#idp24407968"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-waveformsink.html#idp18153312"/>
     <keyword type="struct" name="struct GstWaveFormSink" link="gst-plugins-good-plugins-waveformsink.html#GstWaveFormSink"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-wavpackdec.html#idp13004288"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-wavpackdec.html#idp22012256"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-wavpackdec.html#idp22579248"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-wavpackdec.html#idp20026976"/>
     <keyword type="struct" name="struct GstWavpackDec" link="gst-plugins-good-plugins-wavpackdec.html#GstWavpackDec-struct"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-wavpackenc.html#idp2320880"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-wavpackenc.html#idp21195552"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-wavpackenc.html#idp21401344"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-wavpackenc.html#idp22125760"/>
     <keyword type="struct" name="struct GstWavpackEnc" link="gst-plugins-good-plugins-wavpackenc.html#GstWavpackEnc-struct"/>
     <keyword type="property" name="The &quot;bitrate&quot; property" link="gst-plugins-good-plugins-wavpackenc.html#GstWavpackEnc--bitrate"/>
     <keyword type="property" name="The &quot;bits-per-sample&quot; property" link="gst-plugins-good-plugins-wavpackenc.html#GstWavpackEnc--bits-per-sample"/>
@@ -1340,21 +1340,21 @@
     <keyword type="property" name="The &quot;joint-stereo-mode&quot; property" link="gst-plugins-good-plugins-wavpackenc.html#GstWavpackEnc--joint-stereo-mode"/>
     <keyword type="property" name="The &quot;md5&quot; property" link="gst-plugins-good-plugins-wavpackenc.html#GstWavpackEnc--md5"/>
     <keyword type="property" name="The &quot;mode&quot; property" link="gst-plugins-good-plugins-wavpackenc.html#GstWavpackEnc--mode"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-wavpackparse.html#idp23728944"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-wavpackparse.html#idp8829824"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-wavpackparse.html#idp17510176"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-wavpackparse.html#idp24376096"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-wavpackparse.html#idp20254752"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-wavpackparse.html#idp13848544"/>
     <keyword type="struct" name="struct GstWavpackParse" link="gst-plugins-good-plugins-wavpackparse.html#GstWavpackParse-struct"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-wavparse.html#idp22784432"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-wavparse.html#idp23820656"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-wavparse.html#idp23731424"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-wavparse.html#idp21427840"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-wavparse.html#idp23384256"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-wavparse.html#idp24161712"/>
     <keyword type="struct" name="struct GstWavParse" link="gst-plugins-good-plugins-wavparse.html#GstWavParse-struct"/>
     <keyword type="property" name="The &quot;ignore-length&quot; property" link="gst-plugins-good-plugins-wavparse.html#GstWavParse--ignore-length"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-webmmux.html#idp21854480"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-webmmux.html#idp21557888"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-webmmux.html#idp21767952"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-webmmux.html#idp22537760"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-webmmux.html#idp21435968"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-webmmux.html#idp22051392"/>
     <keyword type="struct" name="struct GstWebMMux" link="gst-plugins-good-plugins-webmmux.html#GstWebMMux-struct"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-ximagesrc.html#idp23579168"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-ximagesrc.html#idp23595360"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-ximagesrc.html#idp22141536"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-ximagesrc.html#idp24512224"/>
     <keyword type="struct" name="struct GstXImageSrc" link="gst-plugins-good-plugins-ximagesrc.html#GstXImageSrc-struct"/>
     <keyword type="property" name="The &quot;display-name&quot; property" link="gst-plugins-good-plugins-ximagesrc.html#GstXImageSrc--display-name"/>
     <keyword type="property" name="The &quot;screen-num&quot; property" link="gst-plugins-good-plugins-ximagesrc.html#GstXImageSrc--screen-num"/>
@@ -1367,9 +1367,9 @@
     <keyword type="property" name="The &quot;remote&quot; property" link="gst-plugins-good-plugins-ximagesrc.html#GstXImageSrc--remote"/>
     <keyword type="property" name="The &quot;xid&quot; property" link="gst-plugins-good-plugins-ximagesrc.html#GstXImageSrc--xid"/>
     <keyword type="property" name="The &quot;xname&quot; property" link="gst-plugins-good-plugins-ximagesrc.html#GstXImageSrc--xname"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-y4menc.html#idp23695536"/>
-    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-y4menc.html#idp19658528"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-y4menc.html#idp14827680"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-y4menc.html#idp23366304"/>
+    <keyword type="" name="Element Information" link="gst-plugins-good-plugins-y4menc.html#idp22138016"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-y4menc.html#idp23763952"/>
     <keyword type="struct" name="struct GstY4mEncode" link="gst-plugins-good-plugins-y4menc.html#GstY4mEncode-struct"/>
     <keyword type="struct" name="struct GstIirEqualizer" link="GstIirEqualizer.html#GstIirEqualizer-struct"/>
     <keyword type="struct" name="struct GstVideoMixer2Pad" link="GstVideoMixer2Pad.html#GstVideoMixer2Pad-struct"/>
diff --git a/docs/plugins/html/index.html b/docs/plugins/html/index.html
index 049d5e9..ae9e430 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 Good Plugins 1.0 Plugins Reference Manual</p></th></tr></table></div>
 <div><p class="releaseinfo">
-      for GStreamer Good Plugins 1.0 (0.11.92)
+      for GStreamer Good Plugins 1.0 (0.11.93)
       The latest version of this documentation can be found on-line at
       <a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good/html/</a>.
     </p></div>
diff --git a/docs/plugins/inspect/plugin-annodex.xml b/docs/plugins/inspect/plugin-annodex.xml
deleted file mode 100644
index 5d84482..0000000
--- a/docs/plugins/inspect/plugin-annodex.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<plugin>
-  <name>annodex</name>
-  <description>annodex stream manipulation (info about annodex: http://www.annodex.net)</description>
-  <filename>../../ext/annodex/.libs/libgstannodex.so</filename>
-  <basename>libgstannodex.so</basename>
-  <version>0.11.91.1</version>
-  <license>LGPL</license>
-  <source>gst-plugins-good</source>
-  <package>GStreamer Good Plug-ins git</package>
-  <origin>Unknown package origin</origin>
-  <elements>
-    <element>
-      <name>cmmldec</name>
-      <longname>CMML stream decoder</longname>
-      <class>Codec/Decoder</class>
-      <description>Decodes CMML streams</description>
-      <author>Alessandro Decina &lt;alessandro@nnva.org&gt;</author>
-      <pads>
-        <caps>
-          <name>sink</name>
-          <direction>sink</direction>
-          <presence>always</presence>
-          <details>text/x-cmml, encoded=(boolean)true</details>
-        </caps>
-        <caps>
-          <name>src</name>
-          <direction>source</direction>
-          <presence>always</presence>
-          <details>text/x-cmml, encoded=(boolean)false</details>
-        </caps>
-      </pads>
-    </element>
-    <element>
-      <name>cmmlenc</name>
-      <longname>CMML streams encoder</longname>
-      <class>Codec/Encoder</class>
-      <description>Encodes CMML streams</description>
-      <author>Alessandro Decina &lt;alessandro@nnva.org&gt;</author>
-      <pads>
-        <caps>
-          <name>sink</name>
-          <direction>sink</direction>
-          <presence>always</presence>
-          <details>text/x-cmml, encoded=(boolean)false</details>
-        </caps>
-        <caps>
-          <name>src</name>
-          <direction>source</direction>
-          <presence>always</presence>
-          <details>text/x-cmml, encoded=(boolean)true</details>
-        </caps>
-      </pads>
-    </element>
-  </elements>
-</plugin>
\ No newline at end of file
diff --git a/ext/Makefile.in b/ext/Makefile.in
index fd4eb00..9063cb3 100644
--- a/ext/Makefile.in
+++ b/ext/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -225,7 +225,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/ext/aalib/Makefile.in b/ext/aalib/Makefile.in
index 20a457d..32a35ba 100644
--- a/ext/aalib/Makefile.in
+++ b/ext/aalib/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -248,7 +248,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/ext/aalib/gstaasink.c b/ext/aalib/gstaasink.c
index f2d3f8a..98df1af 100644
--- a/ext/aalib/gstaasink.c
+++ b/ext/aalib/gstaasink.c
@@ -349,7 +349,7 @@
   gst_query_add_allocation_pool (query, NULL, size, 2, 0);
 
   /* we support various metadata */
-  gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE);
+  gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL);
 
   return TRUE;
 
diff --git a/ext/cairo/Makefile.in b/ext/cairo/Makefile.in
index 22621f2..4ce52da 100644
--- a/ext/cairo/Makefile.in
+++ b/ext/cairo/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -270,7 +270,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
@@ -926,16 +928,16 @@
 
 # these are all the rules generating the relevant files
 @USE_CAIRO_GOBJECT_TRUE@$(glib_gen_basename)-marshal.h: $(glib_gen_basename)-marshal.list
-@USE_CAIRO_GOBJECT_TRUE@	$(AM_V_GEN)glib-genmarshal --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
+@USE_CAIRO_GOBJECT_TRUE@	$(AM_V_GEN)$(GLIB_GENMARSHAL) --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
 @USE_CAIRO_GOBJECT_TRUE@	mv $(glib_gen_basename)-marshal.h.tmp $(glib_gen_basename)-marshal.h
 
 @USE_CAIRO_GOBJECT_TRUE@$(glib_gen_basename)-marshal.c: $(glib_gen_basename)-marshal.list
 @USE_CAIRO_GOBJECT_TRUE@	$(AM_V_GEN)echo "#include \"$(glib_gen_basename)-marshal.h\"" >> $(glib_gen_basename)-marshal.c.tmp && \
-@USE_CAIRO_GOBJECT_TRUE@	glib-genmarshal --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
+@USE_CAIRO_GOBJECT_TRUE@	$(GLIB_GENMARSHAL) --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
 @USE_CAIRO_GOBJECT_TRUE@	mv $(glib_gen_basename)-marshal.c.tmp $(glib_gen_basename)-marshal.c
 
 @USE_CAIRO_GOBJECT_TRUE@$(glib_gen_basename)-enumtypes.h: $(glib_enum_headers)
-@USE_CAIRO_GOBJECT_TRUE@	$(AM_V_GEN)glib-mkenums \
+@USE_CAIRO_GOBJECT_TRUE@	$(AM_V_GEN)$(GLIB_MKENUMS) \
 @USE_CAIRO_GOBJECT_TRUE@	--fhead "#ifndef __$(glib_enum_define)_ENUM_TYPES_H__\n#define __$(glib_enum_define)_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
 @USE_CAIRO_GOBJECT_TRUE@	--fprod "\n/* enumerations from \"@filename@\" */\n" \
 @USE_CAIRO_GOBJECT_TRUE@	--vhead "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n"         \
@@ -944,7 +946,7 @@
 
 @USE_CAIRO_GOBJECT_TRUE@$(glib_gen_basename)-enumtypes.c: $(glib_enum_headers)
 @USE_CAIRO_GOBJECT_TRUE@	@if test "x$(glib_enum_headers)" = "x"; then echo "ERROR: glib_enum_headers is empty, please fix Makefile"; exit 1; fi
-@USE_CAIRO_GOBJECT_TRUE@	$(AM_V_GEN)glib-mkenums \
+@USE_CAIRO_GOBJECT_TRUE@	$(AM_V_GEN)$(GLIB_MKENUMS) \
 @USE_CAIRO_GOBJECT_TRUE@	--fhead "#include \"$(glib_gen_basename)-enumtypes.h\"\n$(enum_headers)" \
 @USE_CAIRO_GOBJECT_TRUE@	--fprod "\n/* enumerations from \"@filename@\" */" \
 @USE_CAIRO_GOBJECT_TRUE@	--vhead "GType\n@enum_name@_get_type (void)\n{\n  static volatile gsize g_define_type_id__volatile = 0;\n  if (g_once_init_enter (&g_define_type_id__volatile)) {\n    static const G@Type@Value values[] = {"     \
diff --git a/ext/dv/Makefile.in b/ext/dv/Makefile.in
index a783e67..70ee4a5 100644
--- a/ext/dv/Makefile.in
+++ b/ext/dv/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -258,7 +258,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/ext/dv/gstdvdec.c b/ext/dv/gstdvdec.c
index 39aead0..499b186 100644
--- a/ext/dv/gstdvdec.c
+++ b/ext/dv/gstdvdec.c
@@ -288,7 +288,7 @@
   config = gst_buffer_pool_get_config (pool);
   gst_buffer_pool_config_set_params (config, caps, size, min, max);
 
-  if (gst_query_has_allocation_meta (query, GST_VIDEO_META_API_TYPE)) {
+  if (gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL)) {
     /* just set the option, if the pool can support it we will transparently use
      * it through the video info API. We could also see if the pool support this
      * option and only activate it then. */
diff --git a/ext/dv/gstdvdemux.c b/ext/dv/gstdvdemux.c
index 794a616..7532082 100644
--- a/ext/dv/gstdvdemux.c
+++ b/ext/dv/gstdvdemux.c
@@ -301,9 +301,11 @@
   gst_pad_push_event (pad, gst_event_new_segment (&dvdemux->time_segment));
 
   if (no_more_pads) {
-    gst_pad_push_event (pad,
-        gst_event_new_tag ("GstDemuxer",
-            gst_tag_list_new (GST_TAG_CONTAINER_FORMAT, "DV", NULL)));
+    GstTagList *tags;
+
+    tags = gst_tag_list_new (GST_TAG_CONTAINER_FORMAT, "DV", NULL);
+    gst_tag_list_set_scope (tags, GST_TAG_SCOPE_GLOBAL);
+    gst_pad_push_event (pad, gst_event_new_tag (tags));
   }
 
   return pad;
@@ -1046,7 +1048,7 @@
   /* and restart the task in case it got paused explicitely or by
    * the FLUSH_START event we pushed out. */
   gst_pad_start_task (demux->sinkpad, (GstTaskFunction) gst_dvdemux_loop,
-      demux->sinkpad);
+      demux->sinkpad, NULL);
 
   /* and release the lock again so we can continue streaming */
   GST_PAD_STREAM_UNLOCK (demux->sinkpad);
@@ -1175,6 +1177,14 @@
             || (channels != dvdemux->channels))) {
       GstCaps *caps;
       GstAudioInfo info;
+      gchar *stream_id;
+
+      stream_id =
+          gst_pad_create_stream_id (dvdemux->audiosrcpad,
+          GST_ELEMENT_CAST (dvdemux), "audio");
+      gst_pad_push_event (dvdemux->audiosrcpad,
+          gst_event_new_stream_start (stream_id));
+      g_free (stream_id);
 
       dvdemux->frequency = frequency;
       dvdemux->channels = channels;
@@ -1243,6 +1253,14 @@
   if (G_UNLIKELY ((dvdemux->height != height) || dvdemux->wide != wide)) {
     GstCaps *caps;
     gint par_x, par_y;
+    gchar *stream_id;
+
+    stream_id =
+        gst_pad_create_stream_id (dvdemux->videosrcpad,
+        GST_ELEMENT_CAST (dvdemux), "video");
+    gst_pad_push_event (dvdemux->videosrcpad,
+        gst_event_new_stream_start (stream_id));
+    g_free (stream_id);
 
     dvdemux->height = height;
     dvdemux->wide = wide;
@@ -1741,6 +1759,9 @@
         gst_element_post_message (GST_ELEMENT (dvdemux),
             gst_message_new_segment_done (GST_OBJECT_CAST (dvdemux),
                 dvdemux->time_segment.format, dvdemux->time_segment.position));
+        gst_dvdemux_push_event (dvdemux,
+            gst_event_new_segment_done (dvdemux->time_segment.format,
+                dvdemux->time_segment.position));
       } else {
         gst_dvdemux_push_event (dvdemux, gst_event_new_eos ());
       }
@@ -1766,7 +1787,7 @@
       if (active) {
         demux->seek_handler = gst_dvdemux_handle_pull_seek;
         res = gst_pad_start_task (sinkpad,
-            (GstTaskFunction) gst_dvdemux_loop, sinkpad);
+            (GstTaskFunction) gst_dvdemux_loop, sinkpad, NULL);
       } else {
         demux->seek_handler = NULL;
         res = gst_pad_stop_task (sinkpad);
diff --git a/ext/flac/Makefile.in b/ext/flac/Makefile.in
index 2b23a3f..d61d12d 100644
--- a/ext/flac/Makefile.in
+++ b/ext/flac/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -250,7 +250,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/ext/flac/gstflacdec.c b/ext/flac/gstflacdec.c
index 96aa128..af86a9c 100644
--- a/ext/flac/gstflacdec.c
+++ b/ext/flac/gstflacdec.c
@@ -115,9 +115,9 @@
 G_DEFINE_TYPE (GstFlacDec, gst_flac_dec, GST_TYPE_AUDIO_DECODER);
 
 #if G_BYTE_ORDER == G_LITTLE_ENDIAN
-#define FORMATS "{ S8LE, S16LE, S32LE } "
+#define FORMATS "{ S8LE, S16LE, S24_32LE, S32LE } "
 #else
-#define FORMATS "{ S8BE, S16BE, S32BE } "
+#define FORMATS "{ S8BE, S16BE, S24_32BE, S32BE } "
 #endif
 
 #define GST_FLAC_DEC_SRC_CAPS                             \
@@ -377,6 +377,38 @@
   else if (sr == 0x0D || sr == 0x0E)
     sr_from_end = 16;
 
+  val = data[4];
+  /* This is slightly faster than a loop */
+  if (!(val & 0x80)) {
+    val = 0;
+  } else if ((val & 0xc0) && !(val & 0x20)) {
+    val = 1;
+  } else if ((val & 0xe0) && !(val & 0x10)) {
+    val = 2;
+  } else if ((val & 0xf0) && !(val & 0x08)) {
+    val = 3;
+  } else if ((val & 0xf8) && !(val & 0x04)) {
+    val = 4;
+  } else if ((val & 0xfc) && !(val & 0x02)) {
+    val = 5;
+  } else if ((val & 0xfe) && !(val & 0x01)) {
+    val = 6;
+  } else {
+    GST_LOG_OBJECT (flacdec, "failed to read sample/frame");
+    return FALSE;
+  }
+
+  val++;
+  headerlen = 4 + val + (bs_from_end / 8) + (sr_from_end / 8);
+
+  if (gst_flac_calculate_crc8 (data, headerlen) != data[headerlen]) {
+    GST_LOG_OBJECT (flacdec, "invalid checksum");
+    return FALSE;
+  }
+
+  if (!last_sample_num)
+    return TRUE;
+
   /* FIXME: This is can be 36 bit if variable block size is used,
    * fortunately not encoder supports this yet and we check for that
    * above.
@@ -388,14 +420,6 @@
     return FALSE;
   }
 
-  headerlen = 4 + g_unichar_to_utf8 ((gunichar) val, NULL) +
-      (bs_from_end / 8) + (sr_from_end / 8);
-
-  if (gst_flac_calculate_crc8 (data, headerlen) != data[headerlen]) {
-    GST_LOG_OBJECT (flacdec, "invalid checksum");
-    return FALSE;
-  }
-
   if (flacdec->min_blocksize == flacdec->max_blocksize) {
     *last_sample_num = (val + 1) * flacdec->min_blocksize;
   } else {
@@ -446,7 +470,7 @@
   switch (metadata->type) {
     case FLAC__METADATA_TYPE_STREAMINFO:{
       gint64 samples;
-      guint depth, width;
+      guint depth, width, gdepth;
 
       samples = metadata->data.stream_info.total_samples;
 
@@ -454,15 +478,19 @@
       flacdec->max_blocksize = metadata->data.stream_info.max_blocksize;
       flacdec->depth = depth = metadata->data.stream_info.bits_per_sample;
 
-      if (depth < 9)
-        width = 8;
-      else if (depth < 17)
-        width = 16;
-      else
+      if (depth < 9) {
+        gdepth = width = 8;
+      } else if (depth < 17) {
+        gdepth = width = 16;
+      } else if (depth < 25) {
+        gdepth = 24;
         width = 32;
+      } else {
+        gdepth = width = 32;
+      }
 
       gst_audio_info_set_format (&flacdec->info,
-          gst_audio_format_build_integer (TRUE, G_BYTE_ORDER, width, width),
+          gst_audio_format_build_integer (TRUE, G_BYTE_ORDER, width, gdepth),
           metadata->data.stream_info.sample_rate,
           metadata->data.stream_info.channels, NULL);
 
@@ -551,7 +579,7 @@
   GstFlowReturn ret = GST_FLOW_OK;
   GstBuffer *outbuf;
   guint depth = frame->header.bits_per_sample;
-  guint width;
+  guint width, gdepth;
   guint sample_rate = frame->header.sample_rate;
   guint channels = frame->header.channels;
   guint samples = frame->header.blocksize;
@@ -574,17 +602,20 @@
 
   switch (depth) {
     case 8:
-      width = 8;
+      gdepth = width = 8;
       break;
     case 12:
     case 16:
-      width = 16;
+      gdepth = width = 16;
       break;
     case 20:
     case 24:
-    case 32:
+      gdepth = 24;
       width = 32;
       break;
+    case 32:
+      gdepth = width = 32;
+      break;
     default:
       GST_ERROR_OBJECT (flacdec, "unsupported depth %d", depth);
       ret = GST_FLOW_ERROR;
@@ -601,9 +632,10 @@
     }
   }
 
-  caps_changed = (sample_rate != flacdec->info.rate)
-      || (width != flacdec->info.finfo->width)
-      || (channels != flacdec->info.channels);
+  caps_changed = (sample_rate != GST_AUDIO_INFO_RATE (&flacdec->info))
+      || (width != GST_AUDIO_INFO_WIDTH (&flacdec->info))
+      || (gdepth != GST_AUDIO_INFO_DEPTH (&flacdec->info))
+      || (channels != GST_AUDIO_INFO_CHANNELS (&flacdec->info));
 
   if (caps_changed
       || !gst_pad_has_current_caps (GST_AUDIO_DECODER_SRC_PAD (flacdec))) {
@@ -611,7 +643,7 @@
         channels);
 
     gst_audio_info_set_format (&flacdec->info,
-        gst_audio_format_build_integer (TRUE, G_BYTE_ORDER, width, width),
+        gst_audio_format_build_integer (TRUE, G_BYTE_ORDER, width, gdepth),
         sample_rate, channels, NULL);
 
     memcpy (flacdec->info.position,
@@ -638,10 +670,11 @@
     gint8 *outbuffer = (gint8 *) map.data;
     gint *reorder_map = flacdec->channel_reorder_map;
 
-    if (width != depth) {
+    if (gdepth != depth) {
       for (i = 0; i < samples; i++) {
         for (j = 0; j < channels; j++) {
-          *outbuffer++ = (gint8) (buffer[reorder_map[j]][i] << (width - depth));
+          *outbuffer++ =
+              (gint8) (buffer[reorder_map[j]][i] << (gdepth - depth));
         }
       }
     } else {
@@ -655,11 +688,11 @@
     gint16 *outbuffer = (gint16 *) map.data;
     gint *reorder_map = flacdec->channel_reorder_map;
 
-    if (width != depth) {
+    if (gdepth != depth) {
       for (i = 0; i < samples; i++) {
         for (j = 0; j < channels; j++) {
           *outbuffer++ =
-              (gint16) (buffer[reorder_map[j]][i] << (width - depth));
+              (gint16) (buffer[reorder_map[j]][i] << (gdepth - depth));
         }
       }
     } else {
@@ -673,11 +706,11 @@
     gint32 *outbuffer = (gint32 *) map.data;
     gint *reorder_map = flacdec->channel_reorder_map;
 
-    if (width != depth) {
+    if (gdepth != depth) {
       for (i = 0; i < samples; i++) {
         for (j = 0; j < channels; j++) {
           *outbuffer++ =
-              (gint32) (buffer[reorder_map[j]][i] << (width - depth));
+              (gint32) (buffer[reorder_map[j]][i] << (gdepth - depth));
         }
       }
     } else {
@@ -759,13 +792,12 @@
   /* drop any in-stream headers, we've processed those in set_format already */
   if (G_UNLIKELY (!dec->got_headers)) {
     gboolean got_audio_frame;
-    gint64 unused;
     GstMapInfo map;
 
     /* check if this is a flac audio frame (rather than a header or junk) */
     gst_buffer_map (buf, &map, GST_MAP_READ);
     got_audio_frame =
-        gst_flac_dec_scan_got_frame (dec, map.data, map.size, &unused);
+        gst_flac_dec_scan_got_frame (dec, map.data, map.size, NULL);
     gst_buffer_unmap (buf, &map);
 
     if (!got_audio_frame) {
diff --git a/ext/flac/gstflacenc.c b/ext/flac/gstflacenc.c
index 069f48d..a7cb219 100644
--- a/ext/flac/gstflacenc.c
+++ b/ext/flac/gstflacenc.c
@@ -140,7 +140,9 @@
 
 #define gst_flac_enc_parent_class parent_class
 G_DEFINE_TYPE_WITH_CODE (GstFlacEnc, gst_flac_enc, GST_TYPE_AUDIO_ENCODER,
-    G_IMPLEMENT_INTERFACE (GST_TYPE_TAG_SETTER, NULL));
+    G_IMPLEMENT_INTERFACE (GST_TYPE_TAG_SETTER, NULL)
+    G_IMPLEMENT_INTERFACE (GST_TYPE_TOC_SETTER, NULL)
+    );
 
 static gboolean gst_flac_enc_start (GstAudioEncoder * enc);
 static gboolean gst_flac_enc_stop (GstAudioEncoder * enc);
@@ -415,6 +417,7 @@
   flacenc->offset = 0;
   flacenc->eos = FALSE;
   flacenc->tags = gst_tag_list_new_empty ();
+  flacenc->toc = NULL;
 
   return TRUE;
 }
@@ -425,8 +428,11 @@
   GstFlacEnc *flacenc = GST_FLAC_ENC (enc);
 
   GST_DEBUG_OBJECT (enc, "stop");
-  gst_tag_list_free (flacenc->tags);
+  gst_tag_list_unref (flacenc->tags);
   flacenc->tags = NULL;
+  if (flacenc->toc)
+    gst_toc_unref (flacenc->toc);
+  flacenc->toc = NULL;
   if (FLAC__stream_encoder_get_state (flacenc->encoder) !=
       FLAC__STREAM_ENCODER_UNINITIALIZED) {
     flacenc->stopped = TRUE;
@@ -441,6 +447,9 @@
     if (flacenc->meta[2])
       FLAC__metadata_object_delete (flacenc->meta[2]);
 
+    if (flacenc->meta[3])
+      FLAC__metadata_object_delete (flacenc->meta[3]);
+
     g_free (flacenc->meta);
     flacenc->meta = NULL;
   }
@@ -449,6 +458,7 @@
   flacenc->headers = NULL;
 
   gst_tag_setter_reset_tags (GST_TAG_SETTER (enc));
+  gst_toc_setter_reset (GST_TOC_SETTER (enc));
 
   return TRUE;
 }
@@ -481,17 +491,94 @@
   g_list_free (comments);
 }
 
+static gboolean
+add_cuesheet (const GstToc * toc, guint sample_rate,
+    FLAC__StreamMetadata * cuesheet)
+{
+  gint8 track_num = 0;
+  gint64 start, stop;
+  gchar *isrc = NULL;
+  const gchar *is_legal;
+  GList *list;
+  GstTagList *tags;
+  GstTocEntry *entry;
+  FLAC__StreamMetadata_CueSheet *cs;
+  FLAC__StreamMetadata_CueSheet_Track *track;
+
+  cs = &cuesheet->data.cue_sheet;
+  if (!cs)
+    return FALSE;
+
+  /* check if the TOC entries is valid */
+  list = gst_toc_get_entries (toc);
+  while (list) {
+    entry = list->data;
+    if (!gst_toc_entry_is_sequence (entry))
+      return FALSE;
+    list = g_list_next (list);
+  }
+
+  /* add tracks in cuesheet */
+  list = gst_toc_get_entries (toc);
+  while (list) {
+    entry = list->data;
+    gst_toc_entry_get_start_stop_times (entry, &start, &stop);
+    tags = gst_toc_entry_get_tags (entry);
+    if (tags)
+      gst_tag_list_get_string (tags, GST_TAG_ISRC, &isrc);
+    track = FLAC__metadata_object_cuesheet_track_new ();
+    track->offset =
+        (FLAC__uint64) gst_util_uint64_scale_round (start, sample_rate,
+        GST_SECOND);
+    track->number = (FLAC__byte) track_num + 1;
+    if (isrc)
+      strcpy (track->isrc, isrc);
+    if (track->number <= 0)
+      return FALSE;
+    if (!FLAC__metadata_object_cuesheet_insert_track (cuesheet, track_num,
+            track, FALSE))
+      return FALSE;
+    if (!FLAC__metadata_object_cuesheet_track_insert_blank_index (cuesheet,
+            track_num, 0))
+      return FALSE;
+    track_num++;
+    list = g_list_next (list);
+  }
+
+  if (cs->num_tracks <= 0)
+    return FALSE;
+
+  /* add lead-out track in cuesheet */
+  track = FLAC__metadata_object_cuesheet_track_new ();
+  track->offset =
+      (FLAC__uint64) gst_util_uint64_scale_round (stop, sample_rate,
+      GST_SECOND);
+  track->number = 255;
+  if (!FLAC__metadata_object_cuesheet_insert_track (cuesheet, cs->num_tracks,
+          track, FALSE))
+    return FALSE;
+
+  /* check if the cuesheet is valid */
+  if (!FLAC__metadata_object_cuesheet_is_legal (cuesheet, FALSE, &is_legal)) {
+    g_warning ("%s\n", is_legal);
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
 static void
-gst_flac_enc_set_metadata (GstFlacEnc * flacenc, guint64 total_samples)
+gst_flac_enc_set_metadata (GstFlacEnc * flacenc, GstAudioInfo * info,
+    guint64 total_samples)
 {
   const GstTagList *user_tags;
   GstTagList *copy;
   gint entries = 1;
   gint n_images, n_preview_images;
-  GstAudioInfo *info =
-      gst_audio_encoder_get_audio_info (GST_AUDIO_ENCODER (flacenc));
+  FLAC__StreamMetadata *cuesheet;
 
   g_return_if_fail (flacenc != NULL);
+
   user_tags = gst_tag_setter_get_tag_list (GST_TAG_SETTER (flacenc));
   if ((flacenc->tags == NULL) && (user_tags == NULL)) {
     return;
@@ -502,38 +589,48 @@
   n_preview_images = gst_tag_list_get_tag_size (copy, GST_TAG_PREVIEW_IMAGE);
 
   flacenc->meta =
-      g_new0 (FLAC__StreamMetadata *, 3 + n_images + n_preview_images);
+      g_new0 (FLAC__StreamMetadata *, 4 + n_images + n_preview_images);
 
   flacenc->meta[0] =
       FLAC__metadata_object_new (FLAC__METADATA_TYPE_VORBIS_COMMENT);
   gst_tag_list_foreach (copy, add_one_tag, flacenc);
 
+  if (!flacenc->toc)
+    flacenc->toc = gst_toc_setter_get_toc (GST_TOC_SETTER (flacenc));
+
+  if (flacenc->toc) {
+    cuesheet = FLAC__metadata_object_new (FLAC__METADATA_TYPE_CUESHEET);
+    if (add_cuesheet (flacenc->toc, GST_AUDIO_INFO_RATE (info), cuesheet)) {
+      flacenc->meta[entries] = cuesheet;
+      entries++;
+    } else {
+      FLAC__metadata_object_delete (cuesheet);
+      flacenc->meta[entries] = NULL;
+    }
+  }
+
   if (n_images + n_preview_images > 0) {
+    GstSample *sample;
     GstBuffer *buffer;
-#if 0
-    GstCaps *caps;
-    GstStructure *structure;
+    const GstStructure *structure;
     GstTagImageType image_type = GST_TAG_IMAGE_TYPE_NONE;
-#endif
     gint i;
     GstMapInfo map;
 
     for (i = 0; i < n_images + n_preview_images; i++) {
       if (i < n_images) {
-        if (!gst_tag_list_get_buffer_index (copy, GST_TAG_IMAGE, i, &buffer))
+        if (!gst_tag_list_get_sample_index (copy, GST_TAG_IMAGE, i, &sample))
           continue;
       } else {
-        if (!gst_tag_list_get_buffer_index (copy, GST_TAG_PREVIEW_IMAGE,
-                i - n_images, &buffer))
+        if (!gst_tag_list_get_sample_index (copy, GST_TAG_PREVIEW_IMAGE,
+                i - n_images, &sample))
           continue;
       }
 
       flacenc->meta[entries] =
           FLAC__metadata_object_new (FLAC__METADATA_TYPE_PICTURE);
 
-#if 0
-      caps = gst_buffer_get_caps (buffer);
-      structure = gst_caps_get_structure (caps, 0);
+      structure = gst_sample_get_info (sample);
 
       gst_structure_get (structure, "image-type", GST_TYPE_TAG_IMAGE_TYPE,
           &image_type, NULL);
@@ -542,22 +639,19 @@
         image_type = (i < n_images) ? 0x00 : 0x01;
       else
         image_type = image_type + 2;
-#endif
 
+      buffer = gst_sample_get_buffer (sample);
       gst_buffer_map (buffer, &map, GST_MAP_READ);
       FLAC__metadata_object_picture_set_data (flacenc->meta[entries],
           map.data, map.size, TRUE);
       gst_buffer_unmap (buffer, &map);
 
-#if 0
       /* FIXME: There's no way to set the picture type in libFLAC */
       flacenc->meta[entries]->data.picture.type = image_type;
       FLAC__metadata_object_picture_set_mime_type (flacenc->meta[entries],
           (char *) gst_structure_get_name (structure), TRUE);
-      gst_caps_unref (caps);
-#endif
 
-      gst_buffer_unref (buffer);
+      gst_sample_unref (sample);
       entries++;
     }
   }
@@ -601,7 +695,7 @@
           flacenc->meta, entries) != true)
     g_warning ("Dude, i'm already initialized!");
 
-  gst_tag_list_free (copy);
+  gst_tag_list_unref (copy);
 }
 
 static GstCaps *
@@ -649,7 +743,7 @@
         guint64 channel_mask;
 
         gst_audio_channel_positions_to_mask (channel_positions[i - 1], i,
-            &channel_mask);
+            FALSE, &channel_mask);
         gst_structure_set (s2, "channels", G_TYPE_INT, i, "channel-mask",
             GST_TYPE_BITMASK, channel_mask, NULL);
       }
@@ -661,7 +755,7 @@
 
   GST_DEBUG_OBJECT (pad, "Return caps %" GST_PTR_FORMAT, ret);
 
-  caps = gst_audio_encoder_proxy_getcaps (enc, ret);
+  caps = gst_audio_encoder_proxy_getcaps (enc, ret, filter);
   gst_caps_unref (ret);
 
   return caps;
@@ -706,7 +800,6 @@
   GstFlacEnc *flacenc;
   guint64 total_samples = GST_CLOCK_TIME_NONE;
   FLAC__StreamEncoderInitStatus init_status;
-  GstCaps *caps;
 
   flacenc = GST_FLAC_ENC (enc);
 
@@ -715,14 +808,7 @@
       FLAC__STREAM_ENCODER_UNINITIALIZED)
     goto encoder_already_initialized;
 
-  caps = gst_caps_new_simple ("audio/x-flac",
-      "channels", G_TYPE_INT, GST_AUDIO_INFO_CHANNELS (info),
-      "rate", G_TYPE_INT, GST_AUDIO_INFO_RATE (info), NULL);
-
-  if (!gst_audio_encoder_set_output_format (enc, caps))
-    goto setting_src_caps_failed;
-
-  gst_caps_unref (caps);
+  /* delay setting output caps/format until we have all headers */
 
   gst_audio_get_channel_reorder_map (GST_AUDIO_INFO_CHANNELS (info),
       channel_positions[GST_AUDIO_INFO_CHANNELS (info) - 1], info->position,
@@ -732,7 +818,7 @@
       GST_AUDIO_ENCODER_SINK_PAD (enc));
 
   FLAC__stream_encoder_set_bits_per_sample (flacenc->encoder,
-      GST_AUDIO_INFO_WIDTH (info));
+      GST_AUDIO_INFO_DEPTH (info));
   FLAC__stream_encoder_set_sample_rate (flacenc->encoder,
       GST_AUDIO_INFO_RATE (info));
   FLAC__stream_encoder_set_channels (flacenc->encoder,
@@ -742,7 +828,7 @@
     FLAC__stream_encoder_set_total_samples_estimate (flacenc->encoder,
         MIN (total_samples, G_GUINT64_CONSTANT (0x0FFFFFFFFF)));
 
-  gst_flac_enc_set_metadata (flacenc, total_samples);
+  gst_flac_enc_set_metadata (flacenc, info, total_samples);
 
   /* callbacks clear to go now;
    * write callbacks receives headers during init */
@@ -763,13 +849,6 @@
     g_warning ("flac already initialized -- fixme allow this");
     return FALSE;
   }
-setting_src_caps_failed:
-  {
-    GST_DEBUG_OBJECT (flacenc,
-        "Couldn't set caps on source pad: %" GST_PTR_FORMAT, caps);
-    gst_caps_unref (caps);
-    return FALSE;
-  }
 failed_to_initialize:
   {
     GST_ELEMENT_ERROR (flacenc, LIBRARY, INIT, (NULL),
@@ -1116,6 +1195,7 @@
 {
   GstFlacEnc *flacenc;
   GstTagList *taglist;
+  GstToc *toc;
   gboolean ret = FALSE;
 
   flacenc = GST_FLAC_ENC (enc);
@@ -1137,6 +1217,17 @@
       }
       ret = GST_AUDIO_ENCODER_CLASS (parent_class)->sink_event (enc, event);
       break;
+    case GST_EVENT_TOC:
+      gst_event_parse_toc (event, &toc, NULL);
+      if (toc) {
+        if (flacenc->toc != toc) {
+          if (flacenc->toc)
+            gst_toc_unref (flacenc->toc);
+          flacenc->toc = toc;
+        }
+      }
+      ret = GST_AUDIO_ENCODER_CLASS (parent_class)->sink_event (enc, event);
+      break;
     default:
       ret = GST_AUDIO_ENCODER_CLASS (parent_class)->sink_event (enc, event);
       break;
@@ -1232,7 +1323,7 @@
   gst_buffer_unmap (buffer, &map);
 
   res = FLAC__stream_encoder_process_interleaved (flacenc->encoder,
-      (const FLAC__int32 *) data, samples / channels);
+      (const FLAC__int32 *) data, samples);
 
   g_free (data);
 
diff --git a/ext/flac/gstflacenc.h b/ext/flac/gstflacenc.h
index 0a4e2b4..690b098 100644
--- a/ext/flac/gstflacenc.h
+++ b/ext/flac/gstflacenc.h
@@ -57,6 +57,7 @@
   FLAC__StreamMetadata **meta;
 
   GstTagList *     tags;
+  GstToc *         toc;
 
   gboolean         eos;
   /* queue headers until we have them all so we can add streamheaders to caps */
diff --git a/ext/flac/gstflactag.c b/ext/flac/gstflactag.c
index d7455ac..3dffc6a 100644
--- a/ext/flac/gstflactag.c
+++ b/ext/flac/gstflactag.c
@@ -142,7 +142,7 @@
     tag->vorbiscomment = NULL;
   }
   if (tag->tags) {
-    gst_tag_list_free (tag->tags);
+    gst_tag_list_unref (tag->tags);
     tag->tags = NULL;
   }
 
@@ -319,7 +319,7 @@
           id_data, 4, NULL);
       if (tag->tags != NULL) {
         gst_pad_push_event (tag->srcpad,
-            gst_event_new_tag ("GstFlacTag", gst_tag_list_copy (tag->tags)));
+            gst_event_new_tag (gst_tag_list_ref (tag->tags)));
       }
 
       gst_buffer_unref (tag->vorbiscomment);
@@ -377,7 +377,7 @@
       buffer = gst_tag_list_to_vorbiscomment_buffer (merged_tags, header,
           sizeof (header), NULL);
       GST_DEBUG_OBJECT (tag, "Writing tags %" GST_PTR_FORMAT, merged_tags);
-      gst_tag_list_free (merged_tags);
+      gst_tag_list_unref (merged_tags);
       if (buffer == NULL)
         goto no_comment;
 
@@ -483,7 +483,7 @@
         tag->vorbiscomment = NULL;
       }
       if (tag->tags) {
-        gst_tag_list_free (tag->tags);
+        gst_tag_list_unref (tag->tags);
         tag->tags = NULL;
       }
       tag->metadata_block_size = 0;
diff --git a/ext/gdk_pixbuf/Makefile.in b/ext/gdk_pixbuf/Makefile.in
index 0b8f7a7..6c065f4 100644
--- a/ext/gdk_pixbuf/Makefile.in
+++ b/ext/gdk_pixbuf/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -251,7 +251,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/ext/jack/Makefile.in b/ext/jack/Makefile.in
index f079dda..4372e55 100644
--- a/ext/jack/Makefile.in
+++ b/ext/jack/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -250,7 +250,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/ext/jpeg/Makefile.in b/ext/jpeg/Makefile.in
index 8e4e121..878d6cd 100644
--- a/ext/jpeg/Makefile.in
+++ b/ext/jpeg/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -249,7 +249,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/ext/jpeg/gstjpegdec.c b/ext/jpeg/gstjpegdec.c
index c595d0e..54abe4e 100644
--- a/ext/jpeg/gstjpegdec.c
+++ b/ext/jpeg/gstjpegdec.c
@@ -28,9 +28,8 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v v4l2src ! jpegdec ! ffmpegcolorspace ! xvimagesink
- * ]| The above pipeline reads a motion JPEG stream from a v4l2 camera
- * and renders it to the screen.
+ * gst-launch -v filesrc location=mjpeg.avi ! avidemux !  queue ! jpegdec ! videoconvert ! videoscale ! autovideosink
+ * ]| The above pipeline decode the mjpeg stream and renders it to the screen.
  * </refsect2>
  */
 
@@ -1051,6 +1050,8 @@
 
   gst_video_codec_state_unref (outstate);
 
+  gst_video_decoder_negotiate (GST_VIDEO_DECODER (dec));
+
   GST_DEBUG_OBJECT (dec, "max_v_samp_factor=%d", dec->cinfo.max_v_samp_factor);
   GST_DEBUG_OBJECT (dec, "max_h_samp_factor=%d", dec->cinfo.max_h_samp_factor);
 }
@@ -1167,7 +1168,7 @@
   gst_jpeg_dec_negotiate (dec, width, height, dec->cinfo.jpeg_color_space);
 
   state = gst_video_decoder_get_output_state (bdec);
-  ret = gst_video_decoder_alloc_output_frame (bdec, frame);
+  ret = gst_video_decoder_allocate_output_frame (bdec, frame);
   if (G_UNLIKELY (ret != GST_FLOW_OK))
     goto alloc_failed;
 
@@ -1315,18 +1316,20 @@
 static gboolean
 gst_jpeg_dec_decide_allocation (GstVideoDecoder * bdec, GstQuery * query)
 {
-  GstBufferPool *pool;
+  GstBufferPool *pool = NULL;
   GstStructure *config;
 
   if (!GST_VIDEO_DECODER_CLASS (parent_class)->decide_allocation (bdec, query))
     return FALSE;
 
-  g_assert (gst_query_get_n_allocation_pools (query) > 0);
-  gst_query_parse_nth_allocation_pool (query, 0, &pool, NULL, NULL, NULL);
-  g_assert (pool != NULL);
+  if (gst_query_get_n_allocation_pools (query) > 0)
+    gst_query_parse_nth_allocation_pool (query, 0, &pool, NULL, NULL, NULL);
+
+  if (pool == NULL)
+    return FALSE;
 
   config = gst_buffer_pool_get_config (pool);
-  if (gst_query_has_allocation_meta (query, GST_VIDEO_META_API_TYPE)) {
+  if (gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL)) {
     gst_buffer_pool_config_add_option (config,
         GST_BUFFER_POOL_OPTION_VIDEO_META);
   }
diff --git a/ext/jpeg/gstjpegenc.c b/ext/jpeg/gstjpegenc.c
index 8521522..e9173ff 100644
--- a/ext/jpeg/gstjpegenc.c
+++ b/ext/jpeg/gstjpegenc.c
@@ -248,6 +248,8 @@
 
   gst_video_frame_unmap (&jpegenc->current_vframe);
 
+  GST_VIDEO_CODEC_FRAME_SET_SYNC_POINT (jpegenc->current_frame);
+
   gst_video_encoder_finish_frame (GST_VIDEO_ENCODER (jpegenc),
       jpegenc->current_frame);
   jpegenc->current_frame = NULL;
@@ -531,7 +533,7 @@
 static gboolean
 gst_jpegenc_propose_allocation (GstVideoEncoder * encoder, GstQuery * query)
 {
-  gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE);
+  gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL);
 
   return GST_VIDEO_ENCODER_CLASS (parent_class)->propose_allocation (encoder,
       query);
diff --git a/ext/libcaca/Makefile.in b/ext/libcaca/Makefile.in
index 89c3816..0ea80e5 100644
--- a/ext/libcaca/Makefile.in
+++ b/ext/libcaca/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -247,7 +247,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/ext/libpng/Makefile.in b/ext/libpng/Makefile.in
index 632e207..f18de15 100644
--- a/ext/libpng/Makefile.in
+++ b/ext/libpng/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -248,7 +248,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/ext/libpng/gstpngdec.c b/ext/libpng/gstpngdec.c
index a9c3a32..1178958 100644
--- a/ext/libpng/gstpngdec.c
+++ b/ext/libpng/gstpngdec.c
@@ -134,7 +134,7 @@
 
   /* Allocate output buffer */
   ret =
-      gst_video_decoder_alloc_output_frame (GST_VIDEO_DECODER (pngdec),
+      gst_video_decoder_allocate_output_frame (GST_VIDEO_DECODER (pngdec),
       pngdec->current_frame);
   if (G_UNLIKELY (ret != GST_FLOW_OK))
     GST_DEBUG_OBJECT (pngdec, "failed to acquire buffer");
@@ -330,6 +330,7 @@
   pngdec->output_state =
       gst_video_decoder_set_output_state (GST_VIDEO_DECODER (pngdec), format,
       width, height, pngdec->input_state);
+  gst_video_decoder_negotiate (GST_VIDEO_DECODER (pngdec));
   GST_DEBUG ("Final %d %d", GST_VIDEO_INFO_WIDTH (&pngdec->output_state->info),
       GST_VIDEO_INFO_HEIGHT (&pngdec->output_state->info));
 
@@ -393,18 +394,20 @@
 static gboolean
 gst_pngdec_decide_allocation (GstVideoDecoder * bdec, GstQuery * query)
 {
-  GstBufferPool *pool;
+  GstBufferPool *pool = NULL;
   GstStructure *config;
 
   if (!GST_VIDEO_DECODER_CLASS (parent_class)->decide_allocation (bdec, query))
     return FALSE;
 
-  g_assert (gst_query_get_n_allocation_pools (query) > 0);
-  gst_query_parse_nth_allocation_pool (query, 0, &pool, NULL, NULL, NULL);
-  g_assert (pool != NULL);
+  if (gst_query_get_n_allocation_pools (query) > 0)
+    gst_query_parse_nth_allocation_pool (query, 0, &pool, NULL, NULL, NULL);
+
+  if (pool == NULL)
+    return FALSE;
 
   config = gst_buffer_pool_get_config (pool);
-  if (gst_query_has_allocation_meta (query, GST_VIDEO_META_API_TYPE)) {
+  if (gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL)) {
     gst_buffer_pool_config_add_option (config,
         GST_BUFFER_POOL_OPTION_VIDEO_META);
   }
diff --git a/ext/libpng/gstpngenc.c b/ext/libpng/gstpngenc.c
index 9d3e1d0..d13fa65 100644
--- a/ext/libpng/gstpngenc.c
+++ b/ext/libpng/gstpngenc.c
@@ -371,7 +371,7 @@
 static gboolean
 gst_pngenc_propose_allocation (GstVideoEncoder * encoder, GstQuery * query)
 {
-  gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE);
+  gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL);
 
   return GST_VIDEO_ENCODER_CLASS (parent_class)->propose_allocation (encoder,
       query);
diff --git a/ext/pulse/Makefile.in b/ext/pulse/Makefile.in
index 22c0379..729cfa9 100644
--- a/ext/pulse/Makefile.in
+++ b/ext/pulse/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -250,7 +250,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/ext/raw1394/Makefile.in b/ext/raw1394/Makefile.in
index bc8dabf..f6494a3 100644
--- a/ext/raw1394/Makefile.in
+++ b/ext/raw1394/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -255,7 +255,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/ext/shout2/Makefile.in b/ext/shout2/Makefile.in
index a71ae75..1987876 100644
--- a/ext/shout2/Makefile.in
+++ b/ext/shout2/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -247,7 +247,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/ext/shout2/gstshout2.c b/ext/shout2/gstshout2.c
index 58a0da7..74818c8 100644
--- a/ext/shout2/gstshout2.c
+++ b/ext/shout2/gstshout2.c
@@ -259,7 +259,7 @@
   g_free (shout2send->mount);
   g_free (shout2send->url);
 
-  gst_tag_list_free (shout2send->tags);
+  gst_tag_list_unref (shout2send->tags);
 
   gst_poll_free (shout2send->timer);
 
@@ -348,7 +348,7 @@
     shout_metadata_free (pmetadata);
   }
 
-  gst_tag_list_free (copy);
+  gst_tag_list_unref (copy);
 }
 #endif
 
diff --git a/ext/soup/Makefile.in b/ext/soup/Makefile.in
index 5c17ba7..0d93b4e 100644
--- a/ext/soup/Makefile.in
+++ b/ext/soup/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -250,7 +250,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/ext/soup/gstsouphttpsrc.c b/ext/soup/gstsouphttpsrc.c
index 40ff92f..581cf14 100644
--- a/ext/soup/gstsouphttpsrc.c
+++ b/ext/soup/gstsouphttpsrc.c
@@ -669,7 +669,7 @@
 
   if (src->automatic_redirect && SOUP_STATUS_IS_REDIRECTION (msg->status_code)) {
     GST_DEBUG_OBJECT (src, "%u redirect to \"%s\"", msg->status_code,
-        soup_message_headers_get (msg->response_headers, "Location"));
+        soup_message_headers_get_one (msg->response_headers, "Location"));
     return;
   }
 
@@ -701,7 +701,7 @@
   tag_list = gst_tag_list_new_empty ();
 
   if ((value =
-          soup_message_headers_get (msg->response_headers,
+          soup_message_headers_get_one (msg->response_headers,
               "icy-metaint")) != NULL) {
     gint icy_metaint = atoi (value);
 
@@ -757,7 +757,7 @@
     g_hash_table_destroy (params);
 
   if ((value =
-          soup_message_headers_get (msg->response_headers,
+          soup_message_headers_get_one (msg->response_headers,
               "icy-name")) != NULL) {
     g_free (src->iradio_name);
     src->iradio_name = gst_soup_http_src_unicodify (value);
@@ -767,7 +767,7 @@
     }
   }
   if ((value =
-          soup_message_headers_get (msg->response_headers,
+          soup_message_headers_get_one (msg->response_headers,
               "icy-genre")) != NULL) {
     g_free (src->iradio_genre);
     src->iradio_genre = gst_soup_http_src_unicodify (value);
@@ -776,7 +776,7 @@
           src->iradio_genre, NULL);
     }
   }
-  if ((value = soup_message_headers_get (msg->response_headers, "icy-url"))
+  if ((value = soup_message_headers_get_one (msg->response_headers, "icy-url"))
       != NULL) {
     g_free (src->iradio_url);
     src->iradio_url = gst_soup_http_src_unicodify (value);
@@ -788,10 +788,9 @@
   if (!gst_tag_list_is_empty (tag_list)) {
     GST_DEBUG_OBJECT (src,
         "calling gst_element_found_tags with %" GST_PTR_FORMAT, tag_list);
-    gst_pad_push_event (GST_BASE_SRC_PAD (src), gst_event_new_tag ("GstSrc",
-            tag_list));
+    gst_pad_push_event (GST_BASE_SRC_PAD (src), gst_event_new_tag (tag_list));
   } else {
-    gst_tag_list_free (tag_list);
+    gst_tag_list_unref (tag_list);
   }
 
   /* Handle HTTP errors. */
diff --git a/ext/speex/Makefile.in b/ext/speex/Makefile.in
index 09d2889..2bba93f 100644
--- a/ext/speex/Makefile.in
+++ b/ext/speex/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -249,7 +249,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/ext/speex/gstspeexdec.c b/ext/speex/gstspeexdec.c
index fd1a800..1478cfd 100644
--- a/ext/speex/gstspeexdec.c
+++ b/ext/speex/gstspeexdec.c
@@ -312,7 +312,7 @@
 
   gst_audio_decoder_merge_tags (GST_AUDIO_DECODER (dec), list,
       GST_TAG_MERGE_REPLACE);
-  gst_tag_list_free (list);
+  gst_tag_list_unref (list);
 
   g_free (encoder);
   g_free (ver);
diff --git a/ext/speex/gstspeexenc.c b/ext/speex/gstspeexenc.c
index f475cab..15f1aac 100644
--- a/ext/speex/gstspeexenc.c
+++ b/ext/speex/gstspeexenc.c
@@ -269,7 +269,7 @@
     enc->state = NULL;
   }
   speex_bits_destroy (&enc->bits);
-  gst_tag_list_free (enc->tags);
+  gst_tag_list_unref (enc->tags);
   enc->tags = NULL;
 
   gst_tag_setter_reset_tags (GST_TAG_SETTER (enc));
@@ -350,7 +350,7 @@
   GST_DEBUG_OBJECT (enc, "merged   tags = %" GST_PTR_FORMAT, merged_tags);
   comments = gst_tag_list_to_vorbiscomment_buffer (merged_tags, NULL,
       0, "Encoded with GStreamer Speexenc");
-  gst_tag_list_free (merged_tags);
+  gst_tag_list_unref (merged_tags);
 
   GST_BUFFER_OFFSET (comments) = 0;
   GST_BUFFER_OFFSET_END (comments) = 0;
diff --git a/ext/taglib/Makefile.in b/ext/taglib/Makefile.in
index 5585916..6883b1b 100644
--- a/ext/taglib/Makefile.in
+++ b/ext/taglib/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -264,7 +264,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/ext/wavpack/Makefile.in b/ext/wavpack/Makefile.in
index b41449f..3c5871a 100644
--- a/ext/wavpack/Makefile.in
+++ b/ext/wavpack/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -252,7 +252,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/ext/wavpack/gstwavpackdec.c b/ext/wavpack/gstwavpackdec.c
index 9351af9..1c34fe0 100644
--- a/ext/wavpack/gstwavpackdec.c
+++ b/ext/wavpack/gstwavpackdec.c
@@ -209,6 +209,7 @@
       dec->width = 32;
       break;
     default:
+      fmt = GST_AUDIO_FORMAT_UNKNOWN;
       g_assert_not_reached ();
       break;
   }
@@ -258,9 +259,8 @@
     bitrate = gst_util_uint64_scale (size, 8 * GST_SECOND, duration);
     gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_BITRATE,
         (guint) bitrate, NULL);
-
-    gst_element_post_message (GST_ELEMENT (dec),
-        gst_message_new_tag (GST_OBJECT (dec), list));
+    gst_audio_decoder_merge_tags (GST_AUDIO_DECODER (dec), list,
+        GST_TAG_MERGE_REPLACE);
   }
 }
 
diff --git a/ext/wavpack/gstwavpackenc.c b/ext/wavpack/gstwavpackenc.c
index 5753254..6115e8d 100644
--- a/ext/wavpack/gstwavpackenc.c
+++ b/ext/wavpack/gstwavpackenc.c
@@ -400,7 +400,7 @@
       enc->channel_mapping);
 
   /* wavpack caps hold gst mask, not wavpack mask */
-  gst_audio_channel_positions_to_mask (opos, enc->channels, &mask);
+  gst_audio_channel_positions_to_mask (opos, enc->channels, FALSE, &mask);
 
   /* set fixed src pad caps now that we know what we will get */
   caps = gst_caps_new_simple ("audio/x-wavpack",
diff --git a/gst-plugins-good.doap b/gst-plugins-good.doap
index 5c262bf..da94cb9 100644
--- a/gst-plugins-good.doap
+++ b/gst-plugins-good.doap
@@ -34,6 +34,16 @@
 
  <release>
   <Version>
+   <revision>0.11.93</revision>
+   <branch>0.11</branch>
+   <name>Poetic Pitbull Revolutions</name>
+   <created>2012-08-08</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-0.11.93.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
    <revision>0.11.92</revision>
    <branch>0.11</branch>
    <name>Money</name>
diff --git a/gst-plugins-good.spec b/gst-plugins-good.spec
index d7383da..798f2b7 100644
--- a/gst-plugins-good.spec
+++ b/gst-plugins-good.spec
@@ -4,7 +4,7 @@
 %define gst_minver   0.11.0
 
 Name: 		%{gstreamer}-plugins-good
-Version: 	0.11.92
+Version: 	0.11.93
 Release: 	1.gst
 Summary: 	GStreamer plug-ins with good code and licensing
 
@@ -12,7 +12,7 @@
 License: 	LGPL
 URL:		http://gstreamer.freedesktop.org/
 Vendor:         GStreamer Backpackers Team <package@gstreamer.freedesktop.org>
-Source:         http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-%{version}.tar.gz
+Source:         http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-%{version}.tar.xz
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
 Requires: 	  %{gstreamer} >= %{gst_minver}
@@ -92,7 +92,7 @@
 %{_libdir}/gstreamer-%{majorminor}/libgstrtsp.so
 %{_libdir}/gstreamer-%{majorminor}/libgstsmpte.so
 %{_libdir}/gstreamer-%{majorminor}/libgstudp.so
-# %{_libdir}/gstreamer-%{majorminor}/libgstvideobox.so
+%{_libdir}/gstreamer-%{majorminor}/libgstvideobox.so
 %{_libdir}/gstreamer-%{majorminor}/libgstwavenc.so
 %{_libdir}/gstreamer-%{majorminor}/libgstwavparse.so
 %{_libdir}/gstreamer-%{majorminor}/libgstauparse.so
@@ -100,7 +100,7 @@
 %{_libdir}/gstreamer-%{majorminor}/libgstnavigationtest.so
 %{_libdir}/gstreamer-%{majorminor}/libgstalphacolor.so
 #%{_libdir}/gstreamer-%{majorminor}/libgstcairo.so
-# %{_libdir}/gstreamer-%{majorminor}/libgstflxdec.so
+%{_libdir}/gstreamer-%{majorminor}/libgstflxdec.so
 %{_libdir}/gstreamer-%{majorminor}/libgstmatroska.so
 %{_libdir}/gstreamer-%{majorminor}/libgstvideomixer.so
 %{_libdir}/gstreamer-%{majorminor}/libgstcutter.so
@@ -108,7 +108,7 @@
 %{_libdir}/gstreamer-%{majorminor}/libgstid3demux.so
 #%{_libdir}/gstreamer-%{majorminor}/libgstgdkpixbuf.so
 %{_libdir}/gstreamer-%{majorminor}/libgstapetag.so
-%{_libdir}/gstreamer-%{majorminor}/libgstannodex.so
+# %{_libdir}/gstreamer-%{majorminor}/libgstannodex.so
 %{_libdir}/gstreamer-%{majorminor}/libgstvideocrop.so
 %{_libdir}/gstreamer-%{majorminor}/libgsticydemux.so
 %{_libdir}/gstreamer-%{majorminor}/libgsttaglib.so
@@ -123,7 +123,7 @@
 # %{_libdir}/gstreamer-%{majorminor}/libgstdeinterlace.so
 %{_libdir}/gstreamer-%{majorminor}/libgstflv.so
 %{_libdir}/gstreamer-%{majorminor}/libgsty4menc.so
-# %{_libdir}/gstreamer-%{majorminor}/libgstoss4audio.so
+%{_libdir}/gstreamer-%{majorminor}/libgstoss4audio.so
 %{_libdir}/gstreamer-%{majorminor}/libgstimagefreeze.so
 %{_libdir}/gstreamer-%{majorminor}/libgstshapewipe.so
 %{_libdir}/gstreamer-%{majorminor}/libgstvideofilter.so
diff --git a/gst-plugins-good.spec.in b/gst-plugins-good.spec.in
index cb1d1d5..1e86084 100644
--- a/gst-plugins-good.spec.in
+++ b/gst-plugins-good.spec.in
@@ -12,7 +12,7 @@
 License: 	LGPL
 URL:		http://gstreamer.freedesktop.org/
 Vendor:         GStreamer Backpackers Team <package@gstreamer.freedesktop.org>
-Source:         http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-%{version}.tar.gz
+Source:         http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-%{version}.tar.xz
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
 Requires: 	  %{gstreamer} >= %{gst_minver}
@@ -92,7 +92,7 @@
 %{_libdir}/gstreamer-%{majorminor}/libgstrtsp.so
 %{_libdir}/gstreamer-%{majorminor}/libgstsmpte.so
 %{_libdir}/gstreamer-%{majorminor}/libgstudp.so
-# %{_libdir}/gstreamer-%{majorminor}/libgstvideobox.so
+%{_libdir}/gstreamer-%{majorminor}/libgstvideobox.so
 %{_libdir}/gstreamer-%{majorminor}/libgstwavenc.so
 %{_libdir}/gstreamer-%{majorminor}/libgstwavparse.so
 %{_libdir}/gstreamer-%{majorminor}/libgstauparse.so
@@ -100,7 +100,7 @@
 %{_libdir}/gstreamer-%{majorminor}/libgstnavigationtest.so
 %{_libdir}/gstreamer-%{majorminor}/libgstalphacolor.so
 @USE_CAIRO_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstcairo.so
-# %{_libdir}/gstreamer-%{majorminor}/libgstflxdec.so
+%{_libdir}/gstreamer-%{majorminor}/libgstflxdec.so
 %{_libdir}/gstreamer-%{majorminor}/libgstmatroska.so
 %{_libdir}/gstreamer-%{majorminor}/libgstvideomixer.so
 %{_libdir}/gstreamer-%{majorminor}/libgstcutter.so
@@ -108,7 +108,7 @@
 %{_libdir}/gstreamer-%{majorminor}/libgstid3demux.so
 @USE_GDK_PIXBUF_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstgdkpixbuf.so
 %{_libdir}/gstreamer-%{majorminor}/libgstapetag.so
-%{_libdir}/gstreamer-%{majorminor}/libgstannodex.so
+# %{_libdir}/gstreamer-%{majorminor}/libgstannodex.so
 %{_libdir}/gstreamer-%{majorminor}/libgstvideocrop.so
 %{_libdir}/gstreamer-%{majorminor}/libgsticydemux.so
 %{_libdir}/gstreamer-%{majorminor}/libgsttaglib.so
@@ -123,7 +123,7 @@
 # %{_libdir}/gstreamer-%{majorminor}/libgstdeinterlace.so
 %{_libdir}/gstreamer-%{majorminor}/libgstflv.so
 %{_libdir}/gstreamer-%{majorminor}/libgsty4menc.so
-# %{_libdir}/gstreamer-%{majorminor}/libgstoss4audio.so
+%{_libdir}/gstreamer-%{majorminor}/libgstoss4audio.so
 %{_libdir}/gstreamer-%{majorminor}/libgstimagefreeze.so
 %{_libdir}/gstreamer-%{majorminor}/libgstshapewipe.so
 %{_libdir}/gstreamer-%{majorminor}/libgstvideofilter.so
diff --git a/gst/Makefile.in b/gst/Makefile.in
index 74d4d5d..516eda9 100644
--- a/gst/Makefile.in
+++ b/gst/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -225,7 +225,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/alpha/Makefile.in b/gst/alpha/Makefile.in
index 6da2875..5d567d5 100644
--- a/gst/alpha/Makefile.in
+++ b/gst/alpha/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -257,7 +257,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/apetag/Makefile.in b/gst/apetag/Makefile.in
index 2234f28..2951e2a 100644
--- a/gst/apetag/Makefile.in
+++ b/gst/apetag/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -247,7 +247,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/audiofx/Makefile.in b/gst/audiofx/Makefile.in
index 402d35d..e662eb4 100644
--- a/gst/audiofx/Makefile.in
+++ b/gst/audiofx/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -266,7 +266,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/audiofx/audiopanorama.c b/gst/audiofx/audiopanorama.c
index 3d0d68f..e257c36 100644
--- a/gst/audiofx/audiopanorama.c
+++ b/gst/audiofx/audiopanorama.c
@@ -334,9 +334,11 @@
   if (direction == GST_PAD_SRC) {
     GST_INFO ("allow 1-2 channels");
     gst_structure_set (structure, "channels", GST_TYPE_INT_RANGE, 1, 2, NULL);
+    gst_structure_remove_field (structure, "channel-mask");
   } else {
     GST_INFO ("allow 2 channels");
     gst_structure_set (structure, "channels", G_TYPE_INT, 2, NULL);
+    gst_structure_remove_field (structure, "channel-mask");
   }
 
   return res;
diff --git a/gst/audioparsers/Makefile.in b/gst/audioparsers/Makefile.in
index 12d86c4..b7afca0 100644
--- a/gst/audioparsers/Makefile.in
+++ b/gst/audioparsers/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -255,7 +255,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/audioparsers/gstaacparse.c b/gst/audioparsers/gstaacparse.c
index f56b3e8..9ffe7c5 100644
--- a/gst/audioparsers/gstaacparse.c
+++ b/gst/audioparsers/gstaacparse.c
@@ -271,6 +271,9 @@
     gst_structure_get_int (structure, "rate", &aacparse->sample_rate);
     gst_structure_get_int (structure, "channels", &aacparse->channels);
   } else {
+    aacparse->sample_rate = 0;
+    aacparse->channels = 0;
+    aacparse->header_type = DSPAAC_HEADER_NOT_PARSED;
     gst_base_parse_set_passthrough (parse, FALSE);
   }
 
@@ -720,7 +723,7 @@
     if (((data[i] == 0xff) && ((data[i + 1] & 0xf6) == 0xf0)) ||
         ((data[0] == 0x56) && ((data[1] & 0xe0) == 0xe0)) ||
         strncmp ((char *) data + i, "ADIF", 4) == 0) {
-      GST_DEBUG_OBJECT (aacparse, "Found ADIF signature at offset %u", i);
+      GST_DEBUG_OBJECT (aacparse, "Found signature at offset %u", i);
       found = TRUE;
 
       if (i) {
@@ -745,10 +748,15 @@
 
     GST_INFO ("ADTS ID: %d, framesize: %d", (data[1] & 0x08) >> 3, *framesize);
 
-    aacparse->header_type = DSPAAC_HEADER_ADTS;
     gst_aac_parse_parse_adts_header (aacparse, data, &rate, &channels,
         &aacparse->object_type, &aacparse->mpegversion);
 
+    if (!channels || !framesize) {
+      GST_DEBUG_OBJECT (aacparse, "impossible ADTS configuration");
+      return FALSE;
+    }
+
+    aacparse->header_type = DSPAAC_HEADER_ADTS;
     gst_base_parse_set_frame_rate (GST_BASE_PARSE (aacparse), rate,
         aacparse->frame_samples, 2, 2);
 
@@ -987,8 +995,6 @@
       aacparse->sample_rate = rate;
       aacparse->channels = channels;
 
-      GST_DEBUG_OBJECT (aacparse, "here");
-
       if (!gst_aac_parse_set_src_caps (aacparse, NULL)) {
         /* If linking fails, we need to return appropriate error */
         ret = GST_FLOW_NOT_LINKED;
diff --git a/gst/audioparsers/gstflacparse.c b/gst/audioparsers/gstflacparse.c
index 18978ff..ff5a359 100644
--- a/gst/audioparsers/gstflacparse.c
+++ b/gst/audioparsers/gstflacparse.c
@@ -184,6 +184,9 @@
     GST_STATIC_CAPS ("audio/x-flac")
     );
 
+static GstBuffer *gst_flac_parse_generate_vorbiscomment (GstFlacParse *
+    flacparse);
+
 static void gst_flac_parse_finalize (GObject * object);
 static void gst_flac_parse_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec);
@@ -292,9 +295,13 @@
   GstFlacParse *flacparse = GST_FLAC_PARSE (object);
 
   if (flacparse->tags) {
-    gst_tag_list_free (flacparse->tags);
+    gst_tag_list_unref (flacparse->tags);
     flacparse->tags = NULL;
   }
+  if (flacparse->toc) {
+    gst_toc_unref (flacparse->toc);
+    flacparse->toc = NULL;
+  }
 
   g_list_foreach (flacparse->headers, (GFunc) gst_mini_object_unref, NULL);
   g_list_free (flacparse->headers);
@@ -343,9 +350,13 @@
   GstFlacParse *flacparse = GST_FLAC_PARSE (parse);
 
   if (flacparse->tags) {
-    gst_tag_list_free (flacparse->tags);
+    gst_tag_list_unref (flacparse->tags);
     flacparse->tags = NULL;
   }
+  if (flacparse->toc) {
+    gst_toc_unref (flacparse->toc);
+    flacparse->toc = NULL;
+  }
 
   g_list_foreach (flacparse->headers, (GFunc) gst_mini_object_unref, NULL);
   g_list_free (flacparse->headers);
@@ -549,6 +560,16 @@
     }
   }
 
+  /* documentation says:
+   * The "blocking strategy" bit must be the same throughout the entire stream. */
+  if (flacparse->blocking_strategy != blocking_strategy) {
+    if (flacparse->block_size != 0) {
+      GST_WARNING_OBJECT (flacparse, "blocking strategy is not constant");
+      if (suspect)
+        *suspect = TRUE;
+    }
+  }
+
   /* 
      The FLAC format documentation says:
      The "blocking strategy" bit determines how to calculate the sample number
@@ -952,7 +973,7 @@
   if (flacparse->tags == NULL) {
     GST_ERROR_OBJECT (flacparse, "Invalid vorbiscomment block");
   } else if (gst_tag_list_is_empty (flacparse->tags)) {
-    gst_tag_list_free (flacparse->tags);
+    gst_tag_list_unref (flacparse->tags);
     flacparse->tags = NULL;
   }
 
@@ -960,6 +981,114 @@
 }
 
 static gboolean
+gst_flac_parse_handle_cuesheet (GstFlacParse * flacparse, GstBuffer * buffer)
+{
+  GstByteReader reader;
+  GstMapInfo map;
+  guint i, j;
+  guint8 n_tracks, track_num, index;
+  guint64 offset;
+  gint64 start, stop;
+  gchar *id;
+  gchar isrc[13];
+  GstTagList *tags;
+  GstToc *toc;
+  GstTocEntry *cur_entry = NULL, *prev_entry = NULL;
+
+  gst_buffer_map (buffer, &map, GST_MAP_READ);
+  gst_byte_reader_init (&reader, map.data, map.size);
+
+  toc = gst_toc_new (GST_TOC_SCOPE_GLOBAL);
+
+  /* skip 4 bytes METADATA_BLOCK_HEADER */
+  /* http://flac.sourceforge.net/format.html#metadata_block_header */
+  if (!gst_byte_reader_skip (&reader, 4))
+    goto error;
+
+  /* skip 395 bytes from METADATA_BLOCK_CUESHEET */
+  /* http://flac.sourceforge.net/format.html#metadata_block_cuesheet */
+  if (!gst_byte_reader_skip (&reader, 395))
+    goto error;
+
+  if (!gst_byte_reader_get_uint8 (&reader, &n_tracks))
+    goto error;
+
+  /* CUESHEET_TRACK */
+  /* http://flac.sourceforge.net/format.html#cuesheet_track */
+  for (i = 0; i < n_tracks; i++) {
+    if (!gst_byte_reader_get_uint64_be (&reader, &offset))
+      goto error;
+    if (!gst_byte_reader_get_uint8 (&reader, &track_num))
+      goto error;
+
+    if (gst_byte_reader_get_remaining (&reader) < 12)
+      goto error;
+    memcpy (isrc, map.data + gst_byte_reader_get_pos (&reader), 12);
+    /* \0-terminate the string */
+    isrc[12] = '\0';
+    if (!gst_byte_reader_skip (&reader, 12))
+      goto error;
+
+    /* skip 14 bytes from CUESHEET_TRACK */
+    if (!gst_byte_reader_skip (&reader, 14))
+      goto error;
+    if (!gst_byte_reader_get_uint8 (&reader, &index))
+      goto error;
+    /* add tracks in TOC */
+    /* lead-out tack has number 170 or 255 */
+    if (track_num != 170 && track_num != 255) {
+      prev_entry = cur_entry;
+      /* previous track stop time = current track start time */
+      if (prev_entry != NULL) {
+        gst_toc_entry_get_start_stop_times (prev_entry, &start, NULL);
+        stop =
+            gst_util_uint64_scale_round (offset, GST_SECOND,
+            flacparse->samplerate);
+        gst_toc_entry_set_start_stop_times (prev_entry, start, stop);
+      }
+      id = g_strdup_printf ("%08x", track_num);
+      cur_entry = gst_toc_entry_new (GST_TOC_ENTRY_TYPE_TRACK, id);
+      g_free (id);
+      start =
+          gst_util_uint64_scale_round (offset, GST_SECOND,
+          flacparse->samplerate);
+      gst_toc_entry_set_start_stop_times (cur_entry, start, -1);
+      /* add ISRC as tag in track */
+      if (strlen (isrc) != 0) {
+        tags = gst_tag_list_new_empty ();
+        gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_ISRC, isrc, NULL);
+        gst_toc_entry_set_tags (cur_entry, tags);
+      }
+      gst_toc_append_entry (toc, cur_entry);
+      /* CUESHEET_TRACK_INDEX */
+      /* http://flac.sourceforge.net/format.html#cuesheet_track_index */
+      for (j = 0; j < index; j++) {
+        if (!gst_byte_reader_skip (&reader, 12))
+          goto error;
+      }
+    } else {
+      /* set stop time in last track */
+      stop =
+          gst_util_uint64_scale_round (offset, GST_SECOND,
+          flacparse->samplerate);
+      gst_toc_entry_set_start_stop_times (cur_entry, start, stop);
+    }
+  }
+
+  /* send data as TOC */
+  if (!flacparse->toc)
+    flacparse->toc = toc;
+
+  gst_buffer_unmap (buffer, &map);
+  return TRUE;
+
+error:
+  GST_ERROR_OBJECT (flacparse, "Error reading data");
+  gst_buffer_unmap (buffer, &map);
+  return FALSE;
+}
+
+static gboolean
 gst_flac_parse_handle_picture (GstFlacParse * flacparse, GstBuffer * buffer)
 {
   GstByteReader reader;
@@ -999,7 +1128,7 @@
       map.data + gst_byte_reader_get_pos (&reader), img_len, img_type);
 
   if (gst_tag_list_is_empty (flacparse->tags)) {
-    gst_tag_list_free (flacparse->tags);
+    gst_tag_list_unref (flacparse->tags);
     flacparse->tags = NULL;
   }
 
@@ -1125,6 +1254,16 @@
     gst_buffer_unmap (header, &map);
   }
 
+  /* at least this one we can generate easily
+   * to provide full headers downstream */
+  if (vorbiscomment == NULL && streaminfo != NULL) {
+    GST_DEBUG_OBJECT (flacparse,
+        "missing vorbiscomment header; generating dummy");
+    vorbiscomment = gst_flac_parse_generate_vorbiscomment (flacparse);
+    flacparse->headers = g_list_insert (flacparse->headers, vorbiscomment,
+        g_list_index (flacparse->headers, streaminfo) + 1);
+  }
+
   if (marker == NULL || streaminfo == NULL || vorbiscomment == NULL) {
     GST_WARNING_OBJECT (flacparse,
         "missing header %p %p %p, muxing into container "
@@ -1213,10 +1352,56 @@
   return res;
 }
 
+/* empty vorbiscomment */
+static GstBuffer *
+gst_flac_parse_generate_vorbiscomment (GstFlacParse * flacparse)
+{
+  GstTagList *taglist = gst_tag_list_new_empty ();
+  guchar header[4];
+  guint size;
+  GstBuffer *vorbiscomment;
+  GstMapInfo map;
+
+  header[0] = 0x84;             /* is_last = 1; type = 4; */
+
+  vorbiscomment =
+      gst_tag_list_to_vorbiscomment_buffer (taglist, header,
+      sizeof (header), NULL);
+  gst_tag_list_unref (taglist);
+
+  gst_buffer_map (vorbiscomment, &map, GST_MAP_WRITE);
+
+  /* Get rid of framing bit */
+  if (map.data[map.size - 1] == 1) {
+    GstBuffer *sub;
+
+    sub =
+        gst_buffer_copy_region (vorbiscomment, GST_BUFFER_COPY_ALL, 0,
+        map.size - 1);
+    gst_buffer_unmap (vorbiscomment, &map);
+    gst_buffer_unref (vorbiscomment);
+    vorbiscomment = sub;
+    gst_buffer_map (vorbiscomment, &map, GST_MAP_WRITE);
+  }
+
+  size = map.size - 4;
+  map.data[1] = ((size & 0xFF0000) >> 16);
+  map.data[2] = ((size & 0x00FF00) >> 8);
+  map.data[3] = (size & 0x0000FF);
+  gst_buffer_unmap (vorbiscomment, &map);
+
+  GST_BUFFER_TIMESTAMP (vorbiscomment) = GST_CLOCK_TIME_NONE;
+  GST_BUFFER_DURATION (vorbiscomment) = GST_CLOCK_TIME_NONE;
+  GST_BUFFER_OFFSET (vorbiscomment) = 0;
+  GST_BUFFER_OFFSET_END (vorbiscomment) = 0;
+
+  return vorbiscomment;
+}
+
 static gboolean
 gst_flac_parse_generate_headers (GstFlacParse * flacparse)
 {
-  GstBuffer *marker, *streaminfo, *vorbiscomment;
+  GstBuffer *marker, *streaminfo;
   GstMapInfo map;
 
   marker = gst_buffer_new_and_alloc (4);
@@ -1285,46 +1470,8 @@
   GST_BUFFER_OFFSET_END (streaminfo) = 0;
   flacparse->headers = g_list_append (flacparse->headers, streaminfo);
 
-  /* empty vorbiscomment */
-  {
-    GstTagList *taglist = gst_tag_list_new_empty ();
-    guchar header[4];
-    guint size;
-
-    header[0] = 0x84;           /* is_last = 1; type = 4; */
-
-    vorbiscomment =
-        gst_tag_list_to_vorbiscomment_buffer (taglist, header,
-        sizeof (header), NULL);
-    gst_tag_list_free (taglist);
-
-    gst_buffer_map (vorbiscomment, &map, GST_MAP_WRITE);
-
-    /* Get rid of framing bit */
-    if (map.data[map.size - 1] == 1) {
-      GstBuffer *sub;
-
-      sub =
-          gst_buffer_copy_region (vorbiscomment, GST_BUFFER_COPY_ALL, 0,
-          map.size - 1);
-      gst_buffer_unmap (vorbiscomment, &map);
-      gst_buffer_unref (vorbiscomment);
-      vorbiscomment = sub;
-      gst_buffer_map (vorbiscomment, &map, GST_MAP_WRITE);
-    }
-
-    size = map.size - 4;
-    map.data[1] = ((size & 0xFF0000) >> 16);
-    map.data[2] = ((size & 0x00FF00) >> 8);
-    map.data[3] = (size & 0x0000FF);
-    gst_buffer_unmap (vorbiscomment, &map);
-
-    GST_BUFFER_TIMESTAMP (vorbiscomment) = GST_CLOCK_TIME_NONE;
-    GST_BUFFER_DURATION (vorbiscomment) = GST_CLOCK_TIME_NONE;
-    GST_BUFFER_OFFSET (vorbiscomment) = 0;
-    GST_BUFFER_OFFSET_END (vorbiscomment) = 0;
-    flacparse->headers = g_list_append (flacparse->headers, vorbiscomment);
-  }
+  flacparse->headers = g_list_append (flacparse->headers,
+      gst_flac_parse_generate_vorbiscomment (flacparse));
 
   return TRUE;
 }
@@ -1381,13 +1528,16 @@
         if (!gst_flac_parse_handle_vorbiscomment (flacparse, sbuffer))
           goto cleanup;
         break;
+      case 5:                  /* CUESHEET */
+        if (!gst_flac_parse_handle_cuesheet (flacparse, sbuffer))
+          goto cleanup;
+        break;
       case 6:                  /* PICTURE */
         if (!gst_flac_parse_handle_picture (flacparse, sbuffer))
           goto cleanup;
         break;
       case 1:                  /* PADDING */
       case 2:                  /* APPLICATION */
-      case 5:                  /* CUESHEET */
       default:                 /* RESERVED */
         break;
     }
@@ -1503,9 +1653,15 @@
   /* Push tags */
   if (flacparse->tags) {
     gst_pad_push_event (GST_BASE_PARSE_SRC_PAD (flacparse),
-        gst_event_new_tag ("GstParser", flacparse->tags));
+        gst_event_new_tag (flacparse->tags));
     flacparse->tags = NULL;
   }
+  /* Push toc */
+  if (flacparse->toc) {
+    gst_pad_push_event (GST_BASE_PARSE_SRC_PAD (flacparse),
+        gst_event_new_toc (flacparse->toc, FALSE));
+    flacparse->toc = NULL;
+  }
 
   frame->flags |= GST_BASE_PARSE_FRAME_FLAG_CLIP;
 
diff --git a/gst/audioparsers/gstflacparse.h b/gst/audioparsers/gstflacparse.h
index ebdc1b9..bba0212 100644
--- a/gst/audioparsers/gstflacparse.h
+++ b/gst/audioparsers/gstflacparse.h
@@ -77,6 +77,7 @@
   gboolean strategy_checked;
 
   GstTagList *tags;
+  GstToc *toc;
 
   GList *headers;
   GstBuffer *seektable;
diff --git a/gst/audioparsers/gstmpegaudioparse.c b/gst/audioparsers/gstmpegaudioparse.c
index bd35117..03be438 100644
--- a/gst/audioparsers/gstmpegaudioparse.c
+++ b/gst/audioparsers/gstmpegaudioparse.c
@@ -1350,7 +1350,7 @@
           GST_TAG_NOMINAL_BITRATE, mp3parse->hdr_bitrate, NULL);
     }
     gst_pad_push_event (GST_BASE_PARSE_SRC_PAD (mp3parse),
-        gst_event_new_tag ("GstParser", taglist));
+        gst_event_new_tag (taglist));
     g_free (codec);
 
     /* also signals the end of first-frame processing */
@@ -1389,7 +1389,7 @@
   /* if the taglist exists, we need to send it */
   if (taglist) {
     gst_pad_push_event (GST_BASE_PARSE_SRC_PAD (mp3parse),
-        gst_event_new_tag ("GstParser", taglist));
+        gst_event_new_tag (taglist));
   }
 
   /* usual clipping applies */
diff --git a/gst/audioparsers/gstwavpackparse.c b/gst/audioparsers/gstwavpackparse.c
index e11f82a..a4e49a5 100644
--- a/gst/audioparsers/gstwavpackparse.c
+++ b/gst/audioparsers/gstwavpackparse.c
@@ -565,7 +565,7 @@
         if (!gst_wavpack_get_channel_positions (chans, mask, pos)) {
           GST_WARNING_OBJECT (wvparse, "Failed to determine channel layout");
         } else {
-          gst_audio_channel_positions_to_mask (pos, chans, &gmask);
+          gst_audio_channel_positions_to_mask (pos, chans, FALSE, &gmask);
           if (gmask)
             gst_caps_set_simple (caps,
                 "channel-mask", GST_TYPE_BITMASK, gmask, NULL);
diff --git a/gst/auparse/Makefile.in b/gst/auparse/Makefile.in
index a152575..e72fb22 100644
--- a/gst/auparse/Makefile.in
+++ b/gst/auparse/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -247,7 +247,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/autodetect/Makefile.in b/gst/autodetect/Makefile.in
index 42164e4..5a192b6 100644
--- a/gst/autodetect/Makefile.in
+++ b/gst/autodetect/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -251,7 +251,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/autodetect/gstautoaudiosink.c b/gst/autodetect/gstautoaudiosink.c
index 594f45a..bfb25a8 100644
--- a/gst/autodetect/gstautoaudiosink.c
+++ b/gst/autodetect/gstautoaudiosink.c
@@ -44,11 +44,14 @@
 #include "gstautoaudiosink.h"
 #include "gstautodetect.h"
 
+#define DEFAULT_TS_OFFSET           0
+
 /* Properties */
 enum
 {
   PROP_0,
   PROP_CAPS,
+  PROP_TS_OFFSET,
 };
 
 static GstStateChangeReturn
@@ -100,6 +103,11 @@
           "Filter sink candidates using these caps.", GST_TYPE_CAPS,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
+  g_object_class_install_property (gobject_class, PROP_TS_OFFSET,
+      g_param_spec_int64 ("ts-offset", "TS Offset",
+          "Timestamp offset in nanoseconds", G_MININT64, G_MAXINT64,
+          DEFAULT_TS_OFFSET, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
   gst_element_class_add_pad_template (eklass,
       gst_static_pad_template_get (&sink_template));
 
@@ -166,6 +174,7 @@
 
   /* set the default raw audio caps */
   sink->filter_caps = gst_static_caps_get (&raw_caps);
+  sink->ts_offset = DEFAULT_TS_OFFSET;
 
   /* mark as sink */
   GST_OBJECT_FLAG_SET (sink, GST_ELEMENT_FLAG_SINK);
@@ -336,6 +345,8 @@
   if (!(esink = gst_auto_audio_sink_find_best (sink)))
     goto no_sink;
 
+  g_object_set (G_OBJECT (esink), "ts-offset", sink->ts_offset, NULL);
+
   sink->kid = esink;
   /* Ensure the child is brought up to the right state to match the parent
    * although it's currently always in READY and 
@@ -415,6 +426,11 @@
         gst_caps_unref (sink->filter_caps);
       sink->filter_caps = gst_caps_copy (gst_value_get_caps (value));
       break;
+    case PROP_TS_OFFSET:
+      sink->ts_offset = g_value_get_int64 (value);
+      if (sink->kid)
+        g_object_set_property (G_OBJECT (sink->kid), pspec->name, value);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -432,6 +448,9 @@
       gst_value_set_caps (value, sink->filter_caps);
       break;
     }
+    case PROP_TS_OFFSET:
+      g_value_set_int64 (value, sink->ts_offset);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
diff --git a/gst/autodetect/gstautoaudiosink.h b/gst/autodetect/gstautoaudiosink.h
index 2e5085f..40fae5c 100644
--- a/gst/autodetect/gstautoaudiosink.h
+++ b/gst/autodetect/gstautoaudiosink.h
@@ -44,6 +44,7 @@
   GstPad *pad;
   GstElement *kid;
   GstCaps *filter_caps;
+  GstClockTimeDiff ts_offset;
 } GstAutoAudioSink;
 
 typedef struct _GstAutoAudioSinkClass {
diff --git a/gst/autodetect/gstautovideosink.c b/gst/autodetect/gstautovideosink.c
index 6c24c3b..272671a 100644
--- a/gst/autodetect/gstautovideosink.c
+++ b/gst/autodetect/gstautovideosink.c
@@ -44,11 +44,14 @@
 #include "gstautovideosink.h"
 #include "gstautodetect.h"
 
+#define DEFAULT_TS_OFFSET           0
+
 /* Properties */
 enum
 {
   PROP_0,
   PROP_CAPS,
+  PROP_TS_OFFSET,
 };
 
 static GstStateChangeReturn
@@ -98,6 +101,11 @@
           "Filter sink candidates using these caps.", GST_TYPE_CAPS,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
+  g_object_class_install_property (gobject_class, PROP_TS_OFFSET,
+      g_param_spec_int64 ("ts-offset", "TS Offset",
+          "Timestamp offset in nanoseconds", G_MININT64, G_MAXINT64,
+          DEFAULT_TS_OFFSET, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
   gst_element_class_add_pad_template (eklass,
       gst_static_pad_template_get (&sink_template));
   gst_element_class_set_static_metadata (eklass, "Auto video sink",
@@ -165,6 +173,7 @@
 
   /* set the default raw video caps */
   sink->filter_caps = gst_static_caps_get (&raw_caps);
+  sink->ts_offset = DEFAULT_TS_OFFSET;
 
   /* mark as sink */
   GST_OBJECT_FLAG_SET (sink, GST_ELEMENT_FLAG_SINK);
@@ -332,6 +341,8 @@
   if (!(esink = gst_auto_video_sink_find_best (sink)))
     goto no_sink;
 
+  g_object_set (G_OBJECT (esink), "ts-offset", sink->ts_offset, NULL);
+
   sink->kid = esink;
   gst_bin_add (GST_BIN (sink), esink);
 
@@ -403,6 +414,11 @@
         gst_caps_unref (sink->filter_caps);
       sink->filter_caps = gst_caps_copy (gst_value_get_caps (value));
       break;
+    case PROP_TS_OFFSET:
+      sink->ts_offset = g_value_get_int64 (value);
+      if (sink->kid)
+        g_object_set_property (G_OBJECT (sink->kid), pspec->name, value);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -420,6 +436,9 @@
       gst_value_set_caps (value, sink->filter_caps);
       break;
     }
+    case PROP_TS_OFFSET:
+      g_value_set_int64 (value, sink->ts_offset);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
diff --git a/gst/autodetect/gstautovideosink.h b/gst/autodetect/gstautovideosink.h
index 9aece2b..1ec4a26 100644
--- a/gst/autodetect/gstautovideosink.h
+++ b/gst/autodetect/gstautovideosink.h
@@ -44,6 +44,7 @@
   GstPad *pad;
   GstElement *kid;
   GstCaps *filter_caps;
+  GstClockTimeDiff ts_offset;
 } GstAutoVideoSink;
 
 typedef struct _GstAutoVideoSinkClass {
diff --git a/gst/avi/Makefile.in b/gst/avi/Makefile.in
index 01ac3fe..e136668 100644
--- a/gst/avi/Makefile.in
+++ b/gst/avi/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -249,7 +249,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c
index dddec00..6087b3b 100644
--- a/gst/avi/gstavidemux.c
+++ b/gst/avi/gstavidemux.c
@@ -231,7 +231,7 @@
       gst_object_unref (stream->pad);
   }
   if (stream->taglist) {
-    gst_tag_list_free (stream->taglist);
+    gst_tag_list_unref (stream->taglist);
     stream->taglist = NULL;
   }
   memset (stream, 0, sizeof (GstAviStream));
@@ -278,7 +278,7 @@
   }
 
   if (avi->globaltags)
-    gst_tag_list_free (avi->globaltags);
+    gst_tag_list_unref (avi->globaltags);
   avi->globaltags = NULL;
 
   avi->got_tags = TRUE;         /* we always want to push global tags */
@@ -1924,6 +1924,7 @@
   GstElement *element;
   gboolean got_strh = FALSE, got_strf = FALSE, got_vprp = FALSE;
   gst_riff_vprp *vprp = NULL;
+  gchar *stream_id;
 
   element = GST_ELEMENT_CAST (avi);
 
@@ -2299,7 +2300,12 @@
   avi->num_streams++;
 
   gst_pad_set_active (pad, TRUE);
-  gst_pad_push_event (pad, gst_event_new_caps (caps));
+  stream_id =
+      gst_pad_create_stream_id_printf (pad, GST_ELEMENT_CAST (avi), "%u",
+      avi->num_streams);
+  gst_pad_push_event (pad, gst_event_new_stream_start (stream_id));
+  g_free (stream_id);
+  gst_pad_set_caps (pad, caps);
   gst_caps_unref (caps);
 
   /* make tags */
@@ -3227,8 +3233,8 @@
                 case GST_RIFF_TAG_JUNQ:
                 case GST_RIFF_TAG_JUNK:
                   goto next;
-                  break;
               }
+              break;
             case GST_RIFF_IDIT:
               gst_avi_demux_parse_idit (avi, sub);
               goto next;
@@ -4177,7 +4183,7 @@
 
   if (!avi->streaming) {
     gst_pad_start_task (avi->sinkpad, (GstTaskFunction) gst_avi_demux_loop,
-        avi->sinkpad);
+        avi->sinkpad, NULL);
   }
   /* reset the last flow and mark discont, seek is always DISCONT */
   for (i = 0; i < avi->num_streams; i++) {
@@ -4443,10 +4449,9 @@
 
 
 #define gst_avi_demux_is_uncompressed(fourcc)		\
-  (fourcc &&						\
-    (fourcc == GST_RIFF_DIB ||				\
-     fourcc == GST_RIFF_rgb ||				\
-     fourcc == GST_RIFF_RGB || fourcc == GST_RIFF_RAW))
+  (fourcc == GST_RIFF_DIB ||				\
+   fourcc == GST_RIFF_rgb ||				\
+   fourcc == GST_RIFF_RGB || fourcc == GST_RIFF_RAW)
 
 /*
  * Invert DIB buffers... Takes existing buffer and
@@ -4463,11 +4468,19 @@
   guint8 *tmp = NULL;
   GstMapInfo map;
   GstCaps *caps;
+  guint32 fourcc;
 
   if (stream->strh->type != GST_RIFF_FCC_vids)
     return buf;
 
-  if (!gst_avi_demux_is_uncompressed (stream->strh->fcc_handler)) {
+  if (stream->strf.vids == NULL) {
+    GST_WARNING ("Failed to retrieve vids for stream");
+    return buf;
+  }
+
+  fourcc = (stream->strf.vids->compression) ?
+      stream->strf.vids->compression : stream->strh->fcc_handler;
+  if (!gst_avi_demux_is_uncompressed (fourcc)) {
     return buf;                 /* Ignore non DIB buffers */
   }
 
@@ -4480,11 +4493,6 @@
     return buf;
   }
 
-  if (stream->strf.vids == NULL) {
-    GST_WARNING ("Failed to retrieve vids for stream");
-    return buf;
-  }
-
   h = stream->strf.vids->height;
   w = stream->strf.vids->width;
   stride = GST_ROUND_UP_4 (w * (bpp / 8));
@@ -5119,7 +5127,7 @@
     if (pad && tags) {
       GST_DEBUG_OBJECT (pad, "Tags: %" GST_PTR_FORMAT, tags);
 
-      gst_pad_push_event (pad, gst_event_new_tag ("GstDemuxer", tags));
+      gst_pad_push_event (pad, gst_event_new_tag (tags));
       stream->taglist = NULL;
     }
   }
@@ -5131,7 +5139,8 @@
       GST_TAG_CONTAINER_FORMAT, "AVI", NULL);
 
   GST_DEBUG_OBJECT (avi, "Global tags: %" GST_PTR_FORMAT, tags);
-  gst_avi_demux_push_event (avi, gst_event_new_tag ("GstDemuxer", tags));
+  gst_tag_list_set_scope (tags, GST_TAG_SCOPE_GLOBAL);
+  gst_avi_demux_push_event (avi, gst_event_new_tag (tags));
   avi->globaltags = NULL;
   avi->got_tags = FALSE;
 }
@@ -5212,6 +5221,8 @@
             (GST_ELEMENT_CAST (avi),
             gst_message_new_segment_done (GST_OBJECT_CAST (avi),
                 GST_FORMAT_TIME, stop));
+        gst_avi_demux_push_event (avi,
+            gst_event_new_segment_done (GST_FORMAT_TIME, stop));
       } else {
         push_eos = TRUE;
       }
@@ -5389,7 +5400,7 @@
       if (active) {
         avi->streaming = FALSE;
         res = gst_pad_start_task (sinkpad, (GstTaskFunction) gst_avi_demux_loop,
-            sinkpad);
+            sinkpad, NULL);
       } else {
         res = gst_pad_stop_task (sinkpad);
       }
diff --git a/gst/avi/gstavimux.c b/gst/avi/gstavimux.c
index 1e699c8..10efaab 100644
--- a/gst/avi/gstavimux.c
+++ b/gst/avi/gstavimux.c
@@ -354,7 +354,7 @@
   avimux->codec_data_size = 0;
 
   if (avimux->tags_snap) {
-    gst_tag_list_free (avimux->tags_snap);
+    gst_tag_list_unref (avimux->tags_snap);
     avimux->tags_snap = NULL;
   }
 
@@ -769,11 +769,11 @@
     switch (fmt) {
       case GST_AUDIO_FORMAT_U8:
         avipad->auds.blockalign = 8;
-        avipad->auds.size = 8;
+        avipad->auds.bits_per_sample = 8;
         break;
       case GST_AUDIO_FORMAT_S16:
         avipad->auds.blockalign = 16;
-        avipad->auds.size = 16;
+        avipad->auds.bits_per_sample = 16;
         break;
       default:
         goto refuse_caps;
@@ -789,7 +789,7 @@
     /* set some defaults */
     avipad->auds.blockalign = 1;
     avipad->auds.av_bps = 0;
-    avipad->auds.size = 16;
+    avipad->auds.bits_per_sample = 16;
 
     if (!strcmp (mimetype, "audio/mpeg")) {
       gint mpegversion;
@@ -859,12 +859,12 @@
       avipad->auds.format = GST_RIFF_WAVE_FORMAT_A52;
     } else if (!strcmp (mimetype, "audio/x-alaw")) {
       avipad->auds.format = GST_RIFF_WAVE_FORMAT_ALAW;
-      avipad->auds.size = 8;
+      avipad->auds.bits_per_sample = 8;
       avipad->auds.blockalign = avipad->auds.channels;
       avipad->auds.av_bps = avipad->auds.blockalign * avipad->auds.rate;
     } else if (!strcmp (mimetype, "audio/x-mulaw")) {
       avipad->auds.format = GST_RIFF_WAVE_FORMAT_MULAW;
-      avipad->auds.size = 8;
+      avipad->auds.bits_per_sample = 8;
       avipad->auds.blockalign = avipad->auds.channels;
       avipad->auds.av_bps = avipad->auds.blockalign * avipad->auds.rate;
     } else if (!strcmp (mimetype, "audio/x-wma")) {
@@ -1298,7 +1298,7 @@
       hdl &= gst_byte_writer_put_uint32_le (&bw, audpad->auds.rate);
       hdl &= gst_byte_writer_put_uint32_le (&bw, audpad->auds.av_bps);
       hdl &= gst_byte_writer_put_uint16_le (&bw, audpad->auds.blockalign);
-      hdl &= gst_byte_writer_put_uint16_le (&bw, audpad->auds.size);
+      hdl &= gst_byte_writer_put_uint16_le (&bw, audpad->auds.bits_per_sample);
       hdl &= gst_byte_writer_put_uint16_le (&bw, codec_size);
       if (audpad->auds_codec_data) {
         gst_buffer_map (audpad->auds_codec_data, &map, GST_MAP_READ);
diff --git a/gst/avi/gstavisubtitle.c b/gst/avi/gstavisubtitle.c
index a404011..80f0668 100644
--- a/gst/avi/gstavisubtitle.c
+++ b/gst/avi/gstavisubtitle.c
@@ -177,8 +177,7 @@
 gst_avi_subtitle_title_tag (GstAviSubtitle * sub, gchar * title)
 {
   gst_pad_push_event (sub->src,
-      gst_event_new_tag ("GstParser", gst_tag_list_new (GST_TAG_TITLE, title,
-              NULL)));
+      gst_event_new_tag (gst_tag_list_new (GST_TAG_TITLE, title, NULL)));
 }
 
 static GstFlowReturn
diff --git a/gst/cutter/Makefile.in b/gst/cutter/Makefile.in
index 970a316..52c61a0 100644
--- a/gst/cutter/Makefile.in
+++ b/gst/cutter/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -247,7 +247,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/debugutils/Makefile.in b/gst/debugutils/Makefile.in
index cea61dc..747b874 100644
--- a/gst/debugutils/Makefile.in
+++ b/gst/debugutils/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -264,7 +264,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/debugutils/gstpushfilesrc.c b/gst/debugutils/gstpushfilesrc.c
index 3ccd7a6..34ab7d5 100644
--- a/gst/debugutils/gstpushfilesrc.c
+++ b/gst/debugutils/gstpushfilesrc.c
@@ -114,7 +114,7 @@
       res = TRUE;
       break;
     default:
-      res = gst_proxy_pad_query_default (pad, parent, query);
+      res = gst_pad_query_default (pad, parent, query);
       break;
   }
   return res;
diff --git a/gst/debugutils/gsttaginject.c b/gst/debugutils/gsttaginject.c
index 8decf6a..564c1bf 100644
--- a/gst/debugutils/gsttaginject.c
+++ b/gst/debugutils/gsttaginject.c
@@ -82,7 +82,7 @@
   GstTagInject *self = GST_TAG_INJECT (object);
 
   if (self->tags) {
-    gst_tag_list_free (self->tags);
+    gst_tag_list_unref (self->tags);
     self->tags = NULL;
   }
 
@@ -148,7 +148,7 @@
     if (self->tags && !gst_tag_list_is_empty (self->tags)) {
       GST_DEBUG ("tag event :%" GST_PTR_FORMAT, self->tags);
       gst_pad_push_event (GST_BASE_TRANSFORM_SRC_PAD (trans),
-          gst_event_new_tag ("GstTagInject", gst_tag_list_copy (self->tags)));
+          gst_event_new_tag (gst_tag_list_ref (self->tags)));
     }
   }
 
diff --git a/gst/debugutils/rndbuffersize.c b/gst/debugutils/rndbuffersize.c
index 8122212..243b1c7 100644
--- a/gst/debugutils/rndbuffersize.c
+++ b/gst/debugutils/rndbuffersize.c
@@ -27,6 +27,7 @@
 #endif
 
 #include <gst/gst.h>
+#include <gst/base/gstadapter.h>
 
 GST_DEBUG_CATEGORY_STATIC (gst_rnd_buffer_size_debug);
 #define GST_CAT_DEFAULT gst_rnd_buffer_size_debug
@@ -46,13 +47,15 @@
 
   /*< private > */
   GRand *rand;
-  gulong seed;
-  glong min, max;
+  guint seed;
+  gint min, max;
 
   GstPad *sinkpad, *srcpad;
   guint64 offset;
 
   gboolean need_newsegment;
+
+  GstAdapter *adapter;
 };
 
 struct _GstRndBufferSizeClass
@@ -95,6 +98,10 @@
     element, GstStateChange transition);
 static gboolean gst_rnd_buffer_size_src_event (GstPad * pad,
     GstObject * parent, GstEvent * event);
+static gboolean gst_rnd_buffer_size_sink_event (GstPad * pad,
+    GstObject * parent, GstEvent * event);
+static GstFlowReturn gst_rnd_buffer_size_chain (GstPad * pad,
+    GstObject * parent, GstBuffer * buffer);
 
 GType gst_rnd_buffer_size_get_type (void);
 #define gst_rnd_buffer_size_parent_class parent_class
@@ -125,20 +132,17 @@
   gstelement_class->change_state =
       GST_DEBUG_FUNCPTR (gst_rnd_buffer_size_change_state);
 
-  /* FIXME 0.11: these should all be int instead of long, to avoid bugs
-   * when passing these as varargs with g_object_set(), and there was no
-   * reason to use long in the first place here */
   g_object_class_install_property (gobject_class, ARG_SEED,
-      g_param_spec_ulong ("seed", "random number seed",
+      g_param_spec_uint ("seed", "random number seed",
           "seed for randomness (initialized when going from READY to PAUSED)",
           0, G_MAXUINT32, DEFAULT_SEED,
           G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
   g_object_class_install_property (gobject_class, ARG_MINIMUM,
-      g_param_spec_long ("min", "mininum", "mininum buffer size",
+      g_param_spec_int ("min", "mininum", "mininum buffer size",
           0, G_MAXINT32, DEFAULT_MIN,
           G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
   g_object_class_install_property (gobject_class, ARG_MAXIMUM,
-      g_param_spec_long ("max", "maximum", "maximum buffer size",
+      g_param_spec_int ("max", "maximum", "maximum buffer size",
           1, G_MAXINT32, DEFAULT_MAX,
           G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
 }
@@ -151,6 +155,10 @@
       GST_DEBUG_FUNCPTR (gst_rnd_buffer_size_activate));
   gst_pad_set_activatemode_function (self->sinkpad,
       GST_DEBUG_FUNCPTR (gst_rnd_buffer_size_activate_mode));
+  gst_pad_set_event_function (self->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_rnd_buffer_size_sink_event));
+  gst_pad_set_chain_function (self->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_rnd_buffer_size_chain));
   gst_element_add_pad (GST_ELEMENT (self), self->sinkpad);
 
   self->srcpad = gst_pad_new_from_static_template (&src_template, "src");
@@ -182,13 +190,13 @@
 
   switch (prop_id) {
     case ARG_SEED:
-      self->seed = g_value_get_ulong (value);
+      self->seed = g_value_get_uint (value);
       break;
     case ARG_MINIMUM:
-      self->min = g_value_get_long (value);
+      self->min = g_value_get_int (value);
       break;
     case ARG_MAXIMUM:
-      self->max = g_value_get_long (value);
+      self->max = g_value_get_int (value);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -205,13 +213,13 @@
 
   switch (prop_id) {
     case ARG_SEED:
-      g_value_set_ulong (value, self->seed);
+      g_value_set_uint (value, self->seed);
       break;
     case ARG_MINIMUM:
-      g_value_set_long (value, self->min);
+      g_value_set_int (value, self->min);
       break;
     case ARG_MAXIMUM:
-      g_value_set_long (value, self->max);
+      g_value_set_int (value, self->max);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -228,25 +236,19 @@
 
   query = gst_query_new_scheduling ();
 
-  if (!gst_pad_peer_query (pad, query)) {
-    gst_query_unref (query);
-    goto no_pull;
-  }
+  if (gst_pad_peer_query (pad, query))
+    pull_mode = gst_query_has_scheduling_mode (query, GST_PAD_MODE_PULL);
+  else
+    pull_mode = FALSE;
 
-  pull_mode = gst_query_has_scheduling_mode (query, GST_PAD_MODE_PULL);
   gst_query_unref (query);
 
-  if (!pull_mode)
-    goto no_pull;
-
-  GST_DEBUG_OBJECT (pad, "activating pull");
-  return gst_pad_activate_mode (pad, GST_PAD_MODE_PULL, TRUE);
-
-  /* ERRORS */
-no_pull:
-  {
-    GST_DEBUG_OBJECT (pad, "pull mode not supported");
-    return FALSE;
+  if (pull_mode) {
+    GST_DEBUG_OBJECT (pad, "activating pull");
+    return gst_pad_activate_mode (pad, GST_PAD_MODE_PULL, TRUE);
+  } else {
+    GST_DEBUG_OBJECT (pad, "activating push");
+    return gst_pad_activate_mode (pad, GST_PAD_MODE_PUSH, TRUE);
   }
 }
 
@@ -264,13 +266,17 @@
         GST_INFO_OBJECT (self, "starting pull");
         res =
             gst_pad_start_task (pad, (GstTaskFunction) gst_rnd_buffer_size_loop,
-            self);
+            self, NULL);
         self->need_newsegment = TRUE;
       } else {
         GST_INFO_OBJECT (self, "stopping pull");
         res = gst_pad_stop_task (pad);
       }
       break;
+    case GST_PAD_MODE_PUSH:
+      GST_INFO_OBJECT (self, "%sactivating in push mode", (active) ? "" : "de");
+      res = TRUE;
+      break;
     default:
       res = FALSE;
       break;
@@ -326,12 +332,112 @@
   self->need_newsegment = TRUE;
 
   gst_pad_start_task (self->sinkpad, (GstTaskFunction) gst_rnd_buffer_size_loop,
-      self);
+      self, NULL);
 
   GST_PAD_STREAM_UNLOCK (self->sinkpad);
   return TRUE;
 }
 
+static GstFlowReturn
+gst_rnd_buffer_size_drain_adapter (GstRndBufferSize * self, gboolean eos)
+{
+  GstFlowReturn flow;
+  GstBuffer *buf;
+  guint num_bytes, avail;
+
+  flow = GST_FLOW_OK;
+
+  if (G_UNLIKELY (self->min > self->max))
+    goto bogus_minmax;
+
+  do {
+    if (self->min != self->max) {
+      num_bytes = g_rand_int_range (self->rand, self->min, self->max);
+    } else {
+      num_bytes = self->min;
+    }
+
+    GST_LOG_OBJECT (self, "pulling %u bytes out of adapter", num_bytes);
+
+    buf = gst_adapter_take_buffer (self->adapter, num_bytes);
+
+    if (buf == NULL) {
+      if (!eos) {
+        GST_LOG_OBJECT (self, "not enough bytes in adapter");
+        break;
+      }
+
+      avail = gst_adapter_available (self->adapter);
+
+      if (avail == 0)
+        break;
+
+      if (avail < self->min) {
+        GST_WARNING_OBJECT (self, "discarding %u bytes at end (min=%u)",
+            avail, self->min);
+        gst_adapter_clear (self->adapter);
+        break;
+      }
+      buf = gst_adapter_take_buffer (self->adapter, avail);
+      g_assert (buf != NULL);
+    }
+
+    flow = gst_pad_push (self->srcpad, buf);
+  }
+  while (flow == GST_FLOW_OK);
+
+  return flow;
+
+/* ERRORS */
+bogus_minmax:
+  {
+    GST_ELEMENT_ERROR (self, LIBRARY, SETTINGS,
+        ("The minimum buffer size is smaller than the maximum buffer size."),
+        ("buffer sizes: max=%d, min=%d", self->min, self->max));
+    return GST_FLOW_ERROR;
+  }
+}
+
+static gboolean
+gst_rnd_buffer_size_sink_event (GstPad * pad, GstObject * parent,
+    GstEvent * event)
+{
+  GstRndBufferSize *rnd = GST_RND_BUFFER_SIZE (parent);
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_EOS:
+      gst_rnd_buffer_size_drain_adapter (rnd, TRUE);
+      break;
+    case GST_EVENT_FLUSH_STOP:
+      if (rnd->adapter != NULL)
+        gst_adapter_clear (rnd->adapter);
+      break;
+    default:
+      break;
+  }
+
+  return gst_pad_push_event (rnd->srcpad, event);
+}
+
+static GstFlowReturn
+gst_rnd_buffer_size_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
+{
+  GstRndBufferSize *rnd = GST_RND_BUFFER_SIZE (parent);
+  GstFlowReturn flow;
+
+  if (rnd->adapter == NULL)
+    rnd->adapter = gst_adapter_new ();
+
+  gst_adapter_push (rnd->adapter, buf);
+
+  flow = gst_rnd_buffer_size_drain_adapter (rnd, FALSE);
+
+  if (flow != GST_FLOW_OK)
+    GST_INFO_OBJECT (rnd, "flow: %s", gst_flow_get_name (flow));
+
+  return flow;
+}
+
 static void
 gst_rnd_buffer_size_loop (GstRndBufferSize * self)
 {
@@ -416,7 +522,7 @@
   {
     GST_ELEMENT_ERROR (self, LIBRARY, SETTINGS,
         ("The minimum buffer size is smaller than the maximum buffer size."),
-        ("buffer sizes: max=%ld, min=%ld", self->min, self->max));
+        ("buffer sizes: max=%d, min=%d", self->min, self->max));
     goto pause_task;
   }
 }
@@ -455,6 +561,10 @@
       }
       break;
     case GST_STATE_CHANGE_READY_TO_NULL:
+      if (self->adapter) {
+        g_object_unref (self->adapter);
+        self->adapter = NULL;
+      }
       break;
     default:
       break;
diff --git a/gst/deinterlace/Makefile.in b/gst/deinterlace/Makefile.in
index 89d9cd6..299708d 100644
--- a/gst/deinterlace/Makefile.in
+++ b/gst/deinterlace/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -283,7 +283,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/deinterlace/gstdeinterlace.c b/gst/deinterlace/gstdeinterlace.c
index 67b9fe2..ea8f011 100644
--- a/gst/deinterlace/gstdeinterlace.c
+++ b/gst/deinterlace/gstdeinterlace.c
@@ -34,6 +34,12 @@
  * </refsect2>
  */
 
+/* FIXME PORTING 0.11:
+ *  - getcaps/setcaps stuff needs revisiting
+ *  - reconfiguration needs to be done differently
+ *  - bufferalloc -> buffer pool/alloc query
+ */
+
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
@@ -79,7 +85,7 @@
 #define GST_DEINTERLACE_BUFFER_STATE_TC_T (1<<3)
 #define GST_DEINTERLACE_BUFFER_STATE_TC_P (1<<4)
 #define GST_DEINTERLACE_BUFFER_STATE_TC_M (1<<5)
-#define GST_DEINTERLACE_BUFFER_STATE_DROP (1<<6)
+#define GST_DEINTERLACE_BUFFER_STATE_RFF  (1<<6)
 
 #define GST_ONE \
   (GST_DEINTERLACE_BUFFER_STATE_TC_T | GST_DEINTERLACE_BUFFER_STATE_TC_B)
@@ -87,7 +93,7 @@
   (GST_DEINTERLACE_BUFFER_STATE_P | GST_DEINTERLACE_BUFFER_STATE_TC_P)
 #define GST_INT \
   (GST_DEINTERLACE_BUFFER_STATE_I | GST_DEINTERLACE_BUFFER_STATE_TC_M)
-#define GST_DRP (GST_DEINTERLACE_BUFFER_STATE_DROP)
+#define GST_RFF (GST_DEINTERLACE_BUFFER_STATE_RFF)
 
 #define GST_DEINTERLACE_OBSCURE_THRESHOLD 5
 
@@ -97,9 +103,14 @@
   /* 60i -> 30p or 50i -> 25p */
   {"2:2", 1, 1, 1, {GST_INT,}},
   /* 60i telecine -> 24p */
+  {"2:3-RFF", 4, 4, 5, {GST_PRG, GST_RFF, GST_PRG, GST_RFF,}},
   {"2:3", 5, 4, 5, {GST_PRG, GST_PRG, GST_ONE, GST_ONE, GST_PRG,}},
+  {"3:2:2:3-RFF", 4, 4, 5, {GST_RFF, GST_PRG, GST_PRG, GST_RFF,}},
   {"3:2:2:3", 5, 4, 5, {GST_PRG, GST_ONE, GST_INT, GST_ONE, GST_PRG,}},
-  {"2:3:3:2", 5, 4, 5, {GST_PRG, GST_PRG, GST_DRP, GST_PRG, GST_PRG,}},
+  /* fieldanalysis should indicate this using RFF on the second and fourth
+   * buffers and not send the third buffer at all. it will be identified as
+   * 3:2:2:3-RFF */
+  /* {"2:3:3:2", 5, 4, 5, {GST_PRG, GST_PRG, GST_DRP, GST_PRG, GST_PRG,}}, */
 
   /* The following patterns are obscure and are ignored if ignore-obscure is
    * set to true. If any patterns are added above this line, check and edit
@@ -111,6 +122,8 @@
               GST_PRG, GST_PRG, GST_ONE, GST_INT, GST_INT,
               GST_INT, GST_INT, GST_INT, GST_INT, GST_INT,
           GST_INT, GST_INT, GST_INT, GST_ONE, GST_PRG,}},
+#if 0
+  /* haven't figured out how fieldanalysis should handle these yet */
   /* 60i (NTSC 30000/1001) -> 16p (16000/1001) */
   {"3:4-3", 15, 8, 15, {GST_PRG, GST_DRP, GST_PRG, GST_DRP, GST_PRG,
               GST_DRP, GST_PRG, GST_DRP, GST_PRG, GST_DRP,
@@ -125,6 +138,7 @@
   {"3:3:4", 5, 3, 5, {GST_PRG, GST_DRP, GST_PRG, GST_DRP, GST_PRG,}},
   /* NTSC 60i -> 20p */
   {"3:3", 3, 2, 3, {GST_PRG, GST_DRP, GST_PRG,}},
+#endif
   /* NTSC 60i -> 27.5 */
   {"3:2-4", 11, 10, 11, {GST_PRG, GST_PRG, GST_PRG, GST_PRG, GST_PRG,
               GST_PRG, GST_ONE, GST_INT, GST_INT, GST_INT,
@@ -257,14 +271,11 @@
   return deinterlace_locking_type;
 }
 
+#define DEINTERLACE_VIDEO_FORMATS \
+    "{ AYUV, ARGB, ABGR, RGBA, BGRA, Y444, xRGB, xBGR, RGBx, BGRx, RGB, " \
+    "BGR, YUY2, YVYU, UYVY, Y42B, I420, YV12, Y41B, NV12, NV21 }"
 
-#define DEINTERLACE_CAPS \
-    GST_VIDEO_CAPS_YUV ("{ AYUV, Y444, YUY2, YVYU, UYVY, Y42B, I420, YV12, Y41B, NV12, NV21 }") ";" \
-    GST_VIDEO_CAPS_ARGB ";" GST_VIDEO_CAPS_ABGR ";" \
-    GST_VIDEO_CAPS_RGBA ";" GST_VIDEO_CAPS_BGRA ";" \
-    GST_VIDEO_CAPS_xRGB ";" GST_VIDEO_CAPS_xBGR ";" \
-    GST_VIDEO_CAPS_RGBx ";" GST_VIDEO_CAPS_BGRx ";" \
-    GST_VIDEO_CAPS_RGB ";" GST_VIDEO_CAPS_BGR
+#define DEINTERLACE_CAPS GST_VIDEO_CAPS_MAKE(DEINTERLACE_VIDEO_FORMATS)
 
 static GstStaticPadTemplate src_templ = GST_STATIC_PAD_TEMPLATE ("src",
     GST_PAD_SRC,
@@ -284,19 +295,23 @@
 static void gst_deinterlace_get_property (GObject * self, guint prop_id,
     GValue * value, GParamSpec * pspec);
 
-static GstCaps *gst_deinterlace_getcaps (GstPad * pad);
-static gboolean gst_deinterlace_setcaps (GstPad * pad, GstCaps * caps);
-static gboolean gst_deinterlace_sink_event (GstPad * pad, GstEvent * event);
-static gboolean gst_deinterlace_sink_query (GstPad * pad, GstQuery * query);
-static GstFlowReturn gst_deinterlace_chain (GstPad * pad, GstBuffer * buffer);
-static GstFlowReturn gst_deinterlace_alloc_buffer (GstPad * pad, guint64 offset,
-    guint size, GstCaps * caps, GstBuffer ** buf);
+static GstCaps *gst_deinterlace_getcaps (GstDeinterlace * self, GstPad * pad,
+    GstCaps * filter);
+static gboolean gst_deinterlace_setcaps (GstDeinterlace * self, GstPad * pad,
+    GstCaps * caps);
+static gboolean gst_deinterlace_sink_event (GstPad * pad, GstObject * parent,
+    GstEvent * event);
+static gboolean gst_deinterlace_sink_query (GstPad * pad, GstObject * parent,
+    GstQuery * query);
+static GstFlowReturn gst_deinterlace_chain (GstPad * pad, GstObject * parent,
+    GstBuffer * buffer);
 static GstStateChangeReturn gst_deinterlace_change_state (GstElement * element,
     GstStateChange transition);
 
-static gboolean gst_deinterlace_src_event (GstPad * pad, GstEvent * event);
-static gboolean gst_deinterlace_src_query (GstPad * pad, GstQuery * query);
-static const GstQueryType *gst_deinterlace_src_query_types (GstPad * pad);
+static gboolean gst_deinterlace_src_event (GstPad * pad, GstObject * parent,
+    GstEvent * event);
+static gboolean gst_deinterlace_src_query (GstPad * pad, GstObject * parent,
+    GstQuery * query);
 
 static GstFlowReturn gst_deinterlace_output_frame (GstDeinterlace * self,
     gboolean flushing);
@@ -307,6 +322,11 @@
 static void gst_deinterlace_read_qos (GstDeinterlace * self,
     gdouble * proportion, GstClockTime * time);
 
+#define IS_TELECINE(m) ((m) == GST_VIDEO_INTERLACE_MODE_MIXED && self->pattern > 1)
+
+/* FIXME: what's the point of the childproxy interface here? What can you
+ * actually do with it? The method objects seem to have no properties */
+#if 0
 static void gst_deinterlace_child_proxy_interface_init (gpointer g_iface,
     gpointer iface_data);
 
@@ -322,9 +342,11 @@
   g_type_add_interface_static (object_type, GST_TYPE_CHILD_PROXY,
       &child_proxy_interface_info);
 }
+#endif
 
-GST_BOILERPLATE_FULL (GstDeinterlace, gst_deinterlace, GstElement,
-    GST_TYPE_ELEMENT, _do_init);
+G_DEFINE_TYPE (GstDeinterlace, gst_deinterlace, GST_TYPE_ELEMENT);
+
+#define parent_class gst_deinterlace_parent_class
 
 static const struct
 {
@@ -347,29 +369,36 @@
 gst_deinterlace_set_method (GstDeinterlace * self, GstDeinterlaceMethods method)
 {
   GType method_type;
+  gint width, height;
+  GstVideoFormat format;
 
   GST_DEBUG_OBJECT (self, "Setting new method %d", method);
 
+  width = GST_VIDEO_INFO_WIDTH (&self->vinfo);
+  height = GST_VIDEO_INFO_HEIGHT (&self->vinfo);
+  format = GST_VIDEO_INFO_FORMAT (&self->vinfo);
+
   if (self->method) {
     if (self->method_id == method &&
         gst_deinterlace_method_supported (G_TYPE_FROM_INSTANCE (self->method),
-            self->format, self->width, self->height)) {
+            format, width, height)) {
       GST_DEBUG_OBJECT (self, "Reusing current method");
       return;
     }
-
+#if 0
     gst_child_proxy_child_removed (GST_OBJECT (self),
         GST_OBJECT (self->method));
     gst_object_unparent (GST_OBJECT (self->method));
     self->method = NULL;
+#endif
   }
 
   method_type =
       _method_types[method].get_type !=
       NULL ? _method_types[method].get_type () : G_TYPE_INVALID;
   if (method_type == G_TYPE_INVALID
-      || !gst_deinterlace_method_supported (method_type, self->format,
-          self->width, self->height)) {
+      || !gst_deinterlace_method_supported (method_type, format,
+          width, height)) {
     GType tmp;
     gint i;
 
@@ -380,8 +409,7 @@
       if (_method_types[i].get_type == NULL)
         continue;
       tmp = _method_types[i].get_type ();
-      if (gst_deinterlace_method_supported (tmp, self->format, self->width,
-              self->height)) {
+      if (gst_deinterlace_method_supported (tmp, format, width, height)) {
         GST_DEBUG_OBJECT (self, "Using method %d", i);
         method_type = tmp;
         method = i;
@@ -396,11 +424,12 @@
   self->method_id = method;
 
   gst_object_set_parent (GST_OBJECT (self->method), GST_OBJECT (self));
+#if 0
   gst_child_proxy_child_added (GST_OBJECT (self), GST_OBJECT (self->method));
+#endif
 
   if (self->method)
-    gst_deinterlace_method_setup (self->method, self->format, self->width,
-        self->height);
+    gst_deinterlace_method_setup (self->method, &self->vinfo);
 }
 
 static gboolean
@@ -408,7 +437,7 @@
 {
   gboolean ret = TRUE;
   GstClockTime start, stop;
-  gint64 cstart, cstop;
+  guint64 cstart, cstop;
 
   GST_DEBUG_OBJECT (self,
       "Clipping buffer to the current segment: %" GST_TIME_FORMAT " -- %"
@@ -446,9 +475,11 @@
 }
 
 static void
-gst_deinterlace_base_init (gpointer klass)
+gst_deinterlace_class_init (GstDeinterlaceClass * klass)
 {
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+
+  GstElementClass *element_class = (GstElementClass *) klass;
 
   gst_element_class_add_pad_template (element_class,
       gst_static_pad_template_get (&src_templ));
@@ -461,14 +492,6 @@
       "Deinterlace Methods ported from DScaler/TvTime",
       "Martin Eikermann <meiker@upb.de>, "
       "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
-}
-
-static void
-gst_deinterlace_class_init (GstDeinterlaceClass * klass)
-{
-  GObjectClass *gobject_class = (GObjectClass *) klass;
-
-  GstElementClass *element_class = (GstElementClass *) klass;
 
   gobject_class->set_property = gst_deinterlace_set_property;
   gobject_class->get_property = gst_deinterlace_get_property;
@@ -650,6 +673,7 @@
       GST_DEBUG_FUNCPTR (gst_deinterlace_change_state);
 }
 
+#if 0
 static GstObject *
 gst_deinterlace_child_proxy_get_child_by_index (GstChildProxy * child_proxy,
     guint index)
@@ -678,38 +702,30 @@
   iface->get_child_by_index = gst_deinterlace_child_proxy_get_child_by_index;
   iface->get_children_count = gst_deinterlace_child_proxy_get_children_count;
 }
+#endif
 
 static void
-gst_deinterlace_init (GstDeinterlace * self, GstDeinterlaceClass * klass)
+gst_deinterlace_init (GstDeinterlace * self)
 {
   self->sinkpad = gst_pad_new_from_static_template (&sink_templ, "sink");
   gst_pad_set_chain_function (self->sinkpad,
       GST_DEBUG_FUNCPTR (gst_deinterlace_chain));
   gst_pad_set_event_function (self->sinkpad,
       GST_DEBUG_FUNCPTR (gst_deinterlace_sink_event));
-  gst_pad_set_setcaps_function (self->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_deinterlace_setcaps));
-  gst_pad_set_getcaps_function (self->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_deinterlace_getcaps));
   gst_pad_set_query_function (self->sinkpad,
       GST_DEBUG_FUNCPTR (gst_deinterlace_sink_query));
-  gst_pad_set_bufferalloc_function (self->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_deinterlace_alloc_buffer));
   gst_element_add_pad (GST_ELEMENT (self), self->sinkpad);
 
   self->srcpad = gst_pad_new_from_static_template (&src_templ, "src");
   gst_pad_set_event_function (self->srcpad,
       GST_DEBUG_FUNCPTR (gst_deinterlace_src_event));
-  gst_pad_set_query_type_function (self->srcpad,
-      GST_DEBUG_FUNCPTR (gst_deinterlace_src_query_types));
   gst_pad_set_query_function (self->srcpad,
       GST_DEBUG_FUNCPTR (gst_deinterlace_src_query));
-  gst_pad_set_getcaps_function (self->srcpad,
-      GST_DEBUG_FUNCPTR (gst_deinterlace_getcaps));
   gst_element_add_pad (GST_ELEMENT (self), self->srcpad);
 
   self->mode = DEFAULT_MODE;
   self->user_set_method_id = DEFAULT_METHOD;
+  gst_video_info_init (&self->vinfo);
   gst_deinterlace_set_method (self, self->user_set_method_id);
   self->fields = DEFAULT_FIELDS;
   self->field_layout = DEFAULT_FIELD_LAYOUT;
@@ -729,6 +745,22 @@
   gst_deinterlace_reset (self);
 }
 
+static GstVideoFrame *
+gst_video_frame_new_and_map (GstVideoInfo * vinfo, GstBuffer * buffer,
+    GstMapFlags flags)
+{
+  GstVideoFrame *frame = g_malloc0 (sizeof (GstVideoFrame));
+  gst_video_frame_map (frame, vinfo, buffer, flags);
+  return frame;
+}
+
+static void
+gst_video_frame_unmap_and_free (GstVideoFrame * frame)
+{
+  gst_video_frame_unmap (frame);
+  g_free (frame);
+}
+
 static void
 gst_deinterlace_reset_history (GstDeinterlace * self, gboolean drop_all)
 {
@@ -749,9 +781,9 @@
         self->history_count);
 
     for (i = 0; i < self->history_count; i++) {
-      if (self->field_history[i].buf) {
-        gst_buffer_unref (self->field_history[i].buf);
-        self->field_history[i].buf = NULL;
+      if (self->field_history[i].frame) {
+        gst_video_frame_unmap_and_free (self->field_history[i].frame);
+        self->field_history[i].frame = NULL;
       }
     }
   }
@@ -775,8 +807,14 @@
 static void
 gst_deinterlace_update_passthrough (GstDeinterlace * self)
 {
-  self->passthrough = (self->mode == GST_DEINTERLACE_MODE_DISABLED
-      || (!self->interlaced && self->mode != GST_DEINTERLACE_MODE_INTERLACED));
+  if (self->mode == GST_DEINTERLACE_MODE_DISABLED)
+    self->passthrough = TRUE;
+  else if (!GST_VIDEO_INFO_IS_INTERLACED (&self->vinfo)
+      && self->mode != GST_DEINTERLACE_MODE_INTERLACED)
+    self->passthrough = TRUE;
+  else
+    self->passthrough = FALSE;
+
   GST_DEBUG_OBJECT (self, "Passthrough: %d", self->passthrough);
 }
 
@@ -785,11 +823,8 @@
 {
   GST_DEBUG_OBJECT (self, "Resetting internal state");
 
-  self->format = GST_VIDEO_FORMAT_UNKNOWN;
-  self->width = 0;
-  self->height = 0;
-  self->frame_size = 0;
-  self->fps_n = self->fps_d = 0;
+  gst_video_info_init (&self->vinfo);
+
   self->passthrough = FALSE;
 
   self->reconfigure = FALSE;
@@ -820,7 +855,6 @@
 {
   GstDeinterlace *self;
 
-  g_return_if_fail (GST_IS_DEINTERLACE (object));
   self = GST_DEINTERLACE (object);
 
   switch (prop_id) {
@@ -829,7 +863,8 @@
 
       GST_OBJECT_LOCK (self);
       new_mode = g_value_get_enum (value);
-      if (self->mode != new_mode && GST_PAD_CAPS (self->srcpad)) {
+      /* FIXME: reconfiguration should probably be done differently */
+      if (self->mode != new_mode && gst_pad_has_current_caps (self->srcpad)) {
         self->reconfigure = TRUE;
         self->new_mode = new_mode;
       } else {
@@ -848,7 +883,8 @@
 
       GST_OBJECT_LOCK (self);
       new_fields = g_value_get_enum (value);
-      if (self->fields != new_fields && GST_PAD_CAPS (self->srcpad)) {
+      /* FIXME: reconfiguration should probably be done differently */
+      if (self->fields != new_fields && gst_pad_has_current_caps (self->srcpad)) {
         self->reconfigure = TRUE;
         self->new_fields = new_fields;
       } else {
@@ -881,7 +917,6 @@
 {
   GstDeinterlace *self;
 
-  g_return_if_fail (GST_IS_DEINTERLACE (object));
   self = GST_DEINTERLACE (object);
 
   switch (prop_id) {
@@ -942,32 +977,40 @@
   }
 
   self->pattern_base_ts = self->buf_states[state_idx].timestamp;
-  self->pattern_buf_dur =
-      (self->buf_states[state_idx].duration *
-      telecine_patterns[self->pattern].ratio_d) /
-      telecine_patterns[self->pattern].ratio_n;
+  if (self->buf_states[state_idx].state != GST_RFF) {
+    self->pattern_buf_dur =
+        (self->buf_states[state_idx].duration *
+        telecine_patterns[self->pattern].ratio_d) /
+        telecine_patterns[self->pattern].ratio_n;
+  } else {
+    self->pattern_buf_dur =
+        (self->buf_states[state_idx].duration *
+        telecine_patterns[self->pattern].ratio_d * 2) /
+        (telecine_patterns[self->pattern].ratio_n * 3);
+  }
   GST_DEBUG_OBJECT (self,
       "Starting a new pattern repeat with base ts %" GST_TIME_FORMAT
       " and dur %" GST_TIME_FORMAT, GST_TIME_ARGS (self->pattern_base_ts),
       GST_TIME_ARGS (self->pattern_buf_dur));
 }
 
-static GstBuffer *
+static GstVideoFrame *
 gst_deinterlace_pop_history (GstDeinterlace * self)
 {
-  GstBuffer *buffer;
+  GstVideoFrame *frame;
 
   g_return_val_if_fail (self->history_count > 0, NULL);
 
-  GST_DEBUG_OBJECT (self, "Pop last history buffer -- current history size %d",
+  GST_DEBUG_OBJECT (self, "Pop last history frame -- current history size %d",
       self->history_count);
 
-  buffer = self->field_history[self->history_count - 1].buf;
+  frame = self->field_history[self->history_count - 1].frame;
 
   self->history_count--;
   if (self->locking != GST_DEINTERLACE_LOCKING_NONE && (!self->history_count
-          || GST_BUFFER_DATA (buffer) !=
-          GST_BUFFER_DATA (self->field_history[self->history_count - 1].buf))) {
+          || GST_VIDEO_FRAME_PLANE_DATA (frame, 0) !=
+          GST_VIDEO_FRAME_PLANE_DATA (self->field_history[self->history_count -
+                  1].frame, 0))) {
     if (!self->low_latency)
       self->state_count--;
     if (self->pattern_lock) {
@@ -976,81 +1019,48 @@
           && self->pattern_count >= telecine_patterns[self->pattern].length) {
         self->pattern_count = 0;
         self->output_count = 0;
-        gst_deinterlace_update_pattern_timestamps (self);
       }
     }
   }
 
-  GST_DEBUG_OBJECT (self, "Returning buffer: %p %" GST_TIME_FORMAT
-      " with duration %" GST_TIME_FORMAT " and size %u", buffer,
-      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)),
-      GST_TIME_ARGS (GST_BUFFER_DURATION (buffer)), GST_BUFFER_SIZE (buffer));
+  GST_DEBUG_OBJECT (self, "Returning frame: %p %" GST_TIME_FORMAT
+      " with duration %" GST_TIME_FORMAT " and size %u", frame,
+      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (frame->buffer)),
+      GST_TIME_ARGS (GST_BUFFER_DURATION (frame->buffer)),
+      GST_VIDEO_FRAME_SIZE (frame));
 
-  return buffer;
-}
-
-typedef enum
-{
-  GST_DEINTERLACE_PROGRESSIVE,
-  GST_DEINTERLACE_INTERLACED,
-  GST_DEINTERLACE_TELECINE,
-} GstDeinterlaceInterlacingMethod;
-
-static GstDeinterlaceInterlacingMethod
-gst_deinterlace_get_interlacing_method (const GstCaps * caps)
-{
-  GstDeinterlaceInterlacingMethod method = 0;
-  gboolean interlaced;
-
-  /* check interlaced cap, defaulting to FALSE */
-  if (!gst_structure_get_boolean (gst_caps_get_structure (caps, 0),
-          "interlaced", &interlaced))
-    interlaced = FALSE;
-
-  method =
-      interlaced ? GST_DEINTERLACE_INTERLACED : GST_DEINTERLACE_PROGRESSIVE;
-
-  if (method == GST_DEINTERLACE_INTERLACED) {
-    const gchar *temp =
-        gst_structure_get_string (gst_caps_get_structure (caps, 0),
-        "interlacing-method");
-    if (temp && g_str_equal (temp, "telecine"))
-      method = GST_DEINTERLACE_TELECINE;
-  }
-
-  return method;
+  return frame;
 }
 
 static void
-gst_deinterlace_get_buffer_state (GstDeinterlace * self, GstBuffer * buffer,
-    guint8 * state, GstDeinterlaceInterlacingMethod * i_method)
+gst_deinterlace_get_buffer_state (GstDeinterlace * self, GstVideoFrame * frame,
+    guint8 * state, GstVideoInterlaceMode * i_mode)
 {
-  GstDeinterlaceInterlacingMethod interlacing_method;
+  GstVideoInterlaceMode interlacing_mode;
 
-  if (!(i_method || state))
+  if (!(i_mode || state))
     return;
 
-  interlacing_method =
-      gst_deinterlace_get_interlacing_method (GST_BUFFER_CAPS (buffer));
+  interlacing_mode = GST_VIDEO_INFO_INTERLACE_MODE (&frame->info);
 
   if (state) {
-    if (interlacing_method == GST_DEINTERLACE_TELECINE) {
-      if (GST_BUFFER_FLAG_IS_SET (buffer, GST_VIDEO_BUFFER_RFF)) {
-        *state = GST_DEINTERLACE_BUFFER_STATE_DROP;
-      } else if (GST_BUFFER_FLAG_IS_SET (buffer, GST_VIDEO_BUFFER_ONEFIELD)) {
+    if (interlacing_mode == GST_VIDEO_INTERLACE_MODE_MIXED) {
+      if (GST_VIDEO_FRAME_IS_RFF (frame)) {
+        *state = GST_DEINTERLACE_BUFFER_STATE_RFF;
+      } else if (GST_VIDEO_FRAME_IS_ONEFIELD (frame)) {
         /* tc top if tff, tc bottom otherwise */
-        if (GST_BUFFER_FLAG_IS_SET (buffer, GST_VIDEO_BUFFER_TFF)) {
+        if (GST_VIDEO_FRAME_IS_TFF (frame)) {
           *state = GST_DEINTERLACE_BUFFER_STATE_TC_T;
         } else {
           *state = GST_DEINTERLACE_BUFFER_STATE_TC_B;
         }
-      } else if (GST_BUFFER_FLAG_IS_SET (buffer, GST_VIDEO_BUFFER_PROGRESSIVE)) {
-        *state = GST_DEINTERLACE_BUFFER_STATE_TC_P;
-      } else {
+      } else if (GST_VIDEO_FRAME_IS_INTERLACED (frame)) {
         *state = GST_DEINTERLACE_BUFFER_STATE_TC_M;
+      } else {
+        *state = GST_DEINTERLACE_BUFFER_STATE_TC_P;
       }
     } else {
-      if (interlacing_method == GST_DEINTERLACE_INTERLACED) {
+      if (interlacing_mode == GST_VIDEO_INTERLACE_MODE_INTERLEAVED) {
         *state = GST_DEINTERLACE_BUFFER_STATE_I;
       } else {
         *state = GST_DEINTERLACE_BUFFER_STATE_P;
@@ -1058,42 +1068,59 @@
     }
   }
 
-  if (i_method)
-    *i_method = interlacing_method;
+  if (i_mode)
+    *i_mode = interlacing_mode;
 }
 
+#define STATE_TO_STRING(s) ((s) == GST_DEINTERLACE_BUFFER_STATE_P ? "P" : \
+  (s) == GST_DEINTERLACE_BUFFER_STATE_I ? "I" : \
+  (s) == GST_DEINTERLACE_BUFFER_STATE_TC_B ? "B" : \
+  (s) == GST_DEINTERLACE_BUFFER_STATE_TC_T ? "T" : \
+  (s) == GST_DEINTERLACE_BUFFER_STATE_TC_P ? "TCP" : \
+  (s) == GST_DEINTERLACE_BUFFER_STATE_TC_M ? "TCM" : "RFF")
+
+#define MODE_TO_STRING(m) ((m) == GST_VIDEO_INTERLACE_MODE_MIXED ? "MIXED" : \
+  (m) == GST_VIDEO_INTERLACE_MODE_INTERLEAVED ? "I" : \
+  (m) == GST_VIDEO_INTERLACE_MODE_FIELDS ? "FIELDS" : "P")
+
 static void
 gst_deinterlace_push_history (GstDeinterlace * self, GstBuffer * buffer)
 {
   int i = 1;
-  GstClockTime timestamp;
   GstDeinterlaceFieldLayout field_layout = self->field_layout;
-  gboolean repeated = GST_BUFFER_FLAG_IS_SET (buffer, GST_VIDEO_BUFFER_RFF);
-  gboolean tff = GST_BUFFER_FLAG_IS_SET (buffer, GST_VIDEO_BUFFER_TFF);
-  gboolean onefield =
-      GST_BUFFER_FLAG_IS_SET (buffer, GST_VIDEO_BUFFER_ONEFIELD);
-  GstBuffer *field1, *field2;
-  guint fields_to_push = (onefield) ? 1 : (!repeated) ? 2 : 3;
+  gboolean tff;
+  gboolean onefield;
+  GstVideoFrame *frame = NULL;
+  GstVideoFrame *field1, *field2 = NULL;
+  guint fields_to_push;
   gint field1_flags, field2_flags;
-  GstDeinterlaceInterlacingMethod interlacing_method;
+  GstVideoInterlaceMode interlacing_mode;
   guint8 buf_state;
 
+  /* we will only read from this buffer and write into fresh output buffers
+   * if this is not the case, change the map flags as appropriate
+   */
+  frame = gst_video_frame_new_and_map (&self->vinfo, buffer, GST_MAP_READ);
+  /* we can manage the buffer ref count using the maps from here on */
+  gst_buffer_unref (buffer);
+
+  tff = GST_VIDEO_FRAME_IS_TFF (frame);
+  onefield = GST_VIDEO_FRAME_IS_ONEFIELD (frame);
+  fields_to_push = (onefield) ? 1 : 2;
+
   g_return_if_fail (self->history_count <
       GST_DEINTERLACE_MAX_FIELD_HISTORY - fields_to_push);
 
-  gst_deinterlace_get_buffer_state (self, buffer, &buf_state,
-      &interlacing_method);
+  gst_deinterlace_get_buffer_state (self, frame, &buf_state, &interlacing_mode);
 
   GST_DEBUG_OBJECT (self,
-      "Pushing new buffer to the history: ptr %p at %" GST_TIME_FORMAT
-      " with duration %" GST_TIME_FORMAT
-      ", size %u, state %u, interlacing method %s", GST_BUFFER_DATA (buffer),
-      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)),
-      GST_TIME_ARGS (GST_BUFFER_DURATION (buffer)), GST_BUFFER_SIZE (buffer),
-      buf_state,
-      interlacing_method ==
-      GST_DEINTERLACE_TELECINE ? "TC" : interlacing_method ==
-      GST_DEINTERLACE_INTERLACED ? "I" : "P");
+      "Pushing new frame as %d fields to the history (count before %d): ptr %p at %"
+      GST_TIME_FORMAT " with duration %" GST_TIME_FORMAT
+      ", size %u, state %s, interlacing mode %s", fields_to_push,
+      self->history_count, frame, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)),
+      GST_TIME_ARGS (GST_BUFFER_DURATION (buffer)),
+      gst_buffer_get_size (buffer),
+      STATE_TO_STRING (buf_state), MODE_TO_STRING (interlacing_mode));
 
   /* move up for new state */
   memmove (&self->buf_states[1], &self->buf_states[0],
@@ -1105,26 +1132,15 @@
   if (self->state_count < GST_DEINTERLACE_MAX_BUFFER_STATE_HISTORY)
     self->state_count++;
 
-  if (buf_state == GST_DEINTERLACE_BUFFER_STATE_DROP) {
-    GST_DEBUG_OBJECT (self,
-        "Buffer contains only unneeded repeated fields, dropping and not"
-        "adding to field history");
-    gst_buffer_unref (buffer);
-    return;
-  }
-
-  /* telecine does not make use of repeated fields */
-  if (interlacing_method == GST_DEINTERLACE_TELECINE)
-    repeated = FALSE;
-
   for (i = GST_DEINTERLACE_MAX_FIELD_HISTORY - 1; i >= fields_to_push; i--) {
-    self->field_history[i].buf = self->field_history[i - fields_to_push].buf;
+    self->field_history[i].frame =
+        self->field_history[i - fields_to_push].frame;
     self->field_history[i].flags =
         self->field_history[i - fields_to_push].flags;
   }
 
   if (field_layout == GST_DEINTERLACE_LAYOUT_AUTO) {
-    if (!self->interlaced) {
+    if (!GST_VIDEO_INFO_IS_INTERLACED (&self->vinfo)) {
       GST_WARNING_OBJECT (self, "Can't detect field layout -- assuming TFF");
       field_layout = GST_DEINTERLACE_LAYOUT_TFF;
     } else if (tff) {
@@ -1134,53 +1150,30 @@
     }
   }
 
+  field1 = frame;
+  field2 = gst_video_frame_new_and_map (&self->vinfo, buffer, GST_MAP_READ);
   if (field_layout == GST_DEINTERLACE_LAYOUT_TFF) {
     GST_DEBUG_OBJECT (self, "Top field first");
-    field1 = gst_buffer_make_metadata_writable (gst_buffer_ref (buffer));
     field1_flags = PICTURE_INTERLACED_TOP;
-    field2 = gst_buffer_make_metadata_writable (gst_buffer_ref (buffer));
     field2_flags = PICTURE_INTERLACED_BOTTOM;
   } else {
     GST_DEBUG_OBJECT (self, "Bottom field first");
-    field1 = gst_buffer_make_metadata_writable (gst_buffer_ref (buffer));
     field1_flags = PICTURE_INTERLACED_BOTTOM;
-    field2 = gst_buffer_make_metadata_writable (gst_buffer_ref (buffer));
     field2_flags = PICTURE_INTERLACED_TOP;
   }
 
-  if (interlacing_method != GST_DEINTERLACE_TELECINE) {
-    /* Timestamps are assigned to the field buffers under the assumption that
-       the timestamp of the buffer equals the first fields timestamp */
-
-    timestamp = GST_BUFFER_TIMESTAMP (buffer);
-    GST_BUFFER_TIMESTAMP (field1) = timestamp;
-    GST_BUFFER_TIMESTAMP (field2) = timestamp + self->field_duration;
-    if (repeated)
-      GST_BUFFER_TIMESTAMP (field2) += self->field_duration;
-  }
-
-  if (repeated) {
-    self->field_history[2].buf = field1;
-    self->field_history[2].flags = field1_flags;
-
-    self->field_history[1].buf = field2;
-    self->field_history[1].flags = field2_flags;
-
-    self->field_history[0].buf =
-        gst_buffer_make_metadata_writable (gst_buffer_ref (field1));
-    GST_BUFFER_TIMESTAMP (self->field_history[0].buf) +=
-        2 * self->field_duration;
-    self->field_history[0].flags = field1_flags;
-  } else if (!onefield) {
-    self->field_history[1].buf = field1;
+  if (!onefield) {
+    GST_DEBUG_OBJECT (self, "Two fields");
+    self->field_history[1].frame = field1;
     self->field_history[1].flags = field1_flags;
 
-    self->field_history[0].buf = field2;
+    self->field_history[0].frame = field2;
     self->field_history[0].flags = field2_flags;
   } else {                      /* onefield */
-    self->field_history[0].buf = field1;
+    GST_DEBUG_OBJECT (self, "One field");
+    self->field_history[0].frame = field1;
     self->field_history[0].flags = field1_flags;
-    gst_buffer_unref (field2);
+    gst_video_frame_unmap_and_free (field2);
   }
 
   self->history_count += fields_to_push;
@@ -1191,7 +1184,7 @@
 
   if (self->last_buffer)
     gst_buffer_unref (self->last_buffer);
-  self->last_buffer = buffer;
+  self->last_buffer = gst_buffer_ref (buffer);
 }
 
 static void
@@ -1223,6 +1216,8 @@
 gst_deinterlace_reset_qos (GstDeinterlace * self)
 {
   gst_deinterlace_update_qos (self, 0.5, 0, GST_CLOCK_TIME_NONE);
+  self->processed = 0;
+  self->dropped = 0;
 }
 
 static void
@@ -1238,15 +1233,16 @@
 /* Perform qos calculations before processing the next frame. Returns TRUE if
  * the frame should be processed, FALSE if the frame can be dropped entirely */
 static gboolean
-gst_deinterlace_do_qos (GstDeinterlace * self, GstClockTime timestamp)
+gst_deinterlace_do_qos (GstDeinterlace * self, const GstBuffer * buffer)
 {
   GstClockTime qostime, earliest_time;
+  GstClockTime timestamp = GST_BUFFER_TIMESTAMP (buffer);
   gdouble proportion;
 
   /* no timestamp, can't do QoS => process frame */
   if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (timestamp))) {
     GST_LOG_OBJECT (self, "invalid timestamp, can't do QoS, process frame");
-    return TRUE;
+    goto keep_frame;
   }
 
   /* get latest QoS observation values */
@@ -1255,7 +1251,7 @@
   /* skip qos if we have no observation (yet) => process frame */
   if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (earliest_time))) {
     GST_LOG_OBJECT (self, "no observation yet, process frame");
-    return TRUE;
+    goto keep_frame;
   }
 
   /* qos is done on running time */
@@ -1267,44 +1263,62 @@
       GST_TIME_FORMAT, GST_TIME_ARGS (qostime), GST_TIME_ARGS (earliest_time));
 
   if (qostime != GST_CLOCK_TIME_NONE && qostime <= earliest_time) {
+    GstClockTime stream_time, jitter;
+    GstMessage *qos_msg;
+
     GST_DEBUG_OBJECT (self, "we are late, drop frame");
+    self->dropped++;
+    stream_time =
+        gst_segment_to_stream_time (&self->segment, GST_FORMAT_TIME, timestamp);
+    jitter = GST_CLOCK_DIFF (qostime, earliest_time);
+    qos_msg =
+        gst_message_new_qos (GST_OBJECT (self), FALSE, qostime, stream_time,
+        timestamp, GST_BUFFER_DURATION (buffer));
+    gst_message_set_qos_values (qos_msg, jitter, proportion, 1000000);
+    gst_message_set_qos_stats (qos_msg, GST_FORMAT_BUFFERS,
+        self->processed, self->dropped);
+    gst_element_post_message (GST_ELEMENT (self), qos_msg);
     return FALSE;
   }
 
   GST_LOG_OBJECT (self, "process frame");
+keep_frame:
+  self->processed++;
   return TRUE;
 }
 
 static gboolean
 gst_deinterlace_fix_timestamps (GstDeinterlace * self,
-    GstDeinterlaceField * field1, GstDeinterlaceField * field2)
+    GstVideoFrame * field1, GstVideoFrame * field2)
 {
-  GstDeinterlaceField *field3, *field4;
-  GstDeinterlaceInterlacingMethod interlacing_method;
+  GstVideoFrame *field3, *field4;
+  GstVideoInterlaceMode interlacing_mode;
 
   if (self->pattern_lock && self->pattern > -1) {
     /* accurate pattern-locked timestamp adjustment */
     if (!self->pattern_count)
       gst_deinterlace_update_pattern_timestamps (self);
 
-    GST_BUFFER_TIMESTAMP (field1->buf) =
+    GST_BUFFER_TIMESTAMP (field1->buffer) =
         self->pattern_base_ts + self->output_count * self->pattern_buf_dur;
-    GST_BUFFER_DURATION (field1->buf) = self->pattern_buf_dur;
+    GST_BUFFER_DURATION (field1->buffer) = self->pattern_buf_dur;
     self->output_count++;
   } else {
     /* naive (but low-latency) timestamp adjustment based on subsequent
      * fields/buffers */
     if (field2
-        && GST_BUFFER_DATA (field1->buf) != GST_BUFFER_DATA (field2->buf)) {
-      if (GST_BUFFER_TIMESTAMP (field1->buf) +
-          GST_BUFFER_DURATION (field1->buf) ==
-          GST_BUFFER_TIMESTAMP (field2->buf)) {
-        GST_BUFFER_TIMESTAMP (field1->buf) =
-            GST_BUFFER_TIMESTAMP (field2->buf) =
-            (GST_BUFFER_TIMESTAMP (field1->buf) +
-            GST_BUFFER_TIMESTAMP (field2->buf)) / 2;
+        && GST_VIDEO_FRAME_PLANE_DATA (field1,
+            0) != GST_VIDEO_FRAME_PLANE_DATA (field2, 0)) {
+      if (GST_BUFFER_TIMESTAMP (field1->buffer) +
+          GST_BUFFER_DURATION (field1->buffer) ==
+          GST_BUFFER_TIMESTAMP (field2->buffer)) {
+        GST_BUFFER_TIMESTAMP (field1->buffer) =
+            GST_BUFFER_TIMESTAMP (field2->buffer) =
+            (GST_BUFFER_TIMESTAMP (field1->buffer) +
+            GST_BUFFER_TIMESTAMP (field2->buffer)) / 2;
       } else {
-        GST_BUFFER_TIMESTAMP (field2->buf) = GST_BUFFER_TIMESTAMP (field1->buf);
+        GST_BUFFER_TIMESTAMP (field2->buffer) =
+            GST_BUFFER_TIMESTAMP (field1->buffer);
       }
     }
 
@@ -1314,33 +1328,34 @@
       return FALSE;
     }
 
-    field3 = &self->field_history[self->history_count - 3];
-    interlacing_method =
-        gst_deinterlace_get_interlacing_method (GST_BUFFER_CAPS (field3->buf));
-    if (interlacing_method == GST_DEINTERLACE_TELECINE) {
+    field3 = self->field_history[self->history_count - 3].frame;
+    interlacing_mode = GST_VIDEO_INFO_INTERLACE_MODE (&field3->info);
+    if (IS_TELECINE (interlacing_mode)) {
       if (self->history_count < 4) {
         GST_DEBUG_OBJECT (self, "Need more fields (have %d, need 4)",
             self->history_count);
         return FALSE;
       }
 
-      field4 = &self->field_history[self->history_count - 4];
-      if (GST_BUFFER_DATA (field3->buf) != GST_BUFFER_DATA (field4->buf)) {
+      field4 = self->field_history[self->history_count - 4].frame;
+      if (GST_VIDEO_FRAME_PLANE_DATA (field3,
+              0) != GST_VIDEO_FRAME_PLANE_DATA (field4, 0)) {
         /* telecine fields in separate buffers */
-        GST_BUFFER_TIMESTAMP (field3->buf) =
-            (GST_BUFFER_TIMESTAMP (field3->buf) +
-            GST_BUFFER_TIMESTAMP (field4->buf)) / 2;
+        GST_BUFFER_TIMESTAMP (field3->buffer) =
+            (GST_BUFFER_TIMESTAMP (field3->buffer) +
+            GST_BUFFER_TIMESTAMP (field4->buffer)) / 2;
       }
     }
 
-    GST_BUFFER_DURATION (field1->buf) =
-        GST_BUFFER_TIMESTAMP (field3->buf) - GST_BUFFER_TIMESTAMP (field1->buf);
+    GST_BUFFER_DURATION (field1->buffer) =
+        GST_BUFFER_TIMESTAMP (field3->buffer) -
+        GST_BUFFER_TIMESTAMP (field1->buffer);
   }
 
   GST_DEBUG_OBJECT (self,
       "Field 1 adjusted to ts %" GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT,
-      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (field1->buf)),
-      GST_TIME_ARGS (GST_BUFFER_DURATION (field1->buf)));
+      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (field1->buffer)),
+      GST_TIME_ARGS (GST_BUFFER_DURATION (field1->buffer)));
   return TRUE;
 }
 
@@ -1386,7 +1401,8 @@
     /* loop over all phases */
     for (j = 0; j < length; j++) {
       /* low-latency mode looks at past buffers, high latency at future buffers */
-      const gint state_idx = (self->low_latency ? length : state_count) - 1;
+      const gint state_idx =
+          self->low_latency ? (self->history_count - 1) >> 1 : state_count - 1;
       /* loop over history, breaking on differing buffer states */
       for (k = 0; k < length && k < state_count; k++) {
         const guint8 hist = self->buf_states[state_idx - k].state;
@@ -1405,12 +1421,6 @@
         score = k;
         pattern = i;
         phase = j;
-        if (self->low_latency) {
-          /* state_idx + 1 is the number of buffers yet to be pushed out
-           * so length - state_idx - 1 is the number of old buffers in the
-           * pattern */
-          phase = (phase + length - state_idx - 1) % length;
-        }
       }
     }
   }
@@ -1433,7 +1443,10 @@
     do {
       if (state & GST_ONE) {
         field_count++;
+#if 0
       } else if (!(state & GST_DRP)) {
+#endif
+      } else {
         field_count += 2;
       }
       i++;
@@ -1459,8 +1472,9 @@
   GstFlowReturn ret;
   gint fields_required;
   GstBuffer *buf, *outbuf;
+  GstVideoFrame *outframe = NULL;
   GstDeinterlaceField *field1, *field2;
-  GstDeinterlaceInterlacingMethod interlacing_method;
+  GstVideoInterlaceMode interlacing_mode;
   guint8 buf_state;
   gboolean hl_no_lock;          /* indicates high latency timestamp adjustment but no pattern lock (could be ONEF or I) */
   gboolean same_buffer;         /* are field1 and field2 in the same buffer? */
@@ -1493,18 +1507,25 @@
       return GST_FLOW_ERROR;
     }
 
-    gst_deinterlace_get_buffer_state (self, field1->buf, &buf_state,
-        &interlacing_method);
+    gst_deinterlace_get_buffer_state (self, field1->frame, &buf_state,
+        &interlacing_mode);
 
     if (self->pattern != -1)
       pattern = telecine_patterns[self->pattern];
 
     /* patterns 0 and 1 are interlaced, the rest are telecine */
     if (self->pattern > 1)
-      interlacing_method = GST_DEINTERLACE_TELECINE;
+      interlacing_mode = GST_VIDEO_INTERLACE_MODE_MIXED;
 
     if (self->pattern == -1 || self->pattern_refresh
         || !(buf_state & pattern.states[(phase + count) % pattern.length])) {
+      if (self->pattern == -1) {
+        GST_DEBUG_OBJECT (self, "No pattern lock - refresh lock");
+      } else if (self->pattern_refresh) {
+        GST_DEBUG_OBJECT (self, "Pattern refresh - refresh lock");
+      } else {
+        GST_DEBUG_OBJECT (self, "Unexpected buffer state - refresh lock");
+      }
       /* no pattern, pattern refresh set or unexpected buffer state */
       self->pattern_lock = FALSE;
       self->pattern_refresh = TRUE;
@@ -1526,36 +1547,99 @@
       }
 
       /* setcaps on sink and src pads */
-      gst_deinterlace_setcaps (self->sinkpad, GST_PAD_CAPS (self->sinkpad));
+      gst_deinterlace_setcaps (self, self->sinkpad, gst_pad_get_current_caps (self->sinkpad));  // FIXME
 
       if (flush_one && self->drop_orphans) {
         GST_DEBUG_OBJECT (self, "Dropping orphan first field");
         self->cur_field_idx--;
-        gst_buffer_unref (gst_deinterlace_pop_history (self));
+        gst_video_frame_unmap_and_free (gst_deinterlace_pop_history (self));
         goto restart;
       }
     }
   } else {
-    gst_deinterlace_get_buffer_state (self, field1->buf, NULL,
-        &interlacing_method);
+    gst_deinterlace_get_buffer_state (self, field1->frame, NULL,
+        &interlacing_mode);
   }
 
   same_buffer = self->history_count >= 2
-      && (GST_BUFFER_DATA (field1->buf) ==
-      GST_BUFFER_DATA (self->field_history[self->history_count - 2].buf));
+      && (GST_VIDEO_FRAME_PLANE_DATA (field1->frame, 0) ==
+      GST_VIDEO_FRAME_PLANE_DATA (self->field_history[self->history_count -
+              2].frame, 0));
 
   if ((flushing && self->history_count == 1) || (flush_one
           && !self->drop_orphans) || (hl_no_lock && (self->history_count == 1
               || !same_buffer))) {
+    /* This case is for flushing a single field:
+     * - flushing and 1 field in the history
+     * - flush one (due to orphans in the pattern) and do not drop orphans
+     * - high-latency pattern locking with no possible lock given the current
+     *   state and either only one field in the history or the tip two fields
+     *   are in separate buffers */
     GST_DEBUG_OBJECT (self, "Flushing one field using linear method");
     gst_deinterlace_set_method (self, GST_DEINTERLACE_LINEAR);
     fields_required = gst_deinterlace_method_get_fields_required (self->method);
-  } else if (interlacing_method == GST_DEINTERLACE_TELECINE
-      && (self->low_latency > 0 || self->pattern != -1 || (hl_no_lock
-              && same_buffer
-              && GST_BUFFER_FLAG_IS_SET (field1->buf,
-                  GST_VIDEO_BUFFER_PROGRESSIVE)))) {
-    /* telecined - we reconstruct frames by weaving pairs of fields */
+  } else if (interlacing_mode == GST_VIDEO_INTERLACE_MODE_PROGRESSIVE ||
+      (interlacing_mode == GST_VIDEO_INTERLACE_MODE_MIXED &&
+          !GST_VIDEO_FRAME_IS_INTERLACED (field1->frame))) {
+    /* This case is for processing progressive buffers, telecine or plain
+     * progressive */
+    GstVideoFrame *field1_frame;
+    GstBuffer *field1_buffer;
+
+    /* progressive */
+    fields_required = 2;
+
+    /* Not enough fields in the history */
+    if (!flushing && self->history_count < fields_required) {
+      GST_DEBUG_OBJECT (self, "Need more fields (have %d, need %d)",
+          self->history_count, self->cur_field_idx + fields_required);
+      goto need_more;
+    }
+
+    field2 = &self->field_history[self->history_count - 2];
+    if (GST_VIDEO_FRAME_PLANE_DATA (field1->frame,
+            0) != GST_VIDEO_FRAME_PLANE_DATA (field2->frame, 0)) {
+      /* ERROR - next two fields in field history are not one progressive buffer - weave? */
+      GST_ERROR_OBJECT (self,
+          "Progressive buffer but two fields at tip aren't in the same buffer!");
+    }
+
+    if (IS_TELECINE (interlacing_mode)
+        && !gst_deinterlace_fix_timestamps (self, field1->frame, field2->frame)
+        && !flushing)
+      goto need_more;
+
+    GST_DEBUG_OBJECT (self,
+        "Frame type: Progressive; pushing buffer as a frame");
+    /* pop and push */
+    self->cur_field_idx--;
+    field1_frame = gst_deinterlace_pop_history (self);
+    field1_buffer = field1_frame->buffer;
+    gst_buffer_ref (field1_buffer);
+    gst_video_frame_unmap_and_free (field1_frame);
+    /* field2 is the same buffer as field1, but we need to remove it from the
+     * history anyway */
+    self->cur_field_idx--;
+    gst_video_frame_unmap_and_free (gst_deinterlace_pop_history (self));
+    GST_DEBUG_OBJECT (self,
+        "[OUT] ts %" GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT ", end %"
+        GST_TIME_FORMAT,
+        GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (field1_buffer)),
+        GST_TIME_ARGS (GST_BUFFER_DURATION (field1_buffer)),
+        GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (field1_buffer) +
+            GST_BUFFER_DURATION (field1_buffer)));
+    return gst_pad_push (self->srcpad, field1_buffer);
+  } else if (IS_TELECINE (interlacing_mode)
+      && GST_VIDEO_FRAME_IS_INTERLACED (field1->frame) && !same_buffer) {
+    /* This case needs to identify telecine mixed buffers that require weaving
+     * of two fields in different buffers.
+     * - interlacing mode is mixed
+     * - locked on to a telecine pattern
+     * - frame is interlaced
+     * - fields are in separate buffers
+     * If we don't yet have a pattern lock, we will have to deinterlace as we
+     * don't explicitly know we have a telecine sequence and so we drop through
+     * to the plain deinterlace case */
     fields_required = 2;
     if (!flushing && self->history_count < fields_required) {
       GST_DEBUG_OBJECT (self, "Need more fields (have %d, need %d)",
@@ -1564,49 +1648,25 @@
     }
 
     field2 = &self->field_history[self->history_count - 2];
-    if (!gst_deinterlace_fix_timestamps (self, field1, field2) && !flushing)
+    if (!gst_deinterlace_fix_timestamps (self, field1->frame, field2->frame)
+        && !flushing)
       goto need_more;
 
-    if (same_buffer) {
-      /* telecine progressive */
-      GstBuffer *field1_buf;
-
-      GST_DEBUG_OBJECT (self,
-          "Frame type: Telecine Progressive; pushing buffer as a frame");
-      /* pop and push */
-      self->cur_field_idx--;
-      field1_buf = gst_deinterlace_pop_history (self);
-      /* field2 is the same buffer as field1, but we need to remove it from
-       * the history anyway */
-      self->cur_field_idx--;
-      gst_buffer_unref (gst_deinterlace_pop_history (self));
-      /* set the caps from the src pad on the buffer as they should be correct */
-      gst_buffer_set_caps (field1_buf, GST_PAD_CAPS (self->srcpad));
-      GST_DEBUG_OBJECT (self,
-          "[OUT] ts %" GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT ", end %"
-          GST_TIME_FORMAT, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (field1_buf)),
-          GST_TIME_ARGS (GST_BUFFER_DURATION (field1_buf)),
-          GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (field1_buf) +
-              GST_BUFFER_DURATION (field1_buf)));
-      return gst_pad_push (self->srcpad, field1_buf);
-    } else {
-      /* telecine fields in separate buffers */
-
-      /* check field1 and field2 buffer caps and flags are corresponding */
-      if (field1->flags == field2->flags) {
-        /* ERROR - fields are of same parity - what should be done here?
-         * perhaps deinterlace the tip field and start again? */
-        GST_ERROR_OBJECT (self, "Telecine mixed with fields of same parity!");
-      }
-      GST_DEBUG_OBJECT (self,
-          "Frame type: Telecine Mixed; weaving tip two fields into a frame");
-      /* set method to WEAVE */
-      gst_deinterlace_set_method (self, GST_DEINTERLACE_WEAVE);
+    /* check field1 and field2 buffer caps and flags are corresponding */
+    if (field1->flags == field2->flags) {
+      /* ERROR - fields are of same parity - what should be done here?
+       * perhaps deinterlace the tip field and start again? */
+      GST_ERROR_OBJECT (self, "Telecine mixed with fields of same parity!");
     }
-  } else if (interlacing_method == GST_DEINTERLACE_INTERLACED || (hl_no_lock
-          && interlacing_method == GST_DEINTERLACE_TELECINE && same_buffer
-          && !GST_BUFFER_FLAG_IS_SET (field1->buf,
-              GST_VIDEO_BUFFER_PROGRESSIVE))) {
+    GST_DEBUG_OBJECT (self,
+        "Frame type: Telecine Mixed; weaving tip two fields into a frame");
+    /* set method to WEAVE */
+    gst_deinterlace_set_method (self, GST_DEINTERLACE_WEAVE);
+  } else {
+    /* This is the final catch-all case that applies the selected deinterlacing
+     * method. At this point the fields to be processed are either definitely
+     * interlaced or we do not yet know that we have a telecine pattern lock
+     * and so the best we can do is to deinterlace the fields. */
     gst_deinterlace_set_method (self, self->user_set_method_id);
     fields_required = gst_deinterlace_method_get_fields_required (self->method);
     if (flushing && self->history_count < fields_required) {
@@ -1629,50 +1689,13 @@
     GST_DEBUG_OBJECT (self,
         "Frame type: Interlaced; deinterlacing using %s method",
         methods_types[self->method_id].value_nick);
-  } else {
-    GstBuffer *field1_buf;
-
-    /* progressive */
-    fields_required = 2;
-
-    /* Not enough fields in the history */
-    if (!flushing && self->history_count < fields_required) {
-      GST_DEBUG_OBJECT (self, "Need more fields (have %d, need %d)",
-          self->history_count, self->cur_field_idx + fields_required);
-      goto need_more;
-    }
-
-    field2 = &self->field_history[self->history_count - 2];
-    if (GST_BUFFER_DATA (field1->buf) != GST_BUFFER_DATA (field2->buf)) {
-      /* ERROR - next two fields in field history are not one progressive buffer - weave? */
-      GST_ERROR_OBJECT (self,
-          "Progressive buffer but two fields at tip aren't in the same buffer!");
-    }
-
-    GST_DEBUG_OBJECT (self,
-        "Frame type: Progressive; pushing buffer as a frame");
-    /* pop and push */
-    self->cur_field_idx--;
-    field1_buf = gst_deinterlace_pop_history (self);
-    /* field2 is the same buffer as field1, but we need to remove it from the
-     * history anyway */
-    self->cur_field_idx--;
-    gst_buffer_unref (gst_deinterlace_pop_history (self));
-    GST_DEBUG_OBJECT (self,
-        "[OUT] ts %" GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT ", end %"
-        GST_TIME_FORMAT, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (field1_buf)),
-        GST_TIME_ARGS (GST_BUFFER_DURATION (field1_buf)),
-        GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (field1_buf) +
-            GST_BUFFER_DURATION (field1_buf)));
-    return gst_pad_push (self->srcpad, field1_buf);
   }
 
   if (!flushing && self->cur_field_idx < 1) {
     goto need_more;
   }
 
-  if (self->fields == GST_DEINTERLACE_ALL
-      || interlacing_method == GST_DEINTERLACE_TELECINE)
+  if (self->fields == GST_DEINTERLACE_ALL || IS_TELECINE (interlacing_mode))
     GST_DEBUG_OBJECT (self, "All fields");
   else if (self->fields == GST_DEINTERLACE_TF)
     GST_DEBUG_OBJECT (self, "Top fields");
@@ -1681,17 +1704,17 @@
 
   if ((self->field_history[self->cur_field_idx].flags == PICTURE_INTERLACED_TOP
           && (self->fields == GST_DEINTERLACE_TF
-              || interlacing_method == GST_DEINTERLACE_TELECINE))
+              || IS_TELECINE (interlacing_mode)))
       || self->fields == GST_DEINTERLACE_ALL) {
     GST_DEBUG_OBJECT (self, "deinterlacing top field");
 
     /* create new buffer */
-    ret =
-        gst_pad_alloc_buffer (self->srcpad, GST_BUFFER_OFFSET_NONE,
-        self->frame_size, GST_PAD_CAPS (self->srcpad), &outbuf);
-    if (ret != GST_FLOW_OK)
-      return ret;
+    outbuf = gst_buffer_new_allocate (NULL, GST_VIDEO_INFO_SIZE (&self->vinfo), NULL);  // FIXME: pad_alloc_buffer
 
+    if (outbuf == NULL)
+      return GST_FLOW_ERROR;    // FIXME: report proper out of mem error?
+
+#if 0
     if (GST_PAD_CAPS (self->srcpad) != GST_BUFFER_CAPS (outbuf) &&
         !gst_caps_is_equal (GST_PAD_CAPS (self->srcpad),
             GST_BUFFER_CAPS (outbuf))) {
@@ -1700,22 +1723,23 @@
           self->request_caps);
 
       gst_buffer_unref (outbuf);
-      outbuf = gst_buffer_try_new_and_alloc (self->frame_size);
+      outbuf =
+          gst_buffer_new_allocate (NULL, GST_VIDEO_INFO_SIZE (&self->vinfo),
+          NULL);
 
       if (!outbuf)
         return GST_FLOW_ERROR;
-
-      gst_buffer_set_caps (outbuf, GST_PAD_CAPS (self->srcpad));
     }
+#endif
 
     g_return_val_if_fail (self->history_count >=
         1 + gst_deinterlace_method_get_latency (self->method), GST_FLOW_ERROR);
 
     buf =
         self->field_history[self->history_count - 1 -
-        gst_deinterlace_method_get_latency (self->method)].buf;
+        gst_deinterlace_method_get_latency (self->method)].frame->buffer;
 
-    if (interlacing_method != GST_DEINTERLACE_TELECINE) {
+    if (!IS_TELECINE (interlacing_mode)) {
       timestamp = GST_BUFFER_TIMESTAMP (buf);
 
       GST_BUFFER_TIMESTAMP (outbuf) = timestamp;
@@ -1723,22 +1747,28 @@
         GST_BUFFER_DURATION (outbuf) = self->field_duration;
       else
         GST_BUFFER_DURATION (outbuf) = 2 * self->field_duration;
+      GST_DEBUG_OBJECT (self,
+          "[ADJUST] ts %" GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT ", end %"
+          GST_TIME_FORMAT, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf)),
+          GST_TIME_ARGS (GST_BUFFER_DURATION (outbuf)),
+          GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf) +
+              GST_BUFFER_DURATION (outbuf)));
     } else {
       GST_BUFFER_TIMESTAMP (outbuf) = GST_BUFFER_TIMESTAMP (buf);
       GST_BUFFER_DURATION (outbuf) = GST_BUFFER_DURATION (buf);
     }
 
     /* Check if we need to drop the frame because of QoS */
-    if (!gst_deinterlace_do_qos (self, GST_BUFFER_TIMESTAMP (buf))) {
+    if (!gst_deinterlace_do_qos (self, buf)) {
       self->cur_field_idx--;
-      gst_buffer_unref (gst_deinterlace_pop_history (self));
+      gst_video_frame_unmap_and_free (gst_deinterlace_pop_history (self));
       gst_buffer_unref (outbuf);
       outbuf = NULL;
       ret = GST_FLOW_OK;
     } else {
       if (self->cur_field_idx < 0 && flushing) {
         if (self->history_count == 1) {
-          gst_buffer_unref (gst_deinterlace_pop_history (self));
+          gst_video_frame_unmap_and_free (gst_deinterlace_pop_history (self));
           goto need_more;
         }
         self->cur_field_idx++;
@@ -1750,16 +1780,23 @@
         goto need_more;
       }
 
+      /* map the frame so the deinterlace methods can write the data to the
+       * correct memory locations */
+      outframe =
+          gst_video_frame_new_and_map (&self->vinfo, outbuf, GST_MAP_WRITE);
+
       /* do magic calculus */
       gst_deinterlace_method_deinterlace_frame (self->method,
-          self->field_history, self->history_count, outbuf,
+          self->field_history, self->history_count, outframe,
           self->cur_field_idx);
 
+      gst_video_frame_unmap_and_free (outframe);
+
       self->cur_field_idx--;
       if (self->cur_field_idx + 1 +
           gst_deinterlace_method_get_latency (self->method)
           < self->history_count || flushing) {
-        gst_buffer_unref (gst_deinterlace_pop_history (self));
+        gst_video_frame_unmap_and_free (gst_deinterlace_pop_history (self));
       }
 
       if (gst_deinterlace_clip_buffer (self, outbuf)) {
@@ -1778,14 +1815,14 @@
       outbuf = NULL;
       if (ret != GST_FLOW_OK)
         return ret;
-      if (interlacing_method == GST_DEINTERLACE_TELECINE
+      if (interlacing_mode == GST_VIDEO_INTERLACE_MODE_MIXED
           && self->method_id == GST_DEINTERLACE_WEAVE) {
         /* pop off the second field */
         GST_DEBUG_OBJECT (self, "Removing unused field (count: %d)",
             self->history_count);
         self->cur_field_idx--;
-        gst_buffer_unref (gst_deinterlace_pop_history (self));
-        interlacing_method = GST_DEINTERLACE_INTERLACED;
+        gst_video_frame_unmap_and_free (gst_deinterlace_pop_history (self));
+        interlacing_mode = GST_VIDEO_INTERLACE_MODE_INTERLEAVED;
         return ret;
       }
     }
@@ -1798,10 +1835,10 @@
   /* no calculation done: remove excess field */
   else if (self->field_history[self->cur_field_idx].flags ==
       PICTURE_INTERLACED_TOP && (self->fields == GST_DEINTERLACE_BF
-          && interlacing_method != GST_DEINTERLACE_TELECINE)) {
+          && !IS_TELECINE (interlacing_mode))) {
     GST_DEBUG_OBJECT (self, "Removing unused top field");
     self->cur_field_idx--;
-    gst_buffer_unref (gst_deinterlace_pop_history (self));
+    gst_video_frame_unmap_and_free (gst_deinterlace_pop_history (self));
 
     if (flush_one && !self->drop_orphans) {
       GST_DEBUG_OBJECT (self, "Orphan field deinterlaced - reconfiguring");
@@ -1822,17 +1859,17 @@
   /* deinterlace bottom_field */
   if ((self->field_history[self->cur_field_idx].flags ==
           PICTURE_INTERLACED_BOTTOM && (self->fields == GST_DEINTERLACE_BF
-              || interlacing_method == GST_DEINTERLACE_TELECINE))
+              || IS_TELECINE (interlacing_mode)))
       || self->fields == GST_DEINTERLACE_ALL) {
     GST_DEBUG_OBJECT (self, "deinterlacing bottom field");
 
     /* create new buffer */
-    ret =
-        gst_pad_alloc_buffer (self->srcpad, GST_BUFFER_OFFSET_NONE,
-        self->frame_size, GST_PAD_CAPS (self->srcpad), &outbuf);
-    if (ret != GST_FLOW_OK)
-      return ret;
+    outbuf = gst_buffer_new_allocate (NULL, GST_VIDEO_INFO_SIZE (&self->vinfo), NULL);  // FIXME: pad_alloc_buffer
 
+    if (outbuf == NULL)
+      return GST_FLOW_ERROR;    // FIXME: report out of mem error?
+
+#if 0
     if (GST_PAD_CAPS (self->srcpad) != GST_BUFFER_CAPS (outbuf) &&
         !gst_caps_is_equal (GST_PAD_CAPS (self->srcpad),
             GST_BUFFER_CAPS (outbuf))) {
@@ -1841,51 +1878,69 @@
           self->request_caps);
 
       gst_buffer_unref (outbuf);
-      outbuf = gst_buffer_try_new_and_alloc (self->frame_size);
+      outbuf =
+          gst_buffer_new_allocate (NULL, GST_VIDEO_INFO_SIZE (&self->vinfo),
+          NULL);
 
       if (!outbuf)
         return GST_FLOW_ERROR;
 
       gst_buffer_set_caps (outbuf, GST_PAD_CAPS (self->srcpad));
     }
+#endif
 
     g_return_val_if_fail (self->history_count - 1 -
         gst_deinterlace_method_get_latency (self->method) >= 0, GST_FLOW_ERROR);
 
     buf =
         self->field_history[self->history_count - 1 -
-        gst_deinterlace_method_get_latency (self->method)].buf;
-    if (interlacing_method != GST_DEINTERLACE_TELECINE) {
+        gst_deinterlace_method_get_latency (self->method)].frame->buffer;
+    if (!IS_TELECINE (interlacing_mode)) {
       timestamp = GST_BUFFER_TIMESTAMP (buf);
 
-      GST_BUFFER_TIMESTAMP (outbuf) = timestamp;
-      if (self->fields == GST_DEINTERLACE_ALL)
+      if (self->fields == GST_DEINTERLACE_ALL) {
+        GST_BUFFER_TIMESTAMP (outbuf) = timestamp + self->field_duration;
         GST_BUFFER_DURATION (outbuf) = self->field_duration;
-      else
+      } else {
+        GST_BUFFER_TIMESTAMP (outbuf) = timestamp;
         GST_BUFFER_DURATION (outbuf) = 2 * self->field_duration;
+      }
+      GST_DEBUG_OBJECT (self,
+          "[ADJUST] ts %" GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT ", end %"
+          GST_TIME_FORMAT, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf)),
+          GST_TIME_ARGS (GST_BUFFER_DURATION (outbuf)),
+          GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf) +
+              GST_BUFFER_DURATION (outbuf)));
     } else {
       GST_BUFFER_TIMESTAMP (outbuf) = GST_BUFFER_TIMESTAMP (buf);
       GST_BUFFER_DURATION (outbuf) = GST_BUFFER_DURATION (buf);
     }
 
     /* Check if we need to drop the frame because of QoS */
-    if (!gst_deinterlace_do_qos (self, GST_BUFFER_TIMESTAMP (buf))) {
+    if (!gst_deinterlace_do_qos (self, buf)) {
       self->cur_field_idx--;
-      gst_buffer_unref (gst_deinterlace_pop_history (self));
+      gst_video_frame_unmap_and_free (gst_deinterlace_pop_history (self));
       gst_buffer_unref (outbuf);
       outbuf = NULL;
       ret = GST_FLOW_OK;
     } else {
+      /* map the frame so the deinterlace methods can write the data to the
+       * correct memory locations */
+      outframe =
+          gst_video_frame_new_and_map (&self->vinfo, outbuf, GST_MAP_WRITE);
+
       /* do magic calculus */
       gst_deinterlace_method_deinterlace_frame (self->method,
-          self->field_history, self->history_count, outbuf,
+          self->field_history, self->history_count, outframe,
           self->cur_field_idx);
 
+      gst_video_frame_unmap_and_free (outframe);
+
       self->cur_field_idx--;
       if (self->cur_field_idx + 1 +
           gst_deinterlace_method_get_latency (self->method)
           < self->history_count) {
-        gst_buffer_unref (gst_deinterlace_pop_history (self));
+        gst_video_frame_unmap_and_free (gst_deinterlace_pop_history (self));
       }
 
       if (gst_deinterlace_clip_buffer (self, outbuf)) {
@@ -1904,14 +1959,14 @@
       outbuf = NULL;
       if (ret != GST_FLOW_OK)
         return ret;
-      if (interlacing_method == GST_DEINTERLACE_TELECINE
+      if (interlacing_mode == GST_VIDEO_INTERLACE_MODE_MIXED
           && self->method_id == GST_DEINTERLACE_WEAVE) {
         /* pop off the second field */
         GST_DEBUG_OBJECT (self, "Removing unused field (count: %d)",
             self->history_count);
         self->cur_field_idx--;
-        gst_buffer_unref (gst_deinterlace_pop_history (self));
-        interlacing_method = GST_DEINTERLACE_INTERLACED;
+        gst_video_frame_unmap_and_free (gst_deinterlace_pop_history (self));
+        interlacing_mode = GST_VIDEO_INTERLACE_MODE_INTERLEAVED;
         return ret;
       }
     }
@@ -1924,10 +1979,10 @@
   /* no calculation done: remove excess field */
   else if (self->field_history[self->cur_field_idx].flags ==
       PICTURE_INTERLACED_BOTTOM && (self->fields == GST_DEINTERLACE_TF
-          && interlacing_method != GST_DEINTERLACE_TELECINE)) {
+          && !IS_TELECINE (interlacing_mode))) {
     GST_DEBUG_OBJECT (self, "Removing unused bottom field");
     self->cur_field_idx--;
-    gst_buffer_unref (gst_deinterlace_pop_history (self));
+    gst_video_frame_unmap_and_free (gst_deinterlace_pop_history (self));
 
     if (flush_one && !self->drop_orphans) {
       GST_DEBUG_OBJECT (self, "Orphan field deinterlaced - reconfiguring");
@@ -1973,13 +2028,15 @@
 }
 
 static GstFlowReturn
-gst_deinterlace_chain (GstPad * pad, GstBuffer * buf)
+gst_deinterlace_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
 {
-  GstDeinterlace *self = GST_DEINTERLACE (GST_PAD_PARENT (pad));
+  GstDeinterlace *self = GST_DEINTERLACE (parent);
   GstFlowReturn ret = GST_FLOW_OK;
 
   GST_OBJECT_LOCK (self);
-  if (self->reconfigure) {
+  if (self->reconfigure) {      /* FIXME: reconfigure should probably work differently */
+    GstCaps *caps;
+
     if (self->new_fields != -1)
       self->fields = self->new_fields;
     if (self->new_mode != -1)
@@ -1989,8 +2046,11 @@
 
     self->reconfigure = FALSE;
     GST_OBJECT_UNLOCK (self);
-    if (GST_PAD_CAPS (self->srcpad))
-      gst_deinterlace_setcaps (self->sinkpad, GST_PAD_CAPS (self->sinkpad));
+    caps = gst_pad_get_current_caps (self->srcpad);
+    if (caps != NULL) {
+      gst_deinterlace_setcaps (self, self->sinkpad, caps);      // FIXME
+      gst_caps_unref (caps);
+    }
   } else {
     GST_OBJECT_UNLOCK (self);
   }
@@ -2083,36 +2143,38 @@
   return TRUE;
 }
 
+/* FIXME: use filter in getcaps */
 static GstCaps *
-gst_deinterlace_getcaps (GstPad * pad)
+gst_deinterlace_getcaps (GstDeinterlace * self, GstPad * pad, GstCaps * filter)
 {
   GstCaps *ret;
-  GstDeinterlace *self = GST_DEINTERLACE (gst_pad_get_parent (pad));
   GstPad *otherpad;
   gint len;
-  const GstCaps *ourcaps;
+  GstCaps *ourcaps;
   GstCaps *peercaps;
 
   otherpad = (pad == self->srcpad) ? self->sinkpad : self->srcpad;
 
   ourcaps = gst_pad_get_pad_template_caps (pad);
-  peercaps = gst_pad_peer_get_caps (otherpad);
+  peercaps = gst_pad_peer_query_caps (otherpad, NULL);
 
   if (peercaps) {
     GST_DEBUG_OBJECT (pad, "Peer has caps %" GST_PTR_FORMAT, peercaps);
-    ret = gst_caps_intersect (ourcaps, peercaps);
+    ret = gst_caps_make_writable (gst_caps_intersect (ourcaps, peercaps));
     gst_caps_unref (peercaps);
+    gst_caps_unref (ourcaps);
   } else {
-    ret = gst_caps_copy (ourcaps);
+    ret = gst_caps_make_writable (ourcaps);
   }
 
   for (len = gst_caps_get_size (ret); len > 0; len--) {
     GstStructure *s = gst_caps_get_structure (ret, len - 1);
 
     if (pad == self->sinkpad || self->passthrough)
-      gst_structure_remove_field (s, "interlaced");
+      gst_structure_remove_field (s, "interlace-mode");
     else
-      gst_structure_set (s, "interlaced", G_TYPE_BOOLEAN, FALSE, NULL);
+      gst_structure_set (s, "interlace-mode", G_TYPE_STRING, "progressive",
+          NULL);
 
     if (!self->passthrough && self->fields == GST_DEINTERLACE_ALL) {
       const GValue *val;
@@ -2214,8 +2276,6 @@
 
   GST_DEBUG_OBJECT (pad, "Returning caps %" GST_PTR_FORMAT, ret);
 
-  gst_object_unref (self);
-
   return ret;
 
 error:
@@ -2225,12 +2285,12 @@
 }
 
 static gboolean
-gst_deinterlace_setcaps (GstPad * pad, GstCaps * caps)
+gst_deinterlace_setcaps (GstDeinterlace * self, GstPad * pad, GstCaps * caps)
 {
   gboolean res = TRUE;
-  GstDeinterlace *self = GST_DEINTERLACE (gst_pad_get_parent (pad));
   GstCaps *srccaps;
-  GstDeinterlaceInterlacingMethod interlacing_method;
+  GstVideoInterlaceMode interlacing_mode;
+  gint fps_n, fps_d;
 
   if (self->locking != GST_DEINTERLACE_LOCKING_NONE) {
     if (self->low_latency == -1)
@@ -2248,78 +2308,75 @@
     }
   }
 
-  res =
-      gst_video_format_parse_caps (caps, &self->format, &self->width,
-      &self->height);
-  res &= gst_video_parse_caps_framerate (caps, &self->fps_n, &self->fps_d);
-  if (pad == self->sinkpad)
-    res &= gst_video_format_parse_caps_interlaced (caps, &self->interlaced);
+  if (!gst_video_info_from_caps (&self->vinfo, caps))
+    goto invalid_caps;
+
+  if (GST_VIDEO_INFO_FPS_N (&self->vinfo) == 0 ||
+      GST_VIDEO_INFO_FLAG_IS_SET (&self->vinfo, GST_VIDEO_FLAG_VARIABLE_FPS))
+    goto no_framerate;
+
+  fps_n = GST_VIDEO_INFO_FPS_N (&self->vinfo);
+  fps_d = GST_VIDEO_INFO_FPS_D (&self->vinfo);
+
   if (!res)
     goto invalid_caps;
 
   gst_deinterlace_update_passthrough (self);
 
-  interlacing_method = gst_deinterlace_get_interlacing_method (caps);
+  interlacing_mode = GST_VIDEO_INFO_INTERLACE_MODE (&self->vinfo);
 
   if (self->pattern_lock) {
     srccaps = gst_caps_copy (caps);
     if (self->pattern != -1
-        && G_UNLIKELY (!gst_util_fraction_multiply (self->fps_n, self->fps_d,
+        && G_UNLIKELY (!gst_util_fraction_multiply (fps_n, fps_d,
                 telecine_patterns[self->pattern].ratio_n,
-                telecine_patterns[self->pattern].ratio_d, &self->fps_n,
-                &self->fps_d)))
+                telecine_patterns[self->pattern].ratio_d, &fps_n, &fps_d)))
       GST_ERROR_OBJECT (self,
           "Multiplying the framerate by the telecine pattern ratio overflowed!");
-    gst_caps_set_simple (srccaps, "framerate", GST_TYPE_FRACTION, self->fps_n,
-        self->fps_d, NULL);
-  } else if (self->low_latency > 0) {
-    if (interlacing_method == GST_DEINTERLACE_TELECINE) {
-      /* for initial buffers of a telecine pattern, until there is a lock we
-       * we output naïvely adjusted timestamps */
-      srccaps = gst_caps_copy (caps);
-      gst_caps_set_simple (srccaps, "framerate", GST_TYPE_FRACTION, 0, 1, NULL);
-    } else if (!self->passthrough && self->fields == GST_DEINTERLACE_ALL) {
-      gint fps_n = self->fps_n, fps_d = self->fps_d;
-
-      if (!gst_fraction_double (&fps_n, &fps_d, FALSE))
-        goto invalid_caps;
-
-      srccaps = gst_caps_copy (caps);
-
-      gst_caps_set_simple (srccaps, "framerate", GST_TYPE_FRACTION, fps_n,
-          fps_d, NULL);
-    } else {
-      srccaps = gst_caps_ref (caps);
-    }
-  } else {
+    gst_caps_set_simple (srccaps, "framerate", GST_TYPE_FRACTION, fps_n,
+        fps_d, NULL);
+  } else if (self->locking == GST_DEINTERLACE_LOCKING_ACTIVE
+      || self->low_latency == 0) {
     /* in high latency pattern locking mode if we don't have a pattern lock,
      * the sink pad caps are the best we know */
     srccaps = gst_caps_ref (caps);
+  } else if (self->low_latency > 0
+      && interlacing_mode == GST_VIDEO_INTERLACE_MODE_MIXED
+      && self->pattern == -1) {
+    /* for initial buffers of a telecine pattern, until there is a lock we
+     * we output naïvely adjusted timestamps in low-latency pattern locking
+     * mode */
+    srccaps = gst_caps_copy (caps);
+    gst_caps_set_simple (srccaps, "framerate", GST_TYPE_FRACTION, 0, 1, NULL);
+  } else if (!self->passthrough && self->fields == GST_DEINTERLACE_ALL) {
+    if (!gst_fraction_double (&fps_n, &fps_d, FALSE))
+      goto invalid_caps;
+
+    srccaps = gst_caps_copy (caps);
+
+    gst_caps_set_simple (srccaps, "framerate", GST_TYPE_FRACTION, fps_n,
+        fps_d, NULL);
+  } else {
+    srccaps = gst_caps_ref (caps);
   }
 
   if (self->mode != GST_DEINTERLACE_MODE_DISABLED) {
     srccaps = gst_caps_make_writable (srccaps);
-    gst_structure_remove_field (gst_caps_get_structure (srccaps, 0),
-        "interlacing-method");
-    gst_caps_set_simple (srccaps, "interlaced", G_TYPE_BOOLEAN, FALSE, NULL);
+    gst_caps_set_simple (srccaps, "interlace-method", G_TYPE_STRING,
+        "progressive", NULL);
   }
 
   if (!gst_pad_set_caps (self->srcpad, srccaps))
     goto caps_not_accepted;
 
-  self->frame_size =
-      gst_video_format_get_size (self->format, self->width, self->height);
-
-  if (G_LIKELY (self->fps_n != 0)) {
-    self->field_duration =
-        gst_util_uint64_scale (GST_SECOND, self->fps_d, 2 * self->fps_n);
+  if (fps_n != 0) {
+    self->field_duration = gst_util_uint64_scale (GST_SECOND, fps_d, 2 * fps_n);
   } else {
     self->field_duration = 0;
   }
 
   gst_deinterlace_set_method (self, self->method_id);
-  gst_deinterlace_method_setup (self->method, self->format, self->width,
-      self->height);
+  gst_deinterlace_method_setup (self->method, &self->vinfo);
 
   GST_DEBUG_OBJECT (pad, "Sink caps: %" GST_PTR_FORMAT, caps);
   GST_DEBUG_OBJECT (pad, "Src  caps: %" GST_PTR_FORMAT, srccaps);
@@ -2328,7 +2385,6 @@
 
 done:
 
-  gst_object_unref (self);
   return res;
 
 invalid_caps:
@@ -2336,6 +2392,11 @@
   GST_ERROR_OBJECT (pad, "Invalid caps: %" GST_PTR_FORMAT, caps);
   goto done;
 
+no_framerate:
+  res = FALSE;
+  GST_ERROR_OBJECT (pad, "No framerate in caps: %" GST_PTR_FORMAT, caps);
+  goto done;
+
 caps_not_accepted:
   res = FALSE;
   GST_ERROR_OBJECT (pad, "Caps not accepted: %" GST_PTR_FORMAT, srccaps);
@@ -2344,36 +2405,42 @@
 }
 
 static gboolean
-gst_deinterlace_sink_event (GstPad * pad, GstEvent * event)
+gst_deinterlace_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
 {
   gboolean res = TRUE;
-  GstDeinterlace *self = GST_DEINTERLACE (gst_pad_get_parent (pad));
+  GstDeinterlace *self = GST_DEINTERLACE (parent);
 
   GST_LOG_OBJECT (pad, "received %s event: %" GST_PTR_FORMAT,
       GST_EVENT_TYPE_NAME (event), event);
 
   switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_NEWSEGMENT:
+    case GST_EVENT_CAPS:
     {
-      GstFormat fmt;
-      gboolean is_update;
-      gint64 start, end, base;
-      gdouble rate, applied_rate;
+      GstCaps *caps = NULL;
 
-      gst_event_parse_new_segment_full (event, &is_update, &rate,
-          &applied_rate, &fmt, &start, &end, &base);
+      gst_event_parse_caps (event, &caps);
+      res = gst_deinterlace_setcaps (self, pad, caps);
+      gst_event_unref (event);
+      break;
+    }
+    case GST_EVENT_SEGMENT:
+    {
+      const GstSegment *segment;
+
+      gst_event_parse_segment (event, &segment);
 
       gst_deinterlace_reset_qos (self);
       gst_deinterlace_reset_history (self, FALSE);
 
-      if (fmt == GST_FORMAT_TIME) {
+      if (segment->format == GST_FORMAT_TIME) {
         GST_DEBUG_OBJECT (pad,
-            "Got NEWSEGMENT event in GST_FORMAT_TIME, passing on (%"
-            GST_TIME_FORMAT " - %" GST_TIME_FORMAT ")", GST_TIME_ARGS (start),
-            GST_TIME_ARGS (end));
-        gst_segment_set_newsegment_full (&self->segment, is_update, rate,
-            applied_rate, fmt, start, end, base);
+            "Got SEGMENT event in TIME format, passing on (%"
+            GST_TIME_FORMAT " - %" GST_TIME_FORMAT ")",
+            GST_TIME_ARGS (segment->start), GST_TIME_ARGS (segment->stop));
+        gst_segment_copy_into (segment, &self->segment);
       } else {
+        GST_WARNING_OBJECT (pad, "Got SEGMENT event in %s format",
+            gst_format_get_name (segment->format));
         gst_segment_init (&self->segment, GST_FORMAT_UNDEFINED);
       }
 
@@ -2428,19 +2495,27 @@
       break;
   }
 
-  gst_object_unref (self);
   return res;
 }
 
 static gboolean
-gst_deinterlace_sink_query (GstPad * pad, GstQuery * query)
+gst_deinterlace_sink_query (GstPad * pad, GstObject * parent, GstQuery * query)
 {
-  GstDeinterlace *self = GST_DEINTERLACE (gst_pad_get_parent (pad));
+  GstDeinterlace *self = GST_DEINTERLACE (parent);
   gboolean res = FALSE;
 
   GST_LOG_OBJECT (pad, "%s query", GST_QUERY_TYPE_NAME (query));
 
   switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_CAPS:{
+      GstCaps *filter, *caps;
+
+      gst_query_parse_caps (query, &filter);
+      caps = gst_deinterlace_getcaps (self, pad, filter);
+      gst_query_set_caps_result (query, caps);
+      res = TRUE;
+      break;
+    }
     default:{
       GstPad *peer = gst_pad_get_peer (self->srcpad);
 
@@ -2454,7 +2529,6 @@
     }
   }
 
-  gst_object_unref (self);
   return res;
 }
 
@@ -2494,9 +2568,9 @@
 }
 
 static gboolean
-gst_deinterlace_src_event (GstPad * pad, GstEvent * event)
+gst_deinterlace_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
 {
-  GstDeinterlace *self = GST_DEINTERLACE (gst_pad_get_parent (pad));
+  GstDeinterlace *self = GST_DEINTERLACE (parent);
   gboolean res;
 
   GST_DEBUG_OBJECT (pad, "received %s event", GST_EVENT_TYPE_NAME (event));
@@ -2505,9 +2579,10 @@
     case GST_EVENT_QOS:{
       GstClockTimeDiff diff;
       GstClockTime timestamp;
+      GstQOSType type;
       gdouble proportion;
 
-      gst_event_parse_qos (event, &proportion, &diff, &timestamp);
+      gst_event_parse_qos (event, &type, &proportion, &diff, &timestamp);
 
       gst_deinterlace_update_qos (self, proportion, diff, timestamp);
     }
@@ -2517,15 +2592,13 @@
       break;
   }
 
-  gst_object_unref (self);
-
   return res;
 }
 
 static gboolean
-gst_deinterlace_src_query (GstPad * pad, GstQuery * query)
+gst_deinterlace_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
 {
-  GstDeinterlace *self = GST_DEINTERLACE (gst_pad_get_parent (pad));
+  GstDeinterlace *self = GST_DEINTERLACE (parent);
   gboolean res = FALSE;
 
   GST_LOG_OBJECT (pad, "%s query", GST_QUERY_TYPE_NAME (query));
@@ -2592,20 +2665,11 @@
     }
   }
 
-  gst_object_unref (self);
   return res;
 }
 
-static const GstQueryType *
-gst_deinterlace_src_query_types (GstPad * pad)
-{
-  static const GstQueryType types[] = {
-    GST_QUERY_LATENCY,
-    GST_QUERY_NONE
-  };
-  return types;
-}
-
+/* FIXME: buffer alloc */
+#if 0
 static GstFlowReturn
 gst_deinterlace_alloc_buffer (GstPad * pad, guint64 offset, guint size,
     GstCaps * caps, GstBuffer ** buf)
@@ -2673,6 +2737,7 @@
 
   return ret;
 }
+#endif
 
 static gboolean
 plugin_init (GstPlugin * plugin)
diff --git a/gst/deinterlace/gstdeinterlace.h b/gst/deinterlace/gstdeinterlace.h
index a5a69a3..1c6ef1d 100644
--- a/gst/deinterlace/gstdeinterlace.h
+++ b/gst/deinterlace/gstdeinterlace.h
@@ -24,6 +24,7 @@
 
 #include <gst/gst.h>
 #include <gst/video/video.h>
+#include <gst/video/gstvideofilter.h>
 
 #include "gstdeinterlacemethod.h"
 
@@ -129,11 +130,15 @@
   GstDeinterlaceMethods user_set_method_id;
   GstDeinterlaceMethod *method;
 
+  GstVideoInfo vinfo;
+
+#if 0
   GstVideoFormat format;
   gint width, height; /* frame width & height */
   guint frame_size; /* frame size in bytes */
   gint fps_n, fps_d; /* frame rate */
   gboolean interlaced; /* is input interlaced? */
+#endif
 
   gboolean passthrough;
 
@@ -162,6 +167,8 @@
   /* QoS stuff */
   gdouble proportion;
   GstClockTime earliest_time;
+  gint64 processed;
+  gint64 dropped;
 
   GstCaps *request_caps;
 
diff --git a/gst/deinterlace/gstdeinterlacemethod.c b/gst/deinterlace/gstdeinterlacemethod.c
index 9927868..e78aebc 100644
--- a/gst/deinterlace/gstdeinterlacemethod.c
+++ b/gst/deinterlace/gstdeinterlacemethod.c
@@ -95,40 +95,36 @@
 }
 
 void
-gst_deinterlace_method_setup (GstDeinterlaceMethod * self,
-    GstVideoFormat format, gint width, gint height)
+gst_deinterlace_method_setup (GstDeinterlaceMethod * self, GstVideoInfo * vinfo)
 {
   GstDeinterlaceMethodClass *klass = GST_DEINTERLACE_METHOD_GET_CLASS (self);
 
-  klass->setup (self, format, width, height);
+  klass->setup (self, vinfo);
 }
 
 static void
 gst_deinterlace_method_setup_impl (GstDeinterlaceMethod * self,
-    GstVideoFormat format, gint width, gint height)
+    GstVideoInfo * vinfo)
 {
   gint i;
   GstDeinterlaceMethodClass *klass = GST_DEINTERLACE_METHOD_GET_CLASS (self);
 
-  self->format = format;
-  self->frame_width = width;
-  self->frame_height = height;
+  self->vinfo = vinfo;
 
   self->deinterlace_frame = NULL;
 
-  if (format == GST_VIDEO_FORMAT_UNKNOWN)
+  if (GST_VIDEO_INFO_FORMAT (self->vinfo) == GST_VIDEO_FORMAT_UNKNOWN)
     return;
 
   for (i = 0; i < 4; i++) {
-    self->width[i] = gst_video_format_get_component_width (format, i, width);
-    self->height[i] = gst_video_format_get_component_height (format, i, height);
-    self->offset[i] =
-        gst_video_format_get_component_offset (format, i, width, height);
-    self->row_stride[i] = gst_video_format_get_row_stride (format, i, width);
-    self->pixel_stride[i] = gst_video_format_get_pixel_stride (format, i);
+    self->width[i] = GST_VIDEO_INFO_COMP_WIDTH (vinfo, i);
+    self->height[i] = GST_VIDEO_INFO_COMP_HEIGHT (vinfo, i);
+    self->offset[i] = GST_VIDEO_INFO_COMP_OFFSET (vinfo, i);
+    self->row_stride[i] = GST_VIDEO_INFO_COMP_STRIDE (vinfo, i);
+    self->pixel_stride[i] = GST_VIDEO_INFO_COMP_PSTRIDE (vinfo, i);
   }
 
-  switch (format) {
+  switch (GST_VIDEO_INFO_FORMAT (self->vinfo)) {
     case GST_VIDEO_FORMAT_YUY2:
       self->deinterlace_frame = klass->deinterlace_frame_yuy2;
       break;
@@ -200,16 +196,17 @@
 static void
 gst_deinterlace_method_init (GstDeinterlaceMethod * self)
 {
-  self->format = GST_VIDEO_FORMAT_UNKNOWN;
+  self->vinfo = NULL;
 }
 
 void
 gst_deinterlace_method_deinterlace_frame (GstDeinterlaceMethod * self,
     const GstDeinterlaceField * history, guint history_count,
-    GstBuffer * outbuf, int cur_field_idx)
+    GstVideoFrame * outframe, int cur_field_idx)
 {
   g_assert (self->deinterlace_frame != NULL);
-  self->deinterlace_frame (self, history, history_count, outbuf, cur_field_idx);
+  self->deinterlace_frame (self, history, history_count, outframe,
+      cur_field_idx);
 }
 
 gint
@@ -318,7 +315,7 @@
 static void
 gst_deinterlace_simple_method_deinterlace_frame_packed (GstDeinterlaceMethod *
     method, const GstDeinterlaceField * history, guint history_count,
-    GstBuffer * outbuf, gint cur_field_idx)
+    GstVideoFrame * outframe, gint cur_field_idx)
 {
   GstDeinterlaceSimpleMethod *self = GST_DEINTERLACE_SIMPLE_METHOD (method);
   GstDeinterlaceMethodClass *dm_class = GST_DEINTERLACE_METHOD_GET_CLASS (self);
@@ -327,31 +324,32 @@
   const guint8 *field0, *field1, *field2, *fieldp;
   guint cur_field_flags = history[cur_field_idx].flags;
   gint i;
-  gint frame_height = self->parent.frame_height;
+  gint frame_height = GST_VIDEO_INFO_HEIGHT (self->parent.vinfo);
   gint stride = self->parent.row_stride[0];
 
   g_assert (self->interpolate_scanline_packed != NULL);
   g_assert (self->copy_scanline_packed != NULL);
 
   if (cur_field_idx > 0) {
-    fieldp = GST_BUFFER_DATA (history[cur_field_idx - 1].buf);
+    fieldp = GST_VIDEO_FRAME_COMP_DATA (history[cur_field_idx - 1].frame, 0);
   } else {
     fieldp = NULL;
   }
 
-  dest = GST_BUFFER_DATA (outbuf);
-  field0 = GST_BUFFER_DATA (history[cur_field_idx].buf);
+  dest = GST_VIDEO_FRAME_COMP_DATA (outframe, 0);
+
+  field0 = GST_VIDEO_FRAME_COMP_DATA (history[cur_field_idx].frame, 0);
 
   g_assert (dm_class->fields_required <= 4);
 
   if (cur_field_idx + 1 < history_count) {
-    field1 = GST_BUFFER_DATA (history[cur_field_idx + 1].buf);
+    field1 = GST_VIDEO_FRAME_COMP_DATA (history[cur_field_idx + 1].frame, 0);
   } else {
     field1 = NULL;
   }
 
   if (cur_field_idx + 2 < history_count) {
-    field2 = GST_BUFFER_DATA (history[cur_field_idx + 2].buf);
+    field2 = GST_VIDEO_FRAME_COMP_DATA (history[cur_field_idx + 2].frame, 0);
   } else {
     field2 = NULL;
   }
@@ -509,14 +507,14 @@
 static void
 gst_deinterlace_simple_method_deinterlace_frame_planar (GstDeinterlaceMethod *
     method, const GstDeinterlaceField * history, guint history_count,
-    GstBuffer * outbuf, gint cur_field_idx)
+    GstVideoFrame * outframe, gint cur_field_idx)
 {
   GstDeinterlaceSimpleMethod *self = GST_DEINTERLACE_SIMPLE_METHOD (method);
   GstDeinterlaceMethodClass *dm_class = GST_DEINTERLACE_METHOD_GET_CLASS (self);
   guint8 *out;
   const guint8 *field0, *field1, *field2, *fieldp;
   guint cur_field_flags = history[cur_field_idx].flags;
-  gint i, offset;
+  gint i;
   GstDeinterlaceSimpleMethodFunction copy_scanline;
   GstDeinterlaceSimpleMethodFunction interpolate_scanline;
 
@@ -528,29 +526,28 @@
   g_assert (self->copy_scanline_planar[2] != NULL);
 
   for (i = 0; i < 3; i++) {
-    offset = self->parent.offset[i];
     copy_scanline = self->copy_scanline_planar[i];
     interpolate_scanline = self->interpolate_scanline_planar[i];
 
-    out = GST_BUFFER_DATA (outbuf) + offset;
+    out = GST_VIDEO_FRAME_PLANE_DATA (outframe, i);
 
     fieldp = NULL;
     if (cur_field_idx > 0) {
-      fieldp = GST_BUFFER_DATA (history[cur_field_idx - 1].buf) + offset;
+      fieldp = GST_VIDEO_FRAME_PLANE_DATA (history[cur_field_idx - 1].frame, i);
     }
 
-    field0 = GST_BUFFER_DATA (history[cur_field_idx].buf) + offset;
+    field0 = GST_VIDEO_FRAME_PLANE_DATA (history[cur_field_idx].frame, i);
 
     g_assert (dm_class->fields_required <= 4);
 
     field1 = NULL;
     if (cur_field_idx + 1 < history_count) {
-      field1 = GST_BUFFER_DATA (history[cur_field_idx + 1].buf) + offset;
+      field1 = GST_VIDEO_FRAME_PLANE_DATA (history[cur_field_idx + 1].frame, i);
     }
 
     field2 = NULL;
     if (cur_field_idx + 2 < history_count) {
-      field2 = GST_BUFFER_DATA (history[cur_field_idx + 2].buf) + offset;
+      field2 = GST_VIDEO_FRAME_PLANE_DATA (history[cur_field_idx + 2].frame, i);
     }
 
     gst_deinterlace_simple_method_deinterlace_frame_planar_plane (self, out,
@@ -562,40 +559,38 @@
 static void
 gst_deinterlace_simple_method_deinterlace_frame_nv12 (GstDeinterlaceMethod *
     method, const GstDeinterlaceField * history, guint history_count,
-    GstBuffer * outbuf, gint cur_field_idx)
+    GstVideoFrame * outframe, gint cur_field_idx)
 {
   GstDeinterlaceSimpleMethod *self = GST_DEINTERLACE_SIMPLE_METHOD (method);
   GstDeinterlaceMethodClass *dm_class = GST_DEINTERLACE_METHOD_GET_CLASS (self);
   guint8 *out;
   const guint8 *field0, *field1, *field2, *fieldp;
   guint cur_field_flags = history[cur_field_idx].flags;
-  gint i, offset;
+  gint i;
 
   g_assert (self->interpolate_scanline_packed != NULL);
   g_assert (self->copy_scanline_packed != NULL);
 
   for (i = 0; i < 2; i++) {
-    offset = self->parent.offset[i];
-
-    out = GST_BUFFER_DATA (outbuf) + offset;
+    out = GST_VIDEO_FRAME_PLANE_DATA (outframe, i);
 
     fieldp = NULL;
     if (cur_field_idx > 0) {
-      fieldp = GST_BUFFER_DATA (history[cur_field_idx - 1].buf) + offset;
+      fieldp = GST_VIDEO_FRAME_PLANE_DATA (history[cur_field_idx - 1].frame, i);
     }
 
-    field0 = GST_BUFFER_DATA (history[cur_field_idx].buf) + offset;
+    field0 = GST_VIDEO_FRAME_PLANE_DATA (history[cur_field_idx].frame, i);
 
     g_assert (dm_class->fields_required <= 4);
 
     field1 = NULL;
     if (cur_field_idx + 1 < history_count) {
-      field1 = GST_BUFFER_DATA (history[cur_field_idx + 1].buf) + offset;
+      field1 = GST_VIDEO_FRAME_PLANE_DATA (history[cur_field_idx + 1].frame, i);
     }
 
     field2 = NULL;
     if (cur_field_idx + 2 < history_count) {
-      field2 = GST_BUFFER_DATA (history[cur_field_idx + 2].buf) + offset;
+      field2 = GST_VIDEO_FRAME_PLANE_DATA (history[cur_field_idx + 2].frame, i);
     }
 
     gst_deinterlace_simple_method_deinterlace_frame_planar_plane (self, out,
@@ -606,15 +601,14 @@
 
 static void
 gst_deinterlace_simple_method_setup (GstDeinterlaceMethod * method,
-    GstVideoFormat format, gint width, gint height)
+    GstVideoInfo * vinfo)
 {
   GstDeinterlaceSimpleMethod *self = GST_DEINTERLACE_SIMPLE_METHOD (method);
   GstDeinterlaceSimpleMethodClass *klass =
       GST_DEINTERLACE_SIMPLE_METHOD_GET_CLASS (self);
 
   GST_DEINTERLACE_METHOD_CLASS
-      (gst_deinterlace_simple_method_parent_class)->setup (method, format,
-      width, height);
+      (gst_deinterlace_simple_method_parent_class)->setup (method, vinfo);
 
   self->interpolate_scanline_packed = NULL;
   self->copy_scanline_packed = NULL;
@@ -626,10 +620,10 @@
   self->copy_scanline_planar[1] = NULL;
   self->copy_scanline_planar[2] = NULL;
 
-  if (format == GST_VIDEO_FORMAT_UNKNOWN)
+  if (GST_VIDEO_INFO_FORMAT (vinfo) == GST_VIDEO_FORMAT_UNKNOWN)
     return;
 
-  switch (format) {
+  switch (GST_VIDEO_INFO_FORMAT (vinfo)) {
     case GST_VIDEO_FORMAT_YUY2:
       self->interpolate_scanline_packed = klass->interpolate_scanline_yuy2;
       self->copy_scanline_packed = klass->copy_scanline_yuy2;
diff --git a/gst/deinterlace/gstdeinterlacemethod.h b/gst/deinterlace/gstdeinterlacemethod.h
index a50ecbd..16d54ba 100644
--- a/gst/deinterlace/gstdeinterlacemethod.h
+++ b/gst/deinterlace/gstdeinterlacemethod.h
@@ -51,8 +51,7 @@
 
 typedef struct
 {
-  /* pointer to the start of data for this field */
-  GstBuffer *buf;
+  GstVideoFrame *frame;
   /* see PICTURE_ flags in *.c */
   guint flags;
 } GstDeinterlaceField;
@@ -63,13 +62,13 @@
 
 typedef void (*GstDeinterlaceMethodDeinterlaceFunction) (
     GstDeinterlaceMethod *self, const GstDeinterlaceField *history,
-    guint history_count, GstBuffer *outbuf, int cur_field_idx);
+    guint history_count, GstVideoFrame *outframe, int cur_field_idx);
 
 struct _GstDeinterlaceMethod {
   GstObject parent;
 
-  GstVideoFormat format;
-  gint frame_width, frame_height;
+  GstVideoInfo *vinfo;
+  // FIXME - the stuff below can use vinfo and macros
   gint width[4];
   gint height[4];
   gint offset[4];
@@ -86,7 +85,7 @@
 
   gboolean (*supported) (GstDeinterlaceMethodClass *klass, GstVideoFormat format, gint width, gint height);
 
-  void (*setup) (GstDeinterlaceMethod *self, GstVideoFormat format, gint width, gint height);
+  void (*setup) (GstDeinterlaceMethod *self, GstVideoInfo * vinfo);
 
   GstDeinterlaceMethodDeinterlaceFunction deinterlace_frame_yuy2;
   GstDeinterlaceMethodDeinterlaceFunction deinterlace_frame_yvyu;
@@ -113,8 +112,8 @@
 GType gst_deinterlace_method_get_type (void);
 
 gboolean gst_deinterlace_method_supported (GType type, GstVideoFormat format, gint width, gint height);
-void gst_deinterlace_method_setup (GstDeinterlaceMethod * self, GstVideoFormat format, gint width, gint height);
-void gst_deinterlace_method_deinterlace_frame (GstDeinterlaceMethod * self, const GstDeinterlaceField * history, guint history_count, GstBuffer * outbuf,
+void gst_deinterlace_method_setup (GstDeinterlaceMethod * self, GstVideoInfo * vinfo);
+void gst_deinterlace_method_deinterlace_frame (GstDeinterlaceMethod * self, const GstDeinterlaceField * history, guint history_count, GstVideoFrame * outframe,
     int cur_field_idx);
 gint gst_deinterlace_method_get_fields_required (GstDeinterlaceMethod * self);
 gint gst_deinterlace_method_get_latency (GstDeinterlaceMethod * self);
diff --git a/gst/deinterlace/tvtime-dist.c b/gst/deinterlace/tvtime-dist.c
index a278f75..3cd2ba2 100644
--- a/gst/deinterlace/tvtime-dist.c
+++ b/gst/deinterlace/tvtime-dist.c
@@ -326,12 +326,13 @@
 {
   OrcExecutor _ex, *ex = &_ex;
   static volatile int p_inited = 0;
-  static OrcProgram *p = 0;
+  static OrcCode *c = 0;
   void (*func) (OrcExecutor *);
 
   if (!p_inited) {
     orc_once_mutex_lock ();
     if (!p_inited) {
+      OrcProgram *p;
 
       p = orc_program_new ();
       orc_program_set_name (p, "deinterlace_line_vfir");
@@ -380,11 +381,14 @@
           ORC_VAR_D1, ORC_VAR_D1);
 
       orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
     }
     p_inited = TRUE;
     orc_once_mutex_unlock ();
   }
-  ex->program = p;
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
 
   ex->n = n;
   ex->arrays[ORC_VAR_D1] = d1;
@@ -394,7 +398,7 @@
   ex->arrays[ORC_VAR_S4] = (void *) s4;
   ex->arrays[ORC_VAR_S5] = (void *) s5;
 
-  func = p->code_exec;
+  func = c->exec;
   func (ex);
 }
 #endif
@@ -469,12 +473,13 @@
 {
   OrcExecutor _ex, *ex = &_ex;
   static volatile int p_inited = 0;
-  static OrcProgram *p = 0;
+  static OrcCode *c = 0;
   void (*func) (OrcExecutor *);
 
   if (!p_inited) {
     orc_once_mutex_lock ();
     if (!p_inited) {
+      OrcProgram *p;
 
       p = orc_program_new ();
       orc_program_set_name (p, "deinterlace_line_linear");
@@ -487,18 +492,21 @@
           ORC_VAR_D1);
 
       orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
     }
     p_inited = TRUE;
     orc_once_mutex_unlock ();
   }
-  ex->program = p;
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
 
   ex->n = n;
   ex->arrays[ORC_VAR_D1] = d1;
   ex->arrays[ORC_VAR_S1] = (void *) s1;
   ex->arrays[ORC_VAR_S2] = (void *) s2;
 
-  func = p->code_exec;
+  func = c->exec;
   func (ex);
 }
 #endif
@@ -639,12 +647,13 @@
 {
   OrcExecutor _ex, *ex = &_ex;
   static volatile int p_inited = 0;
-  static OrcProgram *p = 0;
+  static OrcCode *c = 0;
   void (*func) (OrcExecutor *);
 
   if (!p_inited) {
     orc_once_mutex_lock ();
     if (!p_inited) {
+      OrcProgram *p;
 
       p = orc_program_new ();
       orc_program_set_name (p, "deinterlace_line_linear_blend");
@@ -679,11 +688,14 @@
           ORC_VAR_D1, ORC_VAR_D1);
 
       orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
     }
     p_inited = TRUE;
     orc_once_mutex_unlock ();
   }
-  ex->program = p;
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
 
   ex->n = n;
   ex->arrays[ORC_VAR_D1] = d1;
@@ -691,7 +703,7 @@
   ex->arrays[ORC_VAR_S2] = (void *) s2;
   ex->arrays[ORC_VAR_S3] = (void *) s3;
 
-  func = p->code_exec;
+  func = c->exec;
   func (ex);
 }
 #endif
@@ -922,12 +934,13 @@
 {
   OrcExecutor _ex, *ex = &_ex;
   static volatile int p_inited = 0;
-  static OrcProgram *p = 0;
+  static OrcCode *c = 0;
   void (*func) (OrcExecutor *);
 
   if (!p_inited) {
     orc_once_mutex_lock ();
     if (!p_inited) {
+      OrcProgram *p;
 
       p = orc_program_new ();
       orc_program_set_name (p, "deinterlace_line_greedy");
@@ -1000,11 +1013,14 @@
           ORC_VAR_D1);
 
       orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
     }
     p_inited = TRUE;
     orc_once_mutex_unlock ();
   }
-  ex->program = p;
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
 
   ex->n = n;
   ex->arrays[ORC_VAR_D1] = d1;
@@ -1014,7 +1030,7 @@
   ex->arrays[ORC_VAR_S4] = (void *) s4;
   ex->params[ORC_VAR_P1] = p1;
 
-  func = p->code_exec;
+  func = c->exec;
   func (ex);
 }
 #endif
diff --git a/gst/deinterlace/tvtime/greedyh.c b/gst/deinterlace/tvtime/greedyh.c
index 93da8cd..c6bcdda 100644
--- a/gst/deinterlace/tvtime/greedyh.c
+++ b/gst/deinterlace/tvtime/greedyh.c
@@ -719,7 +719,7 @@
 static void
 deinterlace_frame_di_greedyh_packed (GstDeinterlaceMethod * method,
     const GstDeinterlaceField * history, guint history_count,
-    GstBuffer * outbuf, int cur_field_idx)
+    GstVideoFrame * outframe, int cur_field_idx)
 {
   GstDeinterlaceMethodGreedyH *self = GST_DEINTERLACE_METHOD_GREEDY_H (method);
   GstDeinterlaceMethodGreedyHClass *klass =
@@ -727,13 +727,13 @@
   gint InfoIsOdd = 0;
   gint Line;
   gint RowStride = method->row_stride[0];
-  gint FieldHeight = method->frame_height / 2;
+  gint FieldHeight = GST_VIDEO_INFO_HEIGHT (method->vinfo) / 2;
   gint Pitch = method->row_stride[0] * 2;
   const guint8 *L1;             // ptr to Line1, of 3
   const guint8 *L2;             // ptr to Line2, the weave line
   const guint8 *L3;             // ptr to Line3
   const guint8 *L2P;            // ptr to prev Line2
-  guint8 *Dest = GST_BUFFER_DATA (outbuf);
+  guint8 *Dest = GST_VIDEO_FRAME_COMP_DATA (outframe, 0);
   ScanlineFunction scanline;
 
   if (cur_field_idx + 2 > history_count || cur_field_idx < 1) {
@@ -742,10 +742,9 @@
     backup_method = g_object_new (gst_deinterlace_method_linear_get_type (),
         NULL);
 
-    gst_deinterlace_method_setup (backup_method, method->format,
-        method->frame_width, method->frame_height);
+    gst_deinterlace_method_setup (backup_method, method->vinfo);
     gst_deinterlace_method_deinterlace_frame (backup_method,
-        history, history_count, outbuf, cur_field_idx);
+        history, history_count, outframe, cur_field_idx);
 
     g_object_unref (backup_method);
     return;
@@ -753,7 +752,7 @@
 
   cur_field_idx += 2;
 
-  switch (method->format) {
+  switch (GST_VIDEO_INFO_FORMAT (method->vinfo)) {
     case GST_VIDEO_FORMAT_YUY2:
     case GST_VIDEO_FORMAT_YVYU:
       scanline = klass->scanline_yuy2;
@@ -775,16 +774,16 @@
   if (history[cur_field_idx - 1].flags == PICTURE_INTERLACED_BOTTOM) {
     InfoIsOdd = 1;
 
-    L1 = GST_BUFFER_DATA (history[cur_field_idx - 2].buf);
+    L1 = GST_VIDEO_FRAME_COMP_DATA (history[cur_field_idx - 2].frame, 0);
     if (history[cur_field_idx - 2].flags & PICTURE_INTERLACED_BOTTOM)
       L1 += RowStride;
 
-    L2 = GST_BUFFER_DATA (history[cur_field_idx - 1].buf);
+    L2 = GST_VIDEO_FRAME_COMP_DATA (history[cur_field_idx - 1].frame, 0);
     if (history[cur_field_idx - 1].flags & PICTURE_INTERLACED_BOTTOM)
       L2 += RowStride;
 
     L3 = L1 + Pitch;
-    L2P = GST_BUFFER_DATA (history[cur_field_idx - 3].buf);
+    L2P = GST_VIDEO_FRAME_COMP_DATA (history[cur_field_idx - 3].frame, 0);
     if (history[cur_field_idx - 3].flags & PICTURE_INTERLACED_BOTTOM)
       L2P += RowStride;
 
@@ -793,16 +792,19 @@
     Dest += RowStride;
   } else {
     InfoIsOdd = 0;
-    L1 = GST_BUFFER_DATA (history[cur_field_idx - 2].buf);
+    L1 = GST_VIDEO_FRAME_COMP_DATA (history[cur_field_idx - 2].frame, 0);
     if (history[cur_field_idx - 2].flags & PICTURE_INTERLACED_BOTTOM)
       L1 += RowStride;
 
-    L2 = GST_BUFFER_DATA (history[cur_field_idx - 1].buf) + Pitch;
+    L2 = (guint8 *) GST_VIDEO_FRAME_COMP_DATA (history[cur_field_idx -
+            1].frame, 0) + Pitch;
     if (history[cur_field_idx - 1].flags & PICTURE_INTERLACED_BOTTOM)
       L2 += RowStride;
 
     L3 = L1 + Pitch;
-    L2P = GST_BUFFER_DATA (history[cur_field_idx - 3].buf) + Pitch;
+    L2P =
+        (guint8 *) GST_VIDEO_FRAME_COMP_DATA (history[cur_field_idx - 3].frame,
+        0) + Pitch;
     if (history[cur_field_idx - 3].flags & PICTURE_INTERLACED_BOTTOM)
       L2P += RowStride;
 
@@ -875,7 +877,7 @@
 static void
 deinterlace_frame_di_greedyh_planar (GstDeinterlaceMethod * method,
     const GstDeinterlaceField * history, guint history_count,
-    GstBuffer * outbuf, int cur_field_idx)
+    GstVideoFrame * outframe, int cur_field_idx)
 {
   GstDeinterlaceMethodGreedyH *self = GST_DEINTERLACE_METHOD_GREEDY_H (method);
   GstDeinterlaceMethodGreedyHClass *klass =
@@ -890,7 +892,6 @@
   const guint8 *L2P;            // ptr to prev Line2
   guint8 *Dest;
   gint i;
-  gint Offset;
   ScanlineFunction scanline;
 
   if (cur_field_idx + 2 > history_count || cur_field_idx < 1) {
@@ -899,10 +900,9 @@
     backup_method = g_object_new (gst_deinterlace_method_linear_get_type (),
         NULL);
 
-    gst_deinterlace_method_setup (backup_method, method->format,
-        method->frame_width, method->frame_height);
+    gst_deinterlace_method_setup (backup_method, method->vinfo);
     gst_deinterlace_method_deinterlace_frame (backup_method,
-        history, history_count, outbuf, cur_field_idx);
+        history, history_count, outframe, cur_field_idx);
 
     g_object_unref (backup_method);
     return;
@@ -911,8 +911,6 @@
   cur_field_idx += 2;
 
   for (i = 0; i < 3; i++) {
-    Offset = method->offset[i];
-
     InfoIsOdd = (history[cur_field_idx - 1].flags == PICTURE_INTERLACED_BOTTOM);
     RowStride = method->row_stride[i];
     FieldHeight = method->height[i] / 2;
@@ -923,18 +921,18 @@
     else
       scanline = klass->scanline_planar_uv;
 
-    Dest = GST_BUFFER_DATA (outbuf) + Offset;
+    Dest = GST_VIDEO_FRAME_PLANE_DATA (outframe, i);
 
-    L1 = GST_BUFFER_DATA (history[cur_field_idx - 2].buf) + Offset;
+    L1 = GST_VIDEO_FRAME_PLANE_DATA (history[cur_field_idx - 2].frame, i);
     if (history[cur_field_idx - 2].flags & PICTURE_INTERLACED_BOTTOM)
       L1 += RowStride;
 
-    L2 = GST_BUFFER_DATA (history[cur_field_idx - 1].buf) + Offset;
+    L2 = GST_VIDEO_FRAME_PLANE_DATA (history[cur_field_idx - 1].frame, i);
     if (history[cur_field_idx - 1].flags & PICTURE_INTERLACED_BOTTOM)
       L2 += RowStride;
 
     L3 = L1 + Pitch;
-    L2P = GST_BUFFER_DATA (history[cur_field_idx - 3].buf) + Offset;
+    L2P = GST_VIDEO_FRAME_PLANE_DATA (history[cur_field_idx - 3].frame, i);
     if (history[cur_field_idx - 3].flags & PICTURE_INTERLACED_BOTTOM)
       L2P += RowStride;
 
diff --git a/gst/deinterlace/tvtime/tomsmocomp/TomsMoCompAll.inc b/gst/deinterlace/tvtime/tomsmocomp/TomsMoCompAll.inc
index f8ffe1e..9dd0680 100644
--- a/gst/deinterlace/tvtime/tomsmocomp/TomsMoCompAll.inc
+++ b/gst/deinterlace/tvtime/tomsmocomp/TomsMoCompAll.inc
@@ -63,7 +63,7 @@
 
 static void FUNCT_NAME(GstDeinterlaceMethod *d_method,
 	const GstDeinterlaceField* history, guint history_count,
-	GstBuffer *outbuf, int cur_field_idx)
+	GstVideoFrame *outframe, int cur_field_idx)
 {
   GstDeinterlaceMethodTomsMoComp *self = GST_DEINTERLACE_METHOD_TOMSMOCOMP (d_method);
   glong SearchEffort = self->search_effort;
@@ -86,10 +86,9 @@
     backup_method = g_object_new (gst_deinterlace_method_linear_get_type(),
         NULL);
 
-    gst_deinterlace_method_setup (backup_method, d_method->format,
-        d_method->frame_width, d_method->frame_height);
+    gst_deinterlace_method_setup (backup_method, d_method->vinfo);
     gst_deinterlace_method_deinterlace_frame (backup_method,
-        history, history_count, outbuf, cur_field_idx);
+        history, history_count, outframe, cur_field_idx);
 
     g_object_unref (backup_method);
     return;
@@ -99,18 +98,18 @@
   src_pitch = self->parent.row_stride[0]*2;
   dst_pitch = self->parent.row_stride[0];
   rowsize   = self->parent.row_stride[0];
-  FldHeight = self->parent.frame_height / 2;
+  FldHeight = GST_VIDEO_INFO_HEIGHT (self->parent.vinfo) / 2;
 
-  pCopySrc   = GST_BUFFER_DATA(history[history_count-1].buf);
+  pCopySrc   = GST_VIDEO_FRAME_PLANE_DATA (history[history_count-1].frame, 0);
   if (history[history_count - 1].flags & PICTURE_INTERLACED_BOTTOM)
     pCopySrc += rowsize;
-  pCopySrcP  = GST_BUFFER_DATA(history[history_count-3].buf);
+  pCopySrcP  = GST_VIDEO_FRAME_PLANE_DATA (history[history_count-3].frame, 0);
   if (history[history_count - 3].flags & PICTURE_INTERLACED_BOTTOM)
     pCopySrcP += rowsize;
-  pWeaveSrc  = GST_BUFFER_DATA(history[history_count-2].buf);  
+  pWeaveSrc  = GST_VIDEO_FRAME_PLANE_DATA (history[history_count-2].frame, 0);
   if (history[history_count - 2].flags & PICTURE_INTERLACED_BOTTOM)
     pWeaveSrc += rowsize;
-  pWeaveSrcP = GST_BUFFER_DATA(history[history_count-4].buf);
+  pWeaveSrcP = GST_VIDEO_FRAME_PLANE_DATA (history[history_count-4].frame, 0);
   if (history[history_count - 4].flags & PICTURE_INTERLACED_BOTTOM)
     pWeaveSrcP += rowsize;
 
@@ -119,7 +118,7 @@
     IsOdd      = 1;
 
     // if we have an odd field we copy an even field and weave an odd field
-    pCopyDest = GST_BUFFER_DATA(outbuf);
+    pCopyDest = GST_VIDEO_FRAME_PLANE_DATA (outframe, 0);
     pWeaveDest = pCopyDest + dst_pitch;
   }
   /* do it vice verca */
@@ -127,8 +126,8 @@
 
     IsOdd      = 0;
     // if we have an even field we copy an odd field and weave an even field
-    pCopyDest = GST_BUFFER_DATA(outbuf) + dst_pitch;
-    pWeaveDest = GST_BUFFER_DATA(outbuf);
+    pCopyDest = (guint8 *) GST_VIDEO_FRAME_PLANE_DATA (outframe, 0) + dst_pitch;
+    pWeaveDest = GST_VIDEO_FRAME_PLANE_DATA (outframe, 0);
   }
 
   
diff --git a/gst/effectv/Makefile.in b/gst/effectv/Makefile.in
index 3582336..2ded75e 100644
--- a/gst/effectv/Makefile.in
+++ b/gst/effectv/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -255,7 +255,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/equalizer/Makefile.in b/gst/equalizer/Makefile.in
index 9787570..de5db88 100644
--- a/gst/equalizer/Makefile.in
+++ b/gst/equalizer/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -253,7 +253,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/equalizer/gstiirequalizer.c b/gst/equalizer/gstiirequalizer.c
index 7ac9d58..13bf9ec 100644
--- a/gst/equalizer/gstiirequalizer.c
+++ b/gst/equalizer/gstiirequalizer.c
@@ -653,14 +653,14 @@
       GST_DEBUG ("adding band[%d]=%p", i, equ->bands[i]);
 
       gst_object_set_parent (GST_OBJECT (equ->bands[i]), GST_OBJECT (equ));
-      gst_child_proxy_child_added (G_OBJECT (equ),
+      gst_child_proxy_child_added (GST_CHILD_PROXY (equ),
           G_OBJECT (equ->bands[i]), name);
     }
   } else {
     /* free unused bands */
     for (i = new_count; i < old_count; i++) {
       GST_DEBUG ("removing band[%d]=%p", i, equ->bands[i]);
-      gst_child_proxy_child_removed (G_OBJECT (equ),
+      gst_child_proxy_child_removed (GST_CHILD_PROXY (equ),
           G_OBJECT (equ->bands[i]), GST_OBJECT_NAME (equ->bands[i]));
       gst_object_unparent (GST_OBJECT (equ->bands[i]));
       equ->bands[i] = NULL;
diff --git a/gst/equalizer/gstiirequalizer10bands.c b/gst/equalizer/gstiirequalizer10bands.c
index 83be5de..5907d33 100644
--- a/gst/equalizer/gstiirequalizer10bands.c
+++ b/gst/equalizer/gstiirequalizer10bands.c
@@ -146,38 +146,38 @@
 gst_iir_equalizer_10bands_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec)
 {
-  GstIirEqualizer *equ = GST_IIR_EQUALIZER (object);
+  GstChildProxy *equ = GST_CHILD_PROXY (object);
 
   switch (prop_id) {
     case PROP_BAND0:
-      gst_child_proxy_set_property (G_OBJECT (equ), "band0::gain", value);
+      gst_child_proxy_set_property (equ, "band0::gain", value);
       break;
     case PROP_BAND1:
-      gst_child_proxy_set_property (G_OBJECT (equ), "band1::gain", value);
+      gst_child_proxy_set_property (equ, "band1::gain", value);
       break;
     case PROP_BAND2:
-      gst_child_proxy_set_property (G_OBJECT (equ), "band2::gain", value);
+      gst_child_proxy_set_property (equ, "band2::gain", value);
       break;
     case PROP_BAND3:
-      gst_child_proxy_set_property (G_OBJECT (equ), "band3::gain", value);
+      gst_child_proxy_set_property (equ, "band3::gain", value);
       break;
     case PROP_BAND4:
-      gst_child_proxy_set_property (G_OBJECT (equ), "band4::gain", value);
+      gst_child_proxy_set_property (equ, "band4::gain", value);
       break;
     case PROP_BAND5:
-      gst_child_proxy_set_property (G_OBJECT (equ), "band5::gain", value);
+      gst_child_proxy_set_property (equ, "band5::gain", value);
       break;
     case PROP_BAND6:
-      gst_child_proxy_set_property (G_OBJECT (equ), "band6::gain", value);
+      gst_child_proxy_set_property (equ, "band6::gain", value);
       break;
     case PROP_BAND7:
-      gst_child_proxy_set_property (G_OBJECT (equ), "band7::gain", value);
+      gst_child_proxy_set_property (equ, "band7::gain", value);
       break;
     case PROP_BAND8:
-      gst_child_proxy_set_property (G_OBJECT (equ), "band8::gain", value);
+      gst_child_proxy_set_property (equ, "band8::gain", value);
       break;
     case PROP_BAND9:
-      gst_child_proxy_set_property (G_OBJECT (equ), "band9::gain", value);
+      gst_child_proxy_set_property (equ, "band9::gain", value);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -189,38 +189,38 @@
 gst_iir_equalizer_10bands_get_property (GObject * object, guint prop_id,
     GValue * value, GParamSpec * pspec)
 {
-  GstIirEqualizer *equ = GST_IIR_EQUALIZER (object);
+  GstChildProxy *equ = GST_CHILD_PROXY (object);
 
   switch (prop_id) {
     case PROP_BAND0:
-      gst_child_proxy_get_property (G_OBJECT (equ), "band0::gain", value);
+      gst_child_proxy_get_property (equ, "band0::gain", value);
       break;
     case PROP_BAND1:
-      gst_child_proxy_get_property (G_OBJECT (equ), "band1::gain", value);
+      gst_child_proxy_get_property (equ, "band1::gain", value);
       break;
     case PROP_BAND2:
-      gst_child_proxy_get_property (G_OBJECT (equ), "band2::gain", value);
+      gst_child_proxy_get_property (equ, "band2::gain", value);
       break;
     case PROP_BAND3:
-      gst_child_proxy_get_property (G_OBJECT (equ), "band3::gain", value);
+      gst_child_proxy_get_property (equ, "band3::gain", value);
       break;
     case PROP_BAND4:
-      gst_child_proxy_get_property (G_OBJECT (equ), "band4::gain", value);
+      gst_child_proxy_get_property (equ, "band4::gain", value);
       break;
     case PROP_BAND5:
-      gst_child_proxy_get_property (G_OBJECT (equ), "band5::gain", value);
+      gst_child_proxy_get_property (equ, "band5::gain", value);
       break;
     case PROP_BAND6:
-      gst_child_proxy_get_property (G_OBJECT (equ), "band6::gain", value);
+      gst_child_proxy_get_property (equ, "band6::gain", value);
       break;
     case PROP_BAND7:
-      gst_child_proxy_get_property (G_OBJECT (equ), "band7::gain", value);
+      gst_child_proxy_get_property (equ, "band7::gain", value);
       break;
     case PROP_BAND8:
-      gst_child_proxy_get_property (G_OBJECT (equ), "band8::gain", value);
+      gst_child_proxy_get_property (equ, "band8::gain", value);
       break;
     case PROP_BAND9:
-      gst_child_proxy_get_property (G_OBJECT (equ), "band9::gain", value);
+      gst_child_proxy_get_property (equ, "band9::gain", value);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
diff --git a/gst/equalizer/gstiirequalizer3bands.c b/gst/equalizer/gstiirequalizer3bands.c
index d9410e5..c44bb19 100644
--- a/gst/equalizer/gstiirequalizer3bands.c
+++ b/gst/equalizer/gstiirequalizer3bands.c
@@ -101,17 +101,17 @@
 gst_iir_equalizer_3bands_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec)
 {
-  GstIirEqualizer *equ = GST_IIR_EQUALIZER (object);
+  GstChildProxy *equ = GST_CHILD_PROXY (object);
 
   switch (prop_id) {
     case PROP_BAND0:
-      gst_child_proxy_set_property (G_OBJECT (equ), "band0::gain", value);
+      gst_child_proxy_set_property (equ, "band0::gain", value);
       break;
     case PROP_BAND1:
-      gst_child_proxy_set_property (G_OBJECT (equ), "band1::gain", value);
+      gst_child_proxy_set_property (equ, "band1::gain", value);
       break;
     case PROP_BAND2:
-      gst_child_proxy_set_property (G_OBJECT (equ), "band2::gain", value);
+      gst_child_proxy_set_property (equ, "band2::gain", value);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -123,17 +123,17 @@
 gst_iir_equalizer_3bands_get_property (GObject * object, guint prop_id,
     GValue * value, GParamSpec * pspec)
 {
-  GstIirEqualizer *equ = GST_IIR_EQUALIZER (object);
+  GstChildProxy *equ = GST_CHILD_PROXY (object);
 
   switch (prop_id) {
     case PROP_BAND0:
-      gst_child_proxy_get_property (G_OBJECT (equ), "band0::gain", value);
+      gst_child_proxy_get_property (equ, "band0::gain", value);
       break;
     case PROP_BAND1:
-      gst_child_proxy_get_property (G_OBJECT (equ), "band1::gain", value);
+      gst_child_proxy_get_property (equ, "band1::gain", value);
       break;
     case PROP_BAND2:
-      gst_child_proxy_get_property (G_OBJECT (equ), "band2::gain", value);
+      gst_child_proxy_get_property (equ, "band2::gain", value);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
diff --git a/gst/flv/Makefile.in b/gst/flv/Makefile.in
index b773636..cdf05e7 100644
--- a/gst/flv/Makefile.in
+++ b/gst/flv/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -248,7 +248,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/flv/gstflvdemux.c b/gst/flv/gstflvdemux.c
index d22104a..df53775 100644
--- a/gst/flv/gstflvdemux.c
+++ b/gst/flv/gstflvdemux.c
@@ -642,6 +642,7 @@
   gchar *codec_name = NULL;
   gboolean ret = FALSE;
   guint adjusted_rate = rate;
+  gchar *stream_id;
 
   switch (codec_tag) {
     case 1:
@@ -732,6 +733,11 @@
         demux->audio_codec_data, NULL);
   }
 
+  stream_id =
+      gst_pad_create_stream_id (demux->audio_pad, GST_ELEMENT_CAST (demux),
+      "audio");
+  gst_pad_push_event (demux->audio_pad, gst_event_new_stream_start (stream_id));
+  g_free (stream_id);
   ret = gst_pad_set_caps (demux->audio_pad, caps);
 
   if (G_LIKELY (ret)) {
@@ -796,8 +802,8 @@
   if (demux->taglist) {
     GST_DEBUG_OBJECT (demux, "pushing tags out %" GST_PTR_FORMAT,
         demux->taglist);
-    gst_flv_demux_push_src_event (demux, gst_event_new_tag ("GstDemuxer",
-            demux->taglist));
+    gst_tag_list_set_scope (demux->taglist, GST_TAG_SCOPE_GLOBAL);
+    gst_flv_demux_push_src_event (demux, gst_event_new_tag (demux->taglist));
     demux->taglist = gst_tag_list_new_empty ();
     demux->push_tags = FALSE;
   }
@@ -1122,6 +1128,7 @@
   gboolean ret = FALSE;
   GstCaps *caps = NULL;
   gchar *codec_name = NULL;
+  gchar *stream_id;
 
   /* Generate caps for that pad */
   switch (codec_tag) {
@@ -1178,6 +1185,10 @@
         demux->video_codec_data, NULL);
   }
 
+  stream_id =
+      gst_pad_create_stream_id (demux->video_pad, GST_ELEMENT_CAST (demux),
+      "video");
+  gst_pad_push_event (demux->video_pad, gst_event_new_stream_start (stream_id));
   ret = gst_pad_set_caps (demux->video_pad, caps);
 
   if (G_LIKELY (ret)) {
@@ -2458,12 +2469,17 @@
           gst_element_post_message (GST_ELEMENT_CAST (demux),
               gst_message_new_segment_done (GST_OBJECT_CAST (demux),
                   GST_FORMAT_TIME, stop));
+          gst_flv_demux_push_src_event (demux,
+              gst_event_new_segment_done (GST_FORMAT_TIME, stop));
         } else {                /* Reverse playback */
           GST_LOG_OBJECT (demux, "Sending segment done, at beginning of "
               "segment");
           gst_element_post_message (GST_ELEMENT_CAST (demux),
               gst_message_new_segment_done (GST_OBJECT_CAST (demux),
                   GST_FORMAT_TIME, demux->segment.start));
+          gst_flv_demux_push_src_event (demux,
+              gst_event_new_segment_done (GST_FORMAT_TIME,
+                  demux->segment.start));
         }
       } else {
         /* normal playback, send EOS to all linked pads */
@@ -2828,7 +2844,7 @@
     gst_pad_pause_task (demux->sinkpad);
   } else {
     gst_pad_start_task (demux->sinkpad,
-        (GstTaskFunction) gst_flv_demux_loop, demux->sinkpad);
+        (GstTaskFunction) gst_flv_demux_loop, demux->sinkpad, NULL);
   }
 
   GST_PAD_STREAM_UNLOCK (demux->sinkpad);
@@ -2893,7 +2909,7 @@
       if (active) {
         demux->random_access = TRUE;
         res = gst_pad_start_task (sinkpad, (GstTaskFunction) gst_flv_demux_loop,
-            sinkpad);
+            sinkpad, NULL);
       } else {
         demux->random_access = FALSE;
         res = gst_pad_stop_task (sinkpad);
@@ -2979,6 +2995,10 @@
         demux->video_need_segment = TRUE;
         ret = TRUE;
         gst_event_unref (event);
+        if (demux->new_seg_event) {
+          gst_event_unref (demux->new_seg_event);
+          demux->new_seg_event = NULL;
+        }
       }
       break;
     }
@@ -3229,7 +3249,7 @@
   }
 
   if (demux->taglist) {
-    gst_tag_list_free (demux->taglist);
+    gst_tag_list_unref (demux->taglist);
     demux->taglist = NULL;
   }
 
diff --git a/gst/flx/Makefile.in b/gst/flx/Makefile.in
index fc7bef9..353e253 100644
--- a/gst/flx/Makefile.in
+++ b/gst/flx/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -248,7 +248,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/goom/Makefile.in b/gst/goom/Makefile.in
index 7064d00..af15732 100644
--- a/gst/goom/Makefile.in
+++ b/gst/goom/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -266,7 +266,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/goom/gstgoom.c b/gst/goom/gstgoom.c
index 1ffe7c8..e6ecd72 100644
--- a/gst/goom/gstgoom.c
+++ b/gst/goom/gstgoom.c
@@ -235,7 +235,7 @@
   GST_DEBUG_OBJECT (goom, "dimension %dx%d, framerate %d/%d, spf %d",
       goom->width, goom->height, goom->fps_n, goom->fps_d, goom->spf);
 
-  res = gst_pad_push_event (goom->srcpad, gst_event_new_caps (caps));
+  res = gst_pad_set_caps (goom->srcpad, caps);
 
   return res;
 
diff --git a/gst/goom2k1/Makefile.in b/gst/goom2k1/Makefile.in
index 7bf4dc8..acac8b0 100644
--- a/gst/goom2k1/Makefile.in
+++ b/gst/goom2k1/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -250,7 +250,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/goom2k1/gstgoom.c b/gst/goom2k1/gstgoom.c
index 72bad75..e5d9671 100644
--- a/gst/goom2k1/gstgoom.c
+++ b/gst/goom2k1/gstgoom.c
@@ -234,7 +234,7 @@
   GST_DEBUG_OBJECT (goom, "dimension %dx%d, framerate %d/%d, spf %d",
       goom->width, goom->height, goom->fps_n, goom->fps_d, goom->spf);
 
-  return gst_pad_push_event (goom->srcpad, gst_event_new_caps (caps));
+  return gst_pad_set_caps (goom->srcpad, caps);
 
   /* ERRORS */
 error:
diff --git a/gst/icydemux/Makefile.in b/gst/icydemux/Makefile.in
index 81fe0d7..289198b 100644
--- a/gst/icydemux/Makefile.in
+++ b/gst/icydemux/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -248,7 +248,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/icydemux/gsticydemux.c b/gst/icydemux/gsticydemux.c
index e72b104..678485a 100644
--- a/gst/icydemux/gsticydemux.c
+++ b/gst/icydemux/gsticydemux.c
@@ -131,7 +131,7 @@
   gst_icydemux_remove_srcpad (icydemux);
 
   if (icydemux->cached_tags) {
-    gst_tag_list_free (icydemux->cached_tags);
+    gst_tag_list_unref (icydemux->cached_tags);
     icydemux->cached_tags = NULL;
   }
 
@@ -287,7 +287,7 @@
   } else {
     gst_tag_list_insert (icydemux->cached_tags, tags,
         GST_TAG_MERGE_REPLACE_ALL);
-    gst_tag_list_free (tags);
+    gst_tag_list_unref (tags);
   }
 
   return TRUE;
@@ -341,7 +341,7 @@
   if (!gst_tag_list_is_empty (tags))
     gst_icydemux_tag_found (icydemux, tags);
   else
-    gst_tag_list_free (tags);
+    gst_tag_list_unref (tags);
 }
 
 static gboolean
@@ -614,10 +614,7 @@
 {
   GstEvent *event;
 
-  gst_element_post_message (GST_ELEMENT (icydemux),
-      gst_message_new_tag (GST_OBJECT (icydemux), gst_tag_list_copy (tags)));
-
-  event = gst_event_new_tag ("GstDemuxer", tags);
+  event = gst_event_new_tag (tags);
   GST_EVENT_TIMESTAMP (event) = 0;
 
   GST_DEBUG_OBJECT (icydemux, "Sending tag event on src pad");
diff --git a/gst/id3demux/Makefile.in b/gst/id3demux/Makefile.in
index bc39420..6e76e62 100644
--- a/gst/id3demux/Makefile.in
+++ b/gst/id3demux/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -247,7 +247,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/imagefreeze/Makefile.in b/gst/imagefreeze/Makefile.in
index e90e77d..df4000d 100644
--- a/gst/imagefreeze/Makefile.in
+++ b/gst/imagefreeze/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -247,7 +247,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/imagefreeze/gstimagefreeze.c b/gst/imagefreeze/gstimagefreeze.c
index 211df8d..0617cef 100644
--- a/gst/imagefreeze/gstimagefreeze.c
+++ b/gst/imagefreeze/gstimagefreeze.c
@@ -649,7 +649,7 @@
 
         if (self->buffer != NULL)
           gst_pad_start_task (self->srcpad,
-              (GstTaskFunction) gst_image_freeze_src_loop, self->srcpad);
+              (GstTaskFunction) gst_image_freeze_src_loop, self->srcpad, NULL);
 
         g_mutex_unlock (&self->lock);
       }
@@ -685,7 +685,7 @@
   self->buffer = buffer;
 
   gst_pad_start_task (self->srcpad, (GstTaskFunction) gst_image_freeze_src_loop,
-      self->srcpad);
+      self->srcpad, NULL);
   g_mutex_unlock (&self->lock);
   return GST_FLOW_EOS;
 }
@@ -714,7 +714,7 @@
   if (self->need_segment) {
     GstEvent *e;
 
-    GST_DEBUG_OBJECT (pad, "Pushing NEWSEGMENT event: %" GST_SEGMENT_FORMAT,
+    GST_DEBUG_OBJECT (pad, "Pushing SEGMENT event: %" GST_SEGMENT_FORMAT,
         &self->segment);
     e = gst_event_new_segment (&self->segment);
 
@@ -777,7 +777,8 @@
   if (in_seg) {
     GstFlowReturn ret;
 
-    GST_BUFFER_TIMESTAMP (buffer) = cstart;
+    GST_BUFFER_DTS (buffer) = GST_CLOCK_TIME_NONE;
+    GST_BUFFER_PTS (buffer) = cstart;
     GST_BUFFER_DURATION (buffer) = cstop - cstart;
     GST_BUFFER_OFFSET (buffer) = offset;
     GST_BUFFER_OFFSET_END (buffer) = offset + 1;
@@ -793,15 +794,20 @@
   if (eos) {
     if ((self->segment.flags & GST_SEEK_FLAG_SEGMENT)) {
       GstMessage *m;
+      GstEvent *e;
 
       GST_DEBUG_OBJECT (pad, "Sending segment done at end of segment");
-      if (self->segment.rate >= 0)
+      if (self->segment.rate >= 0) {
         m = gst_message_new_segment_done (GST_OBJECT_CAST (self),
             GST_FORMAT_TIME, self->segment.stop);
-      else
+        e = gst_event_new_segment_done (GST_FORMAT_TIME, self->segment.stop);
+      } else {
         m = gst_message_new_segment_done (GST_OBJECT_CAST (self),
             GST_FORMAT_TIME, self->segment.start);
+        e = gst_event_new_segment_done (GST_FORMAT_TIME, self->segment.start);
+      }
       gst_element_post_message (GST_ELEMENT_CAST (self), m);
+      gst_pad_push_event (self->srcpad, e);
     } else {
       GST_DEBUG_OBJECT (pad, "Sending EOS at end of segment");
       gst_pad_push_event (self->srcpad, gst_event_new_eos ());
diff --git a/gst/interleave/Makefile.in b/gst/interleave/Makefile.in
index 53b47d3..149880a 100644
--- a/gst/interleave/Makefile.in
+++ b/gst/interleave/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -249,7 +249,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/interleave/deinterleave.c b/gst/interleave/deinterleave.c
index 2ca78af..9336157 100644
--- a/gst/interleave/deinterleave.c
+++ b/gst/interleave/deinterleave.c
@@ -409,7 +409,9 @@
 
 cannot_change_caps:
   {
-    GST_ERROR_OBJECT (self, "can't set new caps: %" GST_PTR_FORMAT, caps);
+    GST_WARNING_OBJECT (self, "caps change from %" GST_PTR_FORMAT
+        " to %" GST_PTR_FORMAT " not supported: channel number or channel "
+        "positions change", self->sinkcaps, caps);
     return FALSE;
   }
 unsupported_caps:
diff --git a/gst/interleave/interleave.c b/gst/interleave/interleave.c
index 5055969..63424ca 100644
--- a/gst/interleave/interleave.c
+++ b/gst/interleave/interleave.c
@@ -601,10 +601,7 @@
     case GST_STATE_CHANGE_READY_TO_PAUSED:
       self->timestamp = 0;
       self->offset = 0;
-      self->segment_pending = TRUE;
-      self->segment_position = 0;
-      self->segment_rate = 1.0;
-      gst_segment_init (&self->segment, GST_FORMAT_UNDEFINED);
+      gst_event_replace (&self->pending_segment, NULL);
       gst_collect_pads_start (self->collect);
       break;
     case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
@@ -627,6 +624,7 @@
       break;
     case GST_STATE_CHANGE_PAUSED_TO_READY:
       gst_caps_replace (&self->sinkcaps, NULL);
+      gst_event_replace (&self->pending_segment, NULL);
       break;
     case GST_STATE_CHANGE_READY_TO_NULL:
       break;
@@ -829,14 +827,17 @@
 
   switch (GST_EVENT_TYPE (event)) {
     case GST_EVENT_FLUSH_STOP:
-      /* mark a pending new segment. This event is synchronized
-       * with the streaming thread so we can safely update the
-       * variable without races. It's somewhat weird because we
-       * assume the collectpads forwarded the FLUSH_STOP past us
-       * and downstream (using our source pad, the bastard!).
-       */
-      self->segment_pending = TRUE;
+      GST_OBJECT_LOCK (self);
+      gst_event_replace (&self->pending_segment, NULL);
+      GST_OBJECT_UNLOCK (self);
       break;
+    case GST_EVENT_SEGMENT:
+    {
+      GST_OBJECT_LOCK (self);
+      gst_event_replace (&self->pending_segment, event);
+      GST_OBJECT_UNLOCK (self);
+      break;
+    }
     case GST_EVENT_CAPS:
     {
       GstCaps *caps;
@@ -1134,12 +1135,8 @@
     case GST_EVENT_SEEK:
     {
       GstSeekFlags flags;
-      GstSeekType curtype;
-      gint64 cur;
 
-      /* parse the seek parameters */
-      gst_event_parse_seek (event, &self->segment_rate, NULL, &flags, &curtype,
-          &cur, NULL, NULL);
+      gst_event_parse_seek (event, NULL, NULL, &flags, NULL, NULL, NULL, NULL);
 
       /* check if we are flushing */
       if (flags & GST_SEEK_FLAG_FLUSH) {
@@ -1150,17 +1147,6 @@
          * when all pads received a FLUSH_STOP. */
         gst_pad_push_event (self->src, gst_event_new_flush_start ());
       }
-
-      /* now wait for the collected to be finished and mark a new
-       * segment */
-      GST_OBJECT_LOCK (self->collect);
-      if (curtype == GST_SEEK_TYPE_SET)
-        self->segment_position = cur;
-      else
-        self->segment_position = 0;
-      self->segment_pending = TRUE;
-      GST_OBJECT_UNLOCK (self->collect);
-
       result = forward_event (self, event);
       break;
     }
@@ -1189,6 +1175,7 @@
   gboolean empty = TRUE;
   gint width = self->width / 8;
   GstMapInfo write_info;
+  GstClockTime timestamp = -1;
 
   size = gst_collect_pads_available (pads);
   if (size == 0)
@@ -1232,6 +1219,9 @@
     ncollected++;
     gst_buffer_map (inbuf, &input_info, GST_MAP_READ);
 
+    if (timestamp == -1)
+      timestamp = GST_BUFFER_TIMESTAMP (inbuf);
+
     if (GST_BUFFER_FLAG_IS_SET (inbuf, GST_BUFFER_FLAG_GAP))
       goto next;
 
@@ -1252,15 +1242,61 @@
     goto eos;
   }
 
-  if (self->segment_pending) {
+  GST_OBJECT_LOCK (self);
+  if (self->pending_segment) {
     GstEvent *event;
+    GstSegment segment;
 
-    self->segment.format = GST_FORMAT_TIME;
-    event = gst_event_new_segment (&self->segment);
+    event = self->pending_segment;
+    self->pending_segment = NULL;
+    GST_OBJECT_UNLOCK (self);
 
+    /* convert the input segment to time now */
+    gst_event_copy_segment (event, &segment);
+
+    if (segment.format != GST_FORMAT_TIME) {
+      gst_event_unref (event);
+
+      /* not time, convert */
+      switch (segment.format) {
+        case GST_FORMAT_BYTES:
+          segment.start *= width;
+          if (segment.stop != -1)
+            segment.stop *= width;
+          if (segment.position != -1)
+            segment.position *= width;
+          /* fallthrough for the samples case */
+        case GST_FORMAT_DEFAULT:
+          segment.start =
+              gst_util_uint64_scale_int (segment.start, GST_SECOND, self->rate);
+          if (segment.stop != -1)
+            segment.stop =
+                gst_util_uint64_scale_int (segment.stop, GST_SECOND,
+                self->rate);
+          if (segment.position != -1)
+            segment.position =
+                gst_util_uint64_scale_int (segment.position, GST_SECOND,
+                self->rate);
+          break;
+        default:
+          GST_WARNING ("can't convert segment values");
+          segment.start = 0;
+          segment.stop = -1;
+          segment.position = 0;
+          break;
+      }
+      event = gst_event_new_segment (&segment);
+    }
     gst_pad_push_event (self->src, event);
-    self->segment_pending = FALSE;
-    self->segment_position = 0;
+
+    GST_OBJECT_LOCK (self);
+  }
+  GST_OBJECT_UNLOCK (self);
+
+  if (timestamp != -1) {
+    self->offset = gst_util_uint64_scale_int (timestamp, self->rate,
+        GST_SECOND);
+    self->timestamp = timestamp;
   }
 
   GST_BUFFER_TIMESTAMP (outbuf) = self->timestamp;
@@ -1270,8 +1306,8 @@
   self->timestamp = gst_util_uint64_scale_int (self->offset,
       GST_SECOND, self->rate);
 
-  GST_BUFFER_DURATION (outbuf) = self->timestamp -
-      GST_BUFFER_TIMESTAMP (outbuf);
+  GST_BUFFER_DURATION (outbuf) =
+      self->timestamp - GST_BUFFER_TIMESTAMP (outbuf);
 
   if (empty)
     GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_GAP);
diff --git a/gst/interleave/interleave.h b/gst/interleave/interleave.h
index fb3b274..a11bb21 100644
--- a/gst/interleave/interleave.h
+++ b/gst/interleave/interleave.h
@@ -65,10 +65,7 @@
   GstClockTime timestamp;
   guint64 offset;
 
-  gboolean segment_pending;
-  guint64 segment_position;
-  gdouble segment_rate;
-  GstSegment segment;
+  GstEvent *pending_segment;
 
   GstPadEventFunction collect_event;
 
diff --git a/gst/isomp4/Makefile.in b/gst/isomp4/Makefile.in
index f2a890a..7e80fba 100644
--- a/gst/isomp4/Makefile.in
+++ b/gst/isomp4/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -256,7 +256,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/isomp4/gstqtmoovrecover.c b/gst/isomp4/gstqtmoovrecover.c
index 194ea80..07fd35a 100644
--- a/gst/isomp4/gstqtmoovrecover.c
+++ b/gst/isomp4/gstqtmoovrecover.c
@@ -343,7 +343,7 @@
 
   switch (transition) {
     case GST_STATE_CHANGE_NULL_TO_READY:
-      qtmr->task = gst_task_new (gst_qt_moov_recover_run, qtmr);
+      qtmr->task = gst_task_new (gst_qt_moov_recover_run, qtmr, NULL);
       g_rec_mutex_init (&qtmr->task_mutex);
       gst_task_set_lock (qtmr->task, &qtmr->task_mutex);
       break;
@@ -362,7 +362,8 @@
       gst_task_join (qtmr->task);
       break;
     case GST_STATE_CHANGE_READY_TO_NULL:
-      g_assert (gst_task_get_state (qtmr->task) == GST_TASK_STOPPED);
+      if (gst_task_get_state (qtmr->task) != GST_TASK_STOPPED)
+        GST_ERROR ("task %p should be stopped by now", qtmr->task);
       gst_object_unref (qtmr->task);
       qtmr->task = NULL;
       g_rec_mutex_clear (&qtmr->task_mutex);
diff --git a/gst/isomp4/gstqtmux-doc.c b/gst/isomp4/gstqtmux-doc.c
index 986fffc..dc81bf1 100644
--- a/gst/isomp4/gstqtmux-doc.c
+++ b/gst/isomp4/gstqtmux-doc.c
@@ -61,7 +61,7 @@
  * ISO 14496-12 (except for some media specific parts).
  * In turn, the latter ISO Base Media format was further specialized as a
  * Motion JPEG-2000 file format in ISO 15444-3 (mj2mux)
- * and in various 3GPP(2) specs (gppmux).
+ * and in various 3GPP(2) specs (3gppmux).
  * The fragmented file features defined (only) in ISO Base Media are used by
  * ISMV files making up (a.o.) Smooth Streaming (ismlmux).
  *
@@ -125,7 +125,7 @@
  * ISO 14496-12 (except for some media specific parts).
  * In turn, the latter ISO Base Media format was further specialized as a
  * Motion JPEG-2000 file format in ISO 15444-3 (mj2mux)
- * and in various 3GPP(2) specs (gppmux).
+ * and in various 3GPP(2) specs (3gppmux).
  * The fragmented file features defined (only) in ISO Base Media are used by
  * ISMV files making up (a.o.) Smooth Streaming (ismlmux).
  *
@@ -162,7 +162,7 @@
  * <refsect2>
  * <title>Example pipelines</title>
  * |[
- * gst-launch v4l2src num-buffers=50 ! queue ! ffenc_h263 ! gppmux ! filesink location=video.3gp
+ * gst-launch v4l2src num-buffers=50 ! queue ! ffenc_h263 ! 3gppmux ! filesink location=video.3gp
  * ]|
  * Records a video stream captured from a v4l2 device, encodes it into H.263
  * and muxes it into an 3gp file.
@@ -189,7 +189,7 @@
  * ISO 14496-12 (except for some media specific parts).
  * In turn, the latter ISO Base Media format was further specialized as a
  * Motion JPEG-2000 file format in ISO 15444-3 (mj2mux)
- * and in various 3GPP(2) specs (gppmux).
+ * and in various 3GPP(2) specs (3gppmux).
  * The fragmented file features defined (only) in ISO Base Media are used by
  * ISMV files making up (a.o.) Smooth Streaming (ismlmux).
  *
@@ -253,7 +253,7 @@
  * ISO 14496-12 (except for some media specific parts).
  * In turn, the latter ISO Base Media format was further specialized as a
  * Motion JPEG-2000 file format in ISO 15444-3 (mj2mux)
- * and in various 3GPP(2) specs (gppmux).
+ * and in various 3GPP(2) specs (3gppmux).
  * The fragmented file features defined (only) in ISO Base Media are used by
  * ISMV files making up (a.o.) Smooth Streaming (ismlmux).
  *
diff --git a/gst/isomp4/gstqtmux.c b/gst/isomp4/gstqtmux.c
index 3c1636a..221dd06 100644
--- a/gst/isomp4/gstqtmux.c
+++ b/gst/isomp4/gstqtmux.c
@@ -252,9 +252,8 @@
 
   /* construct the element details struct */
   longname = g_strdup_printf ("%s Muxer", params->prop->long_name);
-  description = g_strdup_printf ("Multiplex audio and video into a %s file%s",
-      params->prop->long_name,
-      (params->prop->rank == GST_RANK_NONE) ? " (deprecated)" : "");
+  description = g_strdup_printf ("Multiplex audio and video into a %s file",
+      params->prop->long_name);
   gst_element_class_set_static_metadata (element_class, longname,
       "Codec/Muxer", description,
       "Thiago Sousa Santos <thiagoss@embedded.ufcg.edu.br>");
@@ -1113,24 +1112,23 @@
 
     num_tags = gst_tag_list_get_tag_size (list, GST_QT_DEMUX_PRIVATE_TAG);
     for (i = 0; i < num_tags; ++i) {
-      const GValue *val;
+      GstSample *sample = NULL;
       GstBuffer *buf;
-      GstCaps *caps = NULL;
+      const GstStructure *s;
 
-      val = gst_tag_list_get_value_index (list, GST_QT_DEMUX_PRIVATE_TAG, i);
-      buf = (GstBuffer *) gst_value_get_buffer (val);
+      if (!gst_tag_list_get_sample_index (list, GST_QT_DEMUX_PRIVATE_TAG, i,
+              &sample))
+        continue;
+      buf = gst_sample_get_buffer (sample);
 
-      /* FIXME-0.11 */
-      if (buf && (caps = NULL /*gst_buffer_get_caps (buf) */ )) {
-        GstStructure *s;
+      if (buf && (s = gst_sample_get_info (sample))) {
         const gchar *style = NULL;
         GstMapInfo map;
 
         gst_buffer_map (buf, &map, GST_MAP_READ);
         GST_DEBUG_OBJECT (qtmux,
-            "Found private tag %d/%d; size %" G_GSIZE_FORMAT ", caps %"
-            GST_PTR_FORMAT, i, num_tags, map.size, caps);
-        s = gst_caps_get_structure (caps, 0);
+            "Found private tag %d/%d; size %" G_GSIZE_FORMAT ", info %"
+            GST_PTR_FORMAT, i, num_tags, map.size, s);
         if (s && (style = gst_structure_get_string (s, "style"))) {
           /* try to prevent some style tag ending up into another variant
            * (todo: make into a list if more cases) */
@@ -1143,7 +1141,6 @@
           }
         }
         gst_buffer_unmap (buf, &map);
-        gst_caps_unref (caps);
       }
     }
   }
@@ -1177,7 +1174,7 @@
     GST_DEBUG_OBJECT (qtmux, "Formatting tags");
     gst_qt_mux_add_metadata_tags (qtmux, copy);
     gst_qt_mux_add_xmp_tags (qtmux, copy);
-    gst_tag_list_free (copy);
+    gst_tag_list_unref (copy);
   } else {
     GST_DEBUG_OBJECT (qtmux, "No tags received");
   }
@@ -2113,7 +2110,7 @@
 check_and_subtract_ts (GstQTMux * qtmux, GstClockTime * ts_a, GstClockTime ts_b)
 {
   if (G_LIKELY (GST_CLOCK_TIME_IS_VALID (*ts_a))) {
-    if (G_LIKELY (*ts_a > ts_b)) {
+    if (G_LIKELY (*ts_a >= ts_b)) {
       *ts_a -= ts_b;
     } else {
       *ts_a = 0;
diff --git a/gst/isomp4/gstqtmuxmap.c b/gst/isomp4/gstqtmuxmap.c
index 0d41eb7..29675b4 100644
--- a/gst/isomp4/gstqtmuxmap.c
+++ b/gst/isomp4/gstqtmuxmap.c
@@ -210,21 +210,6 @@
         GST_STATIC_CAPS (AMR_CAPS "; " MP3_CAPS "; " AAC_CAPS)
       }
   ,
-#ifndef GST_REMOVE_DEPRECATED
-  /* 3GPP Technical Specification 26.244 V7.3.0
-   * (extended in 3GPP2 File Formats for Multimedia Services) */
-  {
-        GST_QT_MUX_FORMAT_3GP,
-        GST_RANK_NONE,
-        "gppmux",
-        "3GPP",
-        "GstGPPMux",
-        GST_STATIC_CAPS ("video/quicktime, variant = (string) 3gpp"),
-        GST_STATIC_CAPS (H263_CAPS "; " MPEG4V_CAPS "; " H264_CAPS),
-        GST_STATIC_CAPS (AMR_CAPS "; " MP3_CAPS "; " AAC_CAPS)
-      }
-  ,
-#endif
   /* ISO 15444-3: Motion-JPEG-2000 (also ISO base media extension) */
   {
         GST_QT_MUX_FORMAT_MJ2,
diff --git a/gst/isomp4/gstrtpxqtdepay.c b/gst/isomp4/gstrtpxqtdepay.c
index 61567d7..5f02eaf 100644
--- a/gst/isomp4/gstrtpxqtdepay.c
+++ b/gst/isomp4/gstrtpxqtdepay.c
@@ -257,9 +257,6 @@
 
   gst_rtp_buffer_map (buf, GST_MAP_READ, &rtp);
 
-  if (!gst_rtp_buffer_validate (buf))
-    goto bad_packet;
-
   if (GST_BUFFER_IS_DISCONT (buf)) {
     /* discont, clear adapter and try to find a new packet start */
     gst_adapter_clear (rtpxqtdepay->adapter);
@@ -605,6 +602,7 @@
         gst_buffer_fill (outbuf, 0, payload, payload_len);
 
         gst_adapter_push (rtpxqtdepay->adapter, outbuf);
+        outbuf = NULL;
 
         if (!m)
           goto done;
@@ -624,12 +622,6 @@
   gst_rtp_buffer_unmap (&rtp);
   return outbuf;
 
-bad_packet:
-  {
-    GST_ELEMENT_WARNING (rtpxqtdepay, STREAM, DECODE,
-        ("Packet did not validate."), (NULL));
-    goto done;
-  }
 need_resync:
   {
     GST_DEBUG_OBJECT (rtpxqtdepay, "waiting for marker");
diff --git a/gst/isomp4/isomp4-plugin.c b/gst/isomp4/isomp4-plugin.c
index 9418e94..b0fe326 100644
--- a/gst/isomp4/isomp4-plugin.c
+++ b/gst/isomp4/isomp4-plugin.c
@@ -44,7 +44,7 @@
 
   /* ensure private tag is registered */
   gst_tag_register (GST_QT_DEMUX_PRIVATE_TAG, GST_TAG_FLAG_META,
-      GST_TYPE_BUFFER, "QT atom", "unparsed QT tag atom",
+      GST_TYPE_SAMPLE, "QT atom", "unparsed QT tag atom",
       gst_tag_merge_use_first);
 
   gst_tag_register (GST_QT_DEMUX_CLASSIFICATION_TAG, GST_TAG_FLAG_META,
diff --git a/gst/isomp4/qtdemux.c b/gst/isomp4/qtdemux.c
index ae3aa4c..89f8055 100644
--- a/gst/isomp4/qtdemux.c
+++ b/gst/isomp4/qtdemux.c
@@ -720,12 +720,16 @@
 
       gst_query_parse_duration (query, &fmt, NULL);
       if (fmt == GST_FORMAT_TIME) {
-        gint64 duration = -1;
+        /* First try to query upstream */
+        res = gst_pad_query_default (pad, parent, query);
+        if (!res) {
+          gint64 duration = -1;
 
-        gst_qtdemux_get_duration (qtdemux, &duration);
-        if (duration > 0) {
-          gst_query_set_duration (query, GST_FORMAT_TIME, duration);
-          res = TRUE;
+          gst_qtdemux_get_duration (qtdemux, &duration);
+          if (duration > 0) {
+            gst_query_set_duration (query, GST_FORMAT_TIME, duration);
+            res = TRUE;
+          }
         }
       }
       break;
@@ -794,7 +798,7 @@
       GST_DEBUG_OBJECT (qtdemux, "Sending tags %" GST_PTR_FORMAT,
           stream->pending_tags);
       gst_pad_push_event (stream->pad,
-          gst_event_new_tag ("GstDemuxer", stream->pending_tags));
+          gst_event_new_tag (stream->pending_tags));
       stream->pending_tags = NULL;
     }
 
@@ -802,8 +806,7 @@
       GST_DEBUG_OBJECT (qtdemux, "Sending global tags %" GST_PTR_FORMAT,
           qtdemux->tag_list);
       gst_pad_push_event (stream->pad,
-          gst_event_new_tag ("GstDemuxer",
-              gst_tag_list_copy (qtdemux->tag_list)));
+          gst_event_new_tag (gst_tag_list_ref (qtdemux->tag_list)));
       stream->send_global_tags = FALSE;
     }
   }
@@ -1419,7 +1422,7 @@
     qtdemux->streams[i]->last_ret = GST_FLOW_OK;
 
   gst_pad_start_task (qtdemux->sinkpad, (GstTaskFunction) gst_qtdemux_loop,
-      qtdemux->sinkpad);
+      qtdemux->sinkpad, NULL);
 
   GST_PAD_STREAM_UNLOCK (qtdemux->sinkpad);
 
@@ -1484,8 +1487,11 @@
     }
       if (qtdemux->pullbased) {
         res = gst_qtdemux_do_seek (qtdemux, pad, event);
-      } else if (qtdemux->state == QTDEMUX_STATE_MOVIE && qtdemux->n_streams &&
-          !qtdemux->fragmented) {
+      } else if (gst_pad_push_event (qtdemux->sinkpad, gst_event_ref (event))) {
+        GST_DEBUG_OBJECT (qtdemux, "Upstream successfully seeked");
+        res = TRUE;
+      } else if (qtdemux->state == QTDEMUX_STATE_MOVIE && qtdemux->n_streams
+          && !qtdemux->fragmented) {
         res = gst_qtdemux_do_push_seek (qtdemux, pad, event);
       } else {
         GST_DEBUG_OBJECT (qtdemux,
@@ -1654,7 +1660,8 @@
       }
 
       /* accept upstream's notion of segment and distribute along */
-      segment.time = segment.start;
+      segment.format = GST_FORMAT_TIME;
+      segment.position = segment.time = segment.start;
       segment.duration = demux->segment.duration;
       segment.base = gst_segment_to_running_time (&demux->segment,
           GST_FORMAT_TIME, demux->segment.position);
@@ -1789,7 +1796,7 @@
 gst_qtdemux_stream_free (GstQTDemux * qtdemux, QtDemuxStream * stream)
 {
   if (stream->allocator)
-    gst_allocator_unref (stream->allocator);
+    gst_object_unref (stream->allocator);
   while (stream->buffers) {
     gst_buffer_unref (GST_BUFFER_CAST (stream->buffers->data));
     stream->buffers = g_slist_delete_link (stream->buffers, stream->buffers);
@@ -1801,7 +1808,7 @@
     gst_caps_unref (stream->caps);
   g_free (stream->segments);
   if (stream->pending_tags)
-    gst_tag_list_free (stream->pending_tags);
+    gst_tag_list_unref (stream->pending_tags);
   g_free (stream->redirect_uri);
   /* free stbl sub-atoms */
   gst_qtdemux_stbl_free (stream);
@@ -1844,7 +1851,7 @@
         gst_buffer_unref (qtdemux->comp_brands);
       qtdemux->comp_brands = NULL;
       if (qtdemux->tag_list)
-        gst_tag_list_free (qtdemux->tag_list);
+        gst_tag_list_unref (qtdemux->tag_list);
       qtdemux->tag_list = NULL;
 #if 0
       if (qtdemux->element_index)
@@ -1876,20 +1883,6 @@
 }
 
 static void
-qtdemux_post_global_tags (GstQTDemux * qtdemux)
-{
-  if (qtdemux->tag_list) {
-    /* all header tags ready and parsed, push them */
-    GST_INFO_OBJECT (qtdemux, "posting global tags: %" GST_PTR_FORMAT,
-        qtdemux->tag_list);
-    /* post now, send event on pads later */
-    gst_element_post_message (GST_ELEMENT (qtdemux),
-        gst_message_new_tag (GST_OBJECT (qtdemux),
-            gst_tag_list_copy (qtdemux->tag_list)));
-  }
-}
-
-static void
 qtdemux_parse_ftyp (GstQTDemux * qtdemux, const guint8 * buffer, gint length)
 {
   /* counts as header data */
@@ -1919,7 +1912,7 @@
     if (qtdemux->tag_list) {
       /* prioritize native tags using _KEEP mode */
       gst_tag_list_insert (qtdemux->tag_list, taglist, GST_TAG_MERGE_KEEP);
-      gst_tag_list_free (taglist);
+      gst_tag_list_unref (taglist);
     } else
       qtdemux->tag_list = taglist;
   }
@@ -2806,9 +2799,6 @@
     /* digested all data, show what we have */
     ret = qtdemux_expose_streams (qtdemux);
 
-    /* Only post, event on pads is done after newsegment */
-    qtdemux_post_global_tags (qtdemux);
-
     qtdemux->state = QTDEMUX_STATE_MOVIE;
     GST_DEBUG_OBJECT (qtdemux, "switching state to STATE_MOVIE (%d)",
         qtdemux->state);
@@ -3880,12 +3870,17 @@
           gst_element_post_message (GST_ELEMENT_CAST (qtdemux),
               gst_message_new_segment_done (GST_OBJECT_CAST (qtdemux),
                   GST_FORMAT_TIME, stop));
+          gst_qtdemux_push_event (qtdemux,
+              gst_event_new_segment_done (GST_FORMAT_TIME, stop));
         } else {
           /*  For Reverse Playback */
           GST_LOG_OBJECT (qtdemux, "Sending segment done, at start of segment");
           gst_element_post_message (GST_ELEMENT_CAST (qtdemux),
               gst_message_new_segment_done (GST_OBJECT_CAST (qtdemux),
                   GST_FORMAT_TIME, qtdemux->segment.start));
+          gst_qtdemux_push_event (qtdemux,
+              gst_event_new_segment_done (GST_FORMAT_TIME,
+                  qtdemux->segment.start));
         }
       } else {
         GST_LOG_OBJECT (qtdemux, "Sending EOS at end of segment");
@@ -4095,10 +4090,6 @@
             demux->state = QTDEMUX_STATE_MOVIE;
             demux->neededbytes = next_entry_size (demux);
             demux->mdatleft = size;
-
-            /* Only post, event on pads is done after newsegment */
-            qtdemux_post_global_tags (demux);
-
           } else {
             /* no headers yet, try to get them */
             guint bs;
@@ -4237,10 +4228,6 @@
           demux->neededbytes = next_entry_size (demux);
           demux->state = QTDEMUX_STATE_MOVIE;
           demux->mdatleft = gst_adapter_available (demux->adapter);
-
-          /* Only post, event on pads is done after newsegment */
-          qtdemux_post_global_tags (demux);
-
         } else {
           GST_DEBUG_OBJECT (demux, "Carrying on normally");
           gst_adapter_flush (demux->adapter, demux->neededbytes);
@@ -4490,7 +4477,7 @@
       if (active) {
         demux->pullbased = TRUE;
         res = gst_pad_start_task (sinkpad, (GstTaskFunction) gst_qtdemux_loop,
-            sinkpad);
+            sinkpad, NULL);
       } else {
         res = gst_pad_stop_task (sinkpad);
       }
@@ -5015,7 +5002,7 @@
   }
 
   if (stream->allocator)
-    gst_allocator_unref (stream->allocator);
+    gst_object_unref (stream->allocator);
 
   if (gst_query_get_n_allocation_params (query) > 0) {
     /* try the allocator */
@@ -5181,6 +5168,8 @@
   }
 
   if (stream->pad) {
+    gchar *stream_id;
+
     GST_PAD_ELEMENT_PRIVATE (stream->pad) = stream;
 
     gst_pad_use_fixed_caps (stream->pad);
@@ -5189,6 +5178,11 @@
     gst_pad_set_active (stream->pad, TRUE);
 
     GST_DEBUG_OBJECT (qtdemux, "setting caps %" GST_PTR_FORMAT, stream->caps);
+    stream_id =
+        gst_pad_create_stream_id_printf (stream->pad,
+        GST_ELEMENT_CAST (qtdemux), "%u", stream->track_id);
+    gst_pad_push_event (stream->pad, gst_event_new_stream_start (stream_id));
+    g_free (stream_id);
     gst_pad_set_caps (stream->pad, stream->caps);
 
     GST_DEBUG_OBJECT (qtdemux, "adding pad %s %p to qtdemux %p",
@@ -5196,7 +5190,7 @@
     gst_element_add_pad (GST_ELEMENT_CAST (qtdemux), stream->pad);
 
     if (stream->pending_tags)
-      gst_tag_list_free (stream->pending_tags);
+      gst_tag_list_unref (stream->pending_tags);
     stream->pending_tags = list;
     /* global tags go on each pad anyway */
     stream->send_global_tags = TRUE;
@@ -7747,8 +7741,6 @@
   if (qtdemux->n_streams == 1 && qtdemux->streams[0]->redirect_uri != NULL) {
     GstMessage *m;
 
-    qtdemux_post_global_tags (qtdemux);
-
     GST_INFO_OBJECT (qtdemux, "Issuing a redirect due to a single track with "
         "an external content");
     m = gst_message_new_element (GST_OBJECT_CAST (qtdemux),
@@ -8469,7 +8461,7 @@
   }
 
   if (taglist)
-    gst_tag_list_free (taglist);
+    gst_tag_list_unref (taglist);
 
   gst_buffer_unref (buf);
 }
@@ -8556,7 +8548,8 @@
   GstBuffer *buf;
   gchar *media_type;
   const gchar *style;
-  GstCaps *caps;
+  GstSample *sample;
+  GstStructure *s;
   guint i;
   guint8 ndata[4];
 
@@ -8588,18 +8581,16 @@
       ndata[0], ndata[1], ndata[2], ndata[3]);
   GST_DEBUG_OBJECT (demux, "media type %s", media_type);
 
-  caps = gst_caps_new_simple (media_type, "style", G_TYPE_STRING, style, NULL);
-  // TODO conver to metadata or ???
-//   gst_buffer_set_caps (buf, caps);
-  gst_caps_unref (caps);
+  s = gst_structure_new (media_type, "style", G_TYPE_STRING, style, NULL);
+  sample = gst_sample_new (buf, NULL, NULL, s);
+  gst_buffer_unref (buf);
   g_free (media_type);
 
-  GST_DEBUG_OBJECT (demux, "adding private tag; size %d, caps %" GST_PTR_FORMAT,
-      len, caps);
+  GST_DEBUG_OBJECT (demux, "adding private tag; size %d, info %" GST_PTR_FORMAT,
+      len, s);
 
   gst_tag_list_add (demux->tag_list, GST_TAG_MERGE_APPEND,
-      GST_QT_DEMUX_PRIVATE_TAG, buf, NULL);
-  gst_buffer_unref (buf);
+      GST_QT_DEMUX_PRIVATE_TAG, sample, NULL);
 }
 
 static void
@@ -8624,8 +8615,10 @@
   }
 
   GST_DEBUG_OBJECT (qtdemux, "new tag list");
-  if (!qtdemux->tag_list)
+  if (!qtdemux->tag_list) {
     qtdemux->tag_list = gst_tag_list_new_empty ();
+    gst_tag_list_set_scope (qtdemux->tag_list, GST_TAG_SCOPE_GLOBAL);
+  }
 
   i = 0;
   while (i < G_N_ELEMENTS (add_funcs)) {
@@ -8842,8 +8835,10 @@
 {
   const gchar *fmt;
 
-  if (tags == NULL)
+  if (tags == NULL) {
     tags = gst_tag_list_new_empty ();
+    gst_tag_list_set_scope (tags, GST_TAG_SCOPE_GLOBAL);
+  }
 
   if (qtdemux->major_brand == FOURCC_mjp2)
     fmt = "Motion JPEG 2000";
@@ -8920,8 +8915,10 @@
     }
   }
   if (datetime) {
-    if (!qtdemux->tag_list)
+    if (!qtdemux->tag_list) {
       qtdemux->tag_list = gst_tag_list_new_empty ();
+      gst_tag_list_set_scope (qtdemux->tag_list, GST_TAG_SCOPE_GLOBAL);
+    }
 
     /* Use KEEP as explicit tags should have a higher priority than mvhd tag */
     gst_tag_list_add (qtdemux->tag_list, GST_TAG_MERGE_KEEP, GST_TAG_DATE_TIME,
diff --git a/gst/law/Makefile.in b/gst/law/Makefile.in
index f0e3cf4..39997fe 100644
--- a/gst/law/Makefile.in
+++ b/gst/law/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -258,7 +258,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/level/Makefile.in b/gst/level/Makefile.in
index 193d556..60c33aa 100644
--- a/gst/level/Makefile.in
+++ b/gst/level/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -247,7 +247,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/level/gstlevel.c b/gst/level/gstlevel.c
index 8107acb..5fc5be6 100644
--- a/gst/level/gstlevel.c
+++ b/gst/level/gstlevel.c
@@ -346,7 +346,6 @@
                                                                               \
   normalizer = (gdouble) (G_GINT64_CONSTANT(1) << (RESOLUTION * 2));          \
                                                                               \
-  /* oil_squaresum_shifted_s16(&squaresum,in,num); */                         \
   for (j = 0; j < num; j += channels)                                         \
   {                                                                           \
     square = ((gdouble) in[j]) * in[j];                                       \
diff --git a/gst/matroska/Makefile.in b/gst/matroska/Makefile.in
index 6a85a91..359e4aa 100644
--- a/gst/matroska/Makefile.in
+++ b/gst/matroska/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -256,7 +256,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/matroska/matroska-demux.c b/gst/matroska/matroska-demux.c
index d66769b..b2b6304 100644
--- a/gst/matroska/matroska-demux.c
+++ b/gst/matroska/matroska-demux.c
@@ -171,7 +171,7 @@
 /* stream methods */
 static void gst_matroska_demux_reset (GstElement * element);
 static gboolean perform_seek_to_offset (GstMatroskaDemux * demux,
-    guint64 offset);
+    gdouble rate, guint64 offset);
 
 /* gobject functions */
 static void gst_matroska_demux_set_property (GObject * object,
@@ -194,7 +194,7 @@
   }
 
   if (demux->common.global_tags) {
-    gst_tag_list_free (demux->common.global_tags);
+    gst_tag_list_unref (demux->common.global_tags);
     demux->common.global_tags = NULL;
   }
 
@@ -309,7 +309,7 @@
   }
 
   if (track->pending_tags)
-    gst_tag_list_free (track->pending_tags);
+    gst_tag_list_unref (track->pending_tags);
 
   if (track->index_table)
     g_array_free (track->index_table, TRUE);
@@ -436,6 +436,7 @@
   demux->last_stop_end = GST_CLOCK_TIME_NONE;
   demux->seek_block = 0;
   demux->stream_start_time = GST_CLOCK_TIME_NONE;
+  demux->to_time = GST_CLOCK_TIME_NONE;
 
   demux->common.offset = 0;
   demux->cluster_time = GST_CLOCK_TIME_NONE;
@@ -444,6 +445,8 @@
   demux->index_offset = 0;
   demux->seekable = FALSE;
   demux->need_segment = FALSE;
+  demux->requested_seek_time = GST_CLOCK_TIME_NONE;
+  demux->seek_offset = -1;
   demux->building_index = FALSE;
   if (demux->seek_event) {
     gst_event_unref (demux->seek_event);
@@ -466,9 +469,10 @@
 #endif
 
   if (demux->common.global_tags) {
-    gst_tag_list_free (demux->common.global_tags);
+    gst_tag_list_unref (demux->common.global_tags);
   }
   demux->common.global_tags = gst_tag_list_new_empty ();
+  gst_tag_list_set_scope (demux->common.global_tags, GST_TAG_SCOPE_GLOBAL);
 
   if (demux->common.cached_buffer) {
     if (demux->common.cached_data) {
@@ -481,7 +485,7 @@
 
   /* free chapters TOC if any */
   if (demux->common.toc) {
-    gst_toc_free (demux->common.toc);
+    gst_toc_unref (demux->common.toc);
     demux->common.toc = NULL;
   }
 
@@ -531,6 +535,7 @@
   guint16 riff_audio_fmt = 0;
   GstTagList *list = NULL;
   gchar *codec = NULL;
+  gchar *stream_id;
 
   DEBUG_ELEMENT_START (demux, ebml, "TrackEntry");
 
@@ -555,6 +560,8 @@
       GST_MATROSKA_TRACK_ENABLED | GST_MATROSKA_TRACK_DEFAULT |
       GST_MATROSKA_TRACK_LACING;
   context->last_flow = GST_FLOW_OK;
+  context->from_time = GST_CLOCK_TIME_NONE;
+  context->from_offset = -1;
   context->to_offset = G_MAXINT64;
   context->alignment = 1;
   demux->common.num_streams++;
@@ -1329,7 +1336,14 @@
 
   gst_pad_use_fixed_caps (context->pad);
   gst_pad_set_active (context->pad, TRUE);
+
+  stream_id =
+      gst_pad_create_stream_id_printf (context->pad, GST_ELEMENT_CAST (demux),
+      "%u", context->uid);
+  gst_pad_push_event (context->pad, gst_event_new_stream_start (stream_id));
+  g_free (stream_id);
   gst_pad_set_caps (context->pad, context->caps);
+
   gst_element_add_pad (GST_ELEMENT (demux), context->pad);
 
   g_free (padname);
@@ -1356,6 +1370,7 @@
 
       gst_query_parse_position (query, &format, NULL);
 
+      res = TRUE;
       if (format == GST_FORMAT_TIME) {
         GST_OBJECT_LOCK (demux);
         if (context)
@@ -1376,9 +1391,9 @@
       } else {
         GST_DEBUG_OBJECT (demux,
             "only position query in TIME and DEFAULT format is supported");
+        res = FALSE;
       }
 
-      res = TRUE;
       break;
     }
     case GST_QUERY_DURATION:
@@ -1387,6 +1402,7 @@
 
       gst_query_parse_duration (query, &format, NULL);
 
+      res = TRUE;
       if (format == GST_FORMAT_TIME) {
         GST_OBJECT_LOCK (demux);
         gst_query_set_duration (query, GST_FORMAT_TIME,
@@ -1401,9 +1417,8 @@
       } else {
         GST_DEBUG_OBJECT (demux,
             "only duration query in TIME and DEFAULT format is supported");
+        res = FALSE;
       }
-
-      res = TRUE;
       break;
     }
 
@@ -1430,25 +1445,13 @@
       GST_OBJECT_UNLOCK (demux);
       break;
     }
-
-    case GST_QUERY_TOC:
-    {
-      GstToc *toc;
-
-      GST_OBJECT_LOCK (demux);
-      if (demux->common.toc)
-        toc = demux->common.toc;
-      else
-        toc = gst_toc_new ();
-      gst_query_set_toc (query, toc, 0);
-      res = TRUE;
-      if (!demux->common.toc)
-        gst_toc_free (toc);
-      GST_OBJECT_UNLOCK (demux);
-      break;
-    }
     default:
-      res = gst_pad_query_default (pad, (GstObject *) demux, query);
+      if (pad)
+        res = gst_pad_query_default (pad, (GstObject *) demux, query);
+      else
+        res =
+            GST_ELEMENT_CLASS (parent_class)->query (GST_ELEMENT_CAST (demux),
+            query);
       break;
   }
 
@@ -1502,7 +1505,7 @@
           GST_PTR_FORMAT, stream->pending_tags,
           GST_DEBUG_PAD_NAME (stream->pad), stream->pending_tags);
       gst_pad_push_event (stream->pad,
-          gst_event_new_tag ("GstDemuxer", stream->pending_tags));
+          gst_event_new_tag (stream->pending_tags));
       stream->pending_tags = NULL;
     }
   }
@@ -1514,7 +1517,7 @@
     GST_DEBUG_OBJECT (demux, "Sending global_tags %p : %" GST_PTR_FORMAT,
         demux->common.global_tags, demux->common.global_tags);
 
-    tag_event = gst_event_new_tag ("GstDemuxer", demux->common.global_tags);
+    tag_event = gst_event_new_tag (demux->common.global_tags);
 
     for (i = 0; i < demux->common.src->len; i++) {
       GstMatroskaTrackContext *stream;
@@ -1552,26 +1555,30 @@
 
 static gboolean
 gst_matroska_demux_move_to_entry (GstMatroskaDemux * demux,
-    GstMatroskaIndex * entry, gboolean reset)
+    GstMatroskaIndex * entry, gboolean reset, gboolean update)
 {
   gint i;
 
   GST_OBJECT_LOCK (demux);
 
-  /* seek (relative to matroska segment) */
-  /* position might be invalid; will error when streaming resumes ... */
-  demux->common.offset = entry->pos + demux->common.ebml_segment_start;
+  if (update) {
+    /* seek (relative to matroska segment) */
+    /* position might be invalid; will error when streaming resumes ... */
+    demux->common.offset = entry->pos + demux->common.ebml_segment_start;
+    demux->next_cluster_offset = 0;
 
-  GST_DEBUG_OBJECT (demux, "Seeked to offset %" G_GUINT64_FORMAT ", block %d, "
-      "time %" GST_TIME_FORMAT, entry->pos + demux->common.ebml_segment_start,
-      entry->block, GST_TIME_ARGS (entry->time));
+    GST_DEBUG_OBJECT (demux,
+        "Seeked to offset %" G_GUINT64_FORMAT ", block %d, " "time %"
+        GST_TIME_FORMAT, entry->pos + demux->common.ebml_segment_start,
+        entry->block, GST_TIME_ARGS (entry->time));
 
-  /* update the time */
-  gst_matroska_read_common_reset_streams (&demux->common, entry->time, TRUE);
-  demux->common.segment.position = entry->time;
-  demux->seek_block = entry->block;
-  demux->seek_first = TRUE;
-  demux->last_stop_end = GST_CLOCK_TIME_NONE;
+    /* update the time */
+    gst_matroska_read_common_reset_streams (&demux->common, entry->time, TRUE);
+    demux->common.segment.position = entry->time;
+    demux->seek_block = entry->block;
+    demux->seek_first = TRUE;
+    demux->last_stop_end = GST_CLOCK_TIME_NONE;
+  }
 
   for (i = 0; i < demux->common.src->len; i++) {
     GstMatroskaTrackContext *stream = g_ptr_array_index (demux->common.src, i);
@@ -1583,6 +1590,7 @@
         stream->to_offset = stream->from_offset;
     }
     stream->from_offset = -1;
+    stream->from_time = GST_CLOCK_TIME_NONE;
   }
 
   GST_OBJECT_UNLOCK (demux);
@@ -1961,13 +1969,20 @@
     GST_DEBUG_OBJECT (demux, "configuring seek");
     gst_segment_do_seek (&seeksegment, rate, format, flags,
         cur_type, cur, stop_type, stop, &update);
-    /* compensate for clip start time */
+    /* compensate for clip start time, but only for SET seeks,
+     * otherwise it is already part of the segments */
     if (GST_CLOCK_TIME_IS_VALID (demux->stream_start_time)) {
-      seeksegment.position += demux->stream_start_time;
-      seeksegment.start += demux->stream_start_time;
-      if (GST_CLOCK_TIME_IS_VALID (seeksegment.stop))
+      if (cur_type == GST_SEEK_TYPE_SET) {
+        if (rate > 0.0)
+          seeksegment.position += demux->stream_start_time;
+        seeksegment.start += demux->stream_start_time;
+      }
+      if (stop_type == GST_SEEK_TYPE_SET
+          && GST_CLOCK_TIME_IS_VALID (seeksegment.stop)) {
+        if (rate < 0.0)
+          seeksegment.position += demux->stream_start_time;
         seeksegment.stop += demux->stream_start_time;
-      /* note that time should stay at indicated position */
+      }
     }
   }
 
@@ -1980,15 +1995,11 @@
   after = ! !(flags & GST_SEEK_FLAG_SNAP_AFTER);
   before = ! !(flags & GST_SEEK_FLAG_SNAP_BEFORE);
 
-  GST_DEBUG_OBJECT (demux, "New segment %" GST_SEGMENT_FORMAT, &seeksegment);
+  /* always do full update if flushing,
+   * otherwise problems might arise downstream with missing keyframes etc */
+  update = update || flush;
 
-  if (!update) {
-    /* only have to update some segment,
-     * but also still have to honour flush and so on */
-    GST_DEBUG_OBJECT (demux, "... no update");
-    /* bad goto, bad ... */
-    goto next;
-  }
+  GST_DEBUG_OBJECT (demux, "New segment %" GST_SEGMENT_FORMAT, &seeksegment);
 
   /* check sanity before we start flushing and all that */
   snap_next = after && !before;
@@ -2004,24 +2015,31 @@
       GST_DEBUG_OBJECT (demux, "No matching seek entry in index");
       GST_OBJECT_UNLOCK (demux);
       return FALSE;
+    } else if (rate < 0.0) {
+      /* FIXME: We should build an index during playback or when scanning
+       * that can be used here. The reverse playback code requires seek_index
+       * and seek_entry to be set!
+       */
+      GST_DEBUG_OBJECT (demux,
+          "No matching seek entry in index, needed for reverse playback");
+      GST_OBJECT_UNLOCK (demux);
+      return FALSE;
     }
   }
   GST_DEBUG_OBJECT (demux, "Seek position looks sane");
   GST_OBJECT_UNLOCK (demux);
 
-  if (demux->streaming) {
-    GST_OBJECT_LOCK (demux);
-    /* now update the real segment info */
-    GST_DEBUG_OBJECT (demux, "Committing new seek segment");
-    memcpy (&demux->common.segment, &seeksegment, sizeof (GstSegment));
-    GST_OBJECT_UNLOCK (demux);
-    /* need to seek to cluster start to pick up cluster time */
-    /* upstream takes care of flushing and all that
-     * ... and segment event handling takes care of the rest */
-    return perform_seek_to_offset (demux,
-        entry->pos + demux->common.ebml_segment_start);
+  if (!update) {
+    /* only have to update some segment,
+     * but also still have to honour flush and so on */
+    GST_DEBUG_OBJECT (demux, "... no update");
+    /* bad goto, bad ... */
+    goto next;
   }
 
+  if (demux->streaming)
+    goto finish;
+
 next:
   if (flush) {
     GST_DEBUG_OBJECT (demux, "Starting flush");
@@ -2062,6 +2080,7 @@
     }
   }
 
+finish:
   if (keyunit) {
     GST_DEBUG_OBJECT (demux, "seek to key unit, adjusting segment start from %"
         GST_TIME_FORMAT " to %" GST_TIME_FORMAT,
@@ -2071,6 +2090,20 @@
     seeksegment.time = seeksegment.start - demux->stream_start_time;
   }
 
+  if (demux->streaming) {
+    GST_OBJECT_LOCK (demux);
+    /* track real position we should start at */
+    GST_DEBUG_OBJECT (demux, "storing segment start");
+    demux->requested_seek_time = seeksegment.position;
+    demux->seek_offset = entry->pos + demux->common.ebml_segment_start;
+    GST_OBJECT_UNLOCK (demux);
+    /* need to seek to cluster start to pick up cluster time */
+    /* upstream takes care of flushing and all that
+     * ... and newsegment event handling takes care of the rest */
+    return perform_seek_to_offset (demux, rate,
+        entry->pos + demux->common.ebml_segment_start);
+  }
+
 exit:
   if (flush) {
     GST_DEBUG_OBJECT (demux, "Stopping flush");
@@ -2085,7 +2118,7 @@
   GST_OBJECT_UNLOCK (demux);
 
   /* update some (segment) state */
-  if (update && !gst_matroska_demux_move_to_entry (demux, entry, TRUE))
+  if (!gst_matroska_demux_move_to_entry (demux, entry, TRUE, update))
     goto seek_error;
 
   /* notify start of new segment */
@@ -2100,14 +2133,19 @@
   GST_OBJECT_LOCK (demux);
   if (demux->new_segment)
     gst_event_unref (demux->new_segment);
+
   /* On port from 0.10, discarded !update (for segment.update) here, FIXME? */
   demux->new_segment = gst_event_new_segment (&demux->common.segment);
+  if (demux->common.segment.rate < 0 && demux->common.segment.stop == -1)
+    demux->to_time = demux->common.segment.position;
+  else
+    demux->to_time = GST_CLOCK_TIME_NONE;
   GST_OBJECT_UNLOCK (demux);
 
   /* restart our task since it might have been stopped when we did the
    * flush. */
   gst_pad_start_task (demux->common.sinkpad,
-      (GstTaskFunction) gst_matroska_demux_loop, demux->common.sinkpad);
+      (GstTaskFunction) gst_matroska_demux_loop, demux->common.sinkpad, NULL);
 
   /* streaming can continue now */
   if (pad_locked) {
@@ -2199,7 +2237,7 @@
     if (!building_index) {
       /* seek to the first subindex or legacy index */
       GST_INFO_OBJECT (demux, "Seeking to Cues at %" G_GUINT64_FORMAT, offset);
-      return perform_seek_to_offset (demux, offset);
+      return perform_seek_to_offset (demux, rate, offset);
     }
 
     /* well, we are handling it already */
@@ -2272,7 +2310,7 @@
             GST_WARNING_OBJECT (demux, "no TOC entry with given UID: %s", uid);
             res = FALSE;
           } else {
-            gst_toc_entry_get_start_stop (entry, &start_pos, NULL);
+            gst_toc_entry_get_start_stop_times (entry, &start_pos, NULL);
             GST_OBJECT_UNLOCK (demux);
             seek_event = gst_event_new_seek (1.0,
                 GST_FORMAT_TIME,
@@ -2349,7 +2387,7 @@
 
     entry = &g_array_index (demux->seek_index, GstMatroskaIndex,
         --demux->seek_entry);
-    if (!gst_matroska_demux_move_to_entry (demux, entry, FALSE))
+    if (!gst_matroska_demux_move_to_entry (demux, entry, FALSE, TRUE))
       goto exit;
 
     ret = GST_FLOW_OK;
@@ -2492,24 +2530,19 @@
         GST_CLOCK_TIME_IS_VALID (demux->common.segment.position) &&
         demux->common.segment.position > demux->common.segment.start &&
         context->pos + (GST_SECOND / 2) < demux->common.segment.position) {
-      gint64 new_start;
-      GstSegment segment;
+
       GstEvent *event;
+      guint64 start = context->pos;
+      guint64 stop = demux->common.segment.position - (GST_SECOND / 2);
 
-      new_start = demux->common.segment.position - (GST_SECOND / 2);
-      if (GST_CLOCK_TIME_IS_VALID (demux->common.segment.stop))
-        new_start = MIN (new_start, demux->common.segment.stop);
       GST_DEBUG_OBJECT (demux,
-          "Synchronizing stream %d with others by advancing time " "from %"
+          "Synchronizing stream %d with other by advancing time from %"
           GST_TIME_FORMAT " to %" GST_TIME_FORMAT, stream_nr,
-          GST_TIME_ARGS (context->pos), GST_TIME_ARGS (new_start));
+          GST_TIME_ARGS (start), GST_TIME_ARGS (stop));
 
-      context->pos = new_start;
+      context->pos = stop;
 
-      /* advance stream time */
-      segment = demux->common.segment;
-      segment.position = new_start;
-      event = gst_event_new_segment (&segment);
+      event = gst_event_new_gap (start, stop - start);
       GST_OBJECT_UNLOCK (demux);
       gst_pad_push_event (context->pad, event);
       GST_OBJECT_LOCK (demux);
@@ -2950,6 +2983,8 @@
 {
   gchar *tag;
 
+  g_return_val_if_fail (text != NULL, FALSE);
+
   /* yes, this might all lead to false positives ... */
   tag = (gchar *) text;
   while ((tag = strchr (tag, '<'))) {
@@ -2988,7 +3023,7 @@
 
   sub_stream = (GstMatroskaTrackSubtitleContext *) stream;
 
-  if (!gst_buffer_map (*buf, &map, GST_MAP_READ))
+  if (!gst_buffer_get_size (*buf) || !gst_buffer_map (*buf, &map, GST_MAP_READ))
     return GST_FLOW_OK;
 
   if (!sub_stream->invalid_utf8) {
@@ -3421,30 +3456,30 @@
     /* need to refresh segment info ASAP */
     if (GST_CLOCK_TIME_IS_VALID (lace_time) && demux->need_segment) {
       GstSegment *segment = &demux->common.segment;
-      guint64 segment_duration = 0;
+      guint64 clace_time;
 
-      GST_DEBUG_OBJECT (demux,
-          "generating segment starting at %" GST_TIME_FORMAT,
-          GST_TIME_ARGS (lace_time));
       if (!GST_CLOCK_TIME_IS_VALID (demux->stream_start_time)) {
         demux->stream_start_time = lace_time;
         GST_DEBUG_OBJECT (demux,
             "Setting stream start time to %" GST_TIME_FORMAT,
             GST_TIME_ARGS (lace_time));
       }
-      if (demux->common.segment.start == 0) {
-        /* set segment fields only if they weren't already set by seek handling
-         * code
-         */
-        if (GST_CLOCK_TIME_IS_VALID (segment->stop))
-          segment_duration = segment->stop - segment->start;
-        else if (GST_CLOCK_TIME_IS_VALID (segment->position))
-          segment_duration = segment->position - segment->start;
-        segment->base += segment_duration / fabs (segment->rate);
-        segment->start = MAX (lace_time, demux->stream_start_time);
-        segment->stop = GST_CLOCK_TIME_NONE;
-        segment->position = segment->start - demux->stream_start_time;
+      clace_time = MAX (lace_time, demux->stream_start_time);
+      if (GST_CLOCK_TIME_IS_VALID (demux->common.segment.position) &&
+          demux->common.segment.position != 0) {
+        GST_DEBUG_OBJECT (demux,
+            "using stored seek position %" GST_TIME_FORMAT,
+            GST_TIME_ARGS (demux->common.segment.position));
+        clace_time = demux->common.segment.position + demux->stream_start_time;
+        segment->position = GST_CLOCK_TIME_NONE;
       }
+      segment->start = clace_time;
+      segment->stop = GST_CLOCK_TIME_NONE;
+      segment->time = segment->start - demux->stream_start_time;
+      segment->position = segment->start - demux->stream_start_time;
+      GST_DEBUG_OBJECT (demux,
+          "generated segment starting at %" GST_TIME_FORMAT ": %"
+          GST_SEGMENT_FORMAT, GST_TIME_ARGS (lace_time), segment);
       /* now convey our segment notion downstream */
       gst_matroska_demux_send_event (demux, gst_event_new_segment (segment));
       demux->need_segment = FALSE;
@@ -3555,7 +3590,9 @@
           gst_buffer_unref (sub);
           goto eos;
         }
-        if (offset >= stream->to_offset) {
+        if (offset >= stream->to_offset
+            || (GST_CLOCK_TIME_IS_VALID (demux->to_time)
+                && lace_time > demux->to_time)) {
           GST_DEBUG_OBJECT (demux, "Stream %d after playback section",
               stream->index);
           gst_buffer_unref (sub);
@@ -3703,6 +3740,7 @@
       sub = gst_matroska_demux_align_buffer (demux, sub, stream->alignment);
 
       ret = gst_pad_push (stream->pad, sub);
+
       if (demux->common.segment.rate < 0) {
         if (lace_time > demux->common.segment.stop && ret == GST_FLOW_EOS) {
           /* In reverse playback we can get a GST_FLOW_EOS when
@@ -4372,9 +4410,6 @@
             if (demux->common.toc) {
               gst_matroska_demux_send_event (demux,
                   gst_event_new_toc (demux->common.toc, FALSE));
-              gst_element_post_message (GST_ELEMENT_CAST (demux),
-                  gst_message_new_toc (GST_OBJECT_CAST (demux),
-                      demux->common.toc, FALSE));
             }
           } else
             GST_READ_CHECK (gst_matroska_demux_flush (demux, read));
@@ -4603,6 +4638,8 @@
         gst_element_post_message (GST_ELEMENT (demux),
             gst_message_new_segment_done (GST_OBJECT (demux), GST_FORMAT_TIME,
                 stop));
+        gst_matroska_demux_send_event (demux,
+            gst_event_new_segment_done (GST_FORMAT_TIME, stop));
       } else {
         push_eos = TRUE;
       }
@@ -4629,7 +4666,7 @@
  * Create and push a flushing seek event upstream
  */
 static gboolean
-perform_seek_to_offset (GstMatroskaDemux * demux, guint64 offset)
+perform_seek_to_offset (GstMatroskaDemux * demux, gdouble rate, guint64 offset)
 {
   GstEvent *event;
   gboolean res = 0;
@@ -4637,7 +4674,7 @@
   GST_DEBUG_OBJECT (demux, "Seeking to %" G_GUINT64_FORMAT, offset);
 
   event =
-      gst_event_new_seek (1.0, GST_FORMAT_BYTES,
+      gst_event_new_seek (rate, GST_FORMAT_BYTES,
       GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE, GST_SEEK_TYPE_SET, offset,
       GST_SEEK_TYPE_NONE, -1);
 
@@ -4733,6 +4770,11 @@
       gst_adapter_clear (demux->common.adapter);
       /* and some streaming setup */
       demux->common.offset = segment->start;
+      /* accumulate base based on current position */
+      if (GST_CLOCK_TIME_IS_VALID (demux->common.segment.position))
+        demux->common.segment.base +=
+            (MAX (demux->common.segment.position, demux->stream_start_time)
+            - demux->stream_start_time) / fabs (demux->common.segment.rate);
       /* do not know where we are;
        * need to come across a cluster and generate segment */
       demux->common.segment.position = GST_CLOCK_TIME_NONE;
@@ -4741,6 +4783,15 @@
       demux->need_segment = TRUE;
       /* but keep some of the upstream segment */
       demux->common.segment.rate = segment->rate;
+      /* also check if need to keep some of the requested seek position */
+      if (demux->seek_offset == segment->start) {
+        GST_DEBUG_OBJECT (demux, "position matches requested seek");
+        demux->common.segment.position = demux->requested_seek_time;
+      } else {
+        GST_DEBUG_OBJECT (demux, "unexpected segment position");
+      }
+      demux->requested_seek_time = GST_CLOCK_TIME_NONE;
+      demux->seek_offset = -1;
       GST_OBJECT_UNLOCK (demux);
     exit:
       /* chain will send initial segment after pads have been added,
@@ -4822,7 +4873,7 @@
       if (active) {
         /* if we have a scheduler we can start the task */
         gst_pad_start_task (sinkpad, (GstTaskFunction) gst_matroska_demux_loop,
-            sinkpad);
+            sinkpad, NULL);
       } else {
         gst_pad_stop_task (sinkpad);
       }
@@ -5174,7 +5225,8 @@
       }
 
       if (videocontext->parent.flags & GST_MATROSKA_VIDEOTRACK_INTERLACED)
-        gst_structure_set (structure, "interlaced", G_TYPE_BOOLEAN, TRUE, NULL);
+        gst_structure_set (structure, "interlace-mode", G_TYPE_STRING,
+            "mixed", NULL);
     }
 
     caps = gst_caps_simplify (caps);
@@ -5354,11 +5406,11 @@
       auds.rate = GST_READ_UINT32_LE (data + 4);
       auds.av_bps = GST_READ_UINT32_LE (data + 8);
       auds.blockalign = GST_READ_UINT16_LE (data + 12);
-      auds.size = GST_READ_UINT16_LE (data + 16);
+      auds.bits_per_sample = GST_READ_UINT16_LE (data + 16);
 
       /* 18 is the waveformatex size */
       codec_data = gst_buffer_new_wrapped_full (GST_MEMORY_FLAG_READONLY,
-          data + 18, auds.size, 0, auds.size, NULL, NULL);
+          data + 18, auds.bits_per_sample, 0, auds.bits_per_sample, NULL, NULL);
 
       if (riff_audio_fmt)
         *riff_audio_fmt = auds.format;
diff --git a/gst/matroska/matroska-demux.h b/gst/matroska/matroska-demux.h
index 07038f6..0376c8a 100644
--- a/gst/matroska/matroska-demux.h
+++ b/gst/matroska/matroska-demux.h
@@ -72,6 +72,8 @@
   GstClockTime             last_stop_end;
   GstClockTime             stream_start_time;
 
+  /* Stop time for reverse playback */
+  GstClockTime             to_time;
   GstEvent                *new_segment;
 
   /* some state saving */
@@ -79,6 +81,8 @@
   guint64                  cluster_offset;
   guint64                  first_cluster_offset;
   guint64                  next_cluster_offset;
+  GstClockTime             requested_seek_time;
+  guint64                  seek_offset;
 
   /* index stuff */
   gboolean                 seekable;
diff --git a/gst/matroska/matroska-mux.c b/gst/matroska/matroska-mux.c
index 91d1a1c..1a60eeb 100644
--- a/gst/matroska/matroska-mux.c
+++ b/gst/matroska/matroska-mux.c
@@ -647,7 +647,7 @@
   mux->tags_pos = 0;
 
   /* reset chapters */
-  gst_toc_setter_reset_toc (GST_TOC_SETTER (mux));
+  gst_toc_setter_reset (GST_TOC_SETTER (mux));
 
   mux->chapters_pos = 0;
 }
@@ -798,7 +798,7 @@
       break;
     }
     case GST_EVENT_TOC:{
-      GstToc *toc;
+      GstToc *toc, *old_toc;
 
       if (mux->chapters_pos > 0)
         break;
@@ -807,13 +807,15 @@
       gst_event_parse_toc (event, &toc, NULL);
 
       if (toc != NULL) {
-        if (gst_toc_setter_get_toc (GST_TOC_SETTER (mux)) != NULL) {
-          gst_toc_setter_reset_toc (GST_TOC_SETTER (mux));
-          GST_INFO_OBJECT (pad, "Replacing TOC with a new one");
+        old_toc = gst_toc_setter_get_toc (GST_TOC_SETTER (mux));
+        if (old_toc != NULL) {
+          if (old_toc != toc)
+            GST_INFO_OBJECT (pad, "Replacing TOC with a new one");
+          gst_toc_unref (old_toc);
         }
 
         gst_toc_setter_set_toc (GST_TOC_SETTER (mux), toc);
-        gst_toc_free (toc);
+        gst_toc_unref (toc);
       }
 
       gst_event_unref (event);
@@ -2336,6 +2338,7 @@
         context->codec_priv, context->codec_priv_size);
 }
 
+#if 0
 static void
 gst_matroska_mux_write_chapter_title (const gchar * title, GstEbmlWrite * ebml)
 {
@@ -2383,7 +2386,7 @@
   }
 
   uid = gst_matroska_mux_create_uid ();
-  gst_toc_entry_get_start_stop (entry, &start, &stop);
+  gst_toc_entry_get_start_stop_times (entry, &start, &stop);
 
   master_chapteratom =
       gst_ebml_write_master_start (ebml, GST_MATROSKA_ID_CHAPTERATOM);
@@ -2428,7 +2431,7 @@
   GList *cur;
   GstTocEntry *subentry;
 
-  cur = entry->subentries;
+  cur = gst_toc_entry_get_sub_entries (entry);
   while (cur != NULL) {
     subentry = cur->data;
     gst_matroska_mux_write_chapter (mux, entry, subentry, ebml, master_chapters,
@@ -2440,6 +2443,7 @@
   if (G_LIKELY (master_edition != 0))
     gst_ebml_write_master_finish (ebml, master_edition);
 }
+#endif
 
 /**
  * gst_matroska_mux_start:
@@ -2468,6 +2472,9 @@
   GstClockTime duration = 0;
   guint32 segment_uid[4];
   GTimeVal time = { 0, 0 };
+#if 0
+  GstToc *toc;
+#endif
 
   /* if not streaming, check if downstream is seekable */
   if (!mux->streamable) {
@@ -2619,39 +2626,40 @@
   }
   gst_ebml_write_master_finish (ebml, master);
 
+  /* FIXME: Check if we get a TOC that is supported by Matroska
+   * and clean up the code below */
+#if 0
   /* chapters */
-  if (gst_toc_setter_get_toc (GST_TOC_SETTER (mux)) != NULL && !mux->streamable) {
+  toc = gst_toc_setter_get_toc (GST_TOC_SETTER (mux));
+  if (toc != NULL && !mux->streamable) {
     guint64 master_chapters = 0;
     GstTocEntry *toc_entry;
-    const GstToc *toc;
     GList *cur, *to_write = NULL;
     gint64 start, stop;
 
     GST_DEBUG ("Writing chapters");
 
-    toc = gst_toc_setter_get_toc (GST_TOC_SETTER (mux));
-
     /* check whether we have editions or chapters at the root level */
     toc_entry = toc->entries->data;
 
     if (toc_entry->type != GST_TOC_ENTRY_TYPE_EDITION) {
       toc_entry = gst_toc_entry_new (GST_TOC_ENTRY_TYPE_EDITION, "");
-      gst_toc_entry_set_start_stop (toc_entry, -1, -1);
+      gst_toc_entry_set_start_stop_times (toc_entry, -1, -1);
 
       /* aggregate all chapters without root edition */
-      cur = toc->entries;
+      cur = gst_toc_get_entries (toc);
       while (cur != NULL) {
         toc_entry->subentries =
             g_list_prepend (toc_entry->subentries, cur->data);
         cur = cur->next;
       }
 
-      gst_toc_entry_get_start_stop (((GstTocEntry *) toc_entry->subentries->
-              data), &start, NULL);
+      gst_toc_entry_get_start_stop_times (((GstTocEntry *)
+              toc_entry->subentries->data), &start, NULL);
       toc_entry->subentries = g_list_reverse (toc_entry->subentries);
-      gst_toc_entry_get_start_stop (((GstTocEntry *) toc_entry->subentries->
-              data), NULL, &stop);
-      gst_toc_entry_set_start_stop (toc_entry, start, stop);
+      gst_toc_entry_get_start_stop_times (((GstTocEntry *)
+              toc_entry->subentries->data), NULL, &stop);
+      gst_toc_entry_set_start_stop_times (toc_entry, start, stop);
 
       to_write = g_list_append (to_write, toc_entry);
     } else {
@@ -2676,13 +2684,19 @@
     if (toc_entry != NULL) {
       g_list_free (toc_entry->subentries);
       toc_entry->subentries = NULL;
-      gst_toc_entry_free (toc_entry);
+      gst_toc_entry_unref (toc_entry);
       g_list_free (to_write);
     }
   }
+#endif
 
   /* lastly, flush the cache */
   gst_ebml_write_flush_cache (ebml, FALSE, 0);
+
+#if 0
+  if (toc != NULL)
+    gst_toc_unref (toc);
+#endif
 }
 
 static void
@@ -2744,6 +2758,7 @@
   }
 }
 
+#if 0
 static void
 gst_matroska_mux_write_toc_entry_tags (GstMatroskaMux * mux,
     const GstTocEntry * entry, guint64 * master_tags)
@@ -2782,6 +2797,7 @@
     cur = cur->next;
   }
 }
+#endif
 
 /**
  * gst_matroska_mux_finish:
@@ -2838,12 +2854,15 @@
   if ((tags != NULL && !gst_tag_list_is_empty (tags))
       || gst_toc_setter_get_toc (GST_TOC_SETTER (mux)) != NULL) {
     guint64 master_tags = 0, master_tag;
-    GList *cur;
+#if 0
     const GstToc *toc;
+#endif
 
     GST_DEBUG_OBJECT (mux, "Writing tags");
 
+#if 0
     toc = gst_toc_setter_get_toc (GST_TOC_SETTER (mux));
+#endif
 
     if (tags != NULL) {
       /* TODO: maybe limit via the TARGETS id by looking at the source pad */
@@ -2853,13 +2872,15 @@
 
       if (tags != NULL)
         gst_tag_list_foreach (tags, gst_matroska_mux_write_simple_tag, ebml);
+#if 0
       if (toc != NULL)
         gst_tag_list_foreach (toc->tags, gst_matroska_mux_write_simple_tag,
             ebml);
+#endif
 
       gst_ebml_write_master_finish (ebml, master_tag);
     }
-
+#if 0
     if (toc != NULL) {
       cur = toc->entries;
       while (cur != NULL) {
@@ -2867,6 +2888,7 @@
         cur = cur->next;
       }
     }
+#endif
 
     if (master_tags != 0)
       gst_ebml_write_master_finish (ebml, master_tags);
diff --git a/gst/matroska/matroska-parse.c b/gst/matroska/matroska-parse.c
index c7acb89..7f42925 100644
--- a/gst/matroska/matroska-parse.c
+++ b/gst/matroska/matroska-parse.c
@@ -151,7 +151,7 @@
   }
 
   if (parse->common.global_tags) {
-    gst_tag_list_free (parse->common.global_tags);
+    gst_tag_list_unref (parse->common.global_tags);
     parse->common.global_tags = NULL;
   }
 
@@ -256,7 +256,7 @@
   }
 
   if (track->pending_tags)
-    gst_tag_list_free (track->pending_tags);
+    gst_tag_list_unref (track->pending_tags);
 
   if (track->index_table)
     g_array_free (track->index_table, TRUE);
@@ -370,7 +370,7 @@
 #endif
 
   if (parse->common.global_tags) {
-    gst_tag_list_free (parse->common.global_tags);
+    gst_tag_list_unref (parse->common.global_tags);
   }
   parse->common.global_tags = gst_tag_list_new_empty ();
 
@@ -2984,6 +2984,8 @@
         gst_element_post_message (GST_ELEMENT (parse),
             gst_message_new_segment_done (GST_OBJECT (parse), GST_FORMAT_TIME,
                 stop));
+        gst_matroska_parse_send_event (parse,
+            gst_event_new_segment_done (GST_FORMAT_TIME, stop));
       } else {
         push_eos = TRUE;
       }
diff --git a/gst/matroska/matroska-read-common.c b/gst/matroska/matroska-read-common.c
index 3a2c8f8..cd4d535 100644
--- a/gst/matroska/matroska-read-common.c
+++ b/gst/matroska/matroska-read-common.c
@@ -437,9 +437,9 @@
   if (common->global_tags) {
     /* nothing sent yet, add to cache */
     gst_tag_list_insert (common->global_tags, taglist, GST_TAG_MERGE_APPEND);
-    gst_tag_list_free (taglist);
+    gst_tag_list_unref (taglist);
   } else {
-    GstEvent *tag_event = gst_event_new_tag ("GstDemuxer", taglist);
+    GstEvent *tag_event = gst_event_new_tag (taglist);
     gint i;
 
     /* hm, already sent, no need to cache and wait anymore */
@@ -688,6 +688,7 @@
   }
 
   taglist = gst_tag_list_new_empty ();
+  gst_tag_list_set_scope (taglist, GST_TAG_SCOPE_GLOBAL);
 
   while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
     if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
@@ -712,7 +713,7 @@
     gst_matroska_read_common_found_global_tag (common, el, taglist);
   } else {
     GST_DEBUG_OBJECT (common, "No valid attachments found");
-    gst_tag_list_free (taglist);
+    gst_tag_list_unref (taglist);
   }
 
   common->attachments_parsed = TRUE;
@@ -729,25 +730,30 @@
   guint64 tgt;
   GArray *targets;
   GList *cur;
+  GstTagList *etags;
 
   targets =
-      (entry->type ==
+      (gst_toc_entry_get_entry_type (entry) ==
       GST_TOC_ENTRY_TYPE_EDITION) ? edition_targets : chapter_targtes;
 
+  etags = gst_tag_list_new_empty ();
+
   for (i = 0; i < targets->len; ++i) {
     tgt = g_array_index (targets, guint64, i);
 
     if (tgt == 0)
-      gst_tag_list_insert (entry->tags, tags, GST_TAG_MERGE_APPEND);
+      gst_tag_list_insert (etags, tags, GST_TAG_MERGE_APPEND);
     else {
       uid = g_strdup_printf ("%" G_GUINT64_FORMAT, tgt);
-      if (g_strcmp0 (entry->uid, uid) == 0)
-        gst_tag_list_insert (entry->tags, tags, GST_TAG_MERGE_APPEND);
+      if (g_strcmp0 (gst_toc_entry_get_uid (entry), uid) == 0)
+        gst_tag_list_insert (etags, tags, GST_TAG_MERGE_APPEND);
       g_free (uid);
     }
   }
 
-  cur = entry->subentries;
+  gst_toc_entry_merge_tags (entry, etags, GST_TAG_MERGE_APPEND);
+
+  cur = gst_toc_entry_get_sub_entries (entry);
   while (cur != NULL) {
     gst_matroska_read_common_parse_toc_tag (cur->data, edition_targets,
         chapter_targtes, tags);
@@ -804,31 +810,26 @@
 {
   GstTocEntry *cur_info, *prev_info, *next_info;
   GList *cur_list, *prev_list, *next_list;
-  gchar *iter_digit;
-  gint i = 0;
   gint64 cur_start, prev_start, stop;
 
   cur_list = toc_entries;
   while (cur_list != NULL) {
-    ++i;
     cur_info = cur_list->data;
 
-    iter_digit = g_strdup_printf ("%d", i);
-
-    switch (cur_info->type) {
+    switch (gst_toc_entry_get_entry_type (cur_info)) {
+      case GST_TOC_ENTRY_TYPE_ANGLE:
+      case GST_TOC_ENTRY_TYPE_VERSION:
       case GST_TOC_ENTRY_TYPE_EDITION:
         /* in Matroska terms edition has duration of full track */
-        gst_toc_entry_set_start_stop (cur_info, 0, max);
+        gst_toc_entry_set_start_stop_times (cur_info, 0, max);
 
-        if (cur_info->uid == NULL)
-          cur_info->uid =
-              g_strconcat (parent_uid, "/", GST_MATROSKA_TOC_UID_EDITION,
-              iter_digit, NULL);
-
-        gst_matroska_read_common_postprocess_toc_entries (cur_info->subentries,
-            max, cur_info->uid);
+        gst_matroska_read_common_postprocess_toc_entries
+            (gst_toc_entry_get_sub_entries (cur_info), max,
+            gst_toc_entry_get_uid (cur_info));
         break;
 
+      case GST_TOC_ENTRY_TYPE_TITLE:
+      case GST_TOC_ENTRY_TYPE_TRACK:
       case GST_TOC_ENTRY_TYPE_CHAPTER:
         prev_list = cur_list->prev;
         next_list = cur_list->next;
@@ -843,39 +844,37 @@
         else
           next_info = NULL;
 
-        if (cur_info->uid == NULL)
-          cur_info->uid =
-              g_strconcat (parent_uid, "/", GST_MATROSKA_TOC_UID_CHAPTER,
-              iter_digit, NULL);
-
         /* updated stop time in previous chapter and it's subchapters */
         if (prev_info != NULL) {
-          gst_toc_entry_get_start_stop (prev_info, &prev_start, &stop);
-          gst_toc_entry_get_start_stop (cur_info, &cur_start, &stop);
+          gst_toc_entry_get_start_stop_times (prev_info, &prev_start, &stop);
+          gst_toc_entry_get_start_stop_times (cur_info, &cur_start, &stop);
 
           stop = cur_start;
-          gst_toc_entry_set_start_stop (prev_info, prev_start, stop);
+          gst_toc_entry_set_start_stop_times (prev_info, prev_start, stop);
 
           gst_matroska_read_common_postprocess_toc_entries
-              (prev_info->subentries, cur_start, prev_info->uid);
+              (gst_toc_entry_get_sub_entries (prev_info), cur_start,
+              gst_toc_entry_get_uid (prev_info));
         }
 
         /* updated stop time in current chapter and it's subchapters */
         if (next_info == NULL) {
-          gst_toc_entry_get_start_stop (cur_info, &cur_start, &stop);
+          gst_toc_entry_get_start_stop_times (cur_info, &cur_start, &stop);
 
           if (stop == -1) {
             stop = max;
-            gst_toc_entry_set_start_stop (cur_info, cur_start, stop);
+            gst_toc_entry_set_start_stop_times (cur_info, cur_start, stop);
           }
 
           gst_matroska_read_common_postprocess_toc_entries
-              (cur_info->subentries, stop, cur_info->uid);
+              (gst_toc_entry_get_sub_entries (cur_info), stop,
+              gst_toc_entry_get_uid (cur_info));
         }
         break;
+      case GST_TOC_ENTRY_TYPE_INVALID:
+        break;
     }
     cur_list = cur_list->next;
-    g_free (iter_digit);
   }
 }
 
@@ -923,14 +922,16 @@
 
 static GstFlowReturn
 gst_matroska_read_common_parse_chapter_element (GstMatroskaReadCommon * common,
-    GstEbmlRead * ebml, GstTocEntry * toc_entry)
+    GstEbmlRead * ebml, GList ** subentries)
 {
   guint32 id;
   guint64 start_time = -1, stop_time = -1;
   guint64 is_hidden = 0, is_enabled = 1, uid = 0;
   GstFlowReturn ret = GST_FLOW_OK;
   GstTocEntry *chapter_info;
-  GstTagList *titles;
+  GstTagList *tags;
+  gchar *uid_str;
+  GList *subsubentries = NULL, *l;
 
   DEBUG_ELEMENT_START (common, ebml, "ChaptersElement");
 
@@ -939,9 +940,7 @@
     return ret;
   }
 
-  titles = gst_tag_list_new_empty ();
-  chapter_info = gst_toc_entry_new (GST_TOC_ENTRY_TYPE_CHAPTER,
-      GST_MATROSKA_TOC_UID_EMPTY);
+  tags = gst_tag_list_new_empty ();
 
   while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
     if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
@@ -963,13 +962,12 @@
       case GST_MATROSKA_ID_CHAPTERATOM:
         ret =
             gst_matroska_read_common_parse_chapter_element (common, ebml,
-            chapter_info);
+            &subsubentries);
         break;
 
       case GST_MATROSKA_ID_CHAPTERDISPLAY:
         ret =
-            gst_matroska_read_common_parse_chapter_titles (common, ebml,
-            titles);
+            gst_matroska_read_common_parse_chapter_titles (common, ebml, tags);
         break;
 
       case GST_MATROSKA_ID_CHAPTERFLAGHIDDEN:
@@ -988,29 +986,29 @@
     }
   }
 
-  gst_toc_entry_set_start_stop (chapter_info, start_time, stop_time);
+  if (uid == 0)
+    uid = (((guint64) g_random_int ()) << 32) | g_random_int ();
+  uid_str = g_strdup_printf ("%" G_GUINT64_FORMAT, uid);
+  chapter_info = gst_toc_entry_new (GST_TOC_ENTRY_TYPE_CHAPTER, uid_str);
+  g_free (uid_str);
+
+  gst_toc_entry_set_tags (chapter_info, tags);
+  gst_toc_entry_set_start_stop_times (chapter_info, start_time, stop_time);
+
+  for (l = subsubentries; l; l = l->next)
+    gst_toc_entry_append_sub_entry (chapter_info, l->data);
+  g_list_free (subsubentries);
 
   DEBUG_ELEMENT_STOP (common, ebml, "ChaptersElement", ret);
 
-  g_free (chapter_info->uid);
-
-  if (uid != 0)
-    chapter_info->uid = g_strdup_printf ("%" G_GUINT64_FORMAT, uid);
-  else
-    chapter_info->uid = NULL;
-
   /* start time is mandatory and has no default value,
    * so we should skip chapters without it */
   if (is_hidden == 0 && is_enabled > 0 &&
       start_time != -1 && ret == GST_FLOW_OK) {
-    if (!gst_tag_list_is_empty (titles))
-      gst_tag_list_insert (chapter_info->tags, titles, GST_TAG_MERGE_APPEND);
-
-    toc_entry->subentries = g_list_append (toc_entry->subentries, chapter_info);
+    *subentries = g_list_append (*subentries, chapter_info);
   } else
-    gst_toc_entry_free (chapter_info);
+    gst_toc_entry_unref (chapter_info);
 
-  gst_tag_list_free (titles);
   return ret;
 }
 
@@ -1022,6 +1020,8 @@
   guint64 is_hidden = 0, uid = 0;
   GstFlowReturn ret = GST_FLOW_OK;
   GstTocEntry *edition_info;
+  GList *subentries = NULL, *l;
+  gchar *uid_str;
 
   DEBUG_ELEMENT_START (common, ebml, "ChaptersEdition");
 
@@ -1030,11 +1030,6 @@
     return ret;
   }
 
-  edition_info = gst_toc_entry_new (GST_TOC_ENTRY_TYPE_EDITION,
-      GST_MATROSKA_TOC_UID_EMPTY);
-
-  gst_toc_entry_set_start_stop (edition_info, -1, -1);
-
   while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
     if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
       break;
@@ -1047,7 +1042,7 @@
       case GST_MATROSKA_ID_CHAPTERATOM:
         ret =
             gst_matroska_read_common_parse_chapter_element (common, ebml,
-            edition_info);
+            &subentries);
         break;
 
       case GST_MATROSKA_ID_EDITIONFLAGHIDDEN:
@@ -1064,19 +1059,22 @@
 
   DEBUG_ELEMENT_STOP (common, ebml, "ChaptersEdition", ret);
 
-  g_free (edition_info->uid);
+  if (uid == 0)
+    uid = (((guint64) g_random_int ()) << 32) | g_random_int ();
+  uid_str = g_strdup_printf ("%" G_GUINT64_FORMAT, uid);
+  edition_info = gst_toc_entry_new (GST_TOC_ENTRY_TYPE_EDITION, uid_str);
+  gst_toc_entry_set_start_stop_times (edition_info, -1, -1);
+  g_free (uid_str);
 
-  if (uid != 0)
-    edition_info->uid = g_strdup_printf ("%" G_GUINT64_FORMAT, uid);
-  else
-    edition_info->uid = NULL;
+  for (l = subentries; l; l = l->next)
+    gst_toc_entry_append_sub_entry (edition_info, l->data);
 
-  if (is_hidden == 0 && edition_info->subentries != NULL && ret == GST_FLOW_OK)
-    toc->entries = g_list_prepend (toc->entries, edition_info);
+  if (is_hidden == 0 && subentries != NULL && ret == GST_FLOW_OK)
+    gst_toc_append_entry (toc, edition_info);
   else {
     GST_DEBUG_OBJECT (common,
         "Skipping empty or hidden edition in the chapters TOC");
-    gst_toc_entry_free (edition_info);
+    gst_toc_entry_unref (edition_info);
   }
 
   return ret;
@@ -1097,7 +1095,8 @@
     return ret;
   }
 
-  toc = gst_toc_new ();
+  /* FIXME: create CURRENT toc as well */
+  toc = gst_toc_new (GST_TOC_SCOPE_GLOBAL);
 
   while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
     if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
@@ -1116,14 +1115,13 @@
     }
   }
 
-  if (toc->entries != NULL) {
-    toc->entries = g_list_reverse (toc->entries);
-    gst_matroska_read_common_postprocess_toc_entries (toc->entries,
+  if (gst_toc_get_entries (toc) != NULL) {
+    gst_matroska_read_common_postprocess_toc_entries (gst_toc_get_entries (toc),
         common->segment.duration, "");
 
     common->toc = toc;
   } else
-    gst_toc_free (toc);
+    gst_toc_unref (toc);
 
   common->chapters_parsed = TRUE;
 
@@ -1705,6 +1703,7 @@
 
         GST_DEBUG_OBJECT (common, "Title: %s", GST_STR_NULL (text));
         taglist = gst_tag_list_new (GST_TAG_TITLE, text, NULL);
+        gst_tag_list_set_scope (taglist, GST_TAG_SCOPE_GLOBAL);
         gst_matroska_read_common_found_global_tag (common, el, taglist);
         g_free (text);
         break;
@@ -1921,7 +1920,7 @@
       GST_WARNING_OBJECT (common,
           "Found chapter/edition specific tag, but TOC doesn't present");
     else {
-      cur = common->toc->entries;
+      cur = gst_toc_get_entries (common->toc);
       while (cur != NULL) {
         gst_matroska_read_common_parse_toc_tag (cur->data, edition_targets,
             chapter_targets, taglist);
@@ -1932,7 +1931,7 @@
   } else
     gst_tag_list_insert (*p_taglist, taglist, GST_TAG_MERGE_APPEND);
 
-  gst_tag_list_free (taglist);
+  gst_tag_list_unref (taglist);
   g_array_unref (chapter_targets);
   g_array_unref (edition_targets);
 
@@ -1975,6 +1974,7 @@
   }
 
   taglist = gst_tag_list_new_empty ();
+  gst_tag_list_set_scope (taglist, GST_TAG_SCOPE_GLOBAL);
   common->toc_updated = FALSE;
 
   while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
@@ -1999,7 +1999,7 @@
   if (G_LIKELY (!gst_tag_list_is_empty (taglist)))
     gst_matroska_read_common_found_global_tag (common, el, taglist);
   else
-    gst_tag_list_free (taglist);
+    gst_tag_list_unref (taglist);
 
   return ret;
 }
diff --git a/gst/monoscope/Makefile.in b/gst/monoscope/Makefile.in
index 7d463c8..c4e3e3f 100644
--- a/gst/monoscope/Makefile.in
+++ b/gst/monoscope/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -248,7 +248,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/monoscope/gstmonoscope.c b/gst/monoscope/gstmonoscope.c
index 6850a24..3bf1fda 100644
--- a/gst/monoscope/gstmonoscope.c
+++ b/gst/monoscope/gstmonoscope.c
@@ -214,7 +214,7 @@
 
   monoscope->visstate = monoscope_init (monoscope->width, monoscope->height);
 
-  res = gst_pad_push_event (monoscope->srcpad, gst_event_new_caps (caps));
+  res = gst_pad_set_caps (monoscope->srcpad, caps);
 
   return res && (monoscope->visstate != NULL);
 }
diff --git a/gst/multifile/Makefile.in b/gst/multifile/Makefile.in
index bbd9bd1..4589f12 100644
--- a/gst/multifile/Makefile.in
+++ b/gst/multifile/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -253,7 +253,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/multifile/gstsplitfilesrc.c b/gst/multifile/gstsplitfilesrc.c
index 86313bf..b58c59a 100644
--- a/gst/multifile/gstsplitfilesrc.c
+++ b/gst/multifile/gstsplitfilesrc.c
@@ -30,19 +30,18 @@
  * directories). The results will be sorted.
  *
  * <refsect2>
- * <title>Example launch line</title>
+ * <title>Example launch lines</title>
  * |[
- * gst-launch splitfilesrc location="/path/to/part-*.mpg" ! decodebin ! ... \
+ * gst-launch splitfilesrc location="/path/to/part-*.mpg" ! decodebin ! ...
  * ]| Plays the different parts as if they were one single MPEG file.
+ * |[
+ * gst-launch playbin uri="splitfile://path/to/foo.avi.*"
+ * ]| Plays the different parts as if they were one single AVI file.
  * </refsect2>
  *
  * Since: 0.10.31
  */
 
-/* TODO:
- *  - implement splitfile:// URI handler?
- */
-
 #ifdef HAVE_CONFIG_H
 #  include "config.h"
 #endif
@@ -65,6 +64,8 @@
 
 #define DEFAULT_LOCATION NULL
 
+static void gst_split_file_src_uri_handler_init (gpointer g_iface,
+    gpointer iface_data);
 static void gst_split_file_src_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec);
 static void gst_split_file_src_get_property (GObject * object, guint prop_id,
@@ -88,7 +89,10 @@
 GST_DEBUG_CATEGORY_STATIC (splitfilesrc_debug);
 #define GST_CAT_DEFAULT splitfilesrc_debug
 
-G_DEFINE_TYPE (GstSplitFileSrc, gst_split_file_src, GST_TYPE_BASE_SRC);
+
+G_DEFINE_TYPE_WITH_CODE (GstSplitFileSrc, gst_split_file_src, GST_TYPE_BASE_SRC,
+    G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER,
+        gst_split_file_src_uri_handler_init));
 
 #ifdef G_OS_WIN32
 #define WIN32_BLURB " Location string must be in UTF-8 encoding (on Windows)."
@@ -183,6 +187,25 @@
 }
 
 static void
+gst_split_file_src_set_location (GstSplitFileSrc * src, const char *location)
+{
+  GST_OBJECT_LOCK (src);
+  g_free (src->location);
+
+  if (location != NULL && g_str_has_prefix (location, "splitfile://"))
+    src->location = gst_uri_get_location (location);
+  else
+    src->location = g_strdup (location);
+#ifdef G_OS_WIN32
+  if (!g_utf8_validate (src->location, -1, NULL)) {
+    g_warning ("splitfilesrc 'location' property must be in UTF-8 "
+        "encoding on Windows");
+  }
+#endif
+  GST_OBJECT_UNLOCK (src);
+}
+
+static void
 gst_split_file_src_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec)
 {
@@ -190,16 +213,7 @@
 
   switch (prop_id) {
     case PROP_LOCATION:
-      GST_OBJECT_LOCK (src);
-      g_free (src->location);
-      src->location = g_value_dup_string (value);
-#ifdef G_OS_WIN32
-      if (!g_utf8_validate (src->location, -1, NULL)) {
-        g_warning ("splitfilesrc 'location' property must be in UTF-8 "
-            "encoding on Windows");
-      }
-#endif
-      GST_OBJECT_UNLOCK (src);
+      gst_split_file_src_set_location (src, g_value_get_string (value));
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -603,3 +617,55 @@
     return GST_FLOW_FLUSHING;
   }
 }
+
+static guint
+gst_split_file_src_uri_get_type (GType type)
+{
+  return GST_URI_SRC;
+}
+
+static const gchar *const *
+gst_split_file_src_uri_get_protocols (GType type)
+{
+  static const gchar *protocols[] = { "splitfile", NULL };
+
+  return (const gchar * const *) protocols;
+}
+
+static gchar *
+gst_split_file_src_uri_get_uri (GstURIHandler * handler)
+{
+  GstSplitFileSrc *src = GST_SPLIT_FILE_SRC (handler);
+  gchar *ret;
+
+  GST_OBJECT_LOCK (src);
+  if (src->location != NULL)
+    ret = g_strdup_printf ("splitfile://%s", src->location);
+  else
+    ret = NULL;
+  GST_OBJECT_UNLOCK (src);
+
+  return ret;
+}
+
+static gboolean
+gst_split_file_src_uri_set_uri (GstURIHandler * handler, const gchar * uri,
+    GError ** error)
+{
+  GstSplitFileSrc *src = GST_SPLIT_FILE_SRC (handler);
+
+  gst_split_file_src_set_location (src, uri);
+
+  return TRUE;
+}
+
+static void
+gst_split_file_src_uri_handler_init (gpointer g_iface, gpointer iface_data)
+{
+  GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface;
+
+  iface->get_type = gst_split_file_src_uri_get_type;
+  iface->get_protocols = gst_split_file_src_uri_get_protocols;
+  iface->get_uri = gst_split_file_src_uri_get_uri;
+  iface->set_uri = gst_split_file_src_uri_set_uri;
+}
diff --git a/gst/multipart/Makefile.in b/gst/multipart/Makefile.in
index 3606fce..acb3447 100644
--- a/gst/multipart/Makefile.in
+++ b/gst/multipart/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -249,7 +249,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/multipart/multipartdemux.c b/gst/multipart/multipartdemux.c
index 540b298..8859d73 100644
--- a/gst/multipart/multipartdemux.c
+++ b/gst/multipart/multipartdemux.c
@@ -55,21 +55,12 @@
 GST_DEBUG_CATEGORY_STATIC (gst_multipart_demux_debug);
 #define GST_CAT_DEFAULT gst_multipart_demux_debug
 
-/* signals and args */
-enum
-{
-  /* FILL ME */
-  LAST_SIGNAL
-};
-
-#define DEFAULT_AUTOSCAN		FALSE
 #define DEFAULT_BOUNDARY		NULL
 #define DEFAULT_SINGLE_STREAM	FALSE
 
 enum
 {
   PROP_0,
-  PROP_AUTOSCAN,
   PROP_BOUNDARY,
   PROP_SINGLE_STREAM
 };
@@ -148,11 +139,6 @@
           DEFAULT_BOUNDARY,
           G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
 
-  g_object_class_install_property (gobject_class, PROP_AUTOSCAN,
-      g_param_spec_boolean ("autoscan", "autoscan",
-          "Try to autofind the prefix (deprecated unused, see boundary)",
-          DEFAULT_AUTOSCAN, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
   /**
    * GstMultipartDemux::single-stream:
    *
@@ -203,7 +189,6 @@
   multipart->content_length = -1;
   multipart->header_completed = FALSE;
   multipart->scanpos = 0;
-  multipart->autoscan = DEFAULT_AUTOSCAN;
   multipart->singleStream = DEFAULT_SINGLE_STREAM;
 }
 
@@ -609,8 +594,8 @@
         gst_pad_push_event (srcpad->pad, gst_event_new_segment (&segment));
 
         tags = gst_tag_list_new (GST_TAG_CONTAINER_FORMAT, "Multipart", NULL);
-        gst_pad_push_event (srcpad->pad, gst_event_new_tag ("GstDemuxer",
-                tags));
+        gst_tag_list_set_scope (tags, GST_TAG_SCOPE_GLOBAL);
+        gst_pad_push_event (srcpad->pad, gst_event_new_tag (tags));
 
         GST_BUFFER_TIMESTAMP (outbuf) = 0;
       } else {
@@ -675,7 +660,6 @@
 {
   GstMultipartDemux *filter;
 
-  g_return_if_fail (GST_IS_MULTIPART_DEMUX (object));
   filter = GST_MULTIPART_DEMUX (object);
 
   switch (prop_id) {
@@ -687,9 +671,6 @@
         filter->boundary_len = strlen (filter->boundary);
       }
       break;
-    case PROP_AUTOSCAN:
-      filter->autoscan = g_value_get_boolean (value);
-      break;
     case PROP_SINGLE_STREAM:
       filter->singleStream = g_value_get_boolean (value);
       break;
@@ -705,16 +686,12 @@
 {
   GstMultipartDemux *filter;
 
-  g_return_if_fail (GST_IS_MULTIPART_DEMUX (object));
   filter = GST_MULTIPART_DEMUX (object);
 
   switch (prop_id) {
     case PROP_BOUNDARY:
       g_value_set_string (value, filter->boundary);
       break;
-    case PROP_AUTOSCAN:
-      g_value_set_boolean (value, filter->autoscan);
-      break;
     case PROP_SINGLE_STREAM:
       g_value_set_boolean (value, filter->singleStream);
       break;
diff --git a/gst/multipart/multipartdemux.h b/gst/multipart/multipartdemux.h
index ed8f4f1..48e901b 100644
--- a/gst/multipart/multipartdemux.h
+++ b/gst/multipart/multipartdemux.h
@@ -79,9 +79,6 @@
   gchar *mime_type;
   gint content_length;
 
-  /* deprecated, unused */
-  gboolean autoscan;
-
   /* Index inside the current data when manually looking for the boundary */
   gint scanpos;
 
diff --git a/gst/replaygain/Makefile.in b/gst/replaygain/Makefile.in
index 0f9b0bd..955685c 100644
--- a/gst/replaygain/Makefile.in
+++ b/gst/replaygain/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -252,7 +252,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/replaygain/gstrganalysis.c b/gst/replaygain/gstrganalysis.c
index 76b9dcb..af256bf 100644
--- a/gst/replaygain/gstrganalysis.c
+++ b/gst/replaygain/gstrganalysis.c
@@ -634,11 +634,7 @@
           GST_TAG_REFERENCE_LEVEL, filter->reference_level, NULL);
       /* This steals our reference to the list: */
       gst_pad_push_event (GST_BASE_TRANSFORM_SRC_PAD (GST_BASE_TRANSFORM
-              (filter)), gst_event_new_tag ("GstAnalysis",
-              gst_tag_list_copy (tag_list)));
-      /* special case element, also post here */
-      gst_element_post_message (GST_ELEMENT_CAST (filter),
-          gst_message_new_tag (GST_OBJECT (filter), tag_list));
+              (filter)), gst_event_new_tag (gst_tag_list_ref (tag_list)));
     }
   }
 
diff --git a/gst/rtp/Makefile.in b/gst/rtp/Makefile.in
index 9e40ac4..365ee8b 100644
--- a/gst/rtp/Makefile.in
+++ b/gst/rtp/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -288,7 +288,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/rtp/gstasteriskh263.c b/gst/rtp/gstasteriskh263.c
index ae7d05a..85e9166 100644
--- a/gst/rtp/gstasteriskh263.c
+++ b/gst/rtp/gstasteriskh263.c
@@ -127,9 +127,6 @@
 
   asteriskh263 = GST_ASTERISK_H263 (parent);
 
-  if (!gst_rtp_buffer_validate (buf))
-    goto bad_packet;
-
   {
     gint payload_len;
     guint8 *payload;
@@ -140,7 +137,8 @@
     GstRTPBuffer rtp = { NULL };
     GstMapInfo map;
 
-    gst_rtp_buffer_map (buf, GST_MAP_READ, &rtp);
+    if (!gst_rtp_buffer_map (buf, GST_MAP_READ, &rtp))
+      goto bad_packet;
 
     payload_len = gst_rtp_buffer_get_payload_len (&rtp);
     payload = gst_rtp_buffer_get_payload (&rtp);
diff --git a/gst/rtp/gstrtpL16depay.c b/gst/rtp/gstrtpL16depay.c
index a842695..c8d6e74 100644
--- a/gst/rtp/gstrtpL16depay.c
+++ b/gst/rtp/gstrtpL16depay.c
@@ -101,7 +101,6 @@
 static void
 gst_rtp_L16_depay_init (GstRtpL16Depay * rtpL16depay)
 {
-  /* needed because of GST_BOILERPLATE */
 }
 
 static gint
diff --git a/gst/rtp/gstrtph263ppay.c b/gst/rtp/gstrtph263ppay.c
index bb10cda..c944a0f 100644
--- a/gst/rtp/gstrtph263ppay.c
+++ b/gst/rtp/gstrtph263ppay.c
@@ -63,7 +63,7 @@
 GST_STATIC_PAD_TEMPLATE ("sink",
     GST_PAD_SINK,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("video/x-h263, " "variant = (string) \"itu\"")
+    GST_STATIC_CAPS ("video/x-h263, variant = (string) itu")
     );
 
 /*
@@ -244,7 +244,20 @@
 
   peercaps =
       gst_pad_peer_query_caps (GST_RTP_BASE_PAYLOAD_SRCPAD (payload), filter);
-  if (!peercaps)
+
+  /* if we're just outputting to udpsink or fakesink or so, we should also
+   * accept any input compatible with our sink template caps */
+  if (!peercaps || gst_caps_is_any (peercaps))
+    return
+        gst_pad_get_pad_template_caps (GST_RTP_BASE_PAYLOAD_SINKPAD (payload));
+
+  /* We basically need to differentiate two use-cases here: One where there's
+   * a capsfilter after the payloader with caps created from an SDP; in this
+   * case the filter caps are fixed and we want to signal to an encoder what
+   * we want it to produce. The second case is simply payloader ! depayloader
+   * where we are dealing with the depayloader's template caps. In this case
+   * we should accept any input compatible with our sink template caps. */
+  if (!gst_caps_is_fixed (peercaps))
     return
         gst_pad_get_pad_template_caps (GST_RTP_BASE_PAYLOAD_SINKPAD (payload));
 
diff --git a/gst/rtp/gstrtph264depay.c b/gst/rtp/gstrtph264depay.c
index 1739c2d..c49aaa2 100644
--- a/gst/rtp/gstrtph264depay.c
+++ b/gst/rtp/gstrtph264depay.c
@@ -31,17 +31,10 @@
 GST_DEBUG_CATEGORY_STATIC (rtph264depay_debug);
 #define GST_CAT_DEFAULT (rtph264depay_debug)
 
-#define DEFAULT_BYTE_STREAM	TRUE
-#define DEFAULT_ACCESS_UNIT	FALSE
-
-enum
-{
-  PROP_0,
-  PROP_BYTE_STREAM,
-  PROP_ACCESS_UNIT,
-  PROP_LAST
-};
-
+/* This is what we'll default to when downstream hasn't
+ * expressed a restriction or preference via caps */
+#define DEFAULT_BYTE_STREAM   TRUE
+#define DEFAULT_ACCESS_UNIT   FALSE
 
 /* 3 zero bytes syncword */
 static const guint8 sync_bytes[] = { 0, 0, 0, 1 };
@@ -88,10 +81,6 @@
     GST_TYPE_RTP_BASE_DEPAYLOAD);
 
 static void gst_rtp_h264_depay_finalize (GObject * object);
-static void gst_rtp_h264_depay_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec);
-static void gst_rtp_h264_depay_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec);
 
 static GstStateChangeReturn gst_rtp_h264_depay_change_state (GstElement *
     element, GstStateChange transition);
@@ -116,18 +105,6 @@
 
   gobject_class->finalize = gst_rtp_h264_depay_finalize;
 
-  gobject_class->set_property = gst_rtp_h264_depay_set_property;
-  gobject_class->get_property = gst_rtp_h264_depay_get_property;
-
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_BYTE_STREAM,
-      g_param_spec_boolean ("byte-stream", "Byte Stream",
-          "Generate byte stream format of NALU (deprecated; use caps)",
-          DEFAULT_BYTE_STREAM, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_ACCESS_UNIT,
-      g_param_spec_boolean ("access-unit", "Access Unit",
-          "Merge NALU into AU (picture) (deprecated; use caps)",
-          DEFAULT_ACCESS_UNIT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
   gst_element_class_add_pad_template (gstelement_class,
       gst_static_pad_template_get (&gst_rtp_h264_depay_src_template));
   gst_element_class_add_pad_template (gstelement_class,
@@ -195,48 +172,6 @@
 }
 
 static void
-gst_rtp_h264_depay_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstRtpH264Depay *rtph264depay;
-
-  rtph264depay = GST_RTP_H264_DEPAY (object);
-
-  switch (prop_id) {
-    case PROP_BYTE_STREAM:
-      rtph264depay->byte_stream = g_value_get_boolean (value);
-      break;
-    case PROP_ACCESS_UNIT:
-      rtph264depay->merge = g_value_get_boolean (value);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static void
-gst_rtp_h264_depay_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec)
-{
-  GstRtpH264Depay *rtph264depay;
-
-  rtph264depay = GST_RTP_H264_DEPAY (object);
-
-  switch (prop_id) {
-    case PROP_BYTE_STREAM:
-      g_value_set_boolean (value, rtph264depay->byte_stream);
-      break;
-    case PROP_ACCESS_UNIT:
-      g_value_set_boolean (value, rtph264depay->merge);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static void
 gst_rtp_h264_depay_negotiate (GstRtpH264Depay * rtph264depay)
 {
   GstCaps *caps;
@@ -276,22 +211,22 @@
     gst_caps_unref (caps);
   }
 
-  if (byte_stream >= 0) {
+  if (byte_stream != -1) {
     GST_DEBUG_OBJECT (rtph264depay, "downstream requires byte-stream %d",
         byte_stream);
-    if (rtph264depay->byte_stream != byte_stream) {
-      GST_WARNING_OBJECT (rtph264depay,
-          "overriding property setting based on caps");
-      rtph264depay->byte_stream = byte_stream;
-    }
+    rtph264depay->byte_stream = byte_stream;
+  } else {
+    GST_DEBUG_OBJECT (rtph264depay, "defaulting to byte-stream %d",
+        DEFAULT_BYTE_STREAM);
+    rtph264depay->byte_stream = DEFAULT_BYTE_STREAM;
   }
-  if (merge >= 0) {
+  if (merge != -1) {
     GST_DEBUG_OBJECT (rtph264depay, "downstream requires merge %d", merge);
-    if (rtph264depay->merge != merge) {
-      GST_WARNING_OBJECT (rtph264depay,
-          "overriding property setting based on caps");
-      rtph264depay->merge = merge;
-    }
+    rtph264depay->merge = merge;
+  } else {
+    GST_DEBUG_OBJECT (rtph264depay, "defaulting to merge %d",
+        DEFAULT_ACCESS_UNIT);
+    rtph264depay->merge = DEFAULT_ACCESS_UNIT;
   }
 }
 
@@ -761,7 +696,7 @@
                   "all-headers", G_TYPE_BOOLEAN, TRUE, NULL)));
       gst_buffer_unmap (nal, &map);
       gst_buffer_unref (nal);
-      return FALSE;
+      return NULL;
     }
 
     if (rtph264depay->new_codec_data &&
@@ -872,17 +807,14 @@
 
   rtph264depay->current_fu_type = 0;
 
-  if (send) {
-    outbuf = gst_rtp_h264_depay_handle_nal (rtph264depay, outbuf,
-        rtph264depay->fu_timestamp, rtph264depay->fu_marker);
-    if (outbuf)
-      gst_rtp_base_depayload_push (GST_RTP_BASE_DEPAYLOAD (rtph264depay),
-          outbuf);
-    return NULL;
-  } else {
-    return gst_rtp_h264_depay_handle_nal (rtph264depay, outbuf,
-        rtph264depay->fu_timestamp, rtph264depay->fu_marker);
+  outbuf = gst_rtp_h264_depay_handle_nal (rtph264depay, outbuf,
+      rtph264depay->fu_timestamp, rtph264depay->fu_marker);
+
+  if (send && outbuf) {
+    gst_rtp_base_depayload_push (GST_RTP_BASE_DEPAYLOAD (rtph264depay), outbuf);
+    outbuf = NULL;
   }
+  return outbuf;
 }
 
 static GstBuffer *
diff --git a/gst/rtp/gstrtph264pay.c b/gst/rtp/gstrtph264pay.c
index 7319526..0e8bf97 100644
--- a/gst/rtp/gstrtph264pay.c
+++ b/gst/rtp/gstrtph264pay.c
@@ -33,8 +33,6 @@
 #define IDR_TYPE_ID  5
 #define SPS_TYPE_ID  7
 #define PPS_TYPE_ID  8
-#define USE_MEMCMP
-
 
 GST_DEBUG_CATEGORY_STATIC (rtph264pay_debug);
 #define GST_CAT_DEFAULT (rtph264pay_debug)
@@ -49,9 +47,9 @@
     GST_PAD_SINK,
     GST_PAD_ALWAYS,
     GST_STATIC_CAPS ("video/x-h264, "
-        "stream-format = (string) byte-stream, alignment = (string) { nal, au };"
+        "stream-format = (string) avc, alignment = (string) au;"
         "video/x-h264, "
-        "stream-format = (string) avc, alignment = (string) au")
+        "stream-format = (string) byte-stream, alignment = (string) { nal, au }")
     );
 
 static GstStaticPadTemplate gst_rtp_h264_pay_src_template =
@@ -64,42 +62,13 @@
         "clock-rate = (int) 90000, " "encoding-name = (string) \"H264\"")
     );
 
-#define GST_TYPE_H264_SCAN_MODE (gst_h264_scan_mode_get_type())
-static GType
-gst_h264_scan_mode_get_type (void)
-{
-  static GType h264_scan_mode_type = 0;
-  static const GEnumValue h264_scan_modes[] = {
-    {GST_H264_SCAN_MODE_BYTESTREAM,
-          "Scan complete bytestream for NALUs",
-        "bytestream"},
-    {GST_H264_SCAN_MODE_MULTI_NAL, "Buffers contain multiple complete NALUs",
-        "multiple"},
-    {GST_H264_SCAN_MODE_SINGLE_NAL, "Buffers contain a single complete NALU",
-        "single"},
-    {0, NULL, NULL},
-  };
-
-  if (!h264_scan_mode_type) {
-    h264_scan_mode_type =
-        g_enum_register_static ("GstH264PayScanMode", h264_scan_modes);
-  }
-  return h264_scan_mode_type;
-}
-
-#define DEFAULT_PROFILE_LEVEL_ID        NULL
 #define DEFAULT_SPROP_PARAMETER_SETS    NULL
-#define DEFAULT_SCAN_MODE               GST_H264_SCAN_MODE_MULTI_NAL
-#define DEFAULT_BUFFER_LIST             FALSE
 #define DEFAULT_CONFIG_INTERVAL		      0
 
 enum
 {
   PROP_0,
-  PROP_PROFILE_LEVEL_ID,
   PROP_SPROP_PARAMETER_SETS,
-  PROP_SCAN_MODE,
-  PROP_BUFFER_LIST,
   PROP_CONFIG_INTERVAL,
   PROP_LAST
 };
@@ -142,13 +111,6 @@
   gobject_class->get_property = gst_rtp_h264_pay_get_property;
 
   g_object_class_install_property (G_OBJECT_CLASS (klass),
-      PROP_PROFILE_LEVEL_ID, g_param_spec_string ("profile-level-id",
-          "profile-level-id",
-          "The base64 profile-level-id to set in the sink caps (deprecated)",
-          DEFAULT_PROFILE_LEVEL_ID,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  g_object_class_install_property (G_OBJECT_CLASS (klass),
       PROP_SPROP_PARAMETER_SETS, g_param_spec_string ("sprop-parameter-sets",
           "sprop-parameter-sets",
           "The base64 sprop-parameter-sets to set in out caps (set to NULL to "
@@ -156,18 +118,6 @@
           DEFAULT_SPROP_PARAMETER_SETS,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_SCAN_MODE,
-      g_param_spec_enum ("scan-mode", "Scan Mode",
-          "How to scan the input buffers for NAL units. Performance can be "
-          "increased when certain assumptions are made about the input buffers",
-          GST_TYPE_H264_SCAN_MODE, DEFAULT_SCAN_MODE,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_BUFFER_LIST,
-      g_param_spec_boolean ("buffer-list", "Buffer List",
-          "Use Buffer Lists",
-          DEFAULT_BUFFER_LIST, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
   g_object_class_install_property (G_OBJECT_CLASS (klass),
       PROP_CONFIG_INTERVAL,
       g_param_spec_uint ("config-interval",
@@ -210,8 +160,6 @@
   rtph264pay->sps = NULL;
   rtph264pay->pps = NULL;
   rtph264pay->last_spspps = -1;
-  rtph264pay->scan_mode = GST_H264_SCAN_MODE_MULTI_NAL;
-  rtph264pay->buffer_list = DEFAULT_BUFFER_LIST;
   rtph264pay->spspps_interval = DEFAULT_CONFIG_INTERVAL;
 
   rtph264pay->adapter = gst_adapter_new ();
@@ -246,7 +194,7 @@
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
-static const gchar *all_levels[] = {
+static const gchar all_levels[][4] = {
   "1",
   "1b",
   "1.1",
@@ -262,8 +210,7 @@
   "4.1",
   "4.2",
   "5",
-  "5.1",
-  NULL
+  "5.1"
 };
 
 static GstCaps *
@@ -351,7 +298,7 @@
           g_value_init (&levels, GST_TYPE_LIST);
           g_value_init (&val, G_TYPE_STRING);
 
-          for (j = 0; all_levels[j]; j++) {
+          for (j = 0; j < G_N_ELEMENTS (all_levels); j++) {
             g_value_set_static_string (&val, all_levels[j]);
             gst_value_list_prepend_value (&levels, &val);
             if (!strcmp (level, all_levels[j]))
@@ -461,7 +408,7 @@
   guint8 *data;
   gsize size;
   GstBuffer *buffer;
-  const gchar *alignment;
+  const gchar *alignment, *stream_format;
 
   rtph264pay = GST_RTP_H264_PAY (basepayload);
 
@@ -471,11 +418,23 @@
    * NALs */
   gst_rtp_base_payload_set_options (basepayload, "video", TRUE, "H264", 90000);
 
+  rtph264pay->alignment = GST_H264_ALIGNMENT_UNKNOWN;
   alignment = gst_structure_get_string (str, "alignment");
-  if (alignment && !strcmp (alignment, "au"))
-    rtph264pay->au_alignment = TRUE;
-  else
-    rtph264pay->au_alignment = FALSE;
+  if (alignment) {
+    if (g_str_equal (alignment, "au"))
+      rtph264pay->alignment = GST_H264_ALIGNMENT_AU;
+    if (g_str_equal (alignment, "nal"))
+      rtph264pay->alignment = GST_H264_ALIGNMENT_NAL;
+  }
+
+  rtph264pay->stream_format = GST_H264_STREAM_FORMAT_UNKNOWN;
+  stream_format = gst_structure_get_string (str, "stream-format");
+  if (stream_format) {
+    if (g_str_equal (stream_format, "avc"))
+      rtph264pay->stream_format = GST_H264_STREAM_FORMAT_AVC;
+    if (g_str_equal (stream_format, "bytestream"))
+      rtph264pay->stream_format = GST_H264_STREAM_FORMAT_BYTESTREAM;
+  }
 
   /* packetized AVC video has a codec_data */
   if ((value = gst_structure_get_value (str, "codec_data"))) {
@@ -483,7 +442,6 @@
     gint i, nal_size;
 
     GST_DEBUG_OBJECT (rtph264pay, "have packetized h264");
-    rtph264pay->packetized = TRUE;
 
     buffer = gst_value_get_buffer (value);
 
@@ -578,7 +536,6 @@
       goto set_sps_pps_failed;
   } else {
     GST_DEBUG_OBJECT (rtph264pay, "have bytestream h264");
-    rtph264pay->packetized = FALSE;
   }
 
   return TRUE;
@@ -826,7 +783,7 @@
 static GstFlowReturn
 gst_rtp_h264_pay_payload_nal (GstRTPBasePayload * basepayload,
     const guint8 * data, guint size, GstClockTime dts, GstClockTime pts,
-    GstBuffer * buffer_orig, gboolean end_of_au);
+    gboolean end_of_au);
 
 static GstFlowReturn
 gst_rtp_h264_pay_send_sps_pps (GstRTPBasePayload * basepayload,
@@ -843,7 +800,7 @@
     /* resend SPS */
     gst_buffer_map (sps_buf, &map, GST_MAP_READ);
     ret = gst_rtp_h264_pay_payload_nal (basepayload,
-        map.data, map.size, dts, pts, sps_buf, FALSE);
+        map.data, map.size, dts, pts, FALSE);
     gst_buffer_unmap (sps_buf, &map);
     /* Not critical here; but throw a warning */
     if (ret != GST_FLOW_OK)
@@ -856,7 +813,7 @@
     /* resend PPS */
     gst_buffer_map (pps_buf, &map, GST_MAP_READ);
     ret = gst_rtp_h264_pay_payload_nal (basepayload,
-        map.data, map.size, dts, pts, pps_buf, FALSE);
+        map.data, map.size, dts, pts, FALSE);
     gst_buffer_unmap (pps_buf, &map);
     /* Not critical here; but throw a warning */
     if (ret != GST_FLOW_OK)
@@ -872,7 +829,7 @@
 static GstFlowReturn
 gst_rtp_h264_pay_payload_nal (GstRTPBasePayload * basepayload,
     const guint8 * data, guint size, GstClockTime dts, GstClockTime pts,
-    GstBuffer * buffer_orig, gboolean end_of_au)
+    gboolean end_of_au)
 {
   GstRtpH264Pay *rtph264pay;
   GstFlowReturn ret;
@@ -880,9 +837,7 @@
   guint packet_len, payload_len, mtu;
   GstBuffer *outbuf;
   guint8 *payload;
-#if 0
   GstBufferList *list = NULL;
-#endif
   gboolean send_spspps;
   GstRTPBuffer rtp = { NULL };
 
@@ -947,19 +902,10 @@
         "NAL Unit fit in one packet datasize=%d mtu=%d", size, mtu);
     /* will fit in one packet */
 
-#if 0
-    if (rtph264pay->buffer_list) {
-      /* use buffer lists
-       * first create buffer without payload containing only the RTP header
-       * and then another buffer containing the payload. both buffers will
-       * be then added to the list */
-      outbuf = gst_rtp_buffer_new_allocate (0, 0, 0);
-    } else
-#endif
-    {
-      /* use the old-fashioned way with a single buffer and memcpy */
-      outbuf = gst_rtp_buffer_new_allocate (size, 0, 0);
-    }
+    /* use buffer lists
+     * create buffer without payload containing only the RTP header
+     * (memory block at index 0) */
+    outbuf = gst_rtp_buffer_new_allocate (0, 0, 0);
 
     gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp);
 
@@ -972,37 +918,20 @@
     GST_BUFFER_PTS (outbuf) = pts;
     GST_BUFFER_DTS (outbuf) = dts;
 
-#if 0
-    if (rtph264pay->buffer_list) {
-      GstBuffer *paybuf;
+    /* insert payload memory block */
+    gst_buffer_append_memory (outbuf,
+        gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY, (guint8*) data,
+          size, 0, size, NULL, NULL));
 
-      /* create another buffer with the payload. */
-      if (buffer_orig)
-        paybuf = gst_buffer_create_sub (buffer_orig, data -
-            GST_BUFFER_DATA (buffer_orig), size);
-      else {
-        paybuf = gst_buffer_new_and_alloc (size);
-        gst_buffer_fill (paybuf, 0, data, size);
-      }
+    list = gst_buffer_list_new ();
 
-      list = gst_buffer_list_new ();
+    /* add the buffer to the buffer list */
+    gst_buffer_list_add (list, outbuf);
 
-      /* add both buffers to the buffer list */
-      gst_buffer_list_add (list, outbuf);
-      gst_buffer_list_add (list, paybuf);
+    gst_rtp_buffer_unmap (&rtp);
 
-      /* push the list to the next element in the pipe */
-      ret = gst_rtp_base_payload_push_list (basepayload, list);
-    } else
-#endif
-    {
-      payload = gst_rtp_buffer_get_payload (&rtp);
-      GST_DEBUG_OBJECT (basepayload, "Copying %d bytes to outbuf", size);
-      memcpy (payload, data, size);
-      gst_rtp_buffer_unmap (&rtp);
-
-      ret = gst_rtp_base_payload_push (basepayload, outbuf);
-    }
+    /* push the list to the next element in the pipe */
+    ret = gst_rtp_base_payload_push_list (basepayload, list);
   } else {
     /* fragmentation Units FU-A */
     guint8 nalHeader;
@@ -1024,12 +953,7 @@
     /* We keep 2 bytes for FU indicator and FU Header */
     payload_len = gst_rtp_buffer_calc_payload_len (mtu - 2, 0, 0);
 
-#if 0
-    if (rtph264pay->buffer_list) {
-      list = gst_buffer_list_new ();
-      it = gst_buffer_list_iterate (list);
-    }
-#endif
+    list = gst_buffer_list_new ();
 
     while (end == 0) {
       limitedSize = size < payload_len ? size : payload_len;
@@ -1037,20 +961,10 @@
           "Inside  FU-A fragmentation limitedSize=%d iteration=%d", limitedSize,
           ii);
 
-#if 0
-      if (rtph264pay->buffer_list) {
-        /* use buffer lists
-         * first create buffer without payload containing only the RTP header
-         * and then another buffer containing the payload. both buffers will
-         * be then added to the list */
-        outbuf = gst_rtp_buffer_new_allocate (2, 0, 0);
-      } else
-#endif
-      {
-        /* use the old-fashioned way with a single buffer and memcpy
-         * first create buffer to hold the payload */
-        outbuf = gst_rtp_buffer_new_allocate (limitedSize + 2, 0, 0);
-      }
+      /* use buffer lists
+       * create buffer without payload containing only the RTP header
+       * (memory block at index 0) */
+      outbuf = gst_rtp_buffer_new_allocate (2, 0, 0);
 
       gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp);
 
@@ -1072,39 +986,15 @@
       /* FU Header */
       payload[1] = (start << 7) | (end << 6) | (nalHeader & 0x1f);
 
-#if 0
-      if (rtph264pay->buffer_list) {
-        GstBuffer *paybuf;
+      /* insert payload memory block */
+      gst_buffer_append_memory (outbuf,
+          gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY, (guint8 *) data + pos,
+            limitedSize, 0, limitedSize, NULL, NULL));
 
-        /* create another buffer to hold the payload */
-        if (buffer_orig)
-          paybuf = gst_buffer_create_sub (buffer_orig, data -
-              GST_BUFFER_DATA (buffer_orig) + pos, limitedSize);
-        else {
-          paybuf = gst_buffer_new_and_alloc (limitedSize);
-          memcpy (GST_BUFFER_DATA (paybuf), data + pos, limitedSize);
-        }
+      /* add the buffer to the buffer list */
+      gst_buffer_list_add (list, outbuf);
 
-        /* create a new group to hold the header and the payload */
-        gst_buffer_list_iterator_add_group (it);
-
-        /* add both buffers to the buffer list */
-        gst_buffer_list_iterator_add (it, outbuf);
-        gst_buffer_list_iterator_add (it, paybuf);
-
-      } else
-#endif
-      {
-        memcpy (&payload[2], data + pos, limitedSize);
-        gst_rtp_buffer_unmap (&rtp);
-        GST_DEBUG_OBJECT (basepayload,
-            "recorded %d payload bytes into packet iteration=%d",
-            limitedSize + 2, ii);
-
-        ret = gst_rtp_base_payload_push (basepayload, outbuf);
-        if (ret != GST_FLOW_OK)
-          break;
-      }
+      gst_rtp_buffer_unmap (&rtp);
 
       size -= limitedSize;
       pos += limitedSize;
@@ -1112,13 +1002,7 @@
       start = 0;
     }
 
-#if 0
-    if (rtph264pay->buffer_list) {
-      /* free iterator and push the whole buffer list at once */
-      gst_buffer_list_iterator_free (it);
-      ret = gst_rtp_base_payload_push_list (basepayload, list);
-    }
-#endif
+    ret = gst_rtp_base_payload_push_list (basepayload, list);
   }
   return ret;
 }
@@ -1136,15 +1020,22 @@
   GstClockTime dts, pts;
   GArray *nal_queue;
   guint pushed = 0;
-  gboolean bytestream;
+  gboolean avc;
 
   rtph264pay = GST_RTP_H264_PAY (basepayload);
 
   /* the input buffer contains one or more NAL units */
 
-  bytestream = (rtph264pay->scan_mode == GST_H264_SCAN_MODE_BYTESTREAM);
+  avc = rtph264pay->stream_format = GST_H264_STREAM_FORMAT_AVC;
 
-  if (bytestream) {
+  if (avc) {
+    gst_buffer_map (buffer, &map, GST_MAP_READ);
+    data = map.data;
+    size = map.size;
+    pts = GST_BUFFER_PTS (buffer);
+    dts = GST_BUFFER_DTS (buffer);
+    GST_DEBUG_OBJECT (basepayload, "got %" G_GSIZE_FORMAT " bytes", size);
+  } else {
     dts = gst_adapter_prev_dts (rtph264pay->adapter, NULL);
     pts = gst_adapter_prev_pts (rtph264pay->adapter, NULL);
     gst_adapter_push (rtph264pay->adapter, buffer);
@@ -1158,13 +1049,6 @@
       dts = GST_BUFFER_DTS (buffer);
     if (!GST_CLOCK_TIME_IS_VALID (pts))
       pts = GST_BUFFER_PTS (buffer);
-  } else {
-    gst_buffer_map (buffer, &map, GST_MAP_READ);
-    data = map.data;
-    size = map.size;
-    pts = GST_BUFFER_PTS (buffer);
-    dts = GST_BUFFER_DTS (buffer);
-    GST_DEBUG_OBJECT (basepayload, "got %" G_GSIZE_FORMAT " bytes", size);
   }
 
   ret = GST_FLOW_OK;
@@ -1173,7 +1057,7 @@
    * FIXME, we should really try to pack multiple NAL units into one RTP packet
    * if we can, especially for the config packets that wont't cause decoder 
    * latency. */
-  if (rtph264pay->packetized) {
+  if (avc) {
     guint nal_length_size;
 
     nal_length_size = rtph264pay->nal_length_size;
@@ -1202,13 +1086,14 @@
       /* If we're at the end of the buffer, then we're at the end of the
        * access unit
        */
-      if (rtph264pay->au_alignment && size - nal_len <= nal_length_size) {
+      if (rtph264pay->alignment == GST_H264_ALIGNMENT_AU
+          && size - nal_len <= nal_length_size) {
         end_of_au = TRUE;
       }
 
       ret =
           gst_rtp_h264_pay_payload_nal (basepayload, data, nal_len, dts, pts,
-          buffer, end_of_au);
+          end_of_au);
       if (ret != GST_FLOW_OK)
         break;
 
@@ -1241,25 +1126,18 @@
       data += 3;
       size -= 3;
 
-      if (rtph264pay->scan_mode == GST_H264_SCAN_MODE_SINGLE_NAL) {
-        /* we are told that there is only a single NAL in this packet so that we
-         * can avoid scanning for the next NAL. */
-        next = size;
-      } else {
-        /* use next_start_code() to scan buffer.
-         * next_start_code() returns the offset in data, 
-         * starting from zero to the first byte of 0.0.0.1
-         * If no start code is found, it returns the value of the 
-         * 'size' parameter. 
-         * data is unchanged by the call to next_start_code()
-         */
-        next = next_start_code (data, size);
+      /* use next_start_code() to scan buffer.
+       * next_start_code() returns the offset in data, 
+       * starting from zero to the first byte of 0.0.0.1
+       * If no start code is found, it returns the value of the 
+       * 'size' parameter. 
+       * data is unchanged by the call to next_start_code()
+       */
+      next = next_start_code (data, size);
 
-        if (next == size
-            && rtph264pay->scan_mode == GST_H264_SCAN_MODE_BYTESTREAM) {
-          /* Didn't find the start of next NAL, handle it next time */
-          break;
-        }
+      if (next == size) {
+        /* Didn't find the start of next NAL, handle it next time */
+        break;
       }
 
       /* nal length is distance to next start code */
@@ -1321,8 +1199,7 @@
        * starts with 0x000001 so all the 0x00 bytes at the end of this one are
        * trailing 0x0 that can be discarded */
       size = nal_len;
-      if (i + 1 != nal_queue->len
-          || rtph264pay->scan_mode == GST_H264_SCAN_MODE_BYTESTREAM)
+      if (i + 1 != nal_queue->len)
         for (; size > 1 && data[size - 1] == 0x0; size--)
           /* skip */ ;
 
@@ -1333,15 +1210,14 @@
        * actually payload the NAL so we can know if the current NAL is
        * the last one of an access unit or not if we are in bytestream mode
        */
-      if (rtph264pay->au_alignment &&
-          rtph264pay->scan_mode != GST_H264_SCAN_MODE_BYTESTREAM &&
+      if (rtph264pay->alignment == GST_H264_ALIGNMENT_AU &&
           i == nal_queue->len - 1)
         end_of_au = TRUE;
 
       /* put the data in one or more RTP packets */
       ret =
           gst_rtp_h264_pay_payload_nal (basepayload, data, size, dts, pts,
-          buffer, end_of_au);
+          end_of_au);
       if (ret != GST_FLOW_OK) {
         break;
       }
@@ -1355,12 +1231,12 @@
   }
 
 done:
-  if (bytestream) {
-    gst_adapter_unmap (rtph264pay->adapter);
-    gst_adapter_flush (rtph264pay->adapter, pushed);
-  } else {
+  if (avc) {
     gst_buffer_unmap (buffer, &map);
     gst_buffer_unref (buffer);
+  } else {
+    gst_adapter_unmap (rtph264pay->adapter);
+    gst_adapter_flush (rtph264pay->adapter, pushed);
   }
 
   return ret;
@@ -1433,19 +1309,11 @@
   rtph264pay = GST_RTP_H264_PAY (object);
 
   switch (prop_id) {
-    case PROP_PROFILE_LEVEL_ID:
-      break;
     case PROP_SPROP_PARAMETER_SETS:
       g_free (rtph264pay->sprop_parameter_sets);
       rtph264pay->sprop_parameter_sets = g_value_dup_string (value);
       rtph264pay->update_caps = TRUE;
       break;
-    case PROP_SCAN_MODE:
-      rtph264pay->scan_mode = g_value_get_enum (value);
-      break;
-    case PROP_BUFFER_LIST:
-      rtph264pay->buffer_list = g_value_get_boolean (value);
-      break;
     case PROP_CONFIG_INTERVAL:
       rtph264pay->spspps_interval = g_value_get_uint (value);
       break;
@@ -1464,17 +1332,9 @@
   rtph264pay = GST_RTP_H264_PAY (object);
 
   switch (prop_id) {
-    case PROP_PROFILE_LEVEL_ID:
-      break;
     case PROP_SPROP_PARAMETER_SETS:
       g_value_set_string (value, rtph264pay->sprop_parameter_sets);
       break;
-    case PROP_SCAN_MODE:
-      g_value_set_enum (value, rtph264pay->scan_mode);
-      break;
-    case PROP_BUFFER_LIST:
-      g_value_set_boolean (value, rtph264pay->buffer_list);
-      break;
     case PROP_CONFIG_INTERVAL:
       g_value_set_uint (value, rtph264pay->spspps_interval);
       break;
diff --git a/gst/rtp/gstrtph264pay.h b/gst/rtp/gstrtph264pay.h
index 5438e9b..d5b9dfa 100644
--- a/gst/rtp/gstrtph264pay.h
+++ b/gst/rtp/gstrtph264pay.h
@@ -37,16 +37,23 @@
 #define GST_IS_RTP_H264_PAY_CLASS(klass) \
   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTP_H264_PAY))
 
-typedef enum
-{
-  GST_H264_SCAN_MODE_BYTESTREAM,
-  GST_H264_SCAN_MODE_MULTI_NAL,
-  GST_H264_SCAN_MODE_SINGLE_NAL
-} GstH264ScanMode;
-
 typedef struct _GstRtpH264Pay GstRtpH264Pay;
 typedef struct _GstRtpH264PayClass GstRtpH264PayClass;
 
+typedef enum
+{
+  GST_H264_STREAM_FORMAT_UNKNOWN,
+  GST_H264_STREAM_FORMAT_BYTESTREAM,
+  GST_H264_STREAM_FORMAT_AVC
+} GstH264StreamFormat;
+
+typedef enum
+{
+  GST_H264_ALIGNMENT_UNKNOWN,
+  GST_H264_ALIGNMENT_NAL,
+  GST_H264_ALIGNMENT_AU
+} GstH264Alignment;
+
 struct _GstRtpH264Pay
 {
   GstRTPBasePayload payload;
@@ -54,22 +61,19 @@
   guint profile;
   GList *sps, *pps;
 
-  gboolean packetized;
-  gboolean au_alignment;
+  GstH264StreamFormat stream_format;
+  GstH264Alignment alignment;
   guint nal_length_size;
   GArray *queue;
 
   gchar *sprop_parameter_sets;
   gboolean update_caps;
-  GstH264ScanMode scan_mode;
 
   GstAdapter *adapter;
 
   guint spspps_interval;
   gboolean send_spspps;
   GstClockTime last_spspps;
-
-  gboolean buffer_list;
 };
 
 struct _GstRtpH264PayClass
diff --git a/gst/rtp/gstrtpj2kdepay.c b/gst/rtp/gstrtpj2kdepay.c
index 4cb6497..2017270 100644
--- a/gst/rtp/gstrtpj2kdepay.c
+++ b/gst/rtp/gstrtpj2kdepay.c
@@ -56,12 +56,9 @@
   J2K_MARKER_EOC = 0xD9
 } RtpJ2KMarker;
 
-#define DEFAULT_BUFFER_LIST             TRUE
-
 enum
 {
   PROP_0,
-  PROP_BUFFER_LIST,
   PROP_LAST
 };
 
@@ -100,11 +97,6 @@
   gobject_class->set_property = gst_rtp_j2k_depay_set_property;
   gobject_class->get_property = gst_rtp_j2k_depay_get_property;
 
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_BUFFER_LIST,
-      g_param_spec_boolean ("buffer-list", "Buffer List",
-          "Use Buffer Lists",
-          DEFAULT_BUFFER_LIST, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
   gst_element_class_add_pad_template (gstelement_class,
       gst_static_pad_template_get (&gst_rtp_j2k_depay_src_template));
   gst_element_class_add_pad_template (gstelement_class,
@@ -127,8 +119,6 @@
 static void
 gst_rtp_j2k_depay_init (GstRtpJ2KDepay * rtpj2kdepay)
 {
-  rtpj2kdepay->buffer_list = DEFAULT_BUFFER_LIST;
-
   rtpj2kdepay->pu_adapter = gst_adapter_new ();
   rtpj2kdepay->t_adapter = gst_adapter_new ();
   rtpj2kdepay->f_adapter = gst_adapter_new ();
@@ -383,13 +373,16 @@
     goto done;
 
   if (avail > 2) {
-    GstBuffer *outbuf;
+    GList *list, *walk;
+    GstBufferList *buflist;
 
     /* take the last bytes of the JPEG 2000 data to see if there is an EOC
      * marker */
     gst_adapter_copy (rtpj2kdepay->f_adapter, end, avail - 2, 2);
 
     if (end[0] != 0xff && end[1] != 0xd9) {
+      GstBuffer *outbuf;
+
       end[0] = 0xff;
       end[1] = 0xd9;
 
@@ -402,29 +395,18 @@
       gst_adapter_push (rtpj2kdepay->f_adapter, outbuf);
       avail += 2;
     }
-#if 0
-    if (rtpj2kdepay->buffer_list) {
-      GList *list;
-      GstBufferList *buflist;
-      GstBufferListIterator *it;
 
-      GST_DEBUG_OBJECT (rtpj2kdepay, "pushing buffer list of %u bytes", avail);
-      list = gst_adapter_take_list (rtpj2kdepay->f_adapter, avail);
+    GST_DEBUG_OBJECT (rtpj2kdepay, "pushing buffer list of %u bytes", avail);
+    list = gst_adapter_take_list (rtpj2kdepay->f_adapter, avail);
 
-      buflist = gst_buffer_list_new ();
-      it = gst_buffer_list_iterate (buflist);
-      gst_buffer_list_iterator_add_group (it);
-      gst_buffer_list_iterator_add_list (it, list);
-      gst_buffer_list_iterator_free (it);
+    buflist = gst_buffer_list_new ();
 
-      ret = gst_rtp_base_depayload_push_list (depayload, buflist);
-    } else
-#endif
-    {
-      GST_DEBUG_OBJECT (rtpj2kdepay, "pushing buffer of %u bytes", avail);
-      outbuf = gst_adapter_take_buffer (rtpj2kdepay->f_adapter, avail);
-      ret = gst_rtp_base_depayload_push (depayload, outbuf);
-    }
+    for (walk = list; walk; walk = g_list_next (walk))
+      gst_buffer_list_add (buflist, GST_BUFFER_CAST (walk->data));
+
+    g_list_free (list);
+
+    ret = gst_rtp_base_depayload_push_list (depayload, buflist);
   } else {
     GST_WARNING_OBJECT (rtpj2kdepay, "empty packet");
     gst_adapter_clear (rtpj2kdepay->f_adapter);
@@ -607,14 +589,7 @@
 gst_rtp_j2k_depay_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec)
 {
-  GstRtpJ2KDepay *rtpj2kdepay;
-
-  rtpj2kdepay = GST_RTP_J2K_DEPAY (object);
-
   switch (prop_id) {
-    case PROP_BUFFER_LIST:
-      rtpj2kdepay->buffer_list = g_value_get_boolean (value);
-      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -625,14 +600,7 @@
 gst_rtp_j2k_depay_get_property (GObject * object, guint prop_id,
     GValue * value, GParamSpec * pspec)
 {
-  GstRtpJ2KDepay *rtpj2kdepay;
-
-  rtpj2kdepay = GST_RTP_J2K_DEPAY (object);
-
   switch (prop_id) {
-    case PROP_BUFFER_LIST:
-      g_value_set_boolean (value, rtpj2kdepay->buffer_list);
-      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
diff --git a/gst/rtp/gstrtpj2kdepay.h b/gst/rtp/gstrtpj2kdepay.h
index cea9869..020688e 100644
--- a/gst/rtp/gstrtpj2kdepay.h
+++ b/gst/rtp/gstrtpj2kdepay.h
@@ -58,7 +58,6 @@
   guint next_frag;
   gboolean have_sync;
 
-  gboolean buffer_list;
   gint width, height;
 };
 
diff --git a/gst/rtp/gstrtpj2kpay.c b/gst/rtp/gstrtpj2kpay.c
index cbbe877..ed1856a 100644
--- a/gst/rtp/gstrtpj2kpay.c
+++ b/gst/rtp/gstrtpj2kpay.c
@@ -78,12 +78,9 @@
   J2K_MARKER_EOC = 0xD9
 } RtpJ2KMarker;
 
-#define DEFAULT_BUFFER_LIST             TRUE
-
 enum
 {
   PROP_0,
-  PROP_BUFFER_LIST,
   PROP_LAST
 };
 
@@ -128,11 +125,6 @@
   gobject_class->set_property = gst_rtp_j2k_pay_set_property;
   gobject_class->get_property = gst_rtp_j2k_pay_get_property;
 
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_BUFFER_LIST,
-      g_param_spec_boolean ("buffer-list", "Buffer List",
-          "Use Buffer Lists",
-          DEFAULT_BUFFER_LIST, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
   gst_element_class_add_pad_template (gstelement_class,
       gst_static_pad_template_get (&gst_rtp_j2k_pay_src_template));
   gst_element_class_add_pad_template (gstelement_class,
@@ -153,7 +145,6 @@
 static void
 gst_rtp_j2k_pay_init (GstRtpJ2KPay * pay)
 {
-  pay->buffer_list = DEFAULT_BUFFER_LIST;
 }
 
 static gboolean
@@ -332,9 +323,7 @@
   GstClockTime timestamp;
   GstFlowReturn ret = GST_FLOW_ERROR;
   RtpJ2KState state;
-#if 0
   GstBufferList *list = NULL;
-#endif
   GstMapInfo map;
   guint mtu, max_size;
   guint offset;
@@ -364,12 +353,7 @@
   state.next_sot = 0;
   state.force_packet = FALSE;
 
-#if 0
-  if (pay->buffer_list) {
-    list = gst_buffer_list_new ();
-    it = gst_buffer_list_iterate (list);
-  }
-#endif
+  list = gst_buffer_list_new ();
 
   /* get max packet length */
   max_size = gst_rtp_buffer_calc_payload_len (mtu - HEADER_SIZE, 0, 0);
@@ -421,6 +405,7 @@
 
     while (pu_size > 0) {
       guint packet_size, data_size;
+      GstBuffer *paybuf;
 
       /* calculate the packet size */
       packet_size =
@@ -439,16 +424,9 @@
       payload_size = gst_rtp_buffer_calc_payload_len (packet_size, 0, 0);
       data_size = payload_size - HEADER_SIZE;
 
-#if 0
-      if (pay->buffer_list) {
-        /* make buffer for header */
-        outbuf = gst_rtp_buffer_new_allocate (HEADER_SIZE, 0, 0);
-      } else
-#endif
-      {
-        /* make buffer for header and data */
-        outbuf = gst_rtp_buffer_new_allocate (payload_size, 0, 0);
-      }
+      /* make buffer for header */
+      outbuf = gst_rtp_buffer_new_allocate (HEADER_SIZE, 0, 0);
+
       GST_BUFFER_TIMESTAMP (outbuf) = timestamp;
 
       gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp);
@@ -500,30 +478,15 @@
       header[6] = (state.header.offset >> 8) & 0xff;
       header[7] = state.header.offset & 0xff;
 
-#if 0
-      if (pay->buffer_list) {
-        GstBuffer *paybuf;
+      gst_rtp_buffer_unmap (&rtp);
 
-        /* make subbuffer of j2k data */
-        paybuf = gst_buffer_create_sub (buffer, offset, data_size);
+      /* make subbuffer of j2k data */
+      paybuf = gst_buffer_copy_region (buffer, GST_BUFFER_COPY_MEMORY,
+          offset, data_size);
 
-        /* create a new group to hold the header and the payload */
-        gst_buffer_list_iterator_add_group (it);
+      outbuf = gst_buffer_append (outbuf, paybuf);
 
-        /* add both buffers to the buffer list */
-        gst_buffer_list_iterator_add (it, outbuf);
-        gst_buffer_list_iterator_add (it, paybuf);
-      } else
-#endif
-      {
-        /* copy payload */
-        memcpy (header + HEADER_SIZE, &map.data[offset], data_size);
-        gst_rtp_buffer_unmap (&rtp);
-
-        ret = gst_rtp_base_payload_push (basepayload, outbuf);
-        if (ret != GST_FLOW_OK)
-          goto done;
-      }
+      gst_buffer_list_add (list, outbuf);
 
       /* reset header for next round */
       state.header.MHF = 0;
@@ -535,16 +498,10 @@
     offset = pos;
   } while (offset < map.size);
 
-done:
   gst_buffer_unref (buffer);
 
-#if 0
-  if (pay->buffer_list) {
-    /* free iterator and push the whole buffer list at once */
-    gst_buffer_list_iterator_free (it);
-    ret = gst_rtp_base_payload_push_list (basepayload, list);
-  }
-#endif
+  /* push the whole buffer list at once */
+  ret = gst_rtp_base_payload_push_list (basepayload, list);
 
   return ret;
 }
@@ -553,14 +510,7 @@
 gst_rtp_j2k_pay_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec)
 {
-  GstRtpJ2KPay *rtpj2kpay;
-
-  rtpj2kpay = GST_RTP_J2K_PAY (object);
-
   switch (prop_id) {
-    case PROP_BUFFER_LIST:
-      rtpj2kpay->buffer_list = g_value_get_boolean (value);
-      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -571,14 +521,7 @@
 gst_rtp_j2k_pay_get_property (GObject * object, guint prop_id,
     GValue * value, GParamSpec * pspec)
 {
-  GstRtpJ2KPay *rtpj2kpay;
-
-  rtpj2kpay = GST_RTP_J2K_PAY (object);
-
   switch (prop_id) {
-    case PROP_BUFFER_LIST:
-      g_value_set_boolean (value, rtpj2kpay->buffer_list);
-      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
diff --git a/gst/rtp/gstrtpj2kpay.h b/gst/rtp/gstrtpj2kpay.h
index 83b9ec2..88737d6 100644
--- a/gst/rtp/gstrtpj2kpay.h
+++ b/gst/rtp/gstrtpj2kpay.h
@@ -43,8 +43,6 @@
 {
   GstRTPBasePayload payload;
 
-  gboolean buffer_list;
-
   gint height;
   gint width;
 };
diff --git a/gst/rtp/gstrtpjpegpay.c b/gst/rtp/gstrtpjpegpay.c
index aaa8cc4..7d93c11 100644
--- a/gst/rtp/gstrtpjpegpay.c
+++ b/gst/rtp/gstrtpjpegpay.c
@@ -69,11 +69,6 @@
  */
 #define QUANT_PREFIX_LEN     3
 
-/*
- * DEFAULT_BUFFER_LIST:
- *
- */
-#define DEFAULT_BUFFER_LIST            FALSE
 
 typedef enum _RtpJpegMarker RtpJpegMarker;
 
@@ -118,7 +113,6 @@
   PROP_0,
   PROP_JPEG_QUALITY,
   PROP_JPEG_TYPE,
-  PROP_BUFFER_LIST,
   PROP_LAST
 };
 
@@ -276,11 +270,6 @@
           "Default JPEG Type, overwritten by SOF when present", 0, 255,
           DEFAULT_JPEG_TYPE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_BUFFER_LIST,
-      g_param_spec_boolean ("buffer-list", "Buffer List",
-          "Use Buffer Lists",
-          DEFAULT_BUFFER_LIST, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
   GST_DEBUG_CATEGORY_INIT (rtpjpegpay_debug, "rtpjpegpay", 0,
       "Motion JPEG RTP Payloader");
 }
@@ -291,7 +280,6 @@
   pay->quality = DEFAULT_JPEG_QUALITY;
   pay->quant = DEFAULT_JPEG_QUANT;
   pay->type = DEFAULT_JPEG_TYPE;
-  pay->buffer_list = DEFAULT_BUFFER_LIST;
 }
 
 static gboolean
@@ -744,9 +732,7 @@
 
   GST_LOG_OBJECT (pay, "quant_data size %u", quant_data_size);
 
-  if (pay->buffer_list) {
-    list = gst_buffer_list_new ();
-  }
+  list = gst_buffer_list_new ();
 
   bytes_left = sizeof (jpeg_header) + quant_data_size + size;
 
@@ -830,14 +816,8 @@
 
     GST_BUFFER_TIMESTAMP (outbuf) = timestamp;
 
-    if (pay->buffer_list) {
-      /* and add to list */
-      gst_buffer_list_insert (list, -1, outbuf);
-    } else {
-      ret = gst_rtp_base_payload_push (basepayload, outbuf);
-      if (ret != GST_FLOW_OK)
-        break;
-    }
+    /* and add to list */
+    gst_buffer_list_insert (list, -1, outbuf);
 
     bytes_left -= payload_size;
     offset += payload_size;
@@ -845,10 +825,8 @@
   }
   while (!frame_done);
 
-  if (pay->buffer_list) {
-    /* push the whole buffer list at once */
-    ret = gst_rtp_base_payload_push_list (basepayload, list);
-  }
+  /* push the whole buffer list at once */
+  ret = gst_rtp_base_payload_push_list (basepayload, list);
 
   gst_buffer_unmap (buffer, &map);
   gst_buffer_unref (buffer);
@@ -903,10 +881,6 @@
       rtpjpegpay->type = g_value_get_int (value);
       GST_DEBUG_OBJECT (object, "type = %d", rtpjpegpay->type);
       break;
-    case PROP_BUFFER_LIST:
-      rtpjpegpay->buffer_list = g_value_get_boolean (value);
-      GST_DEBUG_OBJECT (object, "buffer_list = %d", rtpjpegpay->buffer_list);
-      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -928,9 +902,6 @@
     case PROP_JPEG_TYPE:
       g_value_set_int (value, rtpjpegpay->type);
       break;
-    case PROP_BUFFER_LIST:
-      g_value_set_boolean (value, rtpjpegpay->buffer_list);
-      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
diff --git a/gst/rtp/gstrtpjpegpay.h b/gst/rtp/gstrtpjpegpay.h
index d7717d7..2d31299 100644
--- a/gst/rtp/gstrtpjpegpay.h
+++ b/gst/rtp/gstrtpjpegpay.h
@@ -47,8 +47,6 @@
   gint height;
   gint width;
 
-  gboolean buffer_list;
-
   guint8 quant;
 };
 
diff --git a/gst/rtp/gstrtpmp4vpay.c b/gst/rtp/gstrtpmp4vpay.c
index 6b94c18..3e84831 100644
--- a/gst/rtp/gstrtpmp4vpay.c
+++ b/gst/rtp/gstrtpmp4vpay.c
@@ -55,15 +55,11 @@
     )
     );
 
-#define DEFAULT_SEND_CONFIG     FALSE
-#define DEFAULT_BUFFER_LIST     FALSE
 #define DEFAULT_CONFIG_INTERVAL 0
 
 enum
 {
   ARG_0,
-  ARG_SEND_CONFIG,
-  ARG_BUFFER_LIST,
   ARG_CONFIG_INTERVAL
 };
 
@@ -108,17 +104,6 @@
       "Payload MPEG-4 video as RTP packets (RFC 3016)",
       "Wim Taymans <wim.taymans@gmail.com>");
 
-  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_SEND_CONFIG,
-      g_param_spec_boolean ("send-config", "Send Config",
-          "Send the config parameters in RTP packets as well(deprecated "
-          "see config-interval)",
-          DEFAULT_SEND_CONFIG, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_BUFFER_LIST,
-      g_param_spec_boolean ("buffer-list", "Buffer Array",
-          "Use Buffer Arrays",
-          DEFAULT_BUFFER_LIST, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
   g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_CONFIG_INTERVAL,
       g_param_spec_uint ("config-interval", "Config Send Interval",
           "Send Config Insertion Interval in seconds (configuration headers "
@@ -143,8 +128,6 @@
   rtpmp4vpay->adapter = gst_adapter_new ();
   rtpmp4vpay->rate = 90000;
   rtpmp4vpay->profile = 1;
-  rtpmp4vpay->buffer_list = DEFAULT_BUFFER_LIST;
-  rtpmp4vpay->send_config = DEFAULT_SEND_CONFIG;
   rtpmp4vpay->need_config = TRUE;
   rtpmp4vpay->config_interval = DEFAULT_CONFIG_INTERVAL;
   rtpmp4vpay->last_config = -1;
@@ -268,12 +251,10 @@
 
   ret = GST_FLOW_OK;
 
-  if (rtpmp4vpay->buffer_list) {
-    /* Use buffer lists. Each frame will be put into a list
-     * of buffers and the whole list will be pushed downstream
-     * at once */
-    list = gst_buffer_list_new ();
-  }
+  /* Use buffer lists. Each frame will be put into a list
+   * of buffers and the whole list will be pushed downstream
+   * at once */
+  list = gst_buffer_list_new ();
 
   while (avail > 0) {
     guint towrite;
@@ -307,21 +288,13 @@
 
     GST_BUFFER_TIMESTAMP (outbuf) = rtpmp4vpay->first_timestamp;
 
-    if (rtpmp4vpay->buffer_list) {
-      /* add to list */
-      gst_buffer_list_insert (list, -1, outbuf);
-    } else {
-      ret =
-          gst_rtp_base_payload_push (GST_RTP_BASE_PAYLOAD (rtpmp4vpay), outbuf);
-    }
+    /* add to list */
+    gst_buffer_list_insert (list, -1, outbuf);
   }
 
-  if (rtpmp4vpay->buffer_list) {
-    /* push the whole buffer list at once */
-    ret =
-        gst_rtp_base_payload_push_list (GST_RTP_BASE_PAYLOAD (rtpmp4vpay),
-        list);
-  }
+  /* push the whole buffer list at once */
+  ret =
+      gst_rtp_base_payload_push_list (GST_RTP_BASE_PAYLOAD (rtpmp4vpay), list);
 
   return ret;
 }
@@ -609,16 +582,6 @@
   rtpmp4vpay = GST_RTP_MP4V_PAY (object);
 
   switch (prop_id) {
-    case ARG_SEND_CONFIG:
-      rtpmp4vpay->send_config = g_value_get_boolean (value);
-      /* send the configuration once every minute */
-      if (rtpmp4vpay->send_config && !(rtpmp4vpay->config_interval > 0)) {
-        rtpmp4vpay->config_interval = 60;
-      }
-      break;
-    case ARG_BUFFER_LIST:
-      rtpmp4vpay->buffer_list = g_value_get_boolean (value);
-      break;
     case ARG_CONFIG_INTERVAL:
       rtpmp4vpay->config_interval = g_value_get_uint (value);
       break;
@@ -636,12 +599,6 @@
   rtpmp4vpay = GST_RTP_MP4V_PAY (object);
 
   switch (prop_id) {
-    case ARG_SEND_CONFIG:
-      g_value_set_boolean (value, rtpmp4vpay->send_config);
-      break;
-    case ARG_BUFFER_LIST:
-      g_value_set_boolean (value, rtpmp4vpay->buffer_list);
-      break;
     case ARG_CONFIG_INTERVAL:
       g_value_set_uint (value, rtpmp4vpay->config_interval);
       break;
diff --git a/gst/rtp/gstrtpmp4vpay.h b/gst/rtp/gstrtpmp4vpay.h
index abdc903..6cb552a 100644
--- a/gst/rtp/gstrtpmp4vpay.h
+++ b/gst/rtp/gstrtpmp4vpay.h
@@ -54,8 +54,6 @@
   gboolean      send_config;
   gboolean      need_config;
 
-  gboolean      buffer_list;
-
   /* naming might be confusing with send_config; but naming matches h264
    * payloader */
   guint         config_interval;
diff --git a/gst/rtp/gstrtpmpadepay.c b/gst/rtp/gstrtpmpadepay.c
index 3bd40ae..25d7466 100644
--- a/gst/rtp/gstrtpmpadepay.c
+++ b/gst/rtp/gstrtpmpadepay.c
@@ -87,7 +87,6 @@
 static void
 gst_rtp_mpa_depay_init (GstRtpMPADepay * rtpmpadepay)
 {
-  /* needed because of GST_BOILERPLATE */
 }
 
 static gboolean
diff --git a/gst/rtp/gstrtpmparobustdepay.c b/gst/rtp/gstrtpmparobustdepay.c
index 47ec61b..193b22e 100644
--- a/gst/rtp/gstrtpmparobustdepay.c
+++ b/gst/rtp/gstrtpmparobustdepay.c
@@ -282,7 +282,7 @@
   dummy->size =
       mp3_type_frame_length_from_header (GST_ELEMENT_CAST (rtpmpadepay),
       dummy->header, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-  dummy->data_size = dummy->size - dummy->side_info;
+  dummy->data_size = dummy->size - 4 - dummy->side_info;
   dummy->backpointer = 0;
 
   dummy->buffer = gst_buffer_new_and_alloc (dummy->side_info + 4);
@@ -444,9 +444,11 @@
       }
     }
     /* rewrite buffer sync header */
-    val = GST_READ_UINT16_BE (buf);
+    gst_buffer_map (buf, &map, GST_MAP_READWRITE);
+    val = GST_READ_UINT16_BE (map.data);
     val = (0x7ff << 5) | val;
-    GST_WRITE_UINT16_BE (buf, val);
+    GST_WRITE_UINT16_BE (map.data, val);
+    gst_buffer_unmap (buf, &map);
     /* store and keep track of last indices */
     rtpmpadepay->last_icc = icc;
     rtpmpadepay->last_ii = iindex;
@@ -503,13 +505,13 @@
 
     if (rtpmpadepay->offset == gst_buffer_get_size (frame->buffer)) {
       if (g_list_next (rtpmpadepay->cur_adu_frame)) {
-        GST_LOG_OBJECT (rtpmpadepay,
-            "moving to next ADU frame, size %d, side_info %d",
-            frame->size, frame->side_info);
         rtpmpadepay->size += frame->data_size;
         rtpmpadepay->cur_adu_frame = g_list_next (rtpmpadepay->cur_adu_frame);
         frame = (GstADUFrame *) rtpmpadepay->cur_adu_frame->data;
         rtpmpadepay->offset = 0;
+        GST_LOG_OBJECT (rtpmpadepay,
+            "moving to next ADU frame, size %d, side_info %d, backpointer %d",
+            frame->size, frame->side_info, frame->backpointer);
         /* layer I and II packets have no bitreservoir and must be sent as-is;
          * so flush any pending frame */
         if (G_UNLIKELY (frame->layer != 3 && rtpmpadepay->mp3_frame))
@@ -529,6 +531,7 @@
       gst_byte_writer_set_pos (rtpmpadepay->mp3_frame, 0);
       /* bytewriter corresponds to head frame,
        * i.e. the header and the side info must match */
+      g_assert (4 + head->side_info <= head->size);
       gst_buffer_map (head->buffer, &map, GST_MAP_READ);
       gst_byte_writer_put_data_unchecked (rtpmpadepay->mp3_frame,
           map.data, 4 + head->side_info);
@@ -593,6 +596,8 @@
         gst_buffer_map (buf, &map, GST_MAP_READ);
         GST_LOG_OBJECT (rtpmpadepay, "adding to current MP3 frame");
         gst_byte_writer_set_pos (rtpmpadepay->mp3_frame, tpos);
+        av -= (tpos - pos);
+        g_assert (map.size >= 4 + frame->side_info);
         av = MIN (av, map.size - 4 - frame->side_info);
         gst_byte_writer_put_data_unchecked (rtpmpadepay->mp3_frame,
             map.data + 4 + frame->side_info, av);
@@ -792,6 +797,8 @@
       g_queue_foreach (rtpmpadepay->adu_frames,
           (GFunc) gst_rtp_mpa_robust_depay_free_frame, NULL);
       g_queue_clear (rtpmpadepay->adu_frames);
+      if (rtpmpadepay->mp3_frame)
+        gst_byte_writer_free (rtpmpadepay->mp3_frame);
       break;
     }
     default:
diff --git a/gst/rtp/gstrtptheoradepay.c b/gst/rtp/gstrtptheoradepay.c
index eff0746..5c6fe82 100644
--- a/gst/rtp/gstrtptheoradepay.c
+++ b/gst/rtp/gstrtptheoradepay.c
@@ -541,11 +541,9 @@
 
     /* create buffer for packet */
     if (G_UNLIKELY (to_free)) {
-      outbuf = gst_buffer_new ();
-      gst_buffer_append_memory (buf,
-          gst_memory_new_wrapped (0, to_free,
-              (payload - to_free) + length, payload - to_free, length, to_free,
-              g_free));
+      outbuf =
+          gst_buffer_new_wrapped_full (0, to_free, (payload - to_free) + length,
+          payload - to_free, length, to_free, g_free);
       to_free = NULL;
     } else {
       outbuf = gst_buffer_new_and_alloc (length);
diff --git a/gst/rtp/gstrtpvorbispay.c b/gst/rtp/gstrtpvorbispay.c
index b2d4ee4..dc1db9b 100644
--- a/gst/rtp/gstrtpvorbispay.c
+++ b/gst/rtp/gstrtpvorbispay.c
@@ -103,7 +103,6 @@
 static void
 gst_rtp_vorbis_pay_init (GstRtpVorbisPay * rtpvorbispay)
 {
-  /* needed because of GST_BOILERPLATE */
 }
 
 static void
diff --git a/gst/rtp/gstrtpvrawdepay.c b/gst/rtp/gstrtpvrawdepay.c
index 120e8ac..4adcffc 100644
--- a/gst/rtp/gstrtpvrawdepay.c
+++ b/gst/rtp/gstrtpvrawdepay.c
@@ -94,7 +94,6 @@
 static void
 gst_rtp_vraw_depay_init (GstRtpVRawDepay * rtpvrawdepay)
 {
-  /* needed because of GST_BOILERPLATE */
 }
 
 static void
@@ -149,7 +148,7 @@
 
   config = gst_buffer_pool_get_config (pool);
   gst_buffer_pool_config_set_params (config, caps, size, min, max);
-  if (gst_query_has_allocation_meta (query, GST_VIDEO_META_API_TYPE)) {
+  if (gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL)) {
     /* just set the metadata, if the pool can support it we will transparently use
      * it through the video info API. We could also see if the pool support this
      * metadata and only activate it then. */
diff --git a/gst/rtpmanager/Makefile.in b/gst/rtpmanager/Makefile.in
index 3aa009b..19acb5a 100644
--- a/gst/rtpmanager/Makefile.in
+++ b/gst/rtpmanager/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -270,7 +270,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
@@ -970,16 +972,16 @@
 
 # these are all the rules generating the relevant files
 $(glib_gen_basename)-marshal.h: $(glib_gen_basename)-marshal.list
-	$(AM_V_GEN)glib-genmarshal --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
+	$(AM_V_GEN)$(GLIB_GENMARSHAL) --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
 	mv $(glib_gen_basename)-marshal.h.tmp $(glib_gen_basename)-marshal.h
 
 $(glib_gen_basename)-marshal.c: $(glib_gen_basename)-marshal.list
 	$(AM_V_GEN)echo "#include \"$(glib_gen_basename)-marshal.h\"" >> $(glib_gen_basename)-marshal.c.tmp && \
-	glib-genmarshal --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
+	$(GLIB_GENMARSHAL) --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
 	mv $(glib_gen_basename)-marshal.c.tmp $(glib_gen_basename)-marshal.c
 
 $(glib_gen_basename)-enumtypes.h: $(glib_enum_headers)
-	$(AM_V_GEN)glib-mkenums \
+	$(AM_V_GEN)$(GLIB_MKENUMS) \
 	--fhead "#ifndef __$(glib_enum_define)_ENUM_TYPES_H__\n#define __$(glib_enum_define)_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
 	--fprod "\n/* enumerations from \"@filename@\" */\n" \
 	--vhead "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n"         \
@@ -988,7 +990,7 @@
 
 $(glib_gen_basename)-enumtypes.c: $(glib_enum_headers)
 	@if test "x$(glib_enum_headers)" = "x"; then echo "ERROR: glib_enum_headers is empty, please fix Makefile"; exit 1; fi
-	$(AM_V_GEN)glib-mkenums \
+	$(AM_V_GEN)$(GLIB_MKENUMS) \
 	--fhead "#include \"$(glib_gen_basename)-enumtypes.h\"\n$(enum_headers)" \
 	--fprod "\n/* enumerations from \"@filename@\" */" \
 	--vhead "GType\n@enum_name@_get_type (void)\n{\n  static volatile gsize g_define_type_id__volatile = 0;\n  if (g_once_init_enter (&g_define_type_id__volatile)) {\n    static const G@Type@Value values[] = {"     \
diff --git a/gst/rtpmanager/gstrtpjitterbuffer.c b/gst/rtpmanager/gstrtpjitterbuffer.c
index 2d7a286..06622c9 100644
--- a/gst/rtpmanager/gstrtpjitterbuffer.c
+++ b/gst/rtpmanager/gstrtpjitterbuffer.c
@@ -904,7 +904,7 @@
         /* start pushing out buffers */
         GST_DEBUG_OBJECT (jitterbuffer, "Starting task on srcpad");
         result = gst_pad_start_task (jitterbuffer->priv->srcpad,
-            (GstTaskFunction) gst_rtp_jitter_buffer_loop, jitterbuffer);
+            (GstTaskFunction) gst_rtp_jitter_buffer_loop, jitterbuffer, NULL);
       } else {
         /* make sure all data processing stops ASAP */
         gst_rtp_jitter_buffer_flush_start (jitterbuffer);
@@ -1255,12 +1255,11 @@
 
   jitterbuffer = GST_RTP_JITTER_BUFFER (parent);
 
-  if (G_UNLIKELY (!gst_rtp_buffer_validate (buffer)))
-    goto invalid_buffer;
-
   priv = jitterbuffer->priv;
 
-  gst_rtp_buffer_map (buffer, GST_MAP_READ, &rtp);
+  if (G_UNLIKELY (!gst_rtp_buffer_map (buffer, GST_MAP_READ, &rtp)))
+    goto invalid_buffer;
+
   pt = gst_rtp_buffer_get_payload_type (&rtp);
   seqnum = gst_rtp_buffer_get_seq (&rtp);
   gst_rtp_buffer_unmap (&rtp);
@@ -1529,7 +1528,7 @@
   guint64 ext_time, elapsed;
   guint32 rtp_time;
   GstRtpJitterBufferPrivate *priv;
-  GstRTPBuffer rtp = { NULL, };
+  GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
 
   priv = jitterbuffer->priv;
   gst_rtp_buffer_map (outbuf, GST_MAP_READ, &rtp);
@@ -1637,7 +1636,7 @@
           GST_INFO_OBJECT (jitterbuffer, "scheduling timeout");
           id = gst_clock_new_single_shot_id (clock, sync_time);
           gst_clock_id_wait_async (id, (GstClockCallback) eos_reached,
-              jitterbuffer);
+              jitterbuffer, NULL);
         }
         GST_OBJECT_UNLOCK (jitterbuffer);
       }
diff --git a/gst/rtpmanager/gstrtpptdemux.c b/gst/rtpmanager/gstrtpptdemux.c
index 634834d..9a2ee1b 100644
--- a/gst/rtpmanager/gstrtpptdemux.c
+++ b/gst/rtpmanager/gstrtpptdemux.c
@@ -354,10 +354,9 @@
 
   rtpdemux = GST_RTP_PT_DEMUX (parent);
 
-  if (!gst_rtp_buffer_validate (buf))
+  if (!gst_rtp_buffer_map (buf, GST_MAP_READ, &rtp))
     goto invalid_buffer;
 
-  gst_rtp_buffer_map (buf, GST_MAP_READ, &rtp);
   pt = gst_rtp_buffer_get_payload_type (&rtp);
   gst_rtp_buffer_unmap (&rtp);
 
diff --git a/gst/rtpmanager/gstrtpsession.c b/gst/rtpmanager/gstrtpsession.c
index 72d9962..123fad7 100644
--- a/gst/rtpmanager/gstrtpsession.c
+++ b/gst/rtpmanager/gstrtpsession.c
@@ -192,7 +192,6 @@
   LAST_SIGNAL
 };
 
-#define DEFAULT_NTP_NS_BASE          0
 #define DEFAULT_BANDWIDTH            RTP_STATS_BANDWIDTH
 #define DEFAULT_RTCP_FRACTION        (RTP_STATS_BANDWIDTH * RTP_STATS_RTCP_FRACTION)
 #define DEFAULT_RTCP_RR_BANDWIDTH    -1
@@ -206,7 +205,6 @@
 enum
 {
   PROP_0,
-  PROP_NTP_NS_BASE,
   PROP_BANDWIDTH,
   PROP_RTCP_FRACTION,
   PROP_RTCP_RR_BANDWIDTH,
@@ -242,8 +240,6 @@
   /* caps mapping */
   GHashTable *ptmap;
 
-  /* NTP base time */
-  guint64 ntpnsbase;
   gboolean use_pipeline_clock;
 };
 
@@ -518,12 +514,6 @@
           on_sender_timeout), NULL, NULL, g_cclosure_marshal_VOID__UINT,
       G_TYPE_NONE, 1, G_TYPE_UINT);
 
-  g_object_class_install_property (gobject_class, PROP_NTP_NS_BASE,
-      g_param_spec_uint64 ("ntp-ns-base", "NTP base time",
-          "The NTP base time corresponding to running_time 0 (deprecated)", 0,
-          G_MAXUINT64, DEFAULT_NTP_NS_BASE,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
   g_object_class_install_property (gobject_class, PROP_BANDWIDTH,
       g_param_spec_double ("bandwidth", "Bandwidth",
           "The bandwidth of the session in bytes per second (0 for auto-discover)",
@@ -682,13 +672,6 @@
   priv = rtpsession->priv;
 
   switch (prop_id) {
-    case PROP_NTP_NS_BASE:
-      GST_OBJECT_LOCK (rtpsession);
-      priv->ntpnsbase = g_value_get_uint64 (value);
-      GST_DEBUG_OBJECT (rtpsession, "setting NTP base to %" GST_TIME_FORMAT,
-          GST_TIME_ARGS (priv->ntpnsbase));
-      GST_OBJECT_UNLOCK (rtpsession);
-      break;
     case PROP_BANDWIDTH:
       g_object_set_property (G_OBJECT (priv->session), "bandwidth", value);
       break;
@@ -730,11 +713,6 @@
   priv = rtpsession->priv;
 
   switch (prop_id) {
-    case PROP_NTP_NS_BASE:
-      GST_OBJECT_LOCK (rtpsession);
-      g_value_set_uint64 (value, priv->ntpnsbase);
-      GST_OBJECT_UNLOCK (rtpsession);
-      break;
     case PROP_BANDWIDTH:
       g_object_get_property (G_OBJECT (priv->session), "bandwidth", value);
       break;
diff --git a/gst/rtpmanager/gstrtpssrcdemux.c b/gst/rtpmanager/gstrtpssrcdemux.c
index 0ddd27b..f933e81 100644
--- a/gst/rtpmanager/gstrtpssrcdemux.c
+++ b/gst/rtpmanager/gstrtpssrcdemux.c
@@ -86,6 +86,12 @@
 #define GST_PAD_LOCK(obj)   (g_rec_mutex_lock (&(obj)->padlock))
 #define GST_PAD_UNLOCK(obj) (g_rec_mutex_unlock (&(obj)->padlock))
 
+typedef enum
+{
+  RTP_PAD,
+  RTCP_PAD
+} PadType;
+
 /* signals */
 enum
 {
@@ -207,9 +213,9 @@
 }
 
 
-/* with PAD_LOCK */
-static GstRtpSsrcDemuxPad *
-find_or_create_demux_pad_for_ssrc (GstRtpSsrcDemux * demux, guint32 ssrc)
+static GstPad *
+find_or_create_demux_pad_for_ssrc (GstRtpSsrcDemux * demux, guint32 ssrc,
+    PadType padtype)
 {
   GstPad *rtp_pad, *rtcp_pad;
   GstElementClass *klass;
@@ -218,12 +224,28 @@
   GstRtpSsrcDemuxPad *demuxpad;
   GstCaps *caps;
   struct ForwardEventData fdata;
+  GstPad *retpad;
+  gulong rtp_block, rtcp_block;
 
   GST_DEBUG_OBJECT (demux, "creating pad for SSRC %08x", ssrc);
 
+  GST_PAD_LOCK (demux);
+
   demuxpad = find_demux_pad_for_ssrc (demux, ssrc);
   if (demuxpad != NULL) {
-    return demuxpad;
+    switch (padtype) {
+      case RTP_PAD:
+        retpad = gst_object_ref (demuxpad->rtp_pad);
+        break;
+      case RTCP_PAD:
+        retpad = gst_object_ref (demuxpad->rtcp_pad);
+        break;
+      default:
+        retpad = NULL;
+        g_assert_not_reached ();
+    }
+    GST_PAD_UNLOCK (demux);
+    return retpad;
   }
 
   klass = GST_ELEMENT_GET_CLASS (demux);
@@ -281,10 +303,38 @@
   gst_element_add_pad (GST_ELEMENT_CAST (demux), rtp_pad);
   gst_element_add_pad (GST_ELEMENT_CAST (demux), rtcp_pad);
 
+  switch (padtype) {
+    case RTP_PAD:
+      retpad = gst_object_ref (demuxpad->rtp_pad);
+      break;
+    case RTCP_PAD:
+      retpad = gst_object_ref (demuxpad->rtcp_pad);
+      break;
+    default:
+      retpad = NULL;
+      g_assert_not_reached ();
+  }
+
+  gst_object_ref (rtp_pad);
+  gst_object_ref (rtcp_pad);
+
+  rtp_block = gst_pad_add_probe (rtp_pad, GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM,
+      NULL, NULL, NULL);
+  rtcp_block = gst_pad_add_probe (rtcp_pad, GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM,
+      NULL, NULL, NULL);
+
+  GST_PAD_UNLOCK (demux);
+
   g_signal_emit (G_OBJECT (demux),
       gst_rtp_ssrc_demux_signals[SIGNAL_NEW_SSRC_PAD], 0, ssrc, rtp_pad);
 
-  return demuxpad;
+  gst_pad_remove_probe (rtp_pad, rtp_block);
+  gst_pad_remove_probe (rtcp_pad, rtcp_block);
+
+  gst_object_unref (rtp_pad);
+  gst_object_unref (rtcp_pad);
+
+  return retpad;
 }
 
 static void
@@ -574,29 +624,22 @@
   GstFlowReturn ret;
   GstRtpSsrcDemux *demux;
   guint32 ssrc;
-  GstRtpSsrcDemuxPad *dpad;
   GstRTPBuffer rtp = { NULL };
   GstPad *srcpad;
 
   demux = GST_RTP_SSRC_DEMUX (parent);
 
-  if (!gst_rtp_buffer_validate (buf))
+  if (!gst_rtp_buffer_map (buf, GST_MAP_READ, &rtp))
     goto invalid_payload;
 
-  gst_rtp_buffer_map (buf, GST_MAP_READ, &rtp);
   ssrc = gst_rtp_buffer_get_ssrc (&rtp);
   gst_rtp_buffer_unmap (&rtp);
 
   GST_DEBUG_OBJECT (demux, "received buffer of SSRC %08x", ssrc);
 
-  GST_PAD_LOCK (demux);
-  dpad = find_or_create_demux_pad_for_ssrc (demux, ssrc);
-  if (dpad == NULL) {
-    GST_PAD_UNLOCK (demux);
+  srcpad = find_or_create_demux_pad_for_ssrc (demux, ssrc, RTP_PAD);
+  if (srcpad == NULL)
     goto create_failed;
-  }
-  srcpad = gst_object_ref (dpad->rtp_pad);
-  GST_PAD_UNLOCK (demux);
 
   /* push to srcpad */
   ret = gst_pad_push (srcpad, buf);
@@ -630,7 +673,6 @@
   GstFlowReturn ret;
   GstRtpSsrcDemux *demux;
   guint32 ssrc;
-  GstRtpSsrcDemuxPad *dpad;
   GstRTCPPacket packet;
   GstRTCPBuffer rtcp = { NULL, };
   GstPad *srcpad;
@@ -660,14 +702,9 @@
 
   GST_DEBUG_OBJECT (demux, "received RTCP of SSRC %08x", ssrc);
 
-  GST_PAD_LOCK (demux);
-  dpad = find_or_create_demux_pad_for_ssrc (demux, ssrc);
-  if (dpad == NULL) {
-    GST_PAD_UNLOCK (demux);
+  srcpad = find_or_create_demux_pad_for_ssrc (demux, ssrc, RTCP_PAD);
+  if (srcpad == NULL)
     goto create_failed;
-  }
-  srcpad = gst_object_ref (dpad->rtcp_pad);
-  GST_PAD_UNLOCK (demux);
 
   /* push to srcpad */
   ret = gst_pad_push (srcpad, buf);
diff --git a/gst/rtpmanager/rtpsession.c b/gst/rtpmanager/rtpsession.c
index bb39c08..fa55c16 100644
--- a/gst/rtpmanager/rtpsession.c
+++ b/gst/rtpmanager/rtpsession.c
@@ -1711,26 +1711,23 @@
   g_return_val_if_fail (RTP_IS_SESSION (sess), GST_FLOW_ERROR);
   g_return_val_if_fail (GST_IS_BUFFER (buffer), GST_FLOW_ERROR);
 
-  if (!gst_rtp_buffer_validate (buffer))
+  if (!gst_rtp_buffer_map (buffer, GST_MAP_READ, &rtp))
     goto invalid_packet;
 
   RTP_SESSION_LOCK (sess);
-  /* update arrival stats */
-  update_arrival_stats (sess, &arrival, TRUE, buffer, current_time,
-      running_time, -1);
-
   /* ignore more RTP packets when we left the session */
   if (sess->source->received_bye)
     goto ignore;
 
+  /* update arrival stats */
+  update_arrival_stats (sess, &arrival, TRUE, buffer, current_time,
+      running_time, -1);
+
   /* get SSRC and look up in session database */
-  gst_rtp_buffer_map (buffer, GST_MAP_READ, &rtp);
   ssrc = gst_rtp_buffer_get_ssrc (&rtp);
   source = obtain_source (sess, ssrc, &created, &arrival, TRUE);
-  if (!source) {
-    gst_rtp_buffer_unmap (&rtp);
+  if (!source)
     goto collision;
-  }
 
   /* copy available csrc for later */
   count = gst_rtp_buffer_get_csrc_count (&rtp);
@@ -1811,14 +1808,15 @@
 ignore:
   {
     RTP_SESSION_UNLOCK (sess);
+    gst_rtp_buffer_unmap (&rtp);
     gst_buffer_unref (buffer);
-    clean_arrival_stats (&arrival);
     GST_DEBUG ("ignoring RTP packet because we are leaving");
     return GST_FLOW_OK;
   }
 collision:
   {
     RTP_SESSION_UNLOCK (sess);
+    gst_rtp_buffer_unmap (&rtp);
     gst_buffer_unref (buffer);
     clean_arrival_stats (&arrival);
     GST_DEBUG ("ignoring packet because its collisioning");
@@ -2454,26 +2452,11 @@
   GstFlowReturn result;
   RTPSource *source;
   gboolean prevsender;
-  gboolean valid_packet;
   guint64 oldrate;
 
   g_return_val_if_fail (RTP_IS_SESSION (sess), GST_FLOW_ERROR);
   g_return_val_if_fail (is_list || GST_IS_BUFFER (data), GST_FLOW_ERROR);
 
-  if (is_list) {
-    GstBufferList *blist = GST_BUFFER_LIST_CAST (data);
-    gint i, len = gst_buffer_list_length (blist);
-
-    valid_packet = TRUE;
-    for (i = 0; i < len; i++)
-      valid_packet &= gst_rtp_buffer_validate (gst_buffer_list_get (blist, i));
-  } else {
-    valid_packet = gst_rtp_buffer_validate (GST_BUFFER_CAST (data));
-  }
-
-  if (!valid_packet)
-    goto invalid_packet;
-
   GST_LOG ("received RTP %s for sending", is_list ? "list" : "packet");
 
   RTP_SESSION_LOCK (sess);
@@ -2495,14 +2478,6 @@
   RTP_SESSION_UNLOCK (sess);
 
   return result;
-
-  /* ERRORS */
-invalid_packet:
-  {
-    gst_mini_object_unref (GST_MINI_OBJECT_CAST (data));
-    GST_DEBUG ("invalid RTP packet received");
-    return GST_FLOW_OK;
-  }
 }
 
 static void
diff --git a/gst/rtsp/Makefile.in b/gst/rtsp/Makefile.in
index 7c01665..f58e592 100644
--- a/gst/rtsp/Makefile.in
+++ b/gst/rtsp/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -249,7 +249,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/rtsp/gstrtpdec.c b/gst/rtsp/gstrtpdec.c
index 1ec0b93..a639b8c 100644
--- a/gst/rtsp/gstrtpdec.c
+++ b/gst/rtsp/gstrtpdec.c
@@ -469,11 +469,9 @@
 
   GST_DEBUG_OBJECT (rtpdec, "got rtp packet");
 
-  if (!gst_rtp_buffer_validate (buffer))
+  if (!gst_rtp_buffer_map (buffer, GST_MAP_READ, &rtp))
     goto bad_packet;
 
-
-  gst_rtp_buffer_map (buffer, GST_MAP_READ, &rtp);
   ssrc = gst_rtp_buffer_get_ssrc (&rtp);
   pt = gst_rtp_buffer_get_payload_type (&rtp);
   gst_rtp_buffer_unmap (&rtp);
@@ -521,7 +519,7 @@
     session->recv_rtp_src = gst_pad_new_from_template (templ, name);
     g_free (name);
 
-    gst_pad_push_event (session->recv_rtp_src, gst_event_new_caps (caps));
+    gst_pad_set_caps (session->recv_rtp_src, caps);
 
     gst_pad_set_element_private (session->recv_rtp_src, session);
     gst_pad_set_query_function (session->recv_rtp_src, gst_rtp_dec_query_src);
diff --git a/gst/rtsp/gstrtspsrc.c b/gst/rtsp/gstrtspsrc.c
index d86cce8..4a0e4d1 100644
--- a/gst/rtsp/gstrtspsrc.c
+++ b/gst/rtsp/gstrtspsrc.c
@@ -248,15 +248,14 @@
 static gboolean gst_rtspsrc_setup_auth (GstRTSPSrc * src,
     GstRTSPMessage * response);
 
-static void gst_rtspsrc_loop_send_cmd (GstRTSPSrc * src, gint cmd);
+static void gst_rtspsrc_loop_send_cmd (GstRTSPSrc * src, gint cmd, gint mask);
 static GstRTSPResult gst_rtspsrc_send_cb (GstRTSPExtension * ext,
     GstRTSPMessage * request, GstRTSPMessage * response, GstRTSPSrc * src);
 
 static GstRTSPResult gst_rtspsrc_open (GstRTSPSrc * src, gboolean async);
 static GstRTSPResult gst_rtspsrc_play (GstRTSPSrc * src, GstSegment * segment,
     gboolean async);
-static GstRTSPResult gst_rtspsrc_pause (GstRTSPSrc * src, gboolean idle,
-    gboolean async);
+static GstRTSPResult gst_rtspsrc_pause (GstRTSPSrc * src, gboolean async);
 static GstRTSPResult gst_rtspsrc_close (GstRTSPSrc * src, gboolean async,
     gboolean only_close);
 
@@ -266,18 +265,17 @@
 static gboolean gst_rtspsrc_activate_streams (GstRTSPSrc * src);
 static gboolean gst_rtspsrc_loop (GstRTSPSrc * src);
 static gboolean gst_rtspsrc_stream_push_event (GstRTSPSrc * src,
-    GstRTSPStream * stream, GstEvent * event, gboolean source);
-static gboolean gst_rtspsrc_push_event (GstRTSPSrc * src, GstEvent * event,
-    gboolean source);
+    GstRTSPStream * stream, GstEvent * event);
+static gboolean gst_rtspsrc_push_event (GstRTSPSrc * src, GstEvent * event);
 
 /* commands we send to out loop to notify it of events */
-#define CMD_OPEN	0
-#define CMD_PLAY	1
-#define CMD_PAUSE	2
-#define CMD_CLOSE	3
-#define CMD_WAIT	4
-#define CMD_RECONNECT	5
-#define CMD_LOOP	6
+#define CMD_OPEN	(1 << 0)
+#define CMD_PLAY	(1 << 1)
+#define CMD_PAUSE	(1 << 2)
+#define CMD_CLOSE	(1 << 3)
+#define CMD_WAIT	(1 << 4)
+#define CMD_RECONNECT	(1 << 5)
+#define CMD_LOOP	(1 << 6)
 
 #define GST_ELEMENT_PROGRESS(el, type, code, text)      \
 G_STMT_START {                                          \
@@ -1519,7 +1517,7 @@
       tmp_rtp >= src->client_port_range.max)
     goto no_ports;
 
-  udpsrc0 = gst_element_make_from_uri (GST_URI_SRC, host, NULL);
+  udpsrc0 = gst_element_make_from_uri (GST_URI_SRC, host, NULL, NULL);
   if (udpsrc0 == NULL)
     goto no_udp_protocol;
   g_object_set (G_OBJECT (udpsrc0), "port", tmp_rtp, "reuse", FALSE, NULL);
@@ -1568,7 +1566,7 @@
   }
 
   /* allocate port+1 for RTCP now */
-  udpsrc1 = gst_element_make_from_uri (GST_URI_SRC, host, NULL);
+  udpsrc1 = gst_element_make_from_uri (GST_URI_SRC, host, NULL, NULL);
   if (udpsrc1 == NULL)
     goto no_udp_rtcp_protocol;
 
@@ -1666,8 +1664,6 @@
   gint cmd, i;
   GstState state;
   GList *walk;
-  GstClock *clock;
-  GstClockTime base_time = GST_CLOCK_TIME_NONE;
 
   if (flush) {
     event = gst_event_new_flush_start ();
@@ -1675,31 +1671,20 @@
     cmd = CMD_WAIT;
     state = GST_STATE_PAUSED;
   } else {
-    event = gst_event_new_flush_stop (TRUE);
+    event = gst_event_new_flush_stop (FALSE);
     GST_DEBUG_OBJECT (src, "stop flush; playing %d", playing);
     cmd = CMD_LOOP;
     if (playing)
       state = GST_STATE_PLAYING;
     else
       state = GST_STATE_PAUSED;
-    clock = gst_element_get_clock (GST_ELEMENT_CAST (src));
-    if (clock) {
-      base_time = gst_clock_get_time (clock);
-      gst_object_unref (clock);
-    }
   }
-  gst_rtspsrc_push_event (src, event, FALSE);
-  gst_rtspsrc_loop_send_cmd (src, cmd);
+  gst_rtspsrc_push_event (src, event);
+  gst_rtspsrc_loop_send_cmd (src, cmd, CMD_LOOP);
 
-  /* set up manager before data-flow resumes */
   /* to manage jitterbuffer buffer mode */
-  if (src->manager) {
-    gst_element_set_base_time (GST_ELEMENT_CAST (src->manager), base_time);
-    /* and to have base_time trickle further down,
-     * e.g. to jitterbuffer for its timeout handling */
-    if (base_time != -1)
-      gst_element_set_state (GST_ELEMENT_CAST (src->manager), state);
-  }
+  if (src->manager)
+    gst_element_set_state (GST_ELEMENT_CAST (src->manager), state);
 
   /* make running time start start at 0 again */
   for (walk = src->streams; walk; walk = g_list_next (walk)) {
@@ -1708,15 +1693,10 @@
     for (i = 0; i < 2; i++) {
       /* for udp case */
       if (stream->udpsrc[i]) {
-        if (base_time != -1)
-          gst_element_set_base_time (stream->udpsrc[i], base_time);
         gst_element_set_state (stream->udpsrc[i], state);
       }
     }
   }
-  /* for tcp interleaved case */
-  if (base_time != -1)
-    gst_element_set_base_time (GST_ELEMENT_CAST (src), base_time);
 }
 
 static GstRTSPResult
@@ -1866,7 +1846,7 @@
   if (playing) {
     /* obtain current position in case seek fails */
     gst_rtspsrc_get_position (src);
-    gst_rtspsrc_pause (src, FALSE, FALSE);
+    gst_rtspsrc_pause (src, FALSE);
   }
   src->skip = skip;
 
@@ -2291,7 +2271,7 @@
     goto was_eos;
 
   stream->eos = TRUE;
-  gst_rtspsrc_stream_push_event (src, stream, gst_event_new_eos (), TRUE);
+  gst_rtspsrc_stream_push_event (src, stream, gst_event_new_eos ());
   return;
 
   /* ERRORS */
@@ -2695,7 +2675,8 @@
   /* creating UDP source for RTP */
   if (min != -1) {
     uri = g_strdup_printf ("udp://%s:%d", destination, min);
-    stream->udpsrc[0] = gst_element_make_from_uri (GST_URI_SRC, uri, NULL);
+    stream->udpsrc[0] =
+        gst_element_make_from_uri (GST_URI_SRC, uri, NULL, NULL);
     g_free (uri);
     if (stream->udpsrc[0] == NULL)
       goto no_element;
@@ -2703,6 +2684,10 @@
     /* take ownership */
     gst_object_ref_sink (stream->udpsrc[0]);
 
+    if (src->udp_buffer_size != 0)
+      g_object_set (G_OBJECT (stream->udpsrc[0]), "buffer-size",
+          src->udp_buffer_size, NULL);
+
     /* change state */
     gst_element_set_state (stream->udpsrc[0], GST_STATE_PAUSED);
   }
@@ -2710,7 +2695,8 @@
   /* creating another UDP source for RTCP */
   if (max != -1) {
     uri = g_strdup_printf ("udp://%s:%d", destination, max);
-    stream->udpsrc[1] = gst_element_make_from_uri (GST_URI_SRC, uri, NULL);
+    stream->udpsrc[1] =
+        gst_element_make_from_uri (GST_URI_SRC, uri, NULL, NULL);
     g_free (uri);
     if (stream->udpsrc[1] == NULL)
       goto no_element;
@@ -2837,7 +2823,8 @@
         rtp_port);
 
     uri = g_strdup_printf ("udp://%s:%d", destination, rtp_port);
-    stream->udpsink[0] = gst_element_make_from_uri (GST_URI_SINK, uri, NULL);
+    stream->udpsink[0] =
+        gst_element_make_from_uri (GST_URI_SINK, uri, NULL, NULL);
     g_free (uri);
     if (stream->udpsink[0] == NULL)
       goto no_sink_element;
@@ -2889,7 +2876,8 @@
         rtcp_port);
 
     uri = g_strdup_printf ("udp://%s:%d", destination, rtcp_port);
-    stream->udpsink[1] = gst_element_make_from_uri (GST_URI_SINK, uri, NULL);
+    stream->udpsink[1] =
+        gst_element_make_from_uri (GST_URI_SINK, uri, NULL, NULL);
     g_free (uri);
     if (stream->udpsink[1] == NULL)
       goto no_sink_element;
@@ -3103,15 +3091,15 @@
       g_object_set (G_OBJECT (stream->udpsrc[0]), "timeout", (guint64) 0, NULL);
     }
     if (stream->srcpad) {
+      GST_DEBUG_OBJECT (src, "activating stream pad %p", stream);
+      gst_pad_set_active (stream->srcpad, TRUE);
+
       /* if we don't have a session manager, set the caps now. If we have a
        * session, we will get a notification of the pad and the caps. */
       if (!src->manager) {
         GST_DEBUG_OBJECT (src, "setting pad caps for stream %p", stream);
         gst_pad_set_caps (stream->srcpad, stream->caps);
       }
-
-      GST_DEBUG_OBJECT (src, "activating stream pad %p", stream);
-      gst_pad_set_active (stream->srcpad, TRUE);
       /* add the pad */
       if (!stream->added) {
         GST_DEBUG_OBJECT (src, "adding stream pad %p", stream);
@@ -3215,7 +3203,7 @@
 
 static gboolean
 gst_rtspsrc_stream_push_event (GstRTSPSrc * src, GstRTSPStream * stream,
-    GstEvent * event, gboolean source)
+    GstEvent * event)
 {
   gboolean res = TRUE;
 
@@ -3223,7 +3211,7 @@
   if (stream->srcpad == NULL)
     goto done;
 
-  if (source && stream->udpsrc[0]) {
+  if (stream->udpsrc[0]) {
     gst_event_ref (event);
     res = gst_element_send_event (stream->udpsrc[0], event);
   } else if (stream->channelpad[0]) {
@@ -3234,7 +3222,7 @@
       res = gst_pad_send_event (stream->channelpad[0], event);
   }
 
-  if (source && stream->udpsrc[1]) {
+  if (stream->udpsrc[1]) {
     gst_event_ref (event);
     res &= gst_element_send_event (stream->udpsrc[1], event);
   } else if (stream->channelpad[1]) {
@@ -3252,7 +3240,7 @@
 }
 
 static gboolean
-gst_rtspsrc_push_event (GstRTSPSrc * src, GstEvent * event, gboolean source)
+gst_rtspsrc_push_event (GstRTSPSrc * src, GstEvent * event)
 {
   GList *streams;
   gboolean res = TRUE;
@@ -3261,7 +3249,7 @@
     GstRTSPStream *ostream = (GstRTSPStream *) streams->data;
 
     gst_event_ref (event);
-    res &= gst_rtspsrc_stream_push_event (src, ostream, event, source);
+    res &= gst_rtspsrc_stream_push_event (src, ostream, event);
   }
   gst_event_unref (event);
 
@@ -3344,6 +3332,7 @@
 gst_rtsp_conninfo_close (GstRTSPSrc * src, GstRTSPConnInfo * info,
     gboolean free)
 {
+  GST_RTSP_STATE_LOCK (src);
   if (info->connected) {
     GST_DEBUG_OBJECT (src, "closing connection...");
     gst_rtsp_connection_close (info->connection);
@@ -3355,6 +3344,7 @@
     gst_rtsp_connection_free (info->connection);
     info->connection = NULL;
   }
+  GST_RTSP_STATE_UNLOCK (src);
   return GST_RTSP_OK;
 }
 
@@ -3377,6 +3367,7 @@
   GList *walk;
 
   GST_DEBUG_OBJECT (src, "set flushing %d", flush);
+  GST_RTSP_STATE_LOCK (src);
   if (src->conninfo.connection) {
     GST_DEBUG_OBJECT (src, "connection flush");
     gst_rtsp_connection_flush (src->conninfo.connection, flush);
@@ -3387,6 +3378,7 @@
     if (stream->conninfo.connection)
       gst_rtsp_connection_flush (stream->conninfo.connection, flush);
   }
+  GST_RTSP_STATE_UNLOCK (src);
 }
 
 /* FIXME, handle server request, reply with OK, for now */
@@ -4067,7 +4059,7 @@
 }
 
 static void
-gst_rtspsrc_loop_send_cmd (GstRTSPSrc * src, gint cmd)
+gst_rtspsrc_loop_send_cmd (GstRTSPSrc * src, gint cmd, gint mask)
 {
   gint old;
 
@@ -4077,19 +4069,21 @@
   GST_DEBUG_OBJECT (src, "sending cmd %d", cmd);
 
   GST_OBJECT_LOCK (src);
-  old = src->loop_cmd;
+  old = src->pending_cmd;
   if (old != CMD_WAIT) {
-    src->loop_cmd = CMD_WAIT;
+    src->pending_cmd = CMD_WAIT;
     GST_OBJECT_UNLOCK (src);
     /* cancel previous request */
     gst_rtspsrc_loop_cancel_cmd (src, old);
     GST_OBJECT_LOCK (src);
   }
-  src->loop_cmd = cmd;
+  src->pending_cmd = cmd;
   /* interrupt if allowed */
-  if (src->waiting) {
-    GST_DEBUG_OBJECT (src, "start connection flush");
+  if (src->busy_cmd & mask) {
+    GST_DEBUG_OBJECT (src, "connection flush busy %d", src->busy_cmd);
     gst_rtspsrc_connection_flush (src, TRUE);
+  } else {
+    GST_DEBUG_OBJECT (src, "not interrupting busy cmd %d", src->busy_cmd);
   }
   if (src->task)
     gst_task_start (src->task);
@@ -4133,8 +4127,11 @@
         gst_element_post_message (GST_ELEMENT_CAST (src),
             gst_message_new_segment_done (GST_OBJECT_CAST (src),
                 src->segment.format, src->segment.position));
+        gst_rtspsrc_push_event (src,
+            gst_event_new_segment_done (src->segment.format,
+                src->segment.position));
       } else {
-        gst_rtspsrc_push_event (src, gst_event_new_eos (), FALSE);
+        gst_rtspsrc_push_event (src, gst_event_new_eos ());
       }
     } else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_EOS) {
       /* for fatal errors we post an error message, post the error before the
@@ -4142,7 +4139,7 @@
       GST_ELEMENT_ERROR (src, STREAM, FAILED,
           ("Internal data flow error."),
           ("streaming task paused, reason %s (%d)", reason, ret));
-      gst_rtspsrc_push_event (src, gst_event_new_eos (), FALSE);
+      gst_rtspsrc_push_event (src, gst_event_new_eos ());
     }
     return FALSE;
   }
@@ -6252,7 +6249,7 @@
 }
 
 static GstRTSPResult
-gst_rtspsrc_pause (GstRTSPSrc * src, gboolean idle, gboolean async)
+gst_rtspsrc_pause (GstRTSPSrc * src, gboolean async)
 {
   GstRTSPResult res = GST_RTSP_OK;
   GstRTSPMessage request = { 0 };
@@ -6399,7 +6396,7 @@
         /* we only act on the first udp timeout message, others are irrelevant
          * and can be ignored. */
         if (!ignore_timeout)
-          gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_RECONNECT);
+          gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_RECONNECT, CMD_LOOP);
         /* eat and free */
         gst_message_unref (message);
         return;
@@ -6456,46 +6453,39 @@
 gst_rtspsrc_thread (GstRTSPSrc * src)
 {
   gint cmd;
-  GstRTSPResult ret;
-  gboolean running = FALSE;
 
   GST_OBJECT_LOCK (src);
-  cmd = src->loop_cmd;
-  src->loop_cmd = CMD_WAIT;
+  cmd = src->pending_cmd;
+  if (cmd == CMD_PLAY || cmd == CMD_LOOP)
+    src->pending_cmd = CMD_LOOP;
+  else
+    src->pending_cmd = CMD_WAIT;
   GST_DEBUG_OBJECT (src, "got command %d", cmd);
 
   /* we got the message command, so ensure communication is possible again */
   gst_rtspsrc_connection_flush (src, FALSE);
 
-  /* we allow these to be interrupted */
-  if (cmd == CMD_LOOP || cmd == CMD_CLOSE || cmd == CMD_PAUSE)
-    src->waiting = TRUE;
+  src->busy_cmd = cmd;
   GST_OBJECT_UNLOCK (src);
 
   switch (cmd) {
     case CMD_OPEN:
-      ret = gst_rtspsrc_open (src, TRUE);
+      gst_rtspsrc_open (src, TRUE);
       break;
     case CMD_PLAY:
-      ret = gst_rtspsrc_play (src, &src->segment, TRUE);
-      if (ret == GST_RTSP_OK)
-        running = TRUE;
+      gst_rtspsrc_play (src, &src->segment, TRUE);
       break;
     case CMD_PAUSE:
-      ret = gst_rtspsrc_pause (src, TRUE, TRUE);
-      if (ret == GST_RTSP_OK)
-        running = TRUE;
+      gst_rtspsrc_pause (src, TRUE);
       break;
     case CMD_CLOSE:
-      ret = gst_rtspsrc_close (src, TRUE, FALSE);
+      gst_rtspsrc_close (src, TRUE, FALSE);
       break;
     case CMD_LOOP:
-      running = gst_rtspsrc_loop (src);
+      gst_rtspsrc_loop (src);
       break;
     case CMD_RECONNECT:
-      ret = gst_rtspsrc_reconnect (src, FALSE);
-      if (ret == GST_RTSP_OK)
-        running = TRUE;
+      gst_rtspsrc_reconnect (src, FALSE);
       break;
     default:
       break;
@@ -6503,14 +6493,12 @@
 
   GST_OBJECT_LOCK (src);
   /* and go back to sleep */
-  if (src->loop_cmd == CMD_WAIT) {
-    if (running)
-      src->loop_cmd = CMD_LOOP;
-    else if (src->task)
+  if (src->pending_cmd == CMD_WAIT) {
+    if (src->task)
       gst_task_pause (src->task);
   }
   /* reset waiting */
-  src->waiting = FALSE;
+  src->busy_cmd = CMD_WAIT;
   GST_OBJECT_UNLOCK (src);
 }
 
@@ -6521,10 +6509,10 @@
 
   GST_OBJECT_LOCK (src);
 
-  src->loop_cmd = CMD_WAIT;
+  src->pending_cmd = CMD_WAIT;
 
   if (src->task == NULL) {
-    src->task = gst_task_new ((GstTaskFunction) gst_rtspsrc_thread, src);
+    src->task = gst_task_new ((GstTaskFunction) gst_rtspsrc_thread, src, NULL);
     if (src->task == NULL)
       goto task_error;
 
@@ -6550,7 +6538,7 @@
   GST_DEBUG_OBJECT (src, "stopping");
 
   /* also cancels pending task */
-  gst_rtspsrc_loop_send_cmd (src, CMD_WAIT);
+  gst_rtspsrc_loop_send_cmd (src, CMD_WAIT, CMD_CLOSE);
 
   GST_OBJECT_LOCK (src);
   if ((task = src->task)) {
@@ -6598,12 +6586,12 @@
       /* first attempt, don't ignore timeouts */
       rtspsrc->ignore_timeout = FALSE;
       rtspsrc->open_error = FALSE;
-      gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_OPEN);
+      gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_OPEN, 0);
       break;
     case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
     case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
       /* unblock the tcp tasks and make the loop waiting */
-      gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_WAIT);
+      gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_WAIT, CMD_LOOP);
       break;
     case GST_STATE_CHANGE_PAUSED_TO_READY:
       break;
@@ -6617,18 +6605,18 @@
 
   switch (transition) {
     case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
-      gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_PLAY);
+      gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_PLAY, 0);
       break;
     case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
       /* send pause request and keep the idle task around */
-      gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_PAUSE);
+      gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_PAUSE, CMD_LOOP);
       ret = GST_STATE_CHANGE_NO_PREROLL;
       break;
     case GST_STATE_CHANGE_READY_TO_PAUSED:
       ret = GST_STATE_CHANGE_NO_PREROLL;
       break;
     case GST_STATE_CHANGE_PAUSED_TO_READY:
-      gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_CLOSE);
+      gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_CLOSE, CMD_PAUSE);
       break;
     case GST_STATE_CHANGE_READY_TO_NULL:
       gst_rtspsrc_stop (rtspsrc);
@@ -6656,7 +6644,7 @@
   rtspsrc = GST_RTSPSRC (element);
 
   if (GST_EVENT_IS_DOWNSTREAM (event)) {
-    res = gst_rtspsrc_push_event (rtspsrc, event, TRUE);
+    res = gst_rtspsrc_push_event (rtspsrc, event);
   } else {
     res = GST_ELEMENT_CLASS (parent_class)->send_event (element, event);
   }
diff --git a/gst/rtsp/gstrtspsrc.h b/gst/rtsp/gstrtspsrc.h
index eb7f8e5..d75dc29 100644
--- a/gst/rtsp/gstrtspsrc.h
+++ b/gst/rtsp/gstrtspsrc.h
@@ -178,9 +178,9 @@
   GstClockTime     base_time;
 
   /* UDP mode loop */
-  gint             loop_cmd;
+  gint             pending_cmd;
+  gint             busy_cmd;
   gboolean         ignore_timeout;
-  gboolean         waiting;
   gboolean         open_error;
 
   /* mutex for protecting state changes */
diff --git a/gst/shapewipe/Makefile.in b/gst/shapewipe/Makefile.in
index 5d58f25..1f3438c 100644
--- a/gst/shapewipe/Makefile.in
+++ b/gst/shapewipe/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -247,7 +247,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/smpte/Makefile.in b/gst/smpte/Makefile.in
index 319c407..2951de3 100644
--- a/gst/smpte/Makefile.in
+++ b/gst/smpte/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -250,7 +250,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/smpte/gstsmpte.c b/gst/smpte/gstsmpte.c
index c2ed40a..5df1f91 100644
--- a/gst/smpte/gstsmpte.c
+++ b/gst/smpte/gstsmpte.c
@@ -84,7 +84,6 @@
 #define DEFAULT_PROP_TYPE	1
 #define DEFAULT_PROP_BORDER	0
 #define DEFAULT_PROP_DEPTH	16
-#define DEFAULT_PROP_FPS	0.
 #define DEFAULT_PROP_DURATION	GST_SECOND
 #define DEFAULT_PROP_INVERT   FALSE
 
@@ -94,7 +93,6 @@
   PROP_TYPE,
   PROP_BORDER,
   PROP_DEPTH,
-  PROP_FPS,
   PROP_DURATION,
   PROP_INVERT,
   PROP_LAST,
@@ -185,11 +183,6 @@
       g_param_spec_enum ("type", "Type", "The type of transition to use",
           GST_TYPE_SMPTE_TRANSITION_TYPE, DEFAULT_PROP_TYPE,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_FPS,
-      g_param_spec_float ("fps", "FPS",
-          "Frames per second if no input files are given (deprecated)", 0.,
-          G_MAXFLOAT, DEFAULT_PROP_FPS,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
   g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_BORDER,
       g_param_spec_int ("border", "Border",
           "The border width of the transition", 0, G_MAXINT,
@@ -288,9 +281,6 @@
   smpte->fps_num = GST_VIDEO_INFO_FPS_N (&vinfo);
   smpte->fps_denom = GST_VIDEO_INFO_FPS_D (&vinfo);
 
-  /* for backward compat, we store these here */
-  smpte->fps = ((gdouble) smpte->fps_num) / smpte->fps_denom;
-
   /* figure out the duration in frames */
   smpte->end_position = gst_util_uint64_scale (smpte->duration,
       smpte->fps_num, GST_SECOND * smpte->fps_denom);
@@ -370,7 +360,6 @@
   gst_collect_pads_add_pad (smpte->collect, smpte->sinkpad2,
       sizeof (GstCollectData));
 
-  smpte->fps = DEFAULT_PROP_FPS;
   smpte->type = DEFAULT_PROP_TYPE;
   smpte->border = DEFAULT_PROP_BORDER;
   smpte->depth = DEFAULT_PROP_DEPTH;
@@ -598,9 +587,6 @@
     case PROP_BORDER:
       smpte->border = g_value_get_int (value);
       break;
-    case PROP_FPS:
-      smpte->fps = g_value_get_float (value);
-      break;
     case PROP_DEPTH:
       smpte->depth = g_value_get_int (value);
       break;
@@ -628,9 +614,6 @@
     case PROP_TYPE:
       g_value_set_enum (value, smpte->type);
       break;
-    case PROP_FPS:
-      g_value_set_float (value, smpte->fps);
-      break;
     case PROP_BORDER:
       g_value_set_int (value, smpte->border);
       break;
diff --git a/gst/spectrum/Makefile.in b/gst/spectrum/Makefile.in
index c52e403..744ea59 100644
--- a/gst/spectrum/Makefile.in
+++ b/gst/spectrum/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -248,7 +248,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/udp/Makefile.in b/gst/udp/Makefile.in
index 0c35a0e..282d164 100644
--- a/gst/udp/Makefile.in
+++ b/gst/udp/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -263,7 +263,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
@@ -918,16 +920,16 @@
 
 # these are all the rules generating the relevant files
 $(glib_gen_basename)-marshal.h: $(glib_gen_basename)-marshal.list
-	$(AM_V_GEN)glib-genmarshal --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
+	$(AM_V_GEN)$(GLIB_GENMARSHAL) --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
 	mv $(glib_gen_basename)-marshal.h.tmp $(glib_gen_basename)-marshal.h
 
 $(glib_gen_basename)-marshal.c: $(glib_gen_basename)-marshal.list
 	$(AM_V_GEN)echo "#include \"$(glib_gen_basename)-marshal.h\"" >> $(glib_gen_basename)-marshal.c.tmp && \
-	glib-genmarshal --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
+	$(GLIB_GENMARSHAL) --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
 	mv $(glib_gen_basename)-marshal.c.tmp $(glib_gen_basename)-marshal.c
 
 $(glib_gen_basename)-enumtypes.h: $(glib_enum_headers)
-	$(AM_V_GEN)glib-mkenums \
+	$(AM_V_GEN)$(GLIB_MKENUMS) \
 	--fhead "#ifndef __$(glib_enum_define)_ENUM_TYPES_H__\n#define __$(glib_enum_define)_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
 	--fprod "\n/* enumerations from \"@filename@\" */\n" \
 	--vhead "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n"         \
@@ -936,7 +938,7 @@
 
 $(glib_gen_basename)-enumtypes.c: $(glib_enum_headers)
 	@if test "x$(glib_enum_headers)" = "x"; then echo "ERROR: glib_enum_headers is empty, please fix Makefile"; exit 1; fi
-	$(AM_V_GEN)glib-mkenums \
+	$(AM_V_GEN)$(GLIB_MKENUMS) \
 	--fhead "#include \"$(glib_gen_basename)-enumtypes.h\"\n$(enum_headers)" \
 	--fprod "\n/* enumerations from \"@filename@\" */" \
 	--vhead "GType\n@enum_name@_get_type (void)\n{\n  static volatile gsize g_define_type_id__volatile = 0;\n  if (g_once_init_enter (&g_define_type_id__volatile)) {\n    static const G@Type@Value values[] = {"     \
diff --git a/gst/udp/gstmultiudpsink.c b/gst/udp/gstmultiudpsink.c
index c80bdda..8db4db9 100644
--- a/gst/udp/gstmultiudpsink.c
+++ b/gst/udp/gstmultiudpsink.c
@@ -468,11 +468,6 @@
     mem = gst_buffer_get_memory (buffer, i);
     gst_memory_map (mem, &map[i], GST_MAP_READ);
 
-    if (map[i].size > UDP_MAX_SIZE) {
-      GST_WARNING ("Attempting to send a UDP packet larger than maximum "
-          "size (%" G_GSIZE_FORMAT " > %d)", map[i].size, UDP_MAX_SIZE);
-    }
-
     vec[i].buffer = map[i].data;
     vec[i].size = map[i].size;
 
@@ -486,6 +481,11 @@
   g_mutex_lock (&sink->client_lock);
   GST_LOG_OBJECT (bsink, "about to send %" G_GSIZE_FORMAT " bytes", size);
 
+  if (size > UDP_MAX_SIZE) {
+    GST_WARNING_OBJECT (bsink, "Attempting to send a UDP packet larger than "
+        "maximum size (%" G_GSIZE_FORMAT " > %d)", size, UDP_MAX_SIZE);
+  }
+
   no_clients = 0;
   num = 0;
   for (clients = sink->clients; clients; clients = g_list_next (clients)) {
@@ -537,10 +537,16 @@
   }
 send_error:
   {
+    GstFlowReturn res = GST_FLOW_ERROR;
+
     g_mutex_unlock (&sink->client_lock);
     GST_DEBUG ("got send error %s", err->message);
+
+    if (g_error_matches (err, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+      res = GST_FLOW_FLUSHING;
+
     g_clear_error (&err);
-    return GST_FLOW_ERROR;
+    return res;
   }
 }
 
diff --git a/gst/udp/gstudpsrc.c b/gst/udp/gstudpsrc.c
index 1f42b8f..0440f47 100644
--- a/gst/udp/gstudpsrc.c
+++ b/gst/udp/gstudpsrc.c
@@ -954,7 +954,7 @@
 
       if (!g_socket_leave_multicast_group (src->used_socket,
               g_inet_socket_address_get_address (src->addr), FALSE,
-              src->multi_iface, NULL)) {
+              src->multi_iface, &err)) {
         GST_ERROR_OBJECT (src, "Failed to leave multicast group: %s",
             err->message);
         g_clear_error (&err);
diff --git a/gst/videobox/Makefile.in b/gst/videobox/Makefile.in
index 1292b11..c5c096d 100644
--- a/gst/videobox/Makefile.in
+++ b/gst/videobox/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -274,7 +274,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/videobox/gstvideobox.c b/gst/videobox/gstvideobox.c
index 506e91e..94a8d13 100644
--- a/gst/videobox/gstvideobox.c
+++ b/gst/videobox/gstvideobox.c
@@ -161,10 +161,10 @@
   stride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
 
   if (G_LIKELY (stride == 4 * width))
-    orc_splat_u32 ((guint32 *) dest, empty_pixel, width * height);
+    video_box_orc_splat_u32 ((guint32 *) dest, empty_pixel, width * height);
   else if (height) {
     for (; height; --height) {
-      orc_splat_u32 ((guint32 *) dest, empty_pixel, width);
+      video_box_orc_splat_u32 ((guint32 *) dest, empty_pixel, width);
       dest += stride;
     }
   }
@@ -1786,10 +1786,10 @@
       (rgb_colors_B[fill_type] << (p[3] * 8)));
 
   if (stride == width * 4) {
-    orc_splat_u32 ((guint32 *) dest, empty_pixel, width * height);
+    video_box_orc_splat_u32 ((guint32 *) dest, empty_pixel, width * height);
   } else if (height) {
     for (; height; --height) {
-      orc_splat_u32 ((guint32 *) dest, empty_pixel, width);
+      video_box_orc_splat_u32 ((guint32 *) dest, empty_pixel, width);
       dest += stride;
     }
   }
diff --git a/gst/videobox/gstvideoboxorc-dist.c b/gst/videobox/gstvideoboxorc-dist.c
index 1e00246..11c8d8f 100644
--- a/gst/videobox/gstvideoboxorc-dist.c
+++ b/gst/videobox/gstvideoboxorc-dist.c
@@ -82,7 +82,7 @@
 #ifndef DISABLE_ORC
 #include <orc/orc.h>
 #endif
-void orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n);
+void video_box_orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n);
 
 
 /* begin Orc C target preamble */
@@ -129,10 +129,10 @@
 
 
 
-/* orc_splat_u32 */
+/* video_box_orc_splat_u32 */
 #ifdef DISABLE_ORC
 void
-orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n)
+video_box_orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n)
 {
   int i;
   orc_union32 *ORC_RESTRICT ptr0;
@@ -155,7 +155,7 @@
 
 #else
 static void
-_backup_orc_splat_u32 (OrcExecutor * ORC_RESTRICT ex)
+_backup_video_box_orc_splat_u32 (OrcExecutor * ORC_RESTRICT ex)
 {
   int i;
   int n = ex->n;
@@ -178,20 +178,21 @@
 }
 
 void
-orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n)
+video_box_orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n)
 {
   OrcExecutor _ex, *ex = &_ex;
   static volatile int p_inited = 0;
-  static OrcProgram *p = 0;
+  static OrcCode *c = 0;
   void (*func) (OrcExecutor *);
 
   if (!p_inited) {
     orc_once_mutex_lock ();
     if (!p_inited) {
+      OrcProgram *p;
 
       p = orc_program_new ();
-      orc_program_set_name (p, "orc_splat_u32");
-      orc_program_set_backup_function (p, _backup_orc_splat_u32);
+      orc_program_set_name (p, "video_box_orc_splat_u32");
+      orc_program_set_backup_function (p, _backup_video_box_orc_splat_u32);
       orc_program_add_destination (p, 4, "d1");
       orc_program_add_parameter (p, 4, "p1");
 
@@ -199,17 +200,20 @@
           ORC_VAR_D1);
 
       orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
     }
     p_inited = TRUE;
     orc_once_mutex_unlock ();
   }
-  ex->program = p;
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
 
   ex->n = n;
   ex->arrays[ORC_VAR_D1] = d1;
   ex->params[ORC_VAR_P1] = p1;
 
-  func = p->code_exec;
+  func = c->exec;
   func (ex);
 }
 #endif
diff --git a/gst/videobox/gstvideoboxorc-dist.h b/gst/videobox/gstvideoboxorc-dist.h
index 1a711a5..397d3a4 100644
--- a/gst/videobox/gstvideoboxorc-dist.h
+++ b/gst/videobox/gstvideoboxorc-dist.h
@@ -67,7 +67,7 @@
 #define ORC_RESTRICT
 #endif
 #endif
-void orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n);
+void video_box_orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n);
 
 #ifdef __cplusplus
 }
diff --git a/gst/videobox/gstvideoboxorc.orc b/gst/videobox/gstvideoboxorc.orc
index 30abfb1..1dbf9e7 100644
--- a/gst/videobox/gstvideoboxorc.orc
+++ b/gst/videobox/gstvideoboxorc.orc
@@ -1,5 +1,5 @@
 
-.function orc_splat_u32
+.function video_box_orc_splat_u32
 .dest 4 d1 guint32
 .param 4 p1
 
diff --git a/gst/videocrop/Makefile.in b/gst/videocrop/Makefile.in
index 24147e2..afcfc09 100644
--- a/gst/videocrop/Makefile.in
+++ b/gst/videocrop/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -247,7 +247,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/videocrop/gstvideocrop.c b/gst/videocrop/gstvideocrop.c
index 77e6d08..baca7e8 100644
--- a/gst/videocrop/gstvideocrop.c
+++ b/gst/videocrop/gstvideocrop.c
@@ -609,12 +609,7 @@
     gst_caps_append_structure (other_caps, new_structure);
   }
 
-  if (gst_caps_is_empty (other_caps)) {
-    gst_caps_unref (other_caps);
-    other_caps = NULL;
-  }
-
-  if (other_caps && filter_caps) {
+  if (!gst_caps_is_empty (other_caps) && filter_caps) {
     GstCaps *tmp = gst_caps_intersect_full (filter_caps, other_caps,
         GST_CAPS_INTERSECT_FIRST);
     gst_caps_replace (&other_caps, tmp);
diff --git a/gst/videofilter/Makefile.in b/gst/videofilter/Makefile.in
index 7e82dd8..c8e6efa 100644
--- a/gst/videofilter/Makefile.in
+++ b/gst/videofilter/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -250,7 +250,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/videomixer/Makefile.in b/gst/videomixer/Makefile.in
index fb2a03e..c8cc66d 100644
--- a/gst/videomixer/Makefile.in
+++ b/gst/videomixer/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -275,7 +275,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/videomixer/blend.c b/gst/videomixer/blend.c
index a54aab8..b7e24a1 100644
--- a/gst/videomixer/blend.c
+++ b/gst/videomixer/blend.c
@@ -97,7 +97,7 @@
     gint src_width, gint src_stride, gint dest_stride, guint s_alpha) \
 { \
   s_alpha = MIN (255, s_alpha); \
-  orc_##method##_##name (dest, dest_stride, src, src_stride, \
+  video_mixer_orc_##method##_##name (dest, dest_stride, src, src_stride, \
       s_alpha, src_width, src_height); \
 }
 
@@ -188,7 +188,7 @@
   } \
   val = GUINT32_FROM_BE ((0xff << A) | (c1 << C1) | (c2 << C2) | (c3 << C3)); \
   \
-  orc_splat_u32 ((guint32 *) dest, val, height * width); \
+  video_mixer_orc_splat_u32 ((guint32 *) dest, val, height * width); \
 }
 
 A32_COLOR (argb, TRUE, 24, 16, 8, 0);
@@ -425,20 +425,20 @@
 #define GST_ROUND_UP_1(x) (x)
 
 PLANAR_YUV_BLEND (i420, GST_VIDEO_FORMAT_I420, GST_ROUND_UP_2,
-    GST_ROUND_UP_2, memcpy, orc_blend_u8);
+    GST_ROUND_UP_2, memcpy, video_mixer_orc_blend_u8);
 PLANAR_YUV_FILL_CHECKER (i420, GST_VIDEO_FORMAT_I420, memset);
 PLANAR_YUV_FILL_COLOR (i420, GST_VIDEO_FORMAT_I420, memset);
 PLANAR_YUV_FILL_COLOR (yv12, GST_VIDEO_FORMAT_YV12, memset);
 PLANAR_YUV_BLEND (y444, GST_VIDEO_FORMAT_Y444, GST_ROUND_UP_1,
-    GST_ROUND_UP_1, memcpy, orc_blend_u8);
+    GST_ROUND_UP_1, memcpy, video_mixer_orc_blend_u8);
 PLANAR_YUV_FILL_CHECKER (y444, GST_VIDEO_FORMAT_Y444, memset);
 PLANAR_YUV_FILL_COLOR (y444, GST_VIDEO_FORMAT_Y444, memset);
 PLANAR_YUV_BLEND (y42b, GST_VIDEO_FORMAT_Y42B, GST_ROUND_UP_2,
-    GST_ROUND_UP_1, memcpy, orc_blend_u8);
+    GST_ROUND_UP_1, memcpy, video_mixer_orc_blend_u8);
 PLANAR_YUV_FILL_CHECKER (y42b, GST_VIDEO_FORMAT_Y42B, memset);
 PLANAR_YUV_FILL_COLOR (y42b, GST_VIDEO_FORMAT_Y42B, memset);
 PLANAR_YUV_BLEND (y41b, GST_VIDEO_FORMAT_Y41B, GST_ROUND_UP_4,
-    GST_ROUND_UP_1, memcpy, orc_blend_u8);
+    GST_ROUND_UP_1, memcpy, video_mixer_orc_blend_u8);
 PLANAR_YUV_FILL_CHECKER (y41b, GST_VIDEO_FORMAT_Y41B, memset);
 PLANAR_YUV_FILL_COLOR (y41b, GST_VIDEO_FORMAT_Y41B, memset);
 
@@ -581,12 +581,12 @@
   guint32 val; \
   \
   val = GUINT32_FROM_BE ((red << r) | (green << g) | (blue << b)); \
-  orc_splat_u32 ((guint32 *) dest, val, width); \
+  video_mixer_orc_splat_u32 ((guint32 *) dest, val, width); \
 }
 
-#define _orc_memcpy_u32(dest,src,len) orc_memcpy_u32((guint32 *) dest, (const guint32 *) src, len/4)
+#define _orc_memcpy_u32(dest,src,len) video_mixer_orc_memcpy_u32((guint32 *) dest, (const guint32 *) src, len/4)
 
-RGB_BLEND (rgb, 3, memcpy, orc_blend_u8);
+RGB_BLEND (rgb, 3, memcpy, video_mixer_orc_blend_u8);
 RGB_FILL_CHECKER_C (rgb, 3, 0, 1, 2);
 MEMSET_RGB_C (rgb, 0, 1, 2);
 RGB_FILL_COLOR (rgb_c, 3, _memset_rgb_c);
@@ -594,7 +594,7 @@
 MEMSET_RGB_C (bgr, 2, 1, 0);
 RGB_FILL_COLOR (bgr_c, 3, _memset_bgr_c);
 
-RGB_BLEND (xrgb, 4, _orc_memcpy_u32, orc_blend_u8);
+RGB_BLEND (xrgb, 4, _orc_memcpy_u32, video_mixer_orc_blend_u8);
 RGB_FILL_CHECKER_C (xrgb, 4, 1, 2, 3);
 MEMSET_XRGB (xrgb, 24, 16, 0);
 RGB_FILL_COLOR (xrgb, 4, _memset_xrgb);
@@ -729,12 +729,12 @@
   val = GUINT32_FROM_BE ((colY << Y1) | (colY << Y2) | (colU << U) | (colV << V)); \
   \
   for (i = 0; i < height; i++) { \
-    orc_splat_u32 ((guint32 *) dest, val, width); \
+    video_mixer_orc_splat_u32 ((guint32 *) dest, val, width); \
     dest += dest_stride; \
   } \
 }
 
-PACKED_422_BLEND (yuy2, memcpy, orc_blend_u8);
+PACKED_422_BLEND (yuy2, memcpy, video_mixer_orc_blend_u8);
 PACKED_422_FILL_CHECKER_C (yuy2, 0, 1, 2, 3);
 PACKED_422_FILL_CHECKER_C (uyvy, 1, 0, 3, 2);
 PACKED_422_FILL_COLOR (yuy2, 24, 16, 8, 0);
diff --git a/gst/videomixer/blendorc-dist.c b/gst/videomixer/blendorc-dist.c
index ee783d8..5aa006d 100644
--- a/gst/videomixer/blendorc-dist.c
+++ b/gst/videomixer/blendorc-dist.c
@@ -82,18 +82,18 @@
 #ifndef DISABLE_ORC
 #include <orc/orc.h>
 #endif
-void orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n);
-void orc_memcpy_u32 (guint32 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1,
-    int n);
-void orc_blend_u8 (guint8 * ORC_RESTRICT d1, int d1_stride,
+void video_mixer_orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n);
+void video_mixer_orc_memcpy_u32 (guint32 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int n);
+void video_mixer_orc_blend_u8 (guint8 * ORC_RESTRICT d1, int d1_stride,
     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
-void orc_blend_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
+void video_mixer_orc_blend_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
-void orc_blend_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
+void video_mixer_orc_blend_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
-void orc_overlay_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
+void video_mixer_orc_overlay_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
-void orc_overlay_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
+void video_mixer_orc_overlay_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
 
 
@@ -141,10 +141,10 @@
 
 
 
-/* orc_splat_u32 */
+/* video_mixer_orc_splat_u32 */
 #ifdef DISABLE_ORC
 void
-orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n)
+video_mixer_orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n)
 {
   int i;
   orc_union32 *ORC_RESTRICT ptr0;
@@ -167,7 +167,7 @@
 
 #else
 static void
-_backup_orc_splat_u32 (OrcExecutor * ORC_RESTRICT ex)
+_backup_video_mixer_orc_splat_u32 (OrcExecutor * ORC_RESTRICT ex)
 {
   int i;
   int n = ex->n;
@@ -190,20 +190,21 @@
 }
 
 void
-orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n)
+video_mixer_orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n)
 {
   OrcExecutor _ex, *ex = &_ex;
   static volatile int p_inited = 0;
-  static OrcProgram *p = 0;
+  static OrcCode *c = 0;
   void (*func) (OrcExecutor *);
 
   if (!p_inited) {
     orc_once_mutex_lock ();
     if (!p_inited) {
+      OrcProgram *p;
 
       p = orc_program_new ();
-      orc_program_set_name (p, "orc_splat_u32");
-      orc_program_set_backup_function (p, _backup_orc_splat_u32);
+      orc_program_set_name (p, "video_mixer_orc_splat_u32");
+      orc_program_set_backup_function (p, _backup_video_mixer_orc_splat_u32);
       orc_program_add_destination (p, 4, "d1");
       orc_program_add_parameter (p, 4, "p1");
 
@@ -211,27 +212,30 @@
           ORC_VAR_D1);
 
       orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
     }
     p_inited = TRUE;
     orc_once_mutex_unlock ();
   }
-  ex->program = p;
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
 
   ex->n = n;
   ex->arrays[ORC_VAR_D1] = d1;
   ex->params[ORC_VAR_P1] = p1;
 
-  func = p->code_exec;
+  func = c->exec;
   func (ex);
 }
 #endif
 
 
-/* orc_memcpy_u32 */
+/* video_mixer_orc_memcpy_u32 */
 #ifdef DISABLE_ORC
 void
-orc_memcpy_u32 (guint32 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1,
-    int n)
+video_mixer_orc_memcpy_u32 (guint32 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int n)
 {
   int i;
   orc_union32 *ORC_RESTRICT ptr0;
@@ -256,7 +260,7 @@
 
 #else
 static void
-_backup_orc_memcpy_u32 (OrcExecutor * ORC_RESTRICT ex)
+_backup_video_mixer_orc_memcpy_u32 (OrcExecutor * ORC_RESTRICT ex)
 {
   int i;
   int n = ex->n;
@@ -281,21 +285,22 @@
 }
 
 void
-orc_memcpy_u32 (guint32 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1,
-    int n)
+video_mixer_orc_memcpy_u32 (guint32 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int n)
 {
   OrcExecutor _ex, *ex = &_ex;
   static volatile int p_inited = 0;
-  static OrcProgram *p = 0;
+  static OrcCode *c = 0;
   void (*func) (OrcExecutor *);
 
   if (!p_inited) {
     orc_once_mutex_lock ();
     if (!p_inited) {
+      OrcProgram *p;
 
       p = orc_program_new ();
-      orc_program_set_name (p, "orc_memcpy_u32");
-      orc_program_set_backup_function (p, _backup_orc_memcpy_u32);
+      orc_program_set_name (p, "video_mixer_orc_memcpy_u32");
+      orc_program_set_backup_function (p, _backup_video_mixer_orc_memcpy_u32);
       orc_program_add_destination (p, 4, "d1");
       orc_program_add_source (p, 4, "s1");
 
@@ -303,26 +308,29 @@
           ORC_VAR_D1);
 
       orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
     }
     p_inited = TRUE;
     orc_once_mutex_unlock ();
   }
-  ex->program = p;
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
 
   ex->n = n;
   ex->arrays[ORC_VAR_D1] = d1;
   ex->arrays[ORC_VAR_S1] = (void *) s1;
 
-  func = p->code_exec;
+  func = c->exec;
   func (ex);
 }
 #endif
 
 
-/* orc_blend_u8 */
+/* video_mixer_orc_blend_u8 */
 #ifdef DISABLE_ORC
 void
-orc_blend_u8 (guint8 * ORC_RESTRICT d1, int d1_stride,
+video_mixer_orc_blend_u8 (guint8 * ORC_RESTRICT d1, int d1_stride,
     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
 {
   int i;
@@ -378,7 +386,7 @@
 
 #else
 static void
-_backup_orc_blend_u8 (OrcExecutor * ORC_RESTRICT ex)
+_backup_video_mixer_orc_blend_u8 (OrcExecutor * ORC_RESTRICT ex)
 {
   int i;
   int j;
@@ -434,22 +442,23 @@
 }
 
 void
-orc_blend_u8 (guint8 * ORC_RESTRICT d1, int d1_stride,
+video_mixer_orc_blend_u8 (guint8 * ORC_RESTRICT d1, int d1_stride,
     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
 {
   OrcExecutor _ex, *ex = &_ex;
   static volatile int p_inited = 0;
-  static OrcProgram *p = 0;
+  static OrcCode *c = 0;
   void (*func) (OrcExecutor *);
 
   if (!p_inited) {
     orc_once_mutex_lock ();
     if (!p_inited) {
+      OrcProgram *p;
 
       p = orc_program_new ();
       orc_program_set_2d (p);
-      orc_program_set_name (p, "orc_blend_u8");
-      orc_program_set_backup_function (p, _backup_orc_blend_u8);
+      orc_program_set_name (p, "video_mixer_orc_blend_u8");
+      orc_program_set_backup_function (p, _backup_video_mixer_orc_blend_u8);
       orc_program_add_destination (p, 1, "d1");
       orc_program_add_source (p, 1, "s1");
       orc_program_add_constant (p, 1, 0x00000008, "c1");
@@ -475,11 +484,14 @@
           ORC_VAR_D1, ORC_VAR_D1);
 
       orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
     }
     p_inited = TRUE;
     orc_once_mutex_unlock ();
   }
-  ex->program = p;
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
 
   ex->n = n;
   ORC_EXECUTOR_M (ex) = m;
@@ -489,16 +501,16 @@
   ex->params[ORC_VAR_S1] = s1_stride;
   ex->params[ORC_VAR_P1] = p1;
 
-  func = p->code_exec;
+  func = c->exec;
   func (ex);
 }
 #endif
 
 
-/* orc_blend_argb */
+/* video_mixer_orc_blend_argb */
 #ifdef DISABLE_ORC
 void
-orc_blend_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
+video_mixer_orc_blend_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
 {
   int i;
@@ -618,7 +630,7 @@
 
 #else
 static void
-_backup_orc_blend_argb (OrcExecutor * ORC_RESTRICT ex)
+_backup_video_mixer_orc_blend_argb (OrcExecutor * ORC_RESTRICT ex)
 {
   int i;
   int j;
@@ -738,22 +750,23 @@
 }
 
 void
-orc_blend_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
+video_mixer_orc_blend_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
 {
   OrcExecutor _ex, *ex = &_ex;
   static volatile int p_inited = 0;
-  static OrcProgram *p = 0;
+  static OrcCode *c = 0;
   void (*func) (OrcExecutor *);
 
   if (!p_inited) {
     orc_once_mutex_lock ();
     if (!p_inited) {
+      OrcProgram *p;
 
       p = orc_program_new ();
       orc_program_set_2d (p);
-      orc_program_set_name (p, "orc_blend_argb");
-      orc_program_set_backup_function (p, _backup_orc_blend_argb);
+      orc_program_set_name (p, "video_mixer_orc_blend_argb");
+      orc_program_set_backup_function (p, _backup_video_mixer_orc_blend_argb);
       orc_program_add_destination (p, 4, "d1");
       orc_program_add_source (p, 4, "s1");
       orc_program_add_constant (p, 4, 0x000000ff, "c1");
@@ -803,11 +816,14 @@
           ORC_VAR_D1);
 
       orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
     }
     p_inited = TRUE;
     orc_once_mutex_unlock ();
   }
-  ex->program = p;
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
 
   ex->n = n;
   ORC_EXECUTOR_M (ex) = m;
@@ -817,16 +833,16 @@
   ex->params[ORC_VAR_S1] = s1_stride;
   ex->params[ORC_VAR_P1] = p1;
 
-  func = p->code_exec;
+  func = c->exec;
   func (ex);
 }
 #endif
 
 
-/* orc_blend_bgra */
+/* video_mixer_orc_blend_bgra */
 #ifdef DISABLE_ORC
 void
-orc_blend_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
+video_mixer_orc_blend_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
 {
   int i;
@@ -949,7 +965,7 @@
 
 #else
 static void
-_backup_orc_blend_bgra (OrcExecutor * ORC_RESTRICT ex)
+_backup_video_mixer_orc_blend_bgra (OrcExecutor * ORC_RESTRICT ex)
 {
   int i;
   int j;
@@ -1072,22 +1088,23 @@
 }
 
 void
-orc_blend_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
+video_mixer_orc_blend_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
 {
   OrcExecutor _ex, *ex = &_ex;
   static volatile int p_inited = 0;
-  static OrcProgram *p = 0;
+  static OrcCode *c = 0;
   void (*func) (OrcExecutor *);
 
   if (!p_inited) {
     orc_once_mutex_lock ();
     if (!p_inited) {
+      OrcProgram *p;
 
       p = orc_program_new ();
       orc_program_set_2d (p);
-      orc_program_set_name (p, "orc_blend_bgra");
-      orc_program_set_backup_function (p, _backup_orc_blend_bgra);
+      orc_program_set_name (p, "video_mixer_orc_blend_bgra");
+      orc_program_set_backup_function (p, _backup_video_mixer_orc_blend_bgra);
       orc_program_add_destination (p, 4, "d1");
       orc_program_add_source (p, 4, "s1");
       orc_program_add_constant (p, 4, 0xff000000, "c1");
@@ -1141,11 +1158,14 @@
           ORC_VAR_D1);
 
       orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
     }
     p_inited = TRUE;
     orc_once_mutex_unlock ();
   }
-  ex->program = p;
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
 
   ex->n = n;
   ORC_EXECUTOR_M (ex) = m;
@@ -1155,16 +1175,16 @@
   ex->params[ORC_VAR_S1] = s1_stride;
   ex->params[ORC_VAR_P1] = p1;
 
-  func = p->code_exec;
+  func = c->exec;
   func (ex);
 }
 #endif
 
 
-/* orc_overlay_argb */
+/* video_mixer_orc_overlay_argb */
 #ifdef DISABLE_ORC
 void
-orc_overlay_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
+video_mixer_orc_overlay_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
 {
   int i;
@@ -1361,7 +1381,7 @@
 
 #else
 static void
-_backup_orc_overlay_argb (OrcExecutor * ORC_RESTRICT ex)
+_backup_video_mixer_orc_overlay_argb (OrcExecutor * ORC_RESTRICT ex)
 {
   int i;
   int j;
@@ -1558,22 +1578,23 @@
 }
 
 void
-orc_overlay_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
+video_mixer_orc_overlay_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
 {
   OrcExecutor _ex, *ex = &_ex;
   static volatile int p_inited = 0;
-  static OrcProgram *p = 0;
+  static OrcCode *c = 0;
   void (*func) (OrcExecutor *);
 
   if (!p_inited) {
     orc_once_mutex_lock ();
     if (!p_inited) {
+      OrcProgram *p;
 
       p = orc_program_new ();
       orc_program_set_2d (p);
-      orc_program_set_name (p, "orc_overlay_argb");
-      orc_program_set_backup_function (p, _backup_orc_overlay_argb);
+      orc_program_set_name (p, "video_mixer_orc_overlay_argb");
+      orc_program_set_backup_function (p, _backup_video_mixer_orc_overlay_argb);
       orc_program_add_destination (p, 4, "d1");
       orc_program_add_source (p, 4, "s1");
       orc_program_add_constant (p, 4, 0xffffffff, "c1");
@@ -1653,11 +1674,14 @@
           ORC_VAR_D1);
 
       orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
     }
     p_inited = TRUE;
     orc_once_mutex_unlock ();
   }
-  ex->program = p;
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
 
   ex->n = n;
   ORC_EXECUTOR_M (ex) = m;
@@ -1667,16 +1691,16 @@
   ex->params[ORC_VAR_S1] = s1_stride;
   ex->params[ORC_VAR_P1] = p1;
 
-  func = p->code_exec;
+  func = c->exec;
   func (ex);
 }
 #endif
 
 
-/* orc_overlay_bgra */
+/* video_mixer_orc_overlay_bgra */
 #ifdef DISABLE_ORC
 void
-orc_overlay_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
+video_mixer_orc_overlay_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
 {
   int i;
@@ -1879,7 +1903,7 @@
 
 #else
 static void
-_backup_orc_overlay_bgra (OrcExecutor * ORC_RESTRICT ex)
+_backup_video_mixer_orc_overlay_bgra (OrcExecutor * ORC_RESTRICT ex)
 {
   int i;
   int j;
@@ -2082,22 +2106,23 @@
 }
 
 void
-orc_overlay_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
+video_mixer_orc_overlay_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
 {
   OrcExecutor _ex, *ex = &_ex;
   static volatile int p_inited = 0;
-  static OrcProgram *p = 0;
+  static OrcCode *c = 0;
   void (*func) (OrcExecutor *);
 
   if (!p_inited) {
     orc_once_mutex_lock ();
     if (!p_inited) {
+      OrcProgram *p;
 
       p = orc_program_new ();
       orc_program_set_2d (p);
-      orc_program_set_name (p, "orc_overlay_bgra");
-      orc_program_set_backup_function (p, _backup_orc_overlay_bgra);
+      orc_program_set_name (p, "video_mixer_orc_overlay_bgra");
+      orc_program_set_backup_function (p, _backup_video_mixer_orc_overlay_bgra);
       orc_program_add_destination (p, 4, "d1");
       orc_program_add_source (p, 4, "s1");
       orc_program_add_constant (p, 4, 0xffffffff, "c1");
@@ -2183,11 +2208,14 @@
           ORC_VAR_D1);
 
       orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
     }
     p_inited = TRUE;
     orc_once_mutex_unlock ();
   }
-  ex->program = p;
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
 
   ex->n = n;
   ORC_EXECUTOR_M (ex) = m;
@@ -2197,7 +2225,7 @@
   ex->params[ORC_VAR_S1] = s1_stride;
   ex->params[ORC_VAR_P1] = p1;
 
-  func = p->code_exec;
+  func = c->exec;
   func (ex);
 }
 #endif
diff --git a/gst/videomixer/blendorc-dist.h b/gst/videomixer/blendorc-dist.h
index 9346540..aeeb678 100644
--- a/gst/videomixer/blendorc-dist.h
+++ b/gst/videomixer/blendorc-dist.h
@@ -67,13 +67,13 @@
 #define ORC_RESTRICT
 #endif
 #endif
-void orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n);
-void orc_memcpy_u32 (guint32 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int n);
-void orc_blend_u8 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
-void orc_blend_argb (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
-void orc_blend_bgra (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
-void orc_overlay_argb (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
-void orc_overlay_bgra (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
+void video_mixer_orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n);
+void video_mixer_orc_memcpy_u32 (guint32 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int n);
+void video_mixer_orc_blend_u8 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
+void video_mixer_orc_blend_argb (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
+void video_mixer_orc_blend_bgra (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
+void video_mixer_orc_overlay_argb (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
+void video_mixer_orc_overlay_bgra (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
 
 #ifdef __cplusplus
 }
diff --git a/gst/videomixer/blendorc.orc b/gst/videomixer/blendorc.orc
index 9140345..cbc1a46 100644
--- a/gst/videomixer/blendorc.orc
+++ b/gst/videomixer/blendorc.orc
@@ -1,16 +1,16 @@
-.function orc_splat_u32
+.function video_mixer_orc_splat_u32
 .dest 4 d1 guint32
 .param 4 p1 guint32
 
 copyl d1, p1
 
-.function orc_memcpy_u32
+.function video_mixer_orc_memcpy_u32
 .dest 4 d1 guint32
 .source 4 s1 guint32
 
 copyl d1, s1
 
-.function orc_blend_u8
+.function video_mixer_orc_blend_u8
 .flags 2d
 .dest 1 d1 guint8
 .source 1 s1 guint8
@@ -29,7 +29,7 @@
 convsuswb d1, t2
 
 
-.function orc_blend_argb
+.function video_mixer_orc_blend_argb
 .flags 2d
 .dest 4 d guint8
 .source 4 s guint8
@@ -61,7 +61,7 @@
 orl t, t, a_alpha
 storel d, t
 
-.function orc_blend_bgra
+.function video_mixer_orc_blend_bgra
 .flags 2d
 .dest 4 d guint8
 .source 4 s guint8
@@ -96,7 +96,7 @@
 storel d, t
 
 
-.function orc_overlay_argb
+.function video_mixer_orc_overlay_argb
 .flags 2d
 .dest 4 d guint8
 .source 4 s guint8
@@ -156,7 +156,7 @@
 orl  t, t, a
 storel d, t
 
-.function orc_overlay_bgra
+.function video_mixer_orc_overlay_bgra
 .flags 2d
 .dest 4 d guint8
 .source 4 s guint8
diff --git a/gst/videomixer/videomixer2.c b/gst/videomixer/videomixer2.c
index 0d2d97e..fba78e7 100644
--- a/gst/videomixer/videomixer2.c
+++ b/gst/videomixer/videomixer2.c
@@ -1805,7 +1805,7 @@
 
   /* add the pad to the element */
   gst_element_add_pad (element, GST_PAD (mixpad));
-  gst_child_proxy_child_added (G_OBJECT (mix), G_OBJECT (mixpad),
+  gst_child_proxy_child_added (GST_CHILD_PROXY (mix), G_OBJECT (mixpad),
       GST_OBJECT_NAME (mixpad));
 
   return GST_PAD (mixpad);
@@ -1829,7 +1829,7 @@
   mixpad = GST_VIDEO_MIXER2_PAD (pad);
 
   mix->sinkpads = g_slist_remove (mix->sinkpads, pad);
-  gst_child_proxy_child_removed (G_OBJECT (mix), G_OBJECT (mixpad),
+  gst_child_proxy_child_removed (GST_CHILD_PROXY (mix), G_OBJECT (mixpad),
       GST_OBJECT_NAME (mixpad));
   mix->numpads--;
 
diff --git a/gst/wavenc/Makefile.in b/gst/wavenc/Makefile.in
index 582f701..bc2ae03 100644
--- a/gst/wavenc/Makefile.in
+++ b/gst/wavenc/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -247,7 +247,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/wavparse/Makefile.in b/gst/wavparse/Makefile.in
index bc21285..e52fb64 100644
--- a/gst/wavparse/Makefile.in
+++ b/gst/wavparse/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -248,7 +248,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/gst/wavparse/gstwavparse.c b/gst/wavparse/gstwavparse.c
index 098222b..8cea829 100644
--- a/gst/wavparse/gstwavparse.c
+++ b/gst/wavparse/gstwavparse.c
@@ -113,6 +113,34 @@
 G_DEFINE_TYPE_WITH_CODE (GstWavParse, gst_wavparse, GST_TYPE_ELEMENT,
     DEBUG_INIT);
 
+typedef struct
+{
+  /* Offset Size    Description   Value
+   * 0x00   4       ID            unique identification value
+   * 0x04   4       Position      play order position
+   * 0x08   4       Data Chunk ID RIFF ID of corresponding data chunk
+   * 0x0c   4       Chunk Start   Byte Offset of Data Chunk *
+   * 0x10   4       Block Start   Byte Offset to sample of First Channel
+   * 0x14   4       Sample Offset Byte Offset to sample byte of First Channel
+   */
+  guint32 id;
+  guint32 position;
+  guint32 data_chunk_id;
+  guint32 chunk_start;
+  guint32 block_start;
+  guint32 sample_offset;
+} GstWavParseCue;
+
+typedef struct
+{
+  /* Offset Size    Description     Value
+   * 0x08   4       Cue Point ID    0 - 0xFFFFFFFF
+   * 0x0c           Text
+   */
+  guint32 cue_point_id;
+  gchar *text;
+} GstWavParseLabl;
+
 static void
 gst_wavparse_class_init (GstWavParseClass * klass)
 {
@@ -196,8 +224,17 @@
     wav->adapter = NULL;
   }
   if (wav->tags)
-    gst_tag_list_free (wav->tags);
+    gst_tag_list_unref (wav->tags);
   wav->tags = NULL;
+  if (wav->toc)
+    gst_toc_unref (wav->toc);
+  wav->toc = NULL;
+  if (wav->cues)
+    g_list_free_full (wav->cues, g_free);
+  wav->cues = NULL;
+  if (wav->labls)
+    g_list_free_full (wav->labls, g_free);
+  wav->labls = NULL;
   if (wav->caps)
     gst_caps_unref (wav->caps);
   wav->caps = NULL;
@@ -805,11 +842,7 @@
     if (!event || wav->state != GST_WAVPARSE_DATA) {
       if (wav->start_segment)
         gst_event_unref (wav->start_segment);
-      // TODO
-/*      wav->start_segment =
-          gst_event_new_new_segment (FALSE, wav->segment.rate,
-          wav->segment.format, wav->segment.last_stop, wav->segment.duration,
-          wav->segment.last_stop);*/
+      wav->start_segment = gst_event_new_segment (&wav->segment);
       res = TRUE;
     } else {
       /* convert seek positions to byte positions in data sections */
@@ -963,7 +996,7 @@
   /* and start the streaming task again */
   if (!wav->streaming) {
     gst_pad_start_task (wav->sinkpad, (GstTaskFunction) gst_wavparse_loop,
-        wav->sinkpad);
+        wav->sinkpad, NULL);
   }
 
   GST_PAD_STREAM_UNLOCK (wav->sinkpad);
@@ -1115,6 +1148,203 @@
   return TRUE;
 }
 
+/*
+ * gst_wavparse_cue_chunk:
+ * @wav GstWavParse object
+ * @data holder for data
+ * @size holder for data size
+ *
+ * Parse cue chunk from @data to wav->cues.
+ *
+ * Returns: %TRUE when cue chunk is available
+ */
+static gboolean
+gst_wavparse_cue_chunk (GstWavParse * wav, const guint8 * data, guint32 size)
+{
+  guint32 i, ncues;
+  GList *cues = NULL;
+  GstWavParseCue *cue;
+
+  if (wav->cues) {
+    GST_WARNING_OBJECT (wav, "found another cue's");
+    return TRUE;
+  }
+
+  ncues = GST_READ_UINT32_LE (data);
+
+  if (size < 4 + ncues * 24) {
+    GST_WARNING_OBJECT (wav, "broken file %d %d", size, ncues);
+    return FALSE;
+  }
+
+  /* parse data */
+  data += 4;
+  for (i = 0; i < ncues; i++) {
+    cue = g_new0 (GstWavParseCue, 1);
+    cue->id = GST_READ_UINT32_LE (data);
+    cue->position = GST_READ_UINT32_LE (data + 4);
+    cue->data_chunk_id = GST_READ_UINT32_LE (data + 8);
+    cue->chunk_start = GST_READ_UINT32_LE (data + 12);
+    cue->block_start = GST_READ_UINT32_LE (data + 16);
+    cue->sample_offset = GST_READ_UINT32_LE (data + 20);
+    cues = g_list_append (cues, cue);
+    data += 24;
+  }
+
+  wav->cues = cues;
+
+  return TRUE;
+}
+
+/*
+ * gst_wavparse_labl_chunk:
+ * @wav GstWavParse object
+ * @data holder for data
+ * @size holder for data size
+ *
+ * Parse labl from @data to wav->labls.
+ *
+ * Returns: %TRUE when labl chunk is available
+ */
+static gboolean
+gst_wavparse_labl_chunk (GstWavParse * wav, const guint8 * data, guint32 size)
+{
+  GstWavParseLabl *labl;
+
+  if (size < 5)
+    return FALSE;
+
+  labl = g_new0 (GstWavParseLabl, 1);
+
+  /* parse data */
+  data += 8;
+  labl->cue_point_id = GST_READ_UINT32_LE (data);
+  labl->text = (gchar *) g_new0 (gchar *, size - 4 + 1);
+  memcpy (labl->text, data + 4, size - 4);
+
+  wav->labls = g_list_append (wav->labls, labl);
+
+  return TRUE;
+}
+
+/*
+ * gst_wavparse_adtl_chunk:
+ * @wav GstWavParse object
+ * @data holder for data
+ * @size holder for data size
+ *
+ * Parse adtl from @data.
+ *
+ * Returns: %TRUE when adtl chunk is available
+ */
+static gboolean
+gst_wavparse_adtl_chunk (GstWavParse * wav, const guint8 * data, guint32 size)
+{
+  guint32 ltag, lsize, offset = 0;
+
+  while (size >= 8) {
+    ltag = GST_READ_UINT32_LE (data + offset);
+    lsize = GST_READ_UINT32_LE (data + offset + 4);
+    switch (ltag) {
+      case GST_RIFF_TAG_labl:
+        gst_wavparse_labl_chunk (wav, data + offset, size);
+      default:
+        break;
+    }
+    offset += 8 + GST_ROUND_UP_2 (lsize);
+    size -= 8 + GST_ROUND_UP_2 (lsize);
+  }
+
+  return TRUE;
+}
+
+/*
+ * gst_wavparse_create_toc:
+ * @wav GstWavParse object
+ *
+ * Create TOC from wav->cues and wav->labls.
+ */
+static gboolean
+gst_wavparse_create_toc (GstWavParse * wav)
+{
+  gint64 start, stop;
+  gchar *id;
+  GList *list;
+  GstWavParseCue *cue;
+  GstWavParseLabl *labl;
+  GstTagList *tags;
+  GstToc *toc;
+  GstTocEntry *entry = NULL, *cur_subentry = NULL, *prev_subentry = NULL;
+
+  GST_OBJECT_LOCK (wav);
+  if (wav->toc) {
+    GST_OBJECT_UNLOCK (wav);
+    GST_WARNING_OBJECT (wav, "found another TOC");
+    return FALSE;
+  }
+
+  if (!wav->cues) {
+    GST_OBJECT_UNLOCK (wav);
+    return TRUE;
+  }
+
+  /* FIXME: send CURRENT scope toc too */
+  toc = gst_toc_new (GST_TOC_SCOPE_GLOBAL);
+
+  /* add cue edition */
+  entry = gst_toc_entry_new (GST_TOC_ENTRY_TYPE_EDITION, "cue");
+  gst_toc_entry_set_start_stop_times (entry, 0, wav->duration);
+  gst_toc_append_entry (toc, entry);
+
+  /* add chapters in cue edition */
+  list = g_list_first (wav->cues);
+  while (list) {
+    cue = list->data;
+    prev_subentry = cur_subentry;
+    /* previous chapter stop time = current chapter start time */
+    if (prev_subentry != NULL) {
+      gst_toc_entry_get_start_stop_times (prev_subentry, &start, NULL);
+      stop = gst_util_uint64_scale_round (cue->position, GST_SECOND, wav->rate);
+      gst_toc_entry_set_start_stop_times (prev_subentry, start, stop);
+    }
+    id = g_strdup_printf ("%08x", cue->id);
+    cur_subentry = gst_toc_entry_new (GST_TOC_ENTRY_TYPE_CHAPTER, id);
+    g_free (id);
+    start = gst_util_uint64_scale_round (cue->position, GST_SECOND, wav->rate);
+    stop = wav->duration;
+    gst_toc_entry_set_start_stop_times (cur_subentry, start, stop);
+    gst_toc_entry_append_sub_entry (entry, cur_subentry);
+    list = g_list_next (list);
+  }
+
+  /* add tags in chapters */
+  list = g_list_first (wav->labls);
+  while (list) {
+    labl = list->data;
+    id = g_strdup_printf ("%08x", labl->cue_point_id);
+    cur_subentry = gst_toc_find_entry (toc, id);
+    g_free (id);
+    if (cur_subentry != NULL) {
+      tags = gst_tag_list_new_empty ();
+      gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_TITLE, labl->text,
+          NULL);
+      gst_toc_entry_set_tags (cur_subentry, tags);
+    }
+    list = g_list_next (list);
+  }
+
+  /* send data as TOC */
+  wav->toc = toc;
+
+  /* send TOC event */
+  if (wav->toc) {
+    GST_OBJECT_UNLOCK (wav);
+    gst_pad_push_event (wav->srcpad, gst_event_new_toc (wav->toc, FALSE));
+  }
+
+  return TRUE;
+}
+
 #define MAX_BUFFER_SIZE 4096
 
 static GstFlowReturn
@@ -1203,7 +1433,7 @@
     wav->rate = header->rate;
     wav->channels = header->channels;
     wav->blockalign = header->blockalign;
-    wav->depth = header->size;
+    wav->depth = header->bits_per_sample;
     wav->av_bps = header->av_bps;
     wav->vbr = FALSE;
 
@@ -1497,14 +1727,40 @@
                 wav->tags =
                     gst_tag_list_merge (old, new, GST_TAG_MERGE_REPLACE);
                 if (old)
-                  gst_tag_list_free (old);
-                gst_tag_list_free (new);
+                  gst_tag_list_unref (old);
+                gst_tag_list_unref (new);
               }
               gst_buffer_unref (buf);
               wav->offset += GST_ROUND_UP_2 (data_size);
             }
             break;
           }
+          case GST_RIFF_LIST_adtl:{
+            const gint data_size = size;
+
+            GST_INFO_OBJECT (wav, "Have 'adtl' LIST, size %u", data_size);
+            if (wav->streaming) {
+              const guint8 *data = NULL;
+
+              gst_adapter_flush (wav->adapter, 12);
+              data = gst_adapter_map (wav->adapter, data_size);
+              gst_wavparse_adtl_chunk (wav, data, data_size);
+              gst_adapter_unmap (wav->adapter);
+            } else {
+              GstMapInfo map;
+
+              gst_buffer_unref (buf);
+              buf = NULL;
+              if ((res =
+                      gst_pad_pull_range (wav->sinkpad, wav->offset + 12,
+                          data_size, &buf)) != GST_FLOW_OK)
+                goto header_read_error;
+              gst_buffer_map (buf, &map, GST_MAP_READ);
+              gst_wavparse_adtl_chunk (wav, (const guint8 *) map.data,
+                  data_size);
+              gst_buffer_unmap (buf, &map);
+            }
+          }
           default:
             GST_INFO_OBJECT (wav, "Ignoring LIST chunk %" GST_FOURCC_FORMAT,
                 GST_FOURCC_ARGS (ltag));
@@ -1515,6 +1771,50 @@
         }
         break;
       }
+      case GST_RIFF_TAG_cue:{
+        const guint data_size = size;
+
+        GST_DEBUG_OBJECT (wav, "Have 'cue' TAG, size : %u", data_size);
+        if (wav->streaming) {
+          const guint8 *data = NULL;
+
+          if (!gst_wavparse_peek_chunk (wav, &tag, &size)) {
+            goto exit;
+          }
+          gst_adapter_flush (wav->adapter, 8);
+          wav->offset += 8;
+          data = gst_adapter_map (wav->adapter, data_size);
+          if (!gst_wavparse_cue_chunk (wav, data, data_size)) {
+            goto header_read_error;
+          }
+          gst_adapter_unmap (wav->adapter);
+        } else {
+          GstMapInfo map;
+
+          wav->offset += 8;
+          gst_buffer_unref (buf);
+          buf = NULL;
+          if ((res =
+                  gst_pad_pull_range (wav->sinkpad, wav->offset,
+                      data_size, &buf)) != GST_FLOW_OK)
+            goto header_read_error;
+          gst_buffer_map (buf, &map, GST_MAP_READ);
+          if (!gst_wavparse_cue_chunk (wav, (const guint8 *) map.data,
+                  data_size)) {
+            goto header_read_error;
+          }
+          gst_buffer_unmap (buf, &map);
+        }
+        size = GST_ROUND_UP_2 (size);
+        if (wav->streaming) {
+          gst_adapter_flush (wav->adapter, size);
+        } else {
+          gst_buffer_unref (buf);
+        }
+        size = GST_ROUND_UP_2 (size);
+        wav->offset += size;
+        break;
+      }
       default:
         if (!gst_waveparse_ignore_chunk (wav, buf, tag, size))
           /* need more data */
@@ -1545,6 +1845,8 @@
     gst_segment_init (&wav->segment, GST_FORMAT_TIME);
     if (!wav->ignore_length)
       wav->segment.duration = wav->duration;
+    if (!wav->toc)
+      gst_wavparse_create_toc (wav);
   } else {
     /* no bitrate, let downstream peer do the math, we'll feed it bytes. */
     gst_segment_init (&wav->segment, GST_FORMAT_BYTES);
@@ -1786,8 +2088,7 @@
   }
 
   if (wav->tags) {
-    gst_pad_push_event (wav->srcpad, gst_event_new_tag ("GstParser",
-            wav->tags));
+    gst_pad_push_event (wav->srcpad, gst_event_new_tag (wav->tags));
     wav->tags = NULL;
   }
 }
@@ -2072,6 +2373,8 @@
         gst_element_post_message (GST_ELEMENT_CAST (wav),
             gst_message_new_segment_done (GST_OBJECT_CAST (wav),
                 wav->segment.format, stop));
+        gst_pad_push_event (wav->srcpad,
+            gst_event_new_segment_done (wav->segment.format, stop));
       } else {
         gst_pad_push_event (wav->srcpad, gst_event_new_eos ());
       }
@@ -2228,7 +2531,8 @@
       segment.stop = stop;
 
       /* accept upstream's notion of segment and distribute along */
-      segment.time = segment.start = segment.position;
+      segment.format = wav->segment.format;
+      segment.time = segment.position = segment.start;
       segment.duration = wav->segment.duration;
       segment.base = gst_segment_to_running_time (&wav->segment,
           GST_FORMAT_TIME, wav->segment.position);
@@ -2443,14 +2747,14 @@
       GST_INFO_OBJECT (wav, "pos query at %" G_GINT64_FORMAT, curb);
 
       switch (format) {
-        case GST_FORMAT_TIME:
-          res = gst_wavparse_pad_convert (pad, GST_FORMAT_BYTES, curb,
-              &format, &cur);
-          break;
-        default:
+        case GST_FORMAT_BYTES:
           format = GST_FORMAT_BYTES;
           cur = curb;
           break;
+        default:
+          res = gst_wavparse_pad_convert (pad, GST_FORMAT_BYTES, curb,
+              &format, &cur);
+          break;
       }
       if (res)
         gst_query_set_position (query, format, cur);
@@ -2469,18 +2773,22 @@
       gst_query_parse_duration (query, &format, NULL);
 
       switch (format) {
-        case GST_FORMAT_TIME:{
+        case GST_FORMAT_BYTES:{
+          format = GST_FORMAT_BYTES;
+          duration = wav->datasize;
+          break;
+        }
+        case GST_FORMAT_TIME:
           if ((res = gst_wavparse_calculate_duration (wav))) {
             duration = wav->duration;
           }
           break;
-        }
         default:
-          format = GST_FORMAT_BYTES;
-          duration = wav->datasize;
+          res = FALSE;
           break;
       }
-      gst_query_set_duration (query, format, duration);
+      if (res)
+        gst_query_set_duration (query, format, duration);
       break;
     }
     case GST_QUERY_CONVERT:
@@ -2547,6 +2855,47 @@
       }
       gst_event_unref (event);
       break;
+
+    case GST_EVENT_TOC_SELECT:
+    {
+      char *uid = NULL;
+      GstTocEntry *entry = NULL;
+      GstEvent *seek_event;
+      gint64 start_pos;
+
+      if (!wavparse->toc) {
+        GST_DEBUG_OBJECT (wavparse, "no TOC to select");
+        return FALSE;
+      } else {
+        gst_event_parse_toc_select (event, &uid);
+        if (uid != NULL) {
+          GST_OBJECT_LOCK (wavparse);
+          entry = gst_toc_find_entry (wavparse->toc, uid);
+          if (entry == NULL) {
+            GST_OBJECT_UNLOCK (wavparse);
+            GST_WARNING_OBJECT (wavparse, "no TOC entry with given UID: %s",
+                uid);
+            res = FALSE;
+          } else {
+            gst_toc_entry_get_start_stop_times (entry, &start_pos, NULL);
+            GST_OBJECT_UNLOCK (wavparse);
+            seek_event = gst_event_new_seek (1.0,
+                GST_FORMAT_TIME,
+                GST_SEEK_FLAG_FLUSH,
+                GST_SEEK_TYPE_SET, start_pos, GST_SEEK_TYPE_SET, -1);
+            res = gst_wavparse_perform_seek (wavparse, seek_event);
+            gst_event_unref (seek_event);
+          }
+          g_free (uid);
+        } else {
+          GST_WARNING_OBJECT (wavparse, "received empty TOC select event");
+          res = FALSE;
+        }
+      }
+      gst_event_unref (event);
+      break;
+    }
+
     default:
       res = gst_pad_push_event (wavparse->sinkpad, event);
       break;
@@ -2608,7 +2957,7 @@
       if (active) {
         /* if we have a scheduler we can start the task */
         res = gst_pad_start_task (sinkpad, (GstTaskFunction) gst_wavparse_loop,
-            sinkpad);
+            sinkpad, NULL);
       } else {
         res = gst_pad_stop_task (sinkpad);
       }
diff --git a/gst/wavparse/gstwavparse.h b/gst/wavparse/gstwavparse.h
index 82838e4..ad8e02b 100644
--- a/gst/wavparse/gstwavparse.h
+++ b/gst/wavparse/gstwavparse.h
@@ -66,6 +66,9 @@
    * the format for sure */
   GstCaps     *caps;
   GstTagList  *tags;
+  GstToc      *toc;
+  GList       *cues;
+  GList       *labls;
   GstEvent    *start_segment;
 
   /* WAVE decoding state */
diff --git a/gst/y4m/Makefile.in b/gst/y4m/Makefile.in
index ee80d96..975ac73 100644
--- a/gst/y4m/Makefile.in
+++ b/gst/y4m/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -246,7 +246,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/ltmain.sh b/ltmain.sh
index c7d06c3..33f642a 100644
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -70,7 +70,7 @@
 #         compiler:		$LTCC
 #         compiler flags:		$LTCFLAGS
 #         linker:		$LD (gnu? $with_gnu_ld)
-#         $progname:	(GNU libtool) 2.4.2 Debian-2.4.2-1
+#         $progname:	(GNU libtool) 2.4.2 Debian-2.4.2-1.1
 #         automake:	$automake_version
 #         autoconf:	$autoconf_version
 #
@@ -80,7 +80,7 @@
 
 PROGRAM=libtool
 PACKAGE=libtool
-VERSION="2.4.2 Debian-2.4.2-1"
+VERSION="2.4.2 Debian-2.4.2-1.1"
 TIMESTAMP=""
 package_revision=1.3337
 
diff --git a/m4/Makefile.in b/m4/Makefile.in
index 8017ae3..bae9326 100644
--- a/m4/Makefile.in
+++ b/m4/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -180,7 +180,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/m4/libtool.m4 b/m4/libtool.m4
index 828104c..534d1cc 100644
--- a/m4/libtool.m4
+++ b/m4/libtool.m4
@@ -2512,17 +2512,6 @@
   esac
   ;;
 
-gnu*)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
 haiku*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
@@ -2639,7 +2628,7 @@
   ;;
 
 # This must be glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
@@ -3255,10 +3244,6 @@
   fi
   ;;
 
-gnu*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
 haiku*)
   lt_cv_deplibs_check_method=pass_all
   ;;
@@ -3297,7 +3282,7 @@
   ;;
 
 # This must be glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
@@ -4049,7 +4034,7 @@
 	    ;;
 	esac
 	;;
-      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
 	case $cc_basename in
 	  KCC*)
 	    # KAI C++ Compiler
@@ -4348,7 +4333,7 @@
       _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
       ;;
 
-    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+    linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
       case $cc_basename in
       # old Intel for x86_64 which still supported -KPIC.
       ecc*)
@@ -6241,9 +6226,6 @@
         _LT_TAGVAR(ld_shlibs, $1)=yes
         ;;
 
-      gnu*)
-        ;;
-
       haiku*)
         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
         _LT_TAGVAR(link_all_deplibs, $1)=yes
@@ -6405,7 +6387,7 @@
         _LT_TAGVAR(inherit_rpath, $1)=yes
         ;;
 
-      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
         case $cc_basename in
           KCC*)
 	    # Kuck and Associates, Inc. (KAI) C++ Compiler
diff --git a/pkgconfig/Makefile.in b/pkgconfig/Makefile.in
index 1b5e806..32888c2 100644
--- a/pkgconfig/Makefile.in
+++ b/pkgconfig/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -181,7 +181,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/po/af.gmo b/po/af.gmo
index 594426d..d9b0041 100644
--- a/po/af.gmo
+++ b/po/af.gmo
Binary files differ
diff --git a/po/af.po b/po/af.po
index 6f57896..2bc1114 100644
--- a/po/af.po
+++ b/po/af.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins 0.7.6\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2004-03-18 14:16+0200\n"
 "Last-Translator: Petri Jooste <rkwjpj@puk.ac.za>\n"
 "Language-Team: Afrikaans <i18n@af.org.za>\n"
diff --git a/po/az.gmo b/po/az.gmo
index 3b1178d..e7afe54 100644
--- a/po/az.gmo
+++ b/po/az.gmo
Binary files differ
diff --git a/po/az.po b/po/az.po
index 004031f..f2c996a 100644
--- a/po/az.po
+++ b/po/az.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-0.8.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2004-03-19 18:29+0200\n"
 "Last-Translator: Metin Amiroff <metin@karegen.com>\n"
 "Language-Team: Azerbaijani <translation-team-az@lists.sourceforge.net>\n"
diff --git a/po/bg.gmo b/po/bg.gmo
index d9c2a8c..a2a7ad0 100644
--- a/po/bg.gmo
+++ b/po/bg.gmo
Binary files differ
diff --git a/po/bg.po b/po/bg.po
index dc897d1..f6509b5 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.28.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2011-04-26 22:35+0300\n"
 "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
 "Language-Team: Bulgarian <dict@fsa-bg.org>\n"
diff --git a/po/ca.gmo b/po/ca.gmo
index d7d7dee..90ce5c5 100644
--- a/po/ca.gmo
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
index e27ecf9..ac976ca 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.28.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2012-01-01 14:19+0100\n"
 "Last-Translator: Gil Forcada <gforcada@gnome.org>\n"
 "Language-Team: Catalan <ca@dodds.net>\n"
diff --git a/po/cs.gmo b/po/cs.gmo
index 68a7141..cb3b497 100644
--- a/po/cs.gmo
+++ b/po/cs.gmo
Binary files differ
diff --git a/po/cs.po b/po/cs.po
index 072d313..b8a759b 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good-0.10.26.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2011-01-12 23:07+0100\n"
 "Last-Translator: Petr Kovar <pknbe@volny.cz>\n"
 "Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
diff --git a/po/da.gmo b/po/da.gmo
index 3ab7c63..2027e96 100644
--- a/po/da.gmo
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
index 47971cc..d9357a2 100644
--- a/po/da.po
+++ b/po/da.po
@@ -12,7 +12,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good-0.10.26.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2011-01-07 23:54+0200\n"
 "Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
 "Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
diff --git a/po/de.gmo b/po/de.gmo
index d8e55b3..694efbb 100644
--- a/po/de.gmo
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
index 6b33e5b..356c7ae 100644
--- a/po/de.po
+++ b/po/de.po
@@ -14,7 +14,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.26.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2011-01-21 22:36+0100\n"
 "Last-Translator: Christian Kirbach <christian.kirbach@googlemail.com>\n"
 "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
diff --git a/po/el.gmo b/po/el.gmo
index 3a4eb71..44f4f9f 100644
--- a/po/el.gmo
+++ b/po/el.gmo
Binary files differ
diff --git a/po/el.po b/po/el.po
index 405d26a..63ab464 100644
--- a/po/el.po
+++ b/po/el.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.25.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2010-10-27 12:16+0200\n"
 "Last-Translator: Michael Kotsarinis <mk73628@gmail.com>\n"
 "Language-Team: Greek <team@lists.gnome.gr>\n"
diff --git a/po/en_GB.gmo b/po/en_GB.gmo
index 99af035..48667f5 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 68c1b6b..5283f4b 100644
--- a/po/en_GB.po
+++ b/po/en_GB.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins 0.8.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2004-04-26 10:41-0400\n"
 "Last-Translator: Gareth Owen <gowen72@yahoo.com>\n"
 "Language-Team: English (British) <en_gb@li.org>\n"
diff --git a/po/eo.gmo b/po/eo.gmo
index 657ea79..075b3c8 100644
--- a/po/eo.gmo
+++ b/po/eo.gmo
Binary files differ
diff --git a/po/eo.po b/po/eo.po
index d90e6fa..bfa5be7 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.28.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2011-06-04 21:48+0100\n"
 "Last-Translator: Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>\n"
 "Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
diff --git a/po/es.gmo b/po/es.gmo
index eeef4aa..cf6f155 100644
--- a/po/es.gmo
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
index 4230ccb..b39672c 100644
--- a/po/es.po
+++ b/po/es.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.26.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2011-02-12 18:30+0100\n"
 "Last-Translator: Jorge González González <aloriel@gmail.com>\n"
 "Language-Team: Spanish <es@li.org>\n"
diff --git a/po/eu.gmo b/po/eu.gmo
index 8f758e7..9471959 100644
--- a/po/eu.gmo
+++ b/po/eu.gmo
Binary files differ
diff --git a/po/eu.po b/po/eu.po
index de12454..9cebc35 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good-0.10.18.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2010-03-25 12:37+0100\n"
 "Last-Translator: Mikel Olasagasti Uranga <hey_neken@mundurat.net>\n"
 "Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n"
diff --git a/po/fi.gmo b/po/fi.gmo
index 65f49d1..5eef592 100644
--- a/po/fi.gmo
+++ b/po/fi.gmo
Binary files differ
diff --git a/po/fi.po b/po/fi.po
index 3fdfe40..47fe305 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -11,7 +11,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.25.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2010-11-17 23:03+0200\n"
 "Last-Translator: Tommi Vainikainen <Tommi.Vainikainen@iki.fi>\n"
 "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
diff --git a/po/fr.gmo b/po/fr.gmo
index b5d5cf2..e23760e 100644
--- a/po/fr.gmo
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
index 4341608..7b69b49 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.28.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2011-04-28 09:22+0200\n"
 "Last-Translator: Claude Paroz <claude@2xlibre.net>\n"
 "Language-Team: French <traduc@traduc.org>\n"
diff --git a/po/gl.gmo b/po/gl.gmo
index 5e6c846..9ca0943 100644
--- a/po/gl.gmo
+++ b/po/gl.gmo
Binary files differ
diff --git a/po/gl.po b/po/gl.po
index 30bd09d..f0c083b 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.26.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2011-01-09 21:20+0100\n"
 "Last-Translator: Fran Diéguez <frandieguez@ubuntu.com>\n"
 "Language-Team: Galician <proxecto@trasno.net>\n"
diff --git a/po/gst-plugins-good-1.0.pot b/po/gst-plugins-good-1.0.pot
index 59798f7..9ca8fe7 100644
--- a/po/gst-plugins-good-1.0.pot
+++ b/po/gst-plugins-good-1.0.pot
@@ -5,9 +5,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-good 0.11.92\n"
+"Project-Id-Version: gst-plugins-good 0.11.93\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\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"
@@ -22,7 +22,7 @@
 msgid "'%s' by '%s'"
 msgstr ""
 
-#: ext/jpeg/gstjpegdec.c:251
+#: ext/jpeg/gstjpegdec.c:250
 msgid "Failed to decode JPEG image"
 msgstr ""
 
@@ -30,36 +30,36 @@
 msgid "Could not connect to server"
 msgstr ""
 
-#: ext/soup/gstsouphttpsrc.c:805
+#: ext/soup/gstsouphttpsrc.c:804
 msgid "Server does not support seeking."
 msgstr ""
 
-#: ext/soup/gstsouphttpsrc.c:1021
+#: ext/soup/gstsouphttpsrc.c:1020
 msgid "Could not resolve server name."
 msgstr ""
 
-#: ext/soup/gstsouphttpsrc.c:1027
+#: ext/soup/gstsouphttpsrc.c:1026
 msgid "Could not establish connection to server."
 msgstr ""
 
-#: ext/soup/gstsouphttpsrc.c:1032
+#: ext/soup/gstsouphttpsrc.c:1031
 msgid "Secure connection setup failed."
 msgstr ""
 
-#: ext/soup/gstsouphttpsrc.c:1037
+#: ext/soup/gstsouphttpsrc.c:1036
 msgid ""
 "A network error occured, or the server closed the connection unexpectedly."
 msgstr ""
 
-#: ext/soup/gstsouphttpsrc.c:1043
+#: ext/soup/gstsouphttpsrc.c:1042
 msgid "Server sent bad data."
 msgstr ""
 
-#: ext/soup/gstsouphttpsrc.c:1188
+#: ext/soup/gstsouphttpsrc.c:1187
 msgid "No URL set."
 msgstr ""
 
-#: gst/avi/gstavidemux.c:5223
+#: gst/avi/gstavidemux.c:5234
 msgid "Internal data stream error."
 msgstr ""
 
@@ -71,50 +71,50 @@
 msgid "This file contains no playable streams."
 msgstr ""
 
-#: gst/isomp4/qtdemux.c:592 gst/isomp4/qtdemux.c:4086
-#: gst/isomp4/qtdemux.c:4156 gst/isomp4/qtdemux.c:4307
+#: gst/isomp4/qtdemux.c:592 gst/isomp4/qtdemux.c:4081
+#: gst/isomp4/qtdemux.c:4147 gst/isomp4/qtdemux.c:4294
 msgid "This file is invalid and cannot be played."
 msgstr ""
 
-#: gst/isomp4/qtdemux.c:2455 gst/isomp4/qtdemux.c:2531
-#: gst/isomp4/qtdemux.c:2574 gst/isomp4/qtdemux.c:4910
-#: gst/isomp4/qtdemux.c:4917 gst/isomp4/qtdemux.c:5534
-#: gst/isomp4/qtdemux.c:5962 gst/isomp4/qtdemux.c:5969
-#: gst/isomp4/qtdemux.c:7540
+#: gst/isomp4/qtdemux.c:2448 gst/isomp4/qtdemux.c:2524
+#: gst/isomp4/qtdemux.c:2567 gst/isomp4/qtdemux.c:4897
+#: gst/isomp4/qtdemux.c:4904 gst/isomp4/qtdemux.c:5528
+#: gst/isomp4/qtdemux.c:5956 gst/isomp4/qtdemux.c:5963
+#: gst/isomp4/qtdemux.c:7534
 msgid "This file is corrupt and cannot be played."
 msgstr ""
 
-#: gst/isomp4/qtdemux.c:2665
+#: gst/isomp4/qtdemux.c:2658
 msgid "Invalid atom size."
 msgstr ""
 
-#: gst/isomp4/qtdemux.c:2731
+#: gst/isomp4/qtdemux.c:2724
 msgid "This file is incomplete and cannot be played."
 msgstr ""
 
-#: gst/isomp4/qtdemux.c:5132
+#: gst/isomp4/qtdemux.c:5119
 msgid "The video in this file might not play correctly."
 msgstr ""
 
-#: gst/isomp4/qtdemux.c:7569
+#: gst/isomp4/qtdemux.c:7563
 #, c-format
 msgid "This file contains too many streams. Only playing first %d"
 msgstr ""
 
-#: gst/rtsp/gstrtspsrc.c:5340
+#: gst/rtsp/gstrtspsrc.c:5337
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
 msgstr ""
 
-#: gst/rtsp/gstrtspsrc.c:5345
+#: gst/rtsp/gstrtspsrc.c:5342
 msgid ""
 "No supported stream was found. You might need to allow more transport "
 "protocols or may otherwise be missing the right GStreamer RTSP extension "
 "plugin."
 msgstr ""
 
-#: gst/wavparse/gstwavparse.c:2082
+#: gst/wavparse/gstwavparse.c:2385
 msgid "Internal data flow error."
 msgstr ""
 
@@ -205,7 +205,7 @@
 msgid "AUX 2 Out"
 msgstr ""
 
-#: sys/v4l2/gstv4l2bufferpool.c:991
+#: sys/v4l2/gstv4l2bufferpool.c:1007
 #, c-format
 msgid "Error reading %d bytes from device '%s'."
 msgstr ""
@@ -215,65 +215,65 @@
 msgid "Failed to enumerate possible video formats device '%s' can work with"
 msgstr ""
 
-#: sys/v4l2/gstv4l2object.c:2177
+#: sys/v4l2/gstv4l2object.c:2186
 #, c-format
 msgid "Could not map buffers from device '%s'"
 msgstr ""
 
-#: sys/v4l2/gstv4l2object.c:2185
+#: sys/v4l2/gstv4l2object.c:2194
 #, c-format
 msgid "The driver of device '%s' does not support the IO method %d"
 msgstr ""
 
-#: sys/v4l2/gstv4l2object.c:2192
+#: sys/v4l2/gstv4l2object.c:2201
 #, c-format
 msgid "The driver of device '%s' does not support any known IO method."
 msgstr ""
 
-#: sys/v4l2/gstv4l2object.c:2386
+#: sys/v4l2/gstv4l2object.c:2395
 #, c-format
 msgid "Device '%s' does not support video capture"
 msgstr ""
 
-#: sys/v4l2/gstv4l2object.c:2395
+#: sys/v4l2/gstv4l2object.c:2404
 #, c-format
 msgid "Device '%s' is busy"
 msgstr ""
 
-#: sys/v4l2/gstv4l2object.c:2401 sys/v4l2/gstv4l2object.c:2412
+#: sys/v4l2/gstv4l2object.c:2410 sys/v4l2/gstv4l2object.c:2421
 #, c-format
 msgid "Device '%s' cannot capture at %dx%d"
 msgstr ""
 
-#: sys/v4l2/gstv4l2object.c:2421
+#: sys/v4l2/gstv4l2object.c:2430
 #, c-format
 msgid "Device '%s' cannot capture in the specified format"
 msgstr ""
 
-#: sys/v4l2/gstv4l2object.c:2434
+#: sys/v4l2/gstv4l2object.c:2443
 #, c-format
 msgid "Could not get parameters on device '%s'"
 msgstr ""
 
-#: sys/v4l2/gstv4l2object.c:2442
+#: sys/v4l2/gstv4l2object.c:2451
 msgid "Video device did not accept new frame rate setting."
 msgstr ""
 
-#: sys/v4l2/gstv4l2object.c:2449
+#: sys/v4l2/gstv4l2object.c:2458
 msgid "Video device could not create buffer pool."
 msgstr ""
 
-#: sys/v4l2/gstv4l2object.c:2526
+#: sys/v4l2/gstv4l2object.c:2535
 #, c-format
 msgid "Got unexpected frame size of %u instead of %u."
 msgstr ""
 
-#: sys/v4l2/gstv4l2object.c:2592
+#: sys/v4l2/gstv4l2object.c:2601
 #, c-format
 msgid "Failed trying to get video frames from device '%s'."
 msgstr ""
 
-#: sys/v4l2/gstv4l2object.c:2594
+#: sys/v4l2/gstv4l2object.c:2603
 #, c-format
 msgid "Failed after %d tries. device %s. system error: %s"
 msgstr ""
diff --git a/po/hu.gmo b/po/hu.gmo
index d20f1f1..95c08a9 100644
--- a/po/hu.gmo
+++ b/po/hu.gmo
Binary files differ
diff --git a/po/hu.po b/po/hu.po
index 3e240bb..b17cffc 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.25.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2010-11-04 01:21+0100\n"
 "Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n"
 "Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
diff --git a/po/id.gmo b/po/id.gmo
index 7959456..ac32556 100644
--- a/po/id.gmo
+++ b/po/id.gmo
Binary files differ
diff --git a/po/id.po b/po/id.po
index af532cb..54992c1 100644
--- a/po/id.po
+++ b/po/id.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.26.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2011-02-26 18:09+0700\n"
 "Last-Translator: Andhika Padmawan <andhika.padmawan@gmail.com>\n"
 "Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
diff --git a/po/it.gmo b/po/it.gmo
index 5e69706..b7d5106 100644
--- a/po/it.gmo
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
index df35dcd..f588c23 100644
--- a/po/it.po
+++ b/po/it.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.25.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2010-10-25 10:11+0200\n"
 "Last-Translator: Luca Ferretti <elle.uca@infinito.it>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
diff --git a/po/ja.gmo b/po/ja.gmo
index 30256dc..9bb0fd7 100644
--- a/po/ja.gmo
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
index fc820b5..e8ba9bc 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.28.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2011-08-28 23:59+0900\n"
 "Last-Translator: Takeshi Hamasaki <hmatrjp@users.sourceforge.jp>\n"
 "Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
diff --git a/po/lt.gmo b/po/lt.gmo
index 83b9eec..f30211d 100644
--- a/po/lt.gmo
+++ b/po/lt.gmo
Binary files differ
diff --git a/po/lt.po b/po/lt.po
index 13b2e15..a3225ce 100644
--- a/po/lt.po
+++ b/po/lt.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.23.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2010-07-16 19:34+0300\n"
 "Last-Translator: Žygimantas Beručka <uid0@akl.lt>\n"
 "Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
diff --git a/po/lv.gmo b/po/lv.gmo
index 02b298c..420a723 100644
--- a/po/lv.gmo
+++ b/po/lv.gmo
Binary files differ
diff --git a/po/lv.po b/po/lv.po
index 1dddbf1..c0d2a6a 100644
--- a/po/lv.po
+++ b/po/lv.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.28.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2011-09-02 11:23-0000\n"
 "Last-Translator: Rihards Priedītis <rprieditis@gmail.com>\n"
 "Language-Team: Latvian <translation-team-lv@lists.sourceforge.net>\n"
diff --git a/po/mt.gmo b/po/mt.gmo
index e4c0184..a68d6bc 100644
--- a/po/mt.gmo
+++ b/po/mt.gmo
Binary files differ
diff --git a/po/mt.po b/po/mt.po
index d725361..bfeff7e 100644
--- a/po/mt.po
+++ b/po/mt.po
@@ -5,7 +5,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good-0.10.10.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2008-10-26 19:09+0100\n"
 "Last-Translator: Michel Bugeja <michelbugeja@rabatmalta.com>\n"
 "Language-Team: Maltese <translation-team-mt@lists.sourceforge.net>\n"
diff --git a/po/nb.gmo b/po/nb.gmo
index 90eee2f..fc9c997 100644
--- a/po/nb.gmo
+++ b/po/nb.gmo
Binary files differ
diff --git a/po/nb.po b/po/nb.po
index 51f8a64..846fa61 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.25.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2010-10-24 21:53+0200\n"
 "Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
 "Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n"
diff --git a/po/nl.gmo b/po/nl.gmo
index 24a2224..3479b26 100644
--- a/po/nl.gmo
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
index 61ec863..5643347 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.28.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2011-04-27 00:05+0200\n"
 "Last-Translator: Freek de Kruijf <f.de.kruijf@gmail.com>\n"
 "Language-Team: Dutch <vertaling@vrijschrift.org>\n"
diff --git a/po/or.gmo b/po/or.gmo
index 72cb77f..b6a7db4 100644
--- a/po/or.gmo
+++ b/po/or.gmo
Binary files differ
diff --git a/po/or.po b/po/or.po
index df174e1..dbb4aa2 100644
--- a/po/or.po
+++ b/po/or.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-0.8.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2004-09-27 13:32+0530\n"
 "Last-Translator: Gora Mohanty <gora_mohanty@yahoo.co.in>\n"
 "Language-Team: Oriya <gora_mohanty@yahoo.co.in>\n"
diff --git a/po/pl.gmo b/po/pl.gmo
index 8b32dc9..7eee5b3 100644
--- a/po/pl.gmo
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
index 4b0da15..c800cf0 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.26.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2011-01-07 21:53+0100\n"
 "Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
 "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
index 3716f8a..fbfc8c7 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 72cf7c3..0e0a273 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -11,7 +11,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.26.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2011-01-08 01:28-0300\n"
 "Last-Translator: Fabrício Godoy <skarllot@gmail.com>\n"
 "Language-Team: Brazilian Portuguese <ldp-br@bazar.conectiva.com.br>\n"
diff --git a/po/ro.gmo b/po/ro.gmo
index 05fcf6c..5520dff 100644
--- a/po/ro.gmo
+++ b/po/ro.gmo
Binary files differ
diff --git a/po/ro.po b/po/ro.po
index 85353d2..74c2bfc 100644
--- a/po/ro.po
+++ b/po/ro.po
@@ -5,7 +5,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.23.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2010-08-16 03:22+0300\n"
 "Last-Translator: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>\n"
 "Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
diff --git a/po/ru.gmo b/po/ru.gmo
index 1517e22..5fca62e 100644
--- a/po/ru.gmo
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
index ef696c2..36b1af7 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.28.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2011-04-26 21:13+0400\n"
 "Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
 "Language-Team: Russian <gnu@mx.ru>\n"
diff --git a/po/sk.gmo b/po/sk.gmo
index 5c3e0c3..64c4797 100644
--- a/po/sk.gmo
+++ b/po/sk.gmo
Binary files differ
diff --git a/po/sk.po b/po/sk.po
index 1da8ff5..27264cf 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.25.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2010-11-08 15:48+0100\n"
 "Last-Translator: Peter Tuhársky <tuharsky@misbb.sk>\n"
 "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
diff --git a/po/sl.gmo b/po/sl.gmo
index a9a0516..788d2b5 100644
--- a/po/sl.gmo
+++ b/po/sl.gmo
Binary files differ
diff --git a/po/sl.po b/po/sl.po
index cbf8b01..de120e9 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.26.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2011-03-12 18:35+0100\n"
 "Last-Translator: Klemen Košir <klemen.kosir@gmx.com>\n"
 "Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
diff --git a/po/sq.gmo b/po/sq.gmo
index ac7643f..474d44c 100644
--- a/po/sq.gmo
+++ b/po/sq.gmo
Binary files differ
diff --git a/po/sq.po b/po/sq.po
index 13dbc91..febdace 100644
--- a/po/sq.po
+++ b/po/sq.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins 0.8.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2004-08-07 20:29+0200\n"
 "Last-Translator: Laurent Dhima <laurenti@alblinux.net>\n"
 "Language-Team: Albanian <begraj@hotmail.com>\n"
diff --git a/po/sr.gmo b/po/sr.gmo
index 8bcc75f..11cda91 100644
--- a/po/sr.gmo
+++ b/po/sr.gmo
Binary files differ
diff --git a/po/sr.po b/po/sr.po
index 17e0317..e6f5125 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good-0.10.28.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2011-12-04 16:44+0200\n"
 "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
 "Language-Team: Serbian <gnu@prevod.org>\n"
diff --git a/po/sv.gmo b/po/sv.gmo
index 39897d0..967aa14 100644
--- a/po/sv.gmo
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
index 330fad7..76c278a 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.26.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2011-01-09 19:36+0100\n"
 "Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
diff --git a/po/tr.gmo b/po/tr.gmo
index 0c03c15..15d56d8 100644
--- a/po/tr.gmo
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
index f6587da..e45db29 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.26.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2011-01-08 00:03+0200\n"
 "Last-Translator: Server Acim <serveracim@gmail.com>\n"
 "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
diff --git a/po/uk.gmo b/po/uk.gmo
index d8d21a4..a6f6f8e 100644
--- a/po/uk.gmo
+++ b/po/uk.gmo
Binary files differ
diff --git a/po/uk.po b/po/uk.po
index e9d8091..c721395 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.28.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2011-05-01 11:55+0300\n"
 "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
 "Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
diff --git a/po/vi.gmo b/po/vi.gmo
index 9474a98..d058e95 100644
--- a/po/vi.gmo
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
index e8d5f44..9554bac 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.23.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2010-10-03 18:48+1030\n"
 "Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
 "Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
index 4416784..74a2923 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 8503ed0..37fbe8f 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.16.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2009-11-13 22:20+0800\n"
 "Last-Translator: Ji ZhengYu <zhengyuji@gmail.com>\n"
 "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
diff --git a/po/zh_HK.gmo b/po/zh_HK.gmo
index e9986ca..4f1458b 100644
--- a/po/zh_HK.gmo
+++ b/po/zh_HK.gmo
Binary files differ
diff --git a/po/zh_HK.po b/po/zh_HK.po
index 3d5dc9d..9abc794 100644
--- a/po/zh_HK.po
+++ b/po/zh_HK.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good-0.10.2 0.10.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2006-08-29 01:08+0800\n"
 "Last-Translator: Abel Cheung <abelcheung@gmail.com>\n"
 "Language-Team: Chinese (Hong Kong) <community@linuxhall.org>\n"
diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo
index 698da29..a217185 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 6025c75..5cb5fb4 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good-0.10.2 0.10.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
 "PO-Revision-Date: 2006-08-29 01:08+0800\n"
 "Last-Translator: Abel Cheung <abelcheung@gmail.com>\n"
 "Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
diff --git a/sys/Makefile.in b/sys/Makefile.in
index b5d4e33..fa0316c 100644
--- a/sys/Makefile.in
+++ b/sys/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -231,7 +231,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/sys/directsound/Makefile.in b/sys/directsound/Makefile.in
index 1c809e1..f45bdde 100644
--- a/sys/directsound/Makefile.in
+++ b/sys/directsound/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -251,7 +251,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/sys/directsound/gstdirectsoundsink.c b/sys/directsound/gstdirectsoundsink.c
index fec8f92..9e82bb0 100644
--- a/sys/directsound/gstdirectsoundsink.c
+++ b/sys/directsound/gstdirectsoundsink.c
@@ -55,6 +55,7 @@
 #include <gst/base/gstbasesink.h>
 #include <gst/audio/streamvolume.h>
 #include "gstdirectsoundsink.h"
+#include <gst/audio/gstaudioiec61937.h>
 
 #include <math.h>
 
@@ -79,6 +80,8 @@
 
 static GstCaps *gst_directsound_sink_getcaps (GstBaseSink * bsink,
     GstCaps * filter);
+static GstBuffer *gst_directsound_sink_payload (GstAudioBaseSink * sink,
+    GstBuffer * buf);
 static gboolean gst_directsound_sink_prepare (GstAudioSink * asink,
     GstAudioRingBufferSpec * spec);
 static gboolean gst_directsound_sink_unprepare (GstAudioSink * asink);
@@ -90,6 +93,8 @@
 static void gst_directsound_sink_reset (GstAudioSink * asink);
 static GstCaps *gst_directsound_probe_supported_formats (GstDirectSoundSink *
     dsoundsink, const GstCaps * template_caps);
+static gboolean gst_directsound_sink_query (GstBaseSink * pad,
+    GstQuery * query);
 
 static void gst_directsound_sink_set_volume (GstDirectSoundSink * sink,
     gdouble volume, gboolean store);
@@ -98,6 +103,9 @@
     gboolean mute);
 static gboolean gst_directsound_sink_get_mute (GstDirectSoundSink * sink);
 
+static gboolean gst_directsound_sink_is_spdif_format (GstAudioRingBufferSpec *
+    spec);
+
 static GstStaticPadTemplate directsoundsink_sink_factory =
     GST_STATIC_PAD_TEMPLATE ("sink",
     GST_PAD_SINK,
@@ -110,7 +118,8 @@
         "format = (string) S8, "
         "layout = (string) interleaved, "
         "rate = (int) [ 1, MAX ], " "channels = (int) [ 1, 2 ];"
-        "audio/x-iec958"));
+        "audio/x-ac3, framed = (boolean) true;"
+        "audio/x-dts, framed = (boolean) true;"));
 
 enum
 {
@@ -136,6 +145,8 @@
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
   GstBaseSinkClass *gstbasesink_class = GST_BASE_SINK_CLASS (klass);
   GstAudioSinkClass *gstaudiosink_class = GST_AUDIO_SINK_CLASS (klass);
+  GstAudioBaseSinkClass *gstaudiobasesink_class =
+      GST_AUDIO_BASE_SINK_CLASS (klass);
   GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
 
   GST_DEBUG_CATEGORY_INIT (directsoundsink_debug, "directsoundsink", 0,
@@ -150,6 +161,11 @@
   gstbasesink_class->get_caps =
       GST_DEBUG_FUNCPTR (gst_directsound_sink_getcaps);
 
+  gstbasesink_class->query = GST_DEBUG_FUNCPTR (gst_directsound_sink_query);
+
+  gstaudiobasesink_class->payload =
+      GST_DEBUG_FUNCPTR (gst_directsound_sink_payload);
+
   gstaudiosink_class->prepare =
       GST_DEBUG_FUNCPTR (gst_directsound_sink_prepare);
   gstaudiosink_class->unprepare =
@@ -275,6 +291,90 @@
 }
 
 static gboolean
+gst_directsound_sink_acceptcaps (GstBaseSink * sink, GstQuery * query)
+{
+  GstDirectSoundSink *dsink = GST_DIRECTSOUND_SINK (sink);
+  GstPad *pad;
+  GstCaps *caps;
+  GstCaps *pad_caps;
+  GstStructure *st;
+  gboolean ret = FALSE;
+  GstAudioRingBufferSpec spec = { 0 };
+
+  if (G_UNLIKELY (dsink == NULL))
+    return FALSE;
+
+  pad = sink->sinkpad;
+
+  gst_query_parse_accept_caps (query, &caps);
+  GST_DEBUG_OBJECT (pad, "caps %" GST_PTR_FORMAT, caps);
+
+  pad_caps = gst_pad_query_caps (pad, NULL);
+  if (pad_caps) {
+    gboolean cret = gst_caps_can_intersect (pad_caps, caps);
+    gst_caps_unref (pad_caps);
+    if (!cret) {
+      GST_DEBUG_OBJECT (dsink, "Can't intersect caps, not accepting caps");
+      goto done;
+    }
+  }
+
+  /* If we've not got fixed caps, creating a stream might fail, so let's just
+   * return from here with default acceptcaps behaviour */
+  if (!gst_caps_is_fixed (caps)) {
+    GST_DEBUG_OBJECT (dsink, "Caps are not fixed, not accepting caps");
+    goto done;
+  }
+
+  spec.latency_time = GST_SECOND;
+  if (!gst_audio_ring_buffer_parse_caps (&spec, caps)) {
+    GST_DEBUG_OBJECT (dsink, "Failed to parse caps, not accepting");
+    goto done;
+  }
+
+  /* Make sure input is framed (one frame per buffer) and can be payloaded */
+  switch (spec.type) {
+    case GST_AUDIO_RING_BUFFER_FORMAT_TYPE_AC3:
+    case GST_AUDIO_RING_BUFFER_FORMAT_TYPE_DTS:
+    {
+      gboolean framed = FALSE, parsed = FALSE;
+      st = gst_caps_get_structure (caps, 0);
+
+      gst_structure_get_boolean (st, "framed", &framed);
+      gst_structure_get_boolean (st, "parsed", &parsed);
+      if ((!framed && !parsed) || gst_audio_iec61937_frame_size (&spec) <= 0) {
+        GST_DEBUG_OBJECT (dsink, "Wrong AC3/DTS caps, not accepting");
+        goto done;
+      }
+    }
+    default:
+      break;
+  }
+  ret = TRUE;
+  GST_DEBUG_OBJECT (dsink, "Accepting caps");
+
+done:
+  gst_query_set_accept_caps_result (query, ret);
+  return TRUE;
+}
+
+static gboolean
+gst_directsound_sink_query (GstBaseSink * sink, GstQuery * query)
+{
+  gboolean res = TRUE;
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_ACCEPT_CAPS:
+      res = gst_directsound_sink_acceptcaps (sink, query);
+      break;
+    default:
+      res = GST_BASE_SINK_CLASS (parent_class)->query (sink, query);
+  }
+
+  return res;
+}
+
+static gboolean
 gst_directsound_sink_open (GstAudioSink * asink)
 {
   GstDirectSoundSink *dsoundsink;
@@ -302,6 +402,13 @@
 }
 
 static gboolean
+gst_directsound_sink_is_spdif_format (GstAudioRingBufferSpec * spec)
+{
+  return spec->type == GST_AUDIO_RING_BUFFER_FORMAT_TYPE_AC3 ||
+      spec->type == GST_AUDIO_RING_BUFFER_FORMAT_TYPE_DTS;
+}
+
+static gboolean
 gst_directsound_sink_prepare (GstAudioSink * asink,
     GstAudioRingBufferSpec * spec)
 {
@@ -318,7 +425,7 @@
 
   /* fill the WAVEFORMATEX structure with spec params */
   memset (&wfx, 0, sizeof (wfx));
-  if (spec->type != GST_AUDIO_RING_BUFFER_FORMAT_TYPE_IEC958) {
+  if (!gst_directsound_sink_is_spdif_format (spec)) {
     wfx.cbSize = sizeof (wfx);
     wfx.wFormatTag = WAVE_FORMAT_PCM;
     wfx.nChannels = spec->info.channels;
@@ -345,7 +452,7 @@
     wfx.cbSize = 0;
     wfx.wFormatTag = WAVE_FORMAT_DOLBY_AC3_SPDIF;
     wfx.nChannels = 2;
-    wfx.nSamplesPerSec = spec->info.rate;
+    wfx.nSamplesPerSec = 48000;
     wfx.wBitsPerSample = 16;
     wfx.nBlockAlign = wfx.wBitsPerSample / 8 * wfx.nChannels;
     wfx.nAvgBytesPerSec = wfx.nSamplesPerSec * wfx.nBlockAlign;
@@ -361,7 +468,7 @@
   dsoundsink->buffer_size = spec->segsize * spec->segtotal;
 
   GST_INFO_OBJECT (dsoundsink,
-      "GstRingBufferSpec->channels: %d, GstRingBufferSpec->rate: %d, GstRingBufferSpec->bytes_per_sample: %d\n"
+      "GstAudioRingBufferSpec->channels: %d, GstAudioRingBufferSpec->rate: %d, GstAudioRingBufferSpec->bytes_per_sample: %d\n"
       "WAVEFORMATEX.nSamplesPerSec: %ld, WAVEFORMATEX.wBitsPerSample: %d, WAVEFORMATEX.nBlockAlign: %d, WAVEFORMATEX.nAvgBytesPerSec: %ld\n"
       "Size of dsound circular buffer=>%d\n", spec->info.channels,
       spec->info.rate, spec->info.bpf, wfx.nSamplesPerSec, wfx.wBitsPerSample,
@@ -371,7 +478,7 @@
   memset (&descSecondary, 0, sizeof (DSBUFFERDESC));
   descSecondary.dwSize = sizeof (DSBUFFERDESC);
   descSecondary.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_GLOBALFOCUS;
-  if (spec->type != GST_AUDIO_RING_BUFFER_FORMAT_TYPE_IEC958)
+  if (!gst_directsound_sink_is_spdif_format (spec))
     descSecondary.dwFlags |= DSBCAPS_CTRLVOLUME;
 
   descSecondary.dwBufferBytes = dsoundsink->buffer_size;
@@ -436,10 +543,6 @@
 
   dsoundsink = GST_DIRECTSOUND_SINK (asink);
 
-  /* Fix endianness */
-  if (dsoundsink->type == GST_AUDIO_RING_BUFFER_FORMAT_TYPE_IEC958)
-    _swab (data, data, length);
-
   GST_DSOUND_LOCK (dsoundsink);
 
   /* get current buffer status */
@@ -608,6 +711,8 @@
   DSBUFFERDESC descSecondary;
   WAVEFORMATEX wfx;
   GstCaps *caps;
+  GstCaps *tmp, *tmp2;
+  LPDIRECTSOUNDBUFFER tmpBuffer;
 
   caps = gst_caps_copy (template_caps);
 
@@ -634,16 +739,24 @@
   descSecondary.lpwfxFormat = &wfx;
 
   hRes = IDirectSound_CreateSoundBuffer (dsoundsink->pDS, &descSecondary,
-      &dsoundsink->pDSBSecondary, NULL);
+      &tmpBuffer, NULL);
   if (FAILED (hRes)) {
     GST_INFO_OBJECT (dsoundsink, "AC3 passthrough not supported "
         "(IDirectSound_CreateSoundBuffer returned: %s)\n",
         DXGetErrorString9 (hRes));
-    caps =
-        gst_caps_subtract (caps, gst_caps_new_empty_simple ("audio/x-iec958"));
+    tmp = gst_caps_new_empty_simple ("audio/x-ac3");
+    tmp2 = gst_caps_subtract (caps, tmp);
+    gst_caps_unref (tmp);
+    gst_caps_unref (caps);
+    caps = tmp2;
+    tmp = gst_caps_new_empty_simple ("audio/x-dts");
+    tmp2 = gst_caps_subtract (caps, tmp);
+    gst_caps_unref (tmp);
+    gst_caps_unref (caps);
+    caps = tmp2;
   } else {
     GST_INFO_OBJECT (dsoundsink, "AC3 passthrough supported");
-    hRes = IDirectSoundBuffer_Release (dsoundsink->pDSBSecondary);
+    hRes = IDirectSoundBuffer_Release (tmpBuffer);
     if (FAILED (hRes)) {
       GST_DEBUG_OBJECT (dsoundsink,
           "(IDirectSoundBuffer_Release returned: %s)\n",
@@ -651,12 +764,63 @@
     }
   }
 #else
-  caps = gst_caps_subtract (caps, gst_caps_new_simple ("audio/x-iec958", NULL));
+  tmp = gst_caps_new_empty_simple ("audio/x-ac3");
+  tmp2 = gst_caps_subtract (caps, tmp);
+  gst_caps_unref (tmp);
+  gst_caps_unref (caps);
+  caps = tmp2;
+  tmp = gst_caps_new_empty_simple ("audio/x-dts");
+  tmp2 = gst_caps_subtract (caps, tmp);
+  gst_caps_unref (tmp);
+  gst_caps_unref (caps);
+  caps = tmp2;
 #endif
 
   return caps;
 }
 
+static GstBuffer *
+gst_directsound_sink_payload (GstAudioBaseSink * sink, GstBuffer * buf)
+{
+  if (gst_directsound_sink_is_spdif_format (&sink->ringbuffer->spec)) {
+    gint framesize = gst_audio_iec61937_frame_size (&sink->ringbuffer->spec);
+    GstBuffer *out;
+    GstMapInfo infobuf, infoout;
+    gboolean success;
+
+    if (framesize <= 0)
+      return NULL;
+
+    out = gst_buffer_new_and_alloc (framesize);
+
+    if (!gst_buffer_map (buf, &infobuf, GST_MAP_READWRITE)) {
+      gst_buffer_unref (out);
+      return NULL;
+    }
+    if (!gst_buffer_map (out, &infoout, GST_MAP_READWRITE)) {
+      gst_buffer_unmap (buf, &infobuf);
+      gst_buffer_unref (out);
+      return NULL;
+    }
+    success = gst_audio_iec61937_payload (infobuf.data, infobuf.size,
+        infoout.data, infoout.size, &sink->ringbuffer->spec);
+    if (!success) {
+      gst_buffer_unmap (out, &infoout);
+      gst_buffer_unmap (buf, &infobuf);
+      gst_buffer_unref (out);
+      return NULL;
+    }
+
+    gst_buffer_copy_into (out, buf, GST_BUFFER_COPY_ALL, 0, -1);
+    /* Fix endianness */
+    _swab ((gchar *) infoout.data, (gchar *) infoout.data, infobuf.size);
+    gst_buffer_unmap (out, &infoout);
+    gst_buffer_unmap (buf, &infobuf);
+    return out;
+  } else
+    return gst_buffer_ref (buf);
+}
+
 static void
 gst_directsound_sink_set_volume (GstDirectSoundSink * dsoundsink,
     gdouble dvolume, gboolean store)
diff --git a/sys/oss/Makefile.in b/sys/oss/Makefile.in
index ae49e36..2a02839 100644
--- a/sys/oss/Makefile.in
+++ b/sys/oss/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -249,7 +249,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/sys/oss4/Makefile.in b/sys/oss4/Makefile.in
index 2a284b4..f2f43da 100644
--- a/sys/oss4/Makefile.in
+++ b/sys/oss4/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -250,7 +250,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/sys/oss4/oss4-audio.c b/sys/oss4/oss4-audio.c
index 11f6e5e..21a963f 100644
--- a/sys/oss4/oss4-audio.c
+++ b/sys/oss4/oss4-audio.c
@@ -282,7 +282,7 @@
   } else if (GST_IS_OSS4_SOURCE (obj)) {
     rb = GST_AUDIO_BASE_SRC (obj)->ringbuffer;
   } else
-    g_assert_not_reached ();
+    g_return_if_reached ();
 
   /* -1 = get info for currently open device (fd). This will fail with
    * OSS build <= 1013 because of a bug in OSS */
@@ -309,7 +309,8 @@
   g_return_if_fail (num_channels <= G_N_ELEMENTS (ch_layout));
 
   gst_oss4_audio_get_channel_layout (obj, layout, num_channels, ch_layout);
-  if (gst_audio_channel_positions_to_mask (ch_layout, num_channels, &mask))
+  if (gst_audio_channel_positions_to_mask (ch_layout, num_channels, FALSE,
+          &mask))
     gst_structure_set (s, "channel-mask", GST_TYPE_BITMASK, mask, NULL);
 
   return;
diff --git a/sys/osxaudio/Makefile.am b/sys/osxaudio/Makefile.am
index 8c1c3f7..138e5ae 100644
--- a/sys/osxaudio/Makefile.am
+++ b/sys/osxaudio/Makefile.am
@@ -14,13 +14,14 @@
     $(GST_PLUGINS_BASE_LIBS)          \
     $(GST_BASE_LIBS)                  \
     $(GST_LIBS)
-libgstosxaudio_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -Wl,-framework -Wl,CoreAudio -Wl,-framework -Wl,AudioUnit -Wl,-framework -Wl,CoreServices
+libgstosxaudio_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -Wl,-framework -Wl,CoreAudio -Wl,-framework -Wl,AudioUnit -Wl,-framework -Wl,AudioToolbox -Wl,-framework -Wl,CoreServices
 libgstosxaudio_la_LIBTOOLFLAGS = --tag=disable-static
 
 noinst_HEADERS = gstosxaudiosink.h	  \
                  gstosxaudioelement.h \
                  gstosxringbuffer.h	  \
-                 gstosxaudiosrc.h
+                 gstosxaudiosrc.h     \
+                 gstosxcoreaudio.h
 
 
 
diff --git a/sys/osxaudio/Makefile.in b/sys/osxaudio/Makefile.in
index 1285c9e..1f53fa6 100644
--- a/sys/osxaudio/Makefile.in
+++ b/sys/osxaudio/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -251,7 +251,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
@@ -519,12 +521,13 @@
     $(GST_BASE_LIBS)                  \
     $(GST_LIBS)
 
-libgstosxaudio_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -Wl,-framework -Wl,CoreAudio -Wl,-framework -Wl,AudioUnit -Wl,-framework -Wl,CoreServices
+libgstosxaudio_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -Wl,-framework -Wl,CoreAudio -Wl,-framework -Wl,AudioUnit -Wl,-framework -Wl,AudioToolbox -Wl,-framework -Wl,CoreServices
 libgstosxaudio_la_LIBTOOLFLAGS = --tag=disable-static
 noinst_HEADERS = gstosxaudiosink.h	  \
                  gstosxaudioelement.h \
                  gstosxringbuffer.h	  \
-                 gstosxaudiosrc.h
+                 gstosxaudiosrc.h     \
+                 gstosxcoreaudio.h
 
 all: all-am
 
diff --git a/sys/osxaudio/gstosxaudiosink.c b/sys/osxaudio/gstosxaudiosink.c
index 639f499..99284d0 100644
--- a/sys/osxaudio/gstosxaudiosink.c
+++ b/sys/osxaudio/gstosxaudiosink.c
@@ -2,6 +2,7 @@
  * GStreamer
  * Copyright (C) 2005,2006 Zaheer Abbas Merali <zaheerabbas at merali dot org>
  * Copyright (C) 2007,2008 Pioneers of the Inevitable <songbird@songbirdnest.com>
+ * Copyright (C) 2012 Fluendo S.A. <support@fluendo.com>
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -66,14 +67,19 @@
 #endif
 
 #include <gst/gst.h>
+#include <gst/audio/multichannel.h>
+#include <gst/audio/gstaudioiec61937.h>
 #include <CoreAudio/CoreAudio.h>
 #include <CoreAudio/AudioHardware.h>
+
 #include "gstosxaudiosink.h"
 #include "gstosxaudioelement.h"
 
 GST_DEBUG_CATEGORY_STATIC (osx_audiosink_debug);
 #define GST_CAT_DEFAULT osx_audiosink_debug
 
+#include "gstosxcoreaudio.h"
+
 /* Filter signals and args */
 enum
 {
@@ -99,34 +105,36 @@
         "width = (int) 32, "
         "depth = (int) 32, "
         "rate = (int) [1, MAX], "
-        "channels = (int) [1, MAX];"
+        "channels = (int) [1, 9];"
         "audio/x-raw-int, "
         "endianness = (int) {" G_STRINGIFY (G_BYTE_ORDER) " }, "
         "signed = (boolean) { TRUE }, "
         "width = (int) 32, "
         "depth = (int) 32, "
         "rate = (int) [1, MAX], "
-        "channels = (int) [1, MAX];"
+        "channels = (int) [1, 9];"
         "audio/x-raw-int, "
         "endianness = (int) {" G_STRINGIFY (G_BYTE_ORDER) " }, "
         "signed = (boolean) { TRUE }, "
         "width = (int) 24, "
         "depth = (int) 24, "
         "rate = (int) [1, MAX], "
-        "channels = (int) [1, MAX];"
+        "channels = (int) [1, 9];"
         "audio/x-raw-int, "
         "endianness = (int) {" G_STRINGIFY (G_BYTE_ORDER) " }, "
         "signed = (boolean) { TRUE }, "
         "width = (int) 16, "
         "depth = (int) 16, "
         "rate = (int) [1, MAX], "
-        "channels = (int) [1, MAX];"
+        "channels = (int) [1, 9];"
         "audio/x-raw-int, "
         "endianness = (int) {" G_STRINGIFY (G_BYTE_ORDER) " }, "
         "signed = (boolean) { TRUE }, "
         "width = (int) 8, "
         "depth = (int) 8, "
-        "rate = (int) [1, MAX], " "channels = (int) [1, MAX]")
+        "rate = (int) [1, MAX], " "channels = (int) [1, MAX];"
+        "audio/x-ac3, framed = (boolean) true;"
+        "audio/x-dts, framed = (boolean) true")
     );
 
 static void gst_osx_audio_sink_set_property (GObject * object, guint prop_id,
@@ -134,11 +142,17 @@
 static void gst_osx_audio_sink_get_property (GObject * object, guint prop_id,
     GValue * value, GParamSpec * pspec);
 
+static gboolean gst_osx_audio_sink_stop (GstBaseSink * base);
+static GstCaps *gst_osx_audio_sink_getcaps (GstBaseSink * base);
+static gboolean gst_osx_audio_sink_acceptcaps (GstPad * pad, GstCaps * caps);
+
+static GstBuffer *gst_osx_audio_sink_sink_payload (GstBaseAudioSink * sink,
+    GstBuffer * buf);
 static GstRingBuffer *gst_osx_audio_sink_create_ringbuffer (GstBaseAudioSink *
     sink);
 static void gst_osx_audio_sink_osxelement_init (gpointer g_iface,
     gpointer iface_data);
-static void gst_osx_audio_sink_select_device (GstOsxAudioSink * osxsink);
+static gboolean gst_osx_audio_sink_select_device (GstOsxAudioSink * osxsink);
 static void gst_osx_audio_sink_set_volume (GstOsxAudioSink * sink);
 
 static OSStatus gst_osx_audio_sink_io_proc (GstOsxRingBuffer * buf,
@@ -205,8 +219,13 @@
       g_param_spec_double ("volume", "Volume", "Volume of this stream",
           0, 1.0, 1.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
+  gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_osx_audio_sink_getcaps);
+  gstbasesink_class->stop = GST_DEBUG_FUNCPTR (gst_osx_audio_sink_stop);
+
   gstbaseaudiosink_class->create_ringbuffer =
       GST_DEBUG_FUNCPTR (gst_osx_audio_sink_create_ringbuffer);
+  gstbaseaudiosink_class->payload =
+      GST_DEBUG_FUNCPTR (gst_osx_audio_sink_sink_payload);
 }
 
 static void
@@ -215,7 +234,12 @@
   GST_DEBUG ("Initialising object");
 
   sink->device_id = kAudioDeviceUnknown;
+  sink->cached_caps = NULL;
+
   sink->volume = DEFAULT_VOLUME;
+
+  gst_pad_set_acceptcaps_function (GST_BASE_SINK (sink)->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_osx_audio_sink_acceptcaps));
 }
 
 static void
@@ -256,6 +280,141 @@
   }
 }
 
+static gboolean
+gst_osx_audio_sink_stop (GstBaseSink * base)
+{
+  GstOsxAudioSink *sink = GST_OSX_AUDIO_SINK (base);
+
+  if (sink->cached_caps) {
+    gst_caps_unref (sink->cached_caps);
+    sink->cached_caps = NULL;
+  }
+
+  return GST_CALL_PARENT_WITH_DEFAULT (GST_BASE_SINK_CLASS, stop, (base), TRUE);
+}
+
+static GstCaps *
+gst_osx_audio_sink_getcaps (GstBaseSink * base)
+{
+  GstOsxAudioSink *sink = GST_OSX_AUDIO_SINK (base);
+  gchar *caps_string = NULL;
+
+  if (sink->cached_caps) {
+    caps_string = gst_caps_to_string (sink->cached_caps);
+    GST_DEBUG_OBJECT (sink, "using cached caps: %s", caps_string);
+    g_free (caps_string);
+    return gst_caps_ref (sink->cached_caps);
+  }
+
+  GST_DEBUG_OBJECT (sink, "using template caps");
+  return NULL;
+}
+
+static gboolean
+gst_osx_audio_sink_acceptcaps (GstPad * pad, GstCaps * caps)
+{
+  GstOsxAudioSink *sink = GST_OSX_AUDIO_SINK (gst_pad_get_parent_element (pad));
+  GstOsxRingBuffer *osxbuf;
+  GstCaps *pad_caps;
+  GstStructure *st;
+  gboolean ret = FALSE;
+  GstRingBufferSpec spec = { 0 };
+  gchar *caps_string = NULL;
+
+  osxbuf = GST_OSX_RING_BUFFER (GST_BASE_AUDIO_SINK (sink)->ringbuffer);
+
+  caps_string = gst_caps_to_string (caps);
+  GST_DEBUG_OBJECT (sink, "acceptcaps called with %s", caps_string);
+  g_free (caps_string);
+
+  pad_caps = gst_pad_get_caps_reffed (pad);
+  if (pad_caps) {
+    gboolean cret = gst_caps_can_intersect (pad_caps, caps);
+    gst_caps_unref (pad_caps);
+    if (!cret)
+      goto done;
+  }
+
+  /* If we've not got fixed caps, creating a stream might fail,
+   * so let's just return from here with default acceptcaps
+   * behaviour */
+  if (!gst_caps_is_fixed (caps))
+    goto done;
+
+  /* parse helper expects this set, so avoid nasty warning
+   * will be set properly later on anyway  */
+  spec.latency_time = GST_SECOND;
+  if (!gst_ring_buffer_parse_caps (&spec, caps))
+    goto done;
+
+  /* Make sure input is framed and can be payloaded */
+  switch (spec.type) {
+    case GST_BUFTYPE_AC3:
+    {
+      gboolean framed = FALSE;
+
+      st = gst_caps_get_structure (caps, 0);
+
+      gst_structure_get_boolean (st, "framed", &framed);
+      if (!framed || gst_audio_iec61937_frame_size (&spec) <= 0)
+        goto done;
+      break;
+    }
+    case GST_BUFTYPE_DTS:
+    {
+      gboolean parsed = FALSE;
+
+      st = gst_caps_get_structure (caps, 0);
+
+      gst_structure_get_boolean (st, "parsed", &parsed);
+      if (!parsed || gst_audio_iec61937_frame_size (&spec) <= 0)
+        goto done;
+      break;
+    }
+    default:
+      break;
+  }
+  ret = TRUE;
+
+done:
+  gst_object_unref (sink);
+  return ret;
+}
+
+static GstBuffer *
+gst_osx_audio_sink_sink_payload (GstBaseAudioSink * sink, GstBuffer * buf)
+{
+  GstOsxAudioSink *osxsink;
+
+  osxsink = GST_OSX_AUDIO_SINK (sink);
+
+  if (RINGBUFFER_IS_SPDIF (sink->ringbuffer->spec.type)) {
+    gint framesize = gst_audio_iec61937_frame_size (&sink->ringbuffer->spec);
+    GstBuffer *out;
+
+    if (framesize <= 0)
+      return NULL;
+
+    out = gst_buffer_new_and_alloc (framesize);
+
+    if (!gst_audio_iec61937_payload (GST_BUFFER_DATA (buf),
+            GST_BUFFER_SIZE (buf), GST_BUFFER_DATA (out),
+            GST_BUFFER_SIZE (out), &sink->ringbuffer->spec)) {
+      gst_buffer_unref (out);
+      return NULL;
+    }
+
+    gst_buffer_copy_metadata (out, buf, GST_BUFFER_COPY_ALL);
+
+    /* Fix endianness */
+    swab ((gchar *) GST_BUFFER_DATA (buf),
+        (gchar *) GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf));
+    return out;
+  } else {
+    return gst_buffer_ref (buf);
+  }
+}
+
 static GstRingBuffer *
 gst_osx_audio_sink_create_ringbuffer (GstBaseAudioSink * sink)
 {
@@ -264,11 +423,13 @@
 
   osxsink = GST_OSX_AUDIO_SINK (sink);
 
-  gst_osx_audio_sink_select_device (osxsink);
+  if (!gst_osx_audio_sink_select_device (osxsink)) {
+    return NULL;
+  }
 
   GST_DEBUG ("Creating ringbuffer");
   ringbuffer = g_object_new (GST_TYPE_OSX_RING_BUFFER, NULL);
-  GST_DEBUG ("osx sink 0x%p element 0x%p  ioproc 0x%p", osxsink,
+  GST_DEBUG ("osx sink %p element %p  ioproc %p", osxsink,
       GST_OSX_AUDIO_ELEMENT_GET_INTERFACE (osxsink),
       (void *) gst_osx_audio_sink_io_proc);
 
@@ -280,10 +441,10 @@
   return GST_RING_BUFFER (ringbuffer);
 }
 
-/* HALOutput AudioUnit will request fairly arbitrarily-sized chunks of data,
- * not of a fixed size. So, we keep track of where in the current ringbuffer
- * segment we are, and only advance the segment once we've read the whole
- * thing */
+/* HALOutput AudioUnit will request fairly arbitrarily-sized chunks
+ * of data, not of a fixed size. So, we keep track of where in
+ * the current ringbuffer segment we are, and only advance the segment
+ * once we've read the whole thing */
 static OSStatus
 gst_osx_audio_sink_io_proc (GstOsxRingBuffer * buf,
     AudioUnitRenderActionFlags * ioActionFlags,
@@ -293,7 +454,8 @@
   guint8 *readptr;
   gint readseg;
   gint len;
-  gint remaining = bufferList->mBuffers[0].mDataByteSize;
+  gint stream_idx = buf->stream_idx;
+  gint remaining = bufferList->mBuffers[stream_idx].mDataByteSize;
   gint offset = 0;
 
   while (remaining) {
@@ -306,7 +468,7 @@
     if (len > remaining)
       len = remaining;
 
-    memcpy ((char *) bufferList->mBuffers[0].mData + offset,
+    memcpy ((char *) bufferList->mBuffers[stream_idx].mData + offset,
         readptr + buf->segoffset, len);
 
     buf->segoffset += len;
@@ -344,34 +506,220 @@
       kAudioUnitScope_Global, 0, (float) sink->volume, 0);
 }
 
-static void
+static inline void
+_dump_channel_layout (AudioChannelLayout * channel_layout)
+{
+  UInt32 i;
+
+  GST_DEBUG ("mChannelLayoutTag: 0x%lx",
+      (unsigned long) channel_layout->mChannelLayoutTag);
+  GST_DEBUG ("mChannelBitmap: 0x%lx",
+      (unsigned long) channel_layout->mChannelBitmap);
+  GST_DEBUG ("mNumberChannelDescriptions: %lu",
+      (unsigned long) channel_layout->mNumberChannelDescriptions);
+  for (i = 0; i < channel_layout->mNumberChannelDescriptions; i++) {
+    AudioChannelDescription *channel_desc =
+        &channel_layout->mChannelDescriptions[i];
+    GST_DEBUG ("  mChannelLabel: 0x%lx mChannelFlags: 0x%lx "
+        "mCoordinates[0]: %f mCoordinates[1]: %f "
+        "mCoordinates[2]: %f",
+        (unsigned long) channel_desc->mChannelLabel,
+        (unsigned long) channel_desc->mChannelFlags,
+        channel_desc->mCoordinates[0], channel_desc->mCoordinates[1],
+        channel_desc->mCoordinates[2]);
+  }
+}
+
+static gboolean
+gst_osx_audio_sink_allowed_caps (GstOsxAudioSink * osxsink)
+{
+  gint i, max_channels = 0;
+  gboolean spdif_allowed, use_positions = FALSE;
+  AudioChannelLayout *layout;
+  GstElementClass *element_class;
+  GstPadTemplate *pad_template;
+  GstCaps *caps, *in_caps;
+
+  GstAudioChannelPosition pos[9] = {
+    GST_AUDIO_CHANNEL_POSITION_INVALID,
+    GST_AUDIO_CHANNEL_POSITION_INVALID,
+    GST_AUDIO_CHANNEL_POSITION_INVALID,
+    GST_AUDIO_CHANNEL_POSITION_INVALID,
+    GST_AUDIO_CHANNEL_POSITION_INVALID,
+    GST_AUDIO_CHANNEL_POSITION_INVALID,
+    GST_AUDIO_CHANNEL_POSITION_INVALID,
+    GST_AUDIO_CHANNEL_POSITION_INVALID,
+    GST_AUDIO_CHANNEL_POSITION_INVALID
+  };
+
+  /* First collect info about the HW capabilites and preferences */
+  spdif_allowed = _audio_device_is_spdif_avail (osxsink->device_id);
+  layout = _audio_device_get_channel_layout (osxsink->device_id);
+
+  GST_DEBUG_OBJECT (osxsink, "Selected device ID: %u SPDIF allowed: %d",
+      (unsigned) osxsink->device_id, spdif_allowed);
+
+  if (layout) {
+    _dump_channel_layout (layout);
+    max_channels = layout->mNumberChannelDescriptions;
+  } else {
+    GST_WARNING_OBJECT (osxsink, "This driver does not support "
+        "kAudioDevicePropertyPreferredChannelLayout.");
+    max_channels = 2;
+  }
+
+  if (max_channels > 2) {
+    max_channels = MIN (max_channels, 9);
+    use_positions = TRUE;
+    for (i = 0; i < max_channels; i++) {
+      switch (layout->mChannelDescriptions[i].mChannelLabel) {
+        case kAudioChannelLabel_Left:
+          pos[i] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
+          break;
+        case kAudioChannelLabel_Right:
+          pos[i] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
+          break;
+        case kAudioChannelLabel_Center:
+          pos[i] = GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER;
+          break;
+        case kAudioChannelLabel_LFEScreen:
+          pos[i] = GST_AUDIO_CHANNEL_POSITION_LFE;
+          break;
+        case kAudioChannelLabel_LeftSurround:
+          pos[i] = GST_AUDIO_CHANNEL_POSITION_REAR_LEFT;
+          break;
+        case kAudioChannelLabel_RightSurround:
+          pos[i] = GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT;
+          break;
+        case kAudioChannelLabel_RearSurroundLeft:
+          pos[i] = GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT;
+          break;
+        case kAudioChannelLabel_RearSurroundRight:
+          pos[i] = GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT;
+          break;
+        case kAudioChannelLabel_CenterSurround:
+          pos[i] = GST_AUDIO_CHANNEL_POSITION_REAR_CENTER;
+          break;
+        default:
+          GST_WARNING_OBJECT (osxsink, "unrecognized channel: %d",
+              (int) layout->mChannelDescriptions[i].mChannelLabel);
+          use_positions = FALSE;
+          max_channels = 2;
+          break;
+      }
+    }
+  }
+  g_free (layout);
+
+  /* Recover the template caps */
+  element_class = GST_ELEMENT_GET_CLASS (osxsink);
+  pad_template = gst_element_class_get_pad_template (element_class, "sink");
+  in_caps = gst_pad_template_get_caps (pad_template);
+
+  /* Create the allowed subset  */
+  caps = gst_caps_new_empty ();
+  for (i = 0; i < gst_caps_get_size (in_caps); i++) {
+    GstStructure *in_s, *out_s;
+
+    in_s = gst_caps_get_structure (in_caps, i);
+
+    if (gst_structure_has_name (in_s, "audio/x-ac3") ||
+        gst_structure_has_name (in_s, "audio/x-dts")) {
+      if (spdif_allowed) {
+        gst_caps_append_structure (caps, gst_structure_copy (in_s));
+      }
+    } else {
+      if (max_channels > 2 && use_positions) {
+        out_s = gst_structure_copy (in_s);
+        gst_structure_remove_field (out_s, "channels");
+        gst_structure_set (out_s, "channels", G_TYPE_INT, max_channels, NULL);
+        gst_audio_set_channel_positions (out_s, pos);
+        gst_caps_append_structure (caps, out_s);
+      }
+      out_s = gst_structure_copy (in_s);
+      gst_structure_remove_field (out_s, "channels");
+      gst_structure_set (out_s, "channels", GST_TYPE_INT_RANGE, 1, 2, NULL);
+      gst_caps_append_structure (caps, out_s);
+    }
+  }
+
+  if (osxsink->cached_caps) {
+    gst_caps_unref (osxsink->cached_caps);
+  }
+
+  osxsink->cached_caps = caps;
+
+  return TRUE;
+}
+
+static gboolean
 gst_osx_audio_sink_select_device (GstOsxAudioSink * osxsink)
 {
-  OSStatus status;
-  UInt32 propertySize;
+  AudioDeviceID *devices = NULL;
+  AudioDeviceID default_device_id = 0;
+  AudioChannelLayout *channel_layout;
+  gint i, ndevices = 0;
+  gboolean res = FALSE;
 
-  if (osxsink->device_id == kAudioDeviceUnknown) {
-    /* If no specific device has been selected by the user, then pick the
-     * default device */
-    GST_DEBUG_OBJECT (osxsink, "Selecting device for OSXAudioSink");
-    propertySize = sizeof (osxsink->device_id);
-    status =
-        AudioHardwareGetProperty (kAudioHardwarePropertyDefaultOutputDevice,
-        &propertySize, &osxsink->device_id);
+  devices = _audio_system_get_devices (&ndevices);
 
-    if (status) {
-      GST_WARNING_OBJECT (osxsink,
-          "AudioHardwareGetProperty returned %d", (int) status);
-    } else {
-      GST_DEBUG_OBJECT (osxsink, "AudioHardwareGetProperty returned 0");
-    }
-
-    if (osxsink->device_id == kAudioDeviceUnknown) {
-      GST_WARNING_OBJECT (osxsink,
-          "AudioHardwareGetProperty: device_id is kAudioDeviceUnknown");
-    }
-
-    GST_DEBUG_OBJECT (osxsink, "AudioHardwareGetProperty: device_id is %lu",
-        (long) osxsink->device_id);
+  if (ndevices < 1) {
+    GST_ERROR_OBJECT (osxsink, "no audio output devices found");
+    goto done;
   }
+
+  GST_DEBUG_OBJECT (osxsink, "found %d audio device(s)", ndevices);
+
+  for (i = 0; i < ndevices; i++) {
+    gchar *device_name;
+
+    if ((device_name = _audio_device_get_name (devices[i]))) {
+      if (!_audio_device_has_output (devices[i])) {
+        GST_DEBUG_OBJECT (osxsink, "Input Device ID: %u Name: %s",
+            (unsigned) devices[i], device_name);
+      } else {
+        GST_DEBUG_OBJECT (osxsink, "Output Device ID: %u Name: %s",
+            (unsigned) devices[i], device_name);
+
+        channel_layout = _audio_device_get_channel_layout (devices[i]);
+        if (channel_layout) {
+          _dump_channel_layout (channel_layout);
+          g_free (channel_layout);
+        }
+      }
+
+      g_free (device_name);
+    }
+  }
+
+  /* Find the ID of the default output device */
+  default_device_id = _audio_system_get_default_output ();
+
+  /* Here we decide if selected device is valid or autoselect
+   * the default one when required */
+  if (osxsink->device_id == kAudioDeviceUnknown) {
+    if (default_device_id != kAudioDeviceUnknown) {
+      osxsink->device_id = default_device_id;
+      res = TRUE;
+    }
+  } else {
+    for (i = 0; i < ndevices; i++) {
+      if (osxsink->device_id == devices[i]) {
+        res = TRUE;
+      }
+    }
+
+    if (res && !_audio_device_is_alive (osxsink->device_id)) {
+      GST_ERROR_OBJECT (osxsink, "Requested device not usable");
+      res = FALSE;
+      goto done;
+    }
+  }
+
+  res = gst_osx_audio_sink_allowed_caps (osxsink);
+
+done:
+  g_free (devices);
+
+  return res;
 }
diff --git a/sys/osxaudio/gstosxaudiosink.h b/sys/osxaudio/gstosxaudiosink.h
index aac9719..e3aaec3 100644
--- a/sys/osxaudio/gstosxaudiosink.h
+++ b/sys/osxaudio/gstosxaudiosink.h
@@ -2,6 +2,7 @@
  * GStreamer
  * Copyright (C) 2005-2006 Zaheer Abbas Merali <zaheerabbas at merali dot org>
  * Copyright (C) 2007 Pioneers of the Inevitable <songbird@songbirdnest.com>
+ * Copyright (C) 2012 Fluendo S.A. <support@fluendo.com>
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -70,11 +71,13 @@
   GstBaseAudioSink sink;
 
   AudioDeviceID device_id;
+
   AudioUnit audiounit;
   double volume;
+  GstCaps *cached_caps;
 };
 
-struct _GstOsxAudioSinkClass 
+struct _GstOsxAudioSinkClass
 {
   GstBaseAudioSinkClass parent_class;
 };
@@ -84,3 +87,4 @@
 G_END_DECLS
 
 #endif /* __GST_OSXAUDIOSINK_H__ */
+
diff --git a/sys/osxaudio/gstosxcoreaudio.h b/sys/osxaudio/gstosxcoreaudio.h
new file mode 100644
index 0000000..8876115
--- /dev/null
+++ b/sys/osxaudio/gstosxcoreaudio.h
@@ -0,0 +1,606 @@
+/*
+ * GStreamer
+ * Copyright (C) 2012 Fluendo S.A. <support@fluendo.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Alternatively, the contents of this file may be used under the
+ * GNU Lesser General Public License Version 2.1 (the "LGPL"), in
+ * which case the following provisions apply instead of the ones
+ * mentioned above:
+ *
+ * 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * The development of this code was made possible due to the involvement of
+ * Pioneers of the Inevitable, the creators of the Songbird Music player
+ *
+ */
+
+#define CORE_AUDIO_FORMAT "FormatID: %" GST_FOURCC_FORMAT " rate: %f flags: 0x%x BytesPerPacket: %u FramesPerPacket: %u BytesPerFrame: %u ChannelsPerFrame: %u BitsPerChannel: %u"
+#define CORE_AUDIO_FORMAT_ARGS(f) GST_FOURCC_ARGS((f).mFormatID),(f).mSampleRate,(unsigned)(f).mFormatFlags,(unsigned)(f).mBytesPerPacket,(unsigned)(f).mFramesPerPacket,(unsigned)(f).mBytesPerFrame,(unsigned)(f).mChannelsPerFrame,(unsigned)(f).mBitsPerChannel
+
+#define CORE_AUDIO_FORMAT_IS_SPDIF(f) ((f).mFormat.mFormatID == 'IAC3' || (f).mFormat.mFormatID == 'iac3' || (f).mFormat.mFormatID == kAudioFormat60958AC3 || (f).mFormat.mFormatID == kAudioFormatAC3)
+
+static inline gboolean
+_audio_system_set_runloop (CFRunLoopRef runLoop)
+{
+  OSStatus status = noErr;
+
+  gboolean res = FALSE;
+
+  AudioObjectPropertyAddress runloopAddress = {
+    kAudioHardwarePropertyRunLoop,
+    kAudioObjectPropertyScopeGlobal,
+    kAudioObjectPropertyElementMaster
+  };
+
+  status = AudioObjectSetPropertyData (kAudioObjectSystemObject,
+      &runloopAddress, 0, NULL, sizeof (CFRunLoopRef), &runLoop);
+  if (status == noErr) {
+    res = TRUE;
+  } else {
+    GST_ERROR ("failed to set runloop to %p: %" GST_FOURCC_FORMAT,
+        runLoop, GST_FOURCC_ARGS (status));
+  }
+
+  return res;
+}
+
+static inline AudioDeviceID
+_audio_system_get_default_output (void)
+{
+  OSStatus status = noErr;
+  UInt32 propertySize = sizeof (AudioDeviceID);
+  AudioDeviceID device_id = kAudioDeviceUnknown;
+
+  AudioObjectPropertyAddress defaultDeviceAddress = {
+    kAudioHardwarePropertyDefaultOutputDevice,
+    kAudioDevicePropertyScopeOutput,
+    kAudioObjectPropertyElementMaster
+  };
+
+  status = AudioObjectGetPropertyData (kAudioObjectSystemObject,
+      &defaultDeviceAddress, 0, NULL, &propertySize, &device_id);
+  if (status != noErr) {
+    GST_ERROR ("failed getting default output device: %"
+        GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+  }
+
+  return device_id;
+}
+
+static inline AudioDeviceID *
+_audio_system_get_devices (gint * ndevices)
+{
+  OSStatus status = noErr;
+  UInt32 propertySize = 0;
+  AudioDeviceID *devices = NULL;
+
+  AudioObjectPropertyAddress audioDevicesAddress = {
+    kAudioHardwarePropertyDevices,
+    kAudioDevicePropertyScopeOutput,
+    kAudioObjectPropertyElementMaster
+  };
+
+  status = AudioObjectGetPropertyDataSize (kAudioObjectSystemObject,
+      &audioDevicesAddress, 0, NULL, &propertySize);
+  if (status != noErr) {
+    GST_WARNING ("failed getting number of devices: %"
+        GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+    return NULL;
+  }
+
+  *ndevices = propertySize / sizeof (AudioDeviceID);
+
+  devices = (AudioDeviceID *) g_malloc (propertySize);
+  if (devices) {
+    status = AudioObjectGetPropertyData (kAudioObjectSystemObject,
+        &audioDevicesAddress, 0, NULL, &propertySize, devices);
+    if (status != noErr) {
+      GST_WARNING ("failed getting the list of devices: %"
+          GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+      g_free (devices);
+      *ndevices = 0;
+      return NULL;
+    }
+  }
+  return devices;
+}
+
+static inline gboolean
+_audio_device_is_alive (AudioDeviceID device_id)
+{
+  OSStatus status = noErr;
+  int alive = FALSE;
+  UInt32 propertySize = sizeof (alive);
+
+  AudioObjectPropertyAddress audioDeviceAliveAddress = {
+    kAudioDevicePropertyDeviceIsAlive,
+    kAudioDevicePropertyScopeOutput,
+    kAudioObjectPropertyElementMaster
+  };
+
+  status = AudioObjectGetPropertyData (device_id,
+      &audioDeviceAliveAddress, 0, NULL, &propertySize, &alive);
+  if (status != noErr) {
+    alive = FALSE;
+  }
+
+  return alive;
+}
+
+static inline guint
+_audio_device_get_latency (AudioDeviceID device_id)
+{
+  OSStatus status = noErr;
+  UInt32 latency = 0;
+  UInt32 propertySize = sizeof (latency);
+
+  AudioObjectPropertyAddress audioDeviceLatencyAddress = {
+    kAudioDevicePropertyLatency,
+    kAudioDevicePropertyScopeOutput,
+    kAudioObjectPropertyElementMaster
+  };
+
+  status = AudioObjectGetPropertyData (device_id,
+      &audioDeviceLatencyAddress, 0, NULL, &propertySize, &latency);
+  if (status != noErr) {
+    GST_ERROR ("failed to get latency: %" GST_FOURCC_FORMAT,
+        GST_FOURCC_ARGS (status));
+    latency = -1;
+  }
+
+  return latency;
+}
+
+static inline pid_t
+_audio_device_get_hog (AudioDeviceID device_id)
+{
+  OSStatus status = noErr;
+  pid_t hog_pid;
+  UInt32 propertySize = sizeof (hog_pid);
+
+  AudioObjectPropertyAddress audioDeviceHogModeAddress = {
+    kAudioDevicePropertyHogMode,
+    kAudioDevicePropertyScopeOutput,
+    kAudioObjectPropertyElementMaster
+  };
+
+  status = AudioObjectGetPropertyData (device_id,
+      &audioDeviceHogModeAddress, 0, NULL, &propertySize, &hog_pid);
+  if (status != noErr) {
+    GST_ERROR ("failed to get hog: %" GST_FOURCC_FORMAT,
+        GST_FOURCC_ARGS (status));
+    hog_pid = -1;
+  }
+
+  return hog_pid;
+}
+
+static inline gboolean
+_audio_device_set_hog (AudioDeviceID device_id, pid_t hog_pid)
+{
+  OSStatus status = noErr;
+  UInt32 propertySize = sizeof (hog_pid);
+  gboolean res = FALSE;
+
+  AudioObjectPropertyAddress audioDeviceHogModeAddress = {
+    kAudioDevicePropertyHogMode,
+    kAudioDevicePropertyScopeOutput,
+    kAudioObjectPropertyElementMaster
+  };
+
+  status = AudioObjectSetPropertyData (device_id,
+      &audioDeviceHogModeAddress, 0, NULL, propertySize, &hog_pid);
+
+  if (status == noErr) {
+    res = TRUE;
+  } else {
+    GST_ERROR ("failed to set hog: %" GST_FOURCC_FORMAT,
+        GST_FOURCC_ARGS (status));
+  }
+
+  return res;
+}
+
+static inline gboolean
+_audio_device_set_mixing (AudioDeviceID device_id, gboolean enable_mix)
+{
+  OSStatus status = noErr;
+  UInt32 propertySize = 0, can_mix = enable_mix;
+  Boolean writable = FALSE;
+  gboolean res = FALSE;
+
+  AudioObjectPropertyAddress audioDeviceSupportsMixingAddress = {
+    kAudioDevicePropertySupportsMixing,
+    kAudioObjectPropertyScopeGlobal,
+    kAudioObjectPropertyElementMaster
+  };
+
+  if (AudioObjectHasProperty (device_id, &audioDeviceSupportsMixingAddress)) {
+    /* Set mixable to false if we are allowed to */
+    status = AudioObjectIsPropertySettable (device_id,
+        &audioDeviceSupportsMixingAddress, &writable);
+    if (status) {
+      GST_DEBUG ("AudioObjectIsPropertySettable: %" GST_FOURCC_FORMAT,
+          GST_FOURCC_ARGS (status));
+    }
+    status = AudioObjectGetPropertyDataSize (device_id,
+        &audioDeviceSupportsMixingAddress, 0, NULL, &propertySize);
+    if (status) {
+      GST_DEBUG ("AudioObjectGetPropertyDataSize: %" GST_FOURCC_FORMAT,
+          GST_FOURCC_ARGS (status));
+    }
+    status = AudioObjectGetPropertyData (device_id,
+        &audioDeviceSupportsMixingAddress, 0, NULL, &propertySize, &can_mix);
+    if (status) {
+      GST_DEBUG ("AudioObjectGetPropertyData: %" GST_FOURCC_FORMAT,
+          GST_FOURCC_ARGS (status));
+    }
+
+    if (status == noErr && writable) {
+      can_mix = enable_mix;
+      status = AudioObjectSetPropertyData (device_id,
+          &audioDeviceSupportsMixingAddress, 0, NULL, propertySize, &can_mix);
+      res = TRUE;
+    }
+
+    if (status != noErr) {
+      GST_ERROR ("failed to set mixmode: %" GST_FOURCC_FORMAT,
+          GST_FOURCC_ARGS (status));
+    }
+  } else {
+    GST_DEBUG ("property not found, mixing coudln't be changed");
+  }
+
+  return res;
+}
+
+static inline gchar *
+_audio_device_get_name (AudioDeviceID device_id)
+{
+  OSStatus status = noErr;
+  UInt32 propertySize = 0;
+  gchar *device_name = NULL;
+
+  AudioObjectPropertyAddress deviceNameAddress = {
+    kAudioDevicePropertyDeviceName,
+    kAudioDevicePropertyScopeOutput,
+    kAudioObjectPropertyElementMaster
+  };
+
+  /* Get the length of the device name */
+  status = AudioObjectGetPropertyDataSize (device_id,
+      &deviceNameAddress, 0, NULL, &propertySize);
+  if (status != noErr) {
+    goto beach;
+  }
+
+  /* Get the name of the device */
+  device_name = (gchar *) g_malloc (propertySize);
+  status = AudioObjectGetPropertyData (device_id,
+      &deviceNameAddress, 0, NULL, &propertySize, device_name);
+  if (status != noErr) {
+    g_free (device_name);
+    device_name = NULL;
+  }
+
+beach:
+  return device_name;
+}
+
+static inline gboolean
+_audio_device_has_output (AudioDeviceID device_id)
+{
+  OSStatus status = noErr;
+  UInt32 propertySize;
+
+  AudioObjectPropertyAddress streamsAddress = {
+    kAudioDevicePropertyStreams,
+    kAudioDevicePropertyScopeOutput,
+    kAudioObjectPropertyElementMaster
+  };
+
+  status = AudioObjectGetPropertyDataSize (device_id,
+      &streamsAddress, 0, NULL, &propertySize);
+  if (status != noErr) {
+    return FALSE;
+  }
+  if (propertySize == 0) {
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
+static inline AudioChannelLayout *
+_audio_device_get_channel_layout (AudioDeviceID device_id)
+{
+  OSStatus status = noErr;
+  UInt32 propertySize = 0;
+  AudioChannelLayout *layout = NULL;
+
+  AudioObjectPropertyAddress channelLayoutAddress = {
+    kAudioDevicePropertyPreferredChannelLayout,
+    kAudioDevicePropertyScopeOutput,
+    kAudioObjectPropertyElementMaster
+  };
+
+  /* Get the length of the default channel layout structure */
+  status = AudioObjectGetPropertyDataSize (device_id,
+      &channelLayoutAddress, 0, NULL, &propertySize);
+  if (status != noErr) {
+    GST_ERROR ("failed to get prefered layout: %" GST_FOURCC_FORMAT,
+        GST_FOURCC_ARGS (status));
+    goto beach;
+  }
+
+  /* Get the default channel layout of the device */
+  layout = (AudioChannelLayout *) g_malloc (propertySize);
+  status = AudioObjectGetPropertyData (device_id,
+      &channelLayoutAddress, 0, NULL, &propertySize, layout);
+  if (status != noErr) {
+    GST_ERROR ("failed to get prefered layout: %" GST_FOURCC_FORMAT,
+        GST_FOURCC_ARGS (status));
+    goto failed;
+  }
+
+  if (layout->mChannelLayoutTag == kAudioChannelLayoutTag_UseChannelBitmap) {
+    /* bitmap defined channellayout */
+    status =
+        AudioFormatGetProperty (kAudioFormatProperty_ChannelLayoutForBitmap,
+            sizeof (UInt32), &layout->mChannelBitmap, &propertySize, layout);
+    if (status != noErr) {
+      GST_ERROR ("failed to get layout for bitmap: %" GST_FOURCC_FORMAT,
+          GST_FOURCC_ARGS (status));
+      goto failed;
+    }
+  } else if (layout->mChannelLayoutTag !=
+      kAudioChannelLayoutTag_UseChannelDescriptions) {
+      /* layouttags defined channellayout */
+      status = AudioFormatGetProperty (kAudioFormatProperty_ChannelLayoutForTag,
+          sizeof(AudioChannelLayoutTag), &layout->mChannelLayoutTag,
+          &propertySize, layout);
+    if (status != noErr) {
+      GST_ERROR ("failed to get layout for tag: %" GST_FOURCC_FORMAT,
+          GST_FOURCC_ARGS (status));
+      goto failed;
+    }
+  }
+
+beach:
+  return layout;
+
+failed:
+  g_free (layout);
+  return NULL;
+}
+
+static inline AudioStreamID *
+_audio_device_get_streams (AudioDeviceID device_id, gint * nstreams)
+{
+  OSStatus status = noErr;
+  UInt32 propertySize = 0;
+  AudioStreamID *streams = NULL;
+
+  AudioObjectPropertyAddress streamsAddress = {
+    kAudioDevicePropertyStreams,
+    kAudioDevicePropertyScopeOutput,
+    kAudioObjectPropertyElementMaster
+  };
+
+  status = AudioObjectGetPropertyDataSize (device_id,
+      &streamsAddress, 0, NULL, &propertySize);
+  if (status != noErr) {
+    GST_WARNING ("failed getting number of streams: %"
+        GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+    return NULL;
+  }
+
+  *nstreams = propertySize / sizeof (AudioStreamID);
+  streams = (AudioStreamID *) g_malloc (propertySize);
+
+  if (streams) {
+    status = AudioObjectGetPropertyData (device_id,
+        &streamsAddress, 0, NULL, &propertySize, streams);
+    if (status != noErr) {
+      GST_WARNING ("failed getting the list of streams: %"
+          GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+      g_free (streams);
+      *nstreams = 0;
+      return NULL;
+    }
+  }
+
+  return streams;
+}
+
+static inline guint
+_audio_stream_get_latency (AudioStreamID stream_id)
+{
+  OSStatus status = noErr;
+  UInt32 latency;
+  UInt32 propertySize = sizeof (latency);
+
+  AudioObjectPropertyAddress latencyAddress = {
+    kAudioStreamPropertyLatency,
+    kAudioObjectPropertyScopeGlobal,
+    kAudioObjectPropertyElementMaster
+  };
+
+  status = AudioObjectGetPropertyData (stream_id,
+      &latencyAddress, 0, NULL, &propertySize, &latency);
+  if (status != noErr) {
+    GST_ERROR ("failed to get latency: %" GST_FOURCC_FORMAT,
+        GST_FOURCC_ARGS (status));
+    latency = -1;
+  }
+
+  return latency;
+}
+
+static inline gboolean
+_audio_stream_get_current_format (AudioStreamID stream_id,
+    AudioStreamBasicDescription * format)
+{
+  OSStatus status = noErr;
+  UInt32 propertySize = sizeof (AudioStreamBasicDescription);
+
+  AudioObjectPropertyAddress formatAddress = {
+    kAudioStreamPropertyPhysicalFormat,
+    kAudioObjectPropertyScopeGlobal,
+    kAudioObjectPropertyElementMaster
+  };
+
+  status = AudioObjectGetPropertyData (stream_id,
+      &formatAddress, 0, NULL, &propertySize, format);
+  if (status != noErr) {
+    GST_ERROR ("failed to get current format: %" GST_FOURCC_FORMAT,
+        GST_FOURCC_ARGS (status));
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
+static inline gboolean
+_audio_stream_set_current_format (AudioStreamID stream_id,
+    AudioStreamBasicDescription format)
+{
+  OSStatus status = noErr;
+  UInt32 propertySize = sizeof (AudioStreamBasicDescription);
+
+  AudioObjectPropertyAddress formatAddress = {
+    kAudioStreamPropertyPhysicalFormat,
+    kAudioObjectPropertyScopeGlobal,
+    kAudioObjectPropertyElementMaster
+  };
+
+  status = AudioObjectSetPropertyData (stream_id,
+      &formatAddress, 0, NULL, propertySize, &format);
+  if (status != noErr) {
+    GST_ERROR ("failed to set current format: %" GST_FOURCC_FORMAT,
+        GST_FOURCC_ARGS (status));
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
+static inline AudioStreamRangedDescription *
+_audio_stream_get_formats (AudioStreamID stream_id, gint * nformats)
+{
+  OSStatus status = noErr;
+  UInt32 propertySize = 0;
+  AudioStreamRangedDescription *formats = NULL;
+
+  AudioObjectPropertyAddress formatsAddress = {
+    kAudioStreamPropertyAvailablePhysicalFormats,
+    kAudioObjectPropertyScopeGlobal,
+    kAudioObjectPropertyElementMaster
+  };
+
+  status = AudioObjectGetPropertyDataSize (stream_id,
+      &formatsAddress, 0, NULL, &propertySize);
+  if (status != noErr) {
+    GST_WARNING ("failed getting number of stream formats: %"
+        GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+    return NULL;
+  }
+
+  *nformats = propertySize / sizeof (AudioStreamRangedDescription);
+
+  formats = (AudioStreamRangedDescription *) g_malloc (propertySize);
+  if (formats) {
+    status = AudioObjectGetPropertyData (stream_id,
+        &formatsAddress, 0, NULL, &propertySize, formats);
+    if (status != noErr) {
+      GST_WARNING ("failed getting the list of stream formats: %"
+          GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+      g_free (formats);
+      *nformats = 0;
+      return NULL;
+    }
+  }
+  return formats;
+}
+
+static inline gboolean
+_audio_stream_is_spdif_avail (AudioStreamID stream_id)
+{
+  AudioStreamRangedDescription *formats;
+  gint i, nformats = 0;
+  gboolean res = FALSE;
+
+  formats = _audio_stream_get_formats (stream_id, &nformats);
+  GST_DEBUG ("found %d stream formats", nformats);
+
+  if (formats) {
+    GST_DEBUG ("formats supported on stream ID: %u",
+        (unsigned) stream_id);
+
+    for (i = 0; i < nformats; i++) {
+      GST_DEBUG ("  " CORE_AUDIO_FORMAT,
+          CORE_AUDIO_FORMAT_ARGS (formats[i].mFormat));
+
+      if (CORE_AUDIO_FORMAT_IS_SPDIF (formats[i])) {
+        res = TRUE;
+      }
+    }
+    g_free (formats);
+  }
+
+  return res;
+}
+
+static inline gboolean
+_audio_device_is_spdif_avail (AudioDeviceID device_id)
+{
+  AudioStreamID *streams = NULL;
+  gint i, nstreams = 0;
+  gboolean res = FALSE;
+
+  streams = _audio_device_get_streams (device_id, &nstreams);
+  GST_DEBUG ("found %d streams", nstreams);
+  if (streams) {
+    for (i = 0; i < nstreams; i++) {
+      if (_audio_stream_is_spdif_avail (streams[i])) {
+        res = TRUE;
+      }
+    }
+
+    g_free (streams);
+  }
+
+  return res;
+}
+
diff --git a/sys/osxaudio/gstosxringbuffer.c b/sys/osxaudio/gstosxringbuffer.c
index cb77162..f43a055 100644
--- a/sys/osxaudio/gstosxringbuffer.c
+++ b/sys/osxaudio/gstosxringbuffer.c
@@ -2,6 +2,7 @@
  * GStreamer
  * Copyright (C) 2006 Zaheer Abbas Merali <zaheerabbas at merali dot org>
  * Copyright (C) 2008 Pioneers of the Inevitable <songbird@songbirdnest.com>
+ * Copyright (C) 2012 Fluendo S.A. <support@fluendo.com>
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -50,9 +51,13 @@
 #include "gstosxaudiosink.h"
 #include "gstosxaudiosrc.h"
 
+#include <unistd.h>             /* for getpid() */
+
 GST_DEBUG_CATEGORY_STATIC (osx_audio_debug);
 #define GST_CAT_DEFAULT osx_audio_debug
 
+#include "gstosxcoreaudio.h"
+
 static void gst_osx_ring_buffer_dispose (GObject * object);
 static void gst_osx_ring_buffer_finalize (GObject * object);
 static gboolean gst_osx_ring_buffer_open_device (GstRingBuffer * buf);
@@ -68,13 +73,8 @@
 static guint gst_osx_ring_buffer_delay (GstRingBuffer * buf);
 static GstRingBufferClass *ring_parent_class = NULL;
 
-static OSStatus gst_osx_ring_buffer_render_notify (GstOsxRingBuffer * osxbuf,
-    AudioUnitRenderActionFlags * ioActionFlags,
-    const AudioTimeStamp * inTimeStamp, unsigned int inBusNumber,
-    unsigned int inNumberFrames, AudioBufferList * ioData);
-
-static AudioBufferList *buffer_list_alloc (int channels, int size);
-static void buffer_list_free (AudioBufferList * list);
+static void gst_osx_ring_buffer_remove_render_callback (GstOsxRingBuffer *
+    osxbuf);
 
 static void
 gst_osx_ring_buffer_do_init (GType type)
@@ -83,8 +83,8 @@
       "OSX Audio Elements");
 }
 
-GST_BOILERPLATE_FULL (GstOsxRingBuffer, gst_osx_ring_buffer, GstRingBuffer,
-    GST_TYPE_RING_BUFFER, gst_osx_ring_buffer_do_init);
+GST_BOILERPLATE_FULL (GstOsxRingBuffer, gst_osx_ring_buffer,
+    GstRingBuffer, GST_TYPE_RING_BUFFER, gst_osx_ring_buffer_do_init);
 
 static void
 gst_osx_ring_buffer_base_init (gpointer g_class)
@@ -131,6 +131,9 @@
     GstOsxRingBufferClass * g_class)
 {
   /* Nothing to do right now */
+  ringbuffer->is_passthrough = FALSE;
+  ringbuffer->hog_pid = -1;
+  ringbuffer->disabled_mixing = FALSE;
 }
 
 static void
@@ -154,15 +157,18 @@
   OSStatus status;
   AudioUnit unit;
   UInt32 enableIO;
+  AudioStreamBasicDescription asbd_in;
+  UInt32 propertySize;
 
   /* Create a HALOutput AudioUnit.
-   * This is the lowest-level output API that is actually sensibly usable
-   * (the lower level ones require that you do channel-remapping yourself,
-   * and the CoreAudio channel mapping is sufficiently complex that doing
-   * so would be very difficult)
+   * This is the lowest-level output API that is actually sensibly
+   * usable (the lower level ones require that you do
+   * channel-remapping yourself, and the CoreAudio channel mapping
+   * is sufficiently complex that doing so would be very difficult)
    *
-   * Note that for input we request an output unit even though we will do
-   * input with it: http://developer.apple.com/technotes/tn2002/tn2091.html
+   * Note that for input we request an output unit even though
+   * we will do input with it.
+   * http://developer.apple.com/technotes/tn2002/tn2091.html
    */
   desc.componentType = kAudioUnitType_Output;
   desc.componentSubType = kAudioUnitSubType_HALOutput;
@@ -179,7 +185,8 @@
   status = OpenAComponent (comp, &unit);
 
   if (status) {
-    GST_WARNING_OBJECT (osxbuf, "Couldn't open HALOutput component");
+    GST_ERROR_OBJECT (osxbuf, "Couldn't open HALOutput component %"
+        GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
     return NULL;
   }
 
@@ -191,8 +198,8 @@
 
     if (status) {
       CloseComponent (unit);
-      GST_WARNING_OBJECT (osxbuf, "Failed to enable input: %lx",
-          (gulong) status);
+      GST_WARNING_OBJECT (osxbuf, "Failed to enable input: %"
+          GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
       return NULL;
     }
 
@@ -203,25 +210,38 @@
 
     if (status) {
       CloseComponent (unit);
-      GST_WARNING_OBJECT (osxbuf, "Failed to disable output: %lx",
-          (gulong) status);
+      GST_WARNING_OBJECT (osxbuf, "Failed to disable output: %"
+          GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
       return NULL;
     }
   }
 
-  /* Specify which device we're using. */
-  GST_DEBUG_OBJECT (osxbuf, "Setting device to %d", (int) device_id);
-  status = AudioUnitSetProperty (unit, kAudioOutputUnitProperty_CurrentDevice, kAudioUnitScope_Global, 0,       /* N/A for global */
-      &device_id, sizeof (AudioDeviceID));
+  GST_DEBUG_OBJECT (osxbuf, "Created HALOutput AudioUnit: %p", unit);
 
-  if (status) {
-    CloseComponent (unit);
-    GST_WARNING_OBJECT (osxbuf, "Failed to set device: %lx", (gulong) status);
-    return NULL;
+  if (input) {
+    GstOsxAudioSrc *src = GST_OSX_AUDIO_SRC (GST_OBJECT_PARENT (osxbuf));
+
+    propertySize = sizeof (asbd_in);
+    status = AudioUnitGetProperty (unit,
+        kAudioUnitProperty_StreamFormat,
+        kAudioUnitScope_Input, 1, &asbd_in, &propertySize);
+
+    if (status) {
+      CloseComponent (unit);
+      GST_WARNING_OBJECT (osxbuf,
+          "Unable to obtain device properties: %" GST_FOURCC_FORMAT,
+          GST_FOURCC_ARGS (status));
+      return NULL;
+    }
+
+    src->deviceChannels = asbd_in.mChannelsPerFrame;
+  } else {
+    GstOsxAudioSink *sink = GST_OSX_AUDIO_SINK (GST_OBJECT_PARENT (osxbuf));
+
+    /* needed for the sink's volume control */
+    sink->audiounit = unit;
   }
 
-  GST_DEBUG_OBJECT (osxbuf, "Create HALOutput AudioUnit: %p", unit);
-
   return unit;
 }
 
@@ -229,41 +249,18 @@
 gst_osx_ring_buffer_open_device (GstRingBuffer * buf)
 {
   GstOsxRingBuffer *osxbuf;
-  GstOsxAudioSink *sink;
-  GstOsxAudioSrc *src;
-  AudioStreamBasicDescription asbd_in;
-  OSStatus status;
-  UInt32 propertySize;
 
   osxbuf = GST_OSX_RING_BUFFER (buf);
-  sink = NULL;
-  src = NULL;
+
+  /* The following is needed to instruct HAL to create their own
+   * thread to handle the notifications. */
+  _audio_system_set_runloop (NULL);
 
   osxbuf->audiounit = gst_osx_ring_buffer_create_audio_unit (osxbuf,
       osxbuf->is_src, osxbuf->device_id);
 
-  if (osxbuf->is_src) {
-    src = GST_OSX_AUDIO_SRC (GST_OBJECT_PARENT (buf));
-
-    propertySize = sizeof (asbd_in);
-    status = AudioUnitGetProperty (osxbuf->audiounit,
-        kAudioUnitProperty_StreamFormat,
-        kAudioUnitScope_Input, 1, &asbd_in, &propertySize);
-
-    if (status) {
-      CloseComponent (osxbuf->audiounit);
-      osxbuf->audiounit = NULL;
-      GST_WARNING_OBJECT (osxbuf, "Unable to obtain device properties: %lx",
-          (gulong) status);
-      return FALSE;
-    }
-
-    src->deviceChannels = asbd_in.mChannelsPerFrame;
-  } else {
-    sink = GST_OSX_AUDIO_SINK (GST_OBJECT_PARENT (buf));
-
-    /* needed for the sink's volume control */
-    sink->audiounit = osxbuf->audiounit;
+  if (!osxbuf->audiounit) {
+    return FALSE;
   }
 
   return TRUE;
@@ -317,360 +314,6 @@
   }
 }
 
-static gboolean
-gst_osx_ring_buffer_acquire (GstRingBuffer * buf, GstRingBufferSpec * spec)
-{
-  /* Configure the output stream and allocate ringbuffer memory */
-  GstOsxRingBuffer *osxbuf;
-  AudioStreamBasicDescription format;
-  AudioChannelLayout *layout = NULL;
-  OSStatus status;
-  UInt32 propertySize;
-  int layoutSize;
-  int element;
-  int i;
-  int width, depth;
-  AudioUnitScope scope;
-  gboolean ret = FALSE;
-  GstStructure *structure;
-  GstAudioChannelPosition *positions;
-  UInt32 frameSize;
-
-  osxbuf = GST_OSX_RING_BUFFER (buf);
-
-  /* Fill out the audio description we're going to be using */
-  format.mFormatID = kAudioFormatLinearPCM;
-  format.mSampleRate = (double) spec->rate;
-  format.mChannelsPerFrame = spec->channels;
-  if (spec->type == GST_BUFTYPE_FLOAT) {
-    format.mFormatFlags = kAudioFormatFlagsNativeFloatPacked;
-    width = depth = spec->width;
-  } else {
-    format.mFormatFlags = kAudioFormatFlagIsSignedInteger;
-    width = spec->width;
-    depth = spec->depth;
-    if (width == depth) {
-      format.mFormatFlags |= kAudioFormatFlagIsPacked;
-    } else {
-      format.mFormatFlags |= kAudioFormatFlagIsAlignedHigh;
-    }
-    if (spec->bigend) {
-      format.mFormatFlags |= kAudioFormatFlagIsBigEndian;
-    }
-  }
-  format.mBytesPerFrame = spec->channels * (width >> 3);
-  format.mBitsPerChannel = depth;
-  format.mBytesPerPacket = spec->channels * (width >> 3);
-  format.mFramesPerPacket = 1;
-  format.mReserved = 0;
-
-  /* Describe channels */
-  layoutSize = sizeof (AudioChannelLayout) +
-      spec->channels * sizeof (AudioChannelDescription);
-  layout = g_malloc (layoutSize);
-
-  structure = gst_caps_get_structure (spec->caps, 0);
-  positions = gst_audio_get_channel_positions (structure);
-
-  layout->mChannelLayoutTag = kAudioChannelLayoutTag_UseChannelDescriptions;
-  layout->mChannelBitmap = 0;   /* Not used */
-  layout->mNumberChannelDescriptions = spec->channels;
-  for (i = 0; i < spec->channels; i++) {
-    if (positions) {
-      layout->mChannelDescriptions[i].mChannelLabel =
-          gst_audio_channel_position_to_coreaudio_channel_label (positions[i],
-          i);
-    } else {
-      /* Discrete channel numbers are ORed into this */
-      layout->mChannelDescriptions[i].mChannelLabel =
-          kAudioChannelLabel_Discrete_0 | i;
-    }
-
-    /* Others unused */
-    layout->mChannelDescriptions[i].mChannelFlags = 0;
-    layout->mChannelDescriptions[i].mCoordinates[0] = 0.f;
-    layout->mChannelDescriptions[i].mCoordinates[1] = 0.f;
-    layout->mChannelDescriptions[i].mCoordinates[2] = 0.f;
-  }
-
-  if (positions) {
-    g_free (positions);
-    positions = NULL;
-  }
-
-  GST_LOG_OBJECT (osxbuf, "Format: %x, %f, %u, %x, %d, %d, %d, %d, %d",
-      (unsigned int) format.mFormatID,
-      format.mSampleRate,
-      (unsigned int) format.mChannelsPerFrame,
-      (unsigned int) format.mFormatFlags,
-      (unsigned int) format.mBytesPerFrame,
-      (unsigned int) format.mBitsPerChannel,
-      (unsigned int) format.mBytesPerPacket,
-      (unsigned int) format.mFramesPerPacket, (unsigned int) format.mReserved);
-
-  GST_DEBUG_OBJECT (osxbuf, "Setting format for AudioUnit");
-
-  scope = osxbuf->is_src ? kAudioUnitScope_Output : kAudioUnitScope_Input;
-  element = osxbuf->is_src ? 1 : 0;
-
-  propertySize = sizeof (format);
-  status = AudioUnitSetProperty (osxbuf->audiounit,
-      kAudioUnitProperty_StreamFormat, scope, element, &format, propertySize);
-
-  if (status) {
-    GST_WARNING_OBJECT (osxbuf, "Failed to set audio description: %lx",
-        (gulong) status);
-    goto done;
-  }
-
-  status = AudioUnitSetProperty (osxbuf->audiounit,
-      kAudioUnitProperty_AudioChannelLayout,
-      scope, element, layout, layoutSize);
-  if (status) {
-    GST_WARNING_OBJECT (osxbuf, "Failed to set output channel layout: %lx",
-        (gulong) status);
-    goto done;
-  }
-
-  spec->segsize =
-      (spec->latency_time * spec->rate / G_USEC_PER_SEC) *
-      spec->bytes_per_sample;
-  spec->segtotal = spec->buffer_time / spec->latency_time;
-
-  /* create AudioBufferList needed for recording */
-  if (osxbuf->is_src) {
-    propertySize = sizeof (frameSize);
-    status = AudioUnitGetProperty (osxbuf->audiounit, kAudioDevicePropertyBufferFrameSize, kAudioUnitScope_Global, 0,   /* N/A for global */
-        &frameSize, &propertySize);
-
-    if (status) {
-      GST_WARNING_OBJECT (osxbuf, "Failed to get frame size: %lx",
-          (gulong) status);
-      goto done;
-    }
-
-    osxbuf->recBufferList = buffer_list_alloc (format.mChannelsPerFrame,
-        frameSize * format.mBytesPerFrame);
-  }
-
-  buf->data = gst_buffer_new_and_alloc (spec->segtotal * spec->segsize);
-  memset (GST_BUFFER_DATA (buf->data), 0, GST_BUFFER_SIZE (buf->data));
-
-  osxbuf->segoffset = 0;
-
-  status = AudioUnitInitialize (osxbuf->audiounit);
-  if (status) {
-    gst_buffer_unref (buf->data);
-    buf->data = NULL;
-
-    if (osxbuf->recBufferList) {
-      buffer_list_free (osxbuf->recBufferList);
-      osxbuf->recBufferList = NULL;
-    }
-
-    GST_WARNING_OBJECT (osxbuf,
-        "Failed to initialise AudioUnit: %d", (int) status);
-    goto done;
-  }
-
-  GST_DEBUG_OBJECT (osxbuf, "osx ring buffer acquired");
-
-  ret = TRUE;
-
-done:
-  g_free (layout);
-  return ret;
-}
-
-static gboolean
-gst_osx_ring_buffer_release (GstRingBuffer * buf)
-{
-  GstOsxRingBuffer *osxbuf;
-
-  osxbuf = GST_OSX_RING_BUFFER (buf);
-
-  AudioUnitUninitialize (osxbuf->audiounit);
-
-  gst_buffer_unref (buf->data);
-  buf->data = NULL;
-
-  if (osxbuf->recBufferList) {
-    buffer_list_free (osxbuf->recBufferList);
-    osxbuf->recBufferList = NULL;
-  }
-
-  return TRUE;
-}
-
-static void
-gst_osx_ring_buffer_remove_render_callback (GstOsxRingBuffer * osxbuf)
-{
-  AURenderCallbackStruct input;
-  OSStatus status;
-
-  /* Deactivate the render callback by calling SetRenderCallback with a NULL
-   * inputProc.
-   */
-  input.inputProc = NULL;
-  input.inputProcRefCon = NULL;
-
-  status = AudioUnitSetProperty (osxbuf->audiounit, kAudioUnitProperty_SetRenderCallback, kAudioUnitScope_Global, 0,    /* N/A for global */
-      &input, sizeof (input));
-
-  if (status) {
-    GST_WARNING_OBJECT (osxbuf, "Failed to remove render callback");
-  }
-
-  /* Remove the RenderNotify too */
-  status = AudioUnitRemoveRenderNotify (osxbuf->audiounit,
-      (AURenderCallback) gst_osx_ring_buffer_render_notify, osxbuf);
-
-  if (status) {
-    GST_WARNING_OBJECT (osxbuf, "Failed to remove render notify callback");
-  }
-
-  /* We're deactivated.. */
-  osxbuf->io_proc_needs_deactivation = FALSE;
-  osxbuf->io_proc_active = FALSE;
-}
-
-static OSStatus
-gst_osx_ring_buffer_render_notify (GstOsxRingBuffer * osxbuf,
-    AudioUnitRenderActionFlags * ioActionFlags,
-    const AudioTimeStamp * inTimeStamp,
-    unsigned int inBusNumber,
-    unsigned int inNumberFrames, AudioBufferList * ioData)
-{
-  /* Before rendering a frame, we get the PreRender notification.
-   * Here, we detach the RenderCallback if we've been paused.
-   *
-   * This is necessary (rather than just directly detaching it) to work
-   * around some thread-safety issues in CoreAudio
-   */
-  if ((*ioActionFlags) & kAudioUnitRenderAction_PreRender) {
-    if (osxbuf->io_proc_needs_deactivation) {
-      gst_osx_ring_buffer_remove_render_callback (osxbuf);
-    }
-  }
-
-  return noErr;
-}
-
-static gboolean
-gst_osx_ring_buffer_start (GstRingBuffer * buf)
-{
-  OSStatus status;
-  GstOsxRingBuffer *osxbuf;
-  AURenderCallbackStruct input;
-  AudioUnitPropertyID callback_type;
-
-  osxbuf = GST_OSX_RING_BUFFER (buf);
-
-  GST_DEBUG ("osx ring buffer start ioproc: 0x%p device_id %lu",
-      osxbuf->element->io_proc, (gulong) osxbuf->device_id);
-  if (!osxbuf->io_proc_active) {
-    callback_type = osxbuf->is_src ?
-        kAudioOutputUnitProperty_SetInputCallback :
-        kAudioUnitProperty_SetRenderCallback;
-
-    input.inputProc = (AURenderCallback) osxbuf->element->io_proc;
-    input.inputProcRefCon = osxbuf;
-
-    status = AudioUnitSetProperty (osxbuf->audiounit, callback_type, kAudioUnitScope_Global, 0, /* N/A for global */
-        &input, sizeof (input));
-
-    if (status) {
-      GST_WARNING ("AudioUnitSetProperty returned %d", (int) status);
-      return FALSE;
-    }
-    // ### does it make sense to do this notify stuff for input mode?
-    status = AudioUnitAddRenderNotify (osxbuf->audiounit,
-        (AURenderCallback) gst_osx_ring_buffer_render_notify, osxbuf);
-
-    if (status) {
-      GST_WARNING ("AudioUnitAddRenderNotify returned %d", (int) status);
-      return FALSE;
-    }
-
-    osxbuf->io_proc_active = TRUE;
-  }
-
-  osxbuf->io_proc_needs_deactivation = FALSE;
-
-  status = AudioOutputUnitStart (osxbuf->audiounit);
-  if (status) {
-    GST_WARNING ("AudioOutputUnitStart returned %d", (int) status);
-    return FALSE;
-  }
-  return TRUE;
-}
-
-// ###
-static gboolean
-gst_osx_ring_buffer_pause (GstRingBuffer * buf)
-{
-  GstOsxRingBuffer *osxbuf = GST_OSX_RING_BUFFER (buf);
-
-  GST_DEBUG ("osx ring buffer pause ioproc: 0x%p device_id %lu",
-      osxbuf->element->io_proc, (gulong) osxbuf->device_id);
-  if (osxbuf->io_proc_active) {
-    /* CoreAudio isn't threadsafe enough to do this here; we must deactivate
-     * the render callback elsewhere. See:
-     *   http://lists.apple.com/archives/Coreaudio-api/2006/Mar/msg00010.html
-     */
-    osxbuf->io_proc_needs_deactivation = TRUE;
-  }
-  return TRUE;
-}
-
-// ###
-static gboolean
-gst_osx_ring_buffer_stop (GstRingBuffer * buf)
-{
-  OSErr status;
-  GstOsxRingBuffer *osxbuf;
-
-  osxbuf = GST_OSX_RING_BUFFER (buf);
-
-  GST_DEBUG ("osx ring buffer stop ioproc: 0x%p device_id %lu",
-      osxbuf->element->io_proc, (gulong) osxbuf->device_id);
-
-  status = AudioOutputUnitStop (osxbuf->audiounit);
-  if (status)
-    GST_WARNING ("AudioOutputUnitStop returned %d", (int) status);
-
-  // ###: why is it okay to directly remove from here but not from pause() ?
-  if (osxbuf->io_proc_active) {
-    gst_osx_ring_buffer_remove_render_callback (osxbuf);
-  }
-  return TRUE;
-}
-
-static guint
-gst_osx_ring_buffer_delay (GstRingBuffer * buf)
-{
-  double latency;
-  UInt32 size = sizeof (double);
-  GstOsxRingBuffer *osxbuf;
-  OSStatus status;
-  guint samples;
-
-  osxbuf = GST_OSX_RING_BUFFER (buf);
-
-  status = AudioUnitGetProperty (osxbuf->audiounit, kAudioUnitProperty_Latency, kAudioUnitScope_Global, 0,      /* N/A for global */
-      &latency, &size);
-
-  if (status) {
-    GST_WARNING_OBJECT (buf, "Failed to get latency: %d", (int) status);
-    return 0;
-  }
-
-  samples = latency * GST_RING_BUFFER (buf)->spec.rate;
-  GST_DEBUG_OBJECT (buf, "Got latency: %f seconds -> %d samples", latency,
-      samples);
-  return samples;
-}
-
 static AudioBufferList *
 buffer_list_alloc (int channels, int size)
 {
@@ -703,3 +346,896 @@
 
   g_free (list);
 }
+
+typedef struct
+{
+  GMutex *lock;
+  GCond *cond;
+} PropertyMutex;
+
+static OSStatus
+_audio_stream_format_listener (AudioObjectID inObjectID,
+    UInt32 inNumberAddresses,
+    const AudioObjectPropertyAddress inAddresses[], void *inClientData)
+{
+  OSStatus status = noErr;
+  guint i;
+  PropertyMutex *prop_mutex = inClientData;
+
+  for (i = 0; i < inNumberAddresses; i++) {
+    if (inAddresses[i].mSelector == kAudioStreamPropertyPhysicalFormat) {
+      g_mutex_lock (prop_mutex->lock);
+      g_cond_signal (prop_mutex->cond);
+      g_mutex_unlock (prop_mutex->lock);
+      break;
+    }
+  }
+  return (status);
+}
+
+static gboolean
+_audio_stream_change_format (AudioStreamID stream_id,
+    AudioStreamBasicDescription format)
+{
+  OSStatus status = noErr;
+  gint i;
+  gboolean ret = FALSE;
+  AudioStreamBasicDescription cformat;
+  PropertyMutex prop_mutex;
+
+  AudioObjectPropertyAddress formatAddress = {
+    kAudioStreamPropertyPhysicalFormat,
+    kAudioObjectPropertyScopeGlobal,
+    kAudioObjectPropertyElementMaster
+  };
+
+  GST_DEBUG ("setting stream format: " CORE_AUDIO_FORMAT,
+      CORE_AUDIO_FORMAT_ARGS (format));
+
+  /* Condition because SetProperty is asynchronous */
+  prop_mutex.lock = g_mutex_new ();
+  prop_mutex.cond = g_cond_new ();
+
+  g_mutex_lock (prop_mutex.lock);
+
+  /* Install the property listener to serialize the operations */
+  status = AudioObjectAddPropertyListener (stream_id, &formatAddress,
+      _audio_stream_format_listener, (void *) &prop_mutex);
+  if (status != noErr) {
+    GST_ERROR ("AudioObjectAddPropertyListener failed: %"
+        GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+    goto done;
+  }
+
+  /* Change the format */
+  if (!_audio_stream_set_current_format (stream_id, format)) {
+    goto done;
+  }
+
+  /* The AudioObjectSetProperty is not only asynchronous
+   * it is also not atomic in its behaviour.
+   * Therefore we check 4 times before we really give up. */
+  for (i = 0; i < 4; i++) {
+    GTimeVal timeout;
+
+    g_get_current_time (&timeout);
+    g_time_val_add (&timeout, 250000);
+
+    if (!g_cond_timed_wait (prop_mutex.cond, prop_mutex.lock, &timeout)) {
+      GST_LOG ("timeout...");
+    }
+
+    if (_audio_stream_get_current_format (stream_id, &cformat)) {
+      GST_DEBUG ("current stream format: " CORE_AUDIO_FORMAT,
+          CORE_AUDIO_FORMAT_ARGS (cformat));
+
+      if (cformat.mSampleRate == format.mSampleRate &&
+          cformat.mFormatID == format.mFormatID &&
+          cformat.mFramesPerPacket == format.mFramesPerPacket) {
+        /* The right format is now active */
+        break;
+      }
+    }
+  }
+
+  if (cformat.mSampleRate != format.mSampleRate ||
+      cformat.mFormatID != format.mFormatID ||
+      cformat.mFramesPerPacket != format.mFramesPerPacket) {
+    goto done;
+  }
+
+  ret = TRUE;
+
+done:
+  /* Removing the property listener */
+  status = AudioObjectRemovePropertyListener (stream_id,
+      &formatAddress, _audio_stream_format_listener, (void *) &prop_mutex);
+  if (status != noErr) {
+    GST_ERROR ("AudioObjectRemovePropertyListener failed: %"
+        GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+  }
+  /* Destroy the lock and condition */
+  g_mutex_unlock (prop_mutex.lock);
+  g_mutex_free (prop_mutex.lock);
+  g_cond_free (prop_mutex.cond);
+
+  return ret;
+}
+
+static OSStatus
+_audio_stream_hardware_changed_listener (AudioObjectID inObjectID,
+    UInt32 inNumberAddresses,
+    const AudioObjectPropertyAddress inAddresses[], void *inClientData)
+{
+  OSStatus status = noErr;
+  guint i;
+  GstOsxRingBuffer *osxbuf = inClientData;
+
+  for (i = 0; i < inNumberAddresses; i++) {
+    if (inAddresses[i].mSelector == kAudioDevicePropertyDeviceHasChanged) {
+      if (!_audio_device_is_spdif_avail (osxbuf->device_id)) {
+        GstOsxAudioSink *sink = GST_OSX_AUDIO_SINK (GST_OBJECT_PARENT (osxbuf));
+        GST_ELEMENT_ERROR (sink, RESOURCE, FAILED,
+            ("SPDIF output no longer available"),
+            ("Audio device is reporting that SPDIF output isn't available"));
+      }
+      break;
+    }
+  }
+  return (status);
+}
+
+static gboolean
+gst_osx_ring_buffer_monitorize_spdif (GstOsxRingBuffer * osxbuf)
+{
+  OSStatus status = noErr;
+  gboolean ret = TRUE;
+
+  AudioObjectPropertyAddress propAddress = {
+    kAudioDevicePropertyDeviceHasChanged,
+    kAudioObjectPropertyScopeGlobal,
+    kAudioObjectPropertyElementMaster
+  };
+
+  /* Install the property listener */
+  status = AudioObjectAddPropertyListener (osxbuf->device_id,
+      &propAddress, _audio_stream_hardware_changed_listener, (void *) osxbuf);
+  if (status != noErr) {
+    GST_ERROR ("AudioObjectAddPropertyListener failed: %"
+        GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+    ret = FALSE;
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_osx_ring_buffer_unmonitorize_spdif (GstOsxRingBuffer * osxbuf)
+{
+  OSStatus status = noErr;
+  gboolean ret = TRUE;
+
+  AudioObjectPropertyAddress propAddress = {
+    kAudioDevicePropertyDeviceHasChanged,
+    kAudioObjectPropertyScopeGlobal,
+    kAudioObjectPropertyElementMaster
+  };
+
+  /* Remove the property listener */
+  status = AudioObjectRemovePropertyListener (osxbuf->device_id,
+      &propAddress, _audio_stream_hardware_changed_listener, (void *) osxbuf);
+  if (status != noErr) {
+    GST_ERROR ("AudioObjectRemovePropertyListener failed: %"
+        GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+    ret = FALSE;
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_osx_ring_buffer_open_spdif (GstOsxRingBuffer * osxbuf)
+{
+  gboolean res = FALSE;
+  pid_t hog_pid, own_pid = getpid ();
+
+  /* We need the device in exclusive and disable the mixing */
+  hog_pid = _audio_device_get_hog (osxbuf->device_id);
+
+  if (hog_pid != -1 && hog_pid != own_pid) {
+    GST_DEBUG_OBJECT (osxbuf,
+        "device is currently in use by another application");
+    goto done;
+  }
+
+  if (_audio_device_set_hog (osxbuf->device_id, own_pid)) {
+    osxbuf->hog_pid = own_pid;
+  }
+
+  if (_audio_device_set_mixing (osxbuf->device_id, FALSE)) {
+    GST_DEBUG_OBJECT (osxbuf, "disabled mixing on the device");
+    osxbuf->disabled_mixing = TRUE;
+  }
+
+  res = TRUE;
+done:
+  return res;
+}
+
+static gboolean
+gst_osx_ring_buffer_close_spdif (GstOsxRingBuffer * osxbuf)
+{
+  pid_t hog_pid;
+
+  gst_osx_ring_buffer_unmonitorize_spdif (osxbuf);
+
+  if (osxbuf->revert_format) {
+    if (!_audio_stream_change_format (osxbuf->stream_id,
+            osxbuf->original_format)) {
+      GST_WARNING ("Format revert failed");
+    }
+    osxbuf->revert_format = FALSE;
+  }
+
+  if (osxbuf->disabled_mixing) {
+    _audio_device_set_mixing (osxbuf->device_id, TRUE);
+    osxbuf->disabled_mixing = FALSE;
+  }
+
+  if (osxbuf->hog_pid != -1) {
+    hog_pid = _audio_device_get_hog (osxbuf->device_id);
+    if (hog_pid == getpid ()) {
+      if (_audio_device_set_hog (osxbuf->device_id, -1)) {
+        osxbuf->hog_pid = -1;
+      }
+    }
+  }
+
+  return TRUE;
+}
+
+static OSStatus
+gst_osx_ring_buffer_io_proc_spdif (AudioDeviceID inDevice,
+    const AudioTimeStamp * inNow,
+    const void *inInputData,
+    const AudioTimeStamp * inTimestamp,
+    AudioBufferList * bufferList,
+    const AudioTimeStamp * inOutputTime, GstOsxRingBuffer * osxbuf)
+{
+  OSStatus status;
+
+  status = osxbuf->element->io_proc (osxbuf, NULL, inTimestamp, 0, 0,
+      bufferList);
+
+  return status;
+}
+
+static gboolean
+gst_osx_ring_buffer_acquire_spdif (GstOsxRingBuffer * osxbuf,
+    AudioStreamBasicDescription format)
+{
+  AudioStreamID *streams = NULL;
+  gint i, j, nstreams = 0;
+  gboolean ret = FALSE;
+
+  if (!gst_osx_ring_buffer_open_spdif (osxbuf))
+    goto done;
+
+  streams = _audio_device_get_streams (osxbuf->device_id, &nstreams);
+
+  for (i = 0; i < nstreams; i++) {
+    AudioStreamRangedDescription *formats = NULL;
+    gint nformats = 0;
+
+    formats = _audio_stream_get_formats (streams[i], &nformats);
+
+    if (formats) {
+      gboolean is_spdif = FALSE;
+
+      /* Check if one of the supported formats is a digital format */
+      for (j = 0; j < nformats; j++) {
+        if (CORE_AUDIO_FORMAT_IS_SPDIF (formats[j])) {
+          is_spdif = TRUE;
+          break;
+        }
+      }
+
+      if (is_spdif) {
+        /* if this stream supports a digital (cac3) format,
+         * then go set it. */
+        gint requested_rate_format = -1;
+        gint current_rate_format = -1;
+        gint backup_rate_format = -1;
+
+        osxbuf->stream_id = streams[i];
+        osxbuf->stream_idx = i;
+
+        if (!osxbuf->revert_format) {
+          if (!_audio_stream_get_current_format (osxbuf->stream_id,
+                  &osxbuf->original_format)) {
+            GST_WARNING ("format could not be saved");
+            g_free (formats);
+            continue;
+          }
+          osxbuf->revert_format = TRUE;
+        }
+
+        for (j = 0; j < nformats; j++) {
+          if (CORE_AUDIO_FORMAT_IS_SPDIF (formats[j])) {
+            GST_LOG ("found stream format: " CORE_AUDIO_FORMAT,
+                CORE_AUDIO_FORMAT_ARGS (formats[j].mFormat));
+
+            if (formats[j].mFormat.mSampleRate == format.mSampleRate) {
+              requested_rate_format = j;
+              break;
+            } else if (formats[j].mFormat.mSampleRate ==
+                osxbuf->original_format.mSampleRate) {
+              current_rate_format = j;
+            } else {
+              if (backup_rate_format < 0 ||
+                  formats[j].mFormat.mSampleRate >
+                  formats[backup_rate_format].mFormat.mSampleRate) {
+                backup_rate_format = j;
+              }
+            }
+          }
+        }
+
+        if (requested_rate_format >= 0) {
+          /* We prefer to output at the rate of the original audio */
+          osxbuf->stream_format = formats[requested_rate_format].mFormat;
+        } else if (current_rate_format >= 0) {
+          /* If not possible, we will try to use the current rate */
+          osxbuf->stream_format = formats[current_rate_format].mFormat;
+        } else {
+          /* And if we have to, any digital format will be just
+           * fine (highest rate possible) */
+          osxbuf->stream_format = formats[backup_rate_format].mFormat;
+        }
+      }
+      g_free (formats);
+    }
+  }
+  g_free (streams);
+
+  GST_DEBUG ("original stream format: " CORE_AUDIO_FORMAT,
+      CORE_AUDIO_FORMAT_ARGS (osxbuf->original_format));
+
+  if (!_audio_stream_change_format (osxbuf->stream_id, osxbuf->stream_format))
+    goto done;
+
+  GST_DEBUG_OBJECT (osxbuf, "osx ring buffer acquired");
+
+  ret = TRUE;
+
+done:
+  return ret;
+}
+
+static gboolean
+gst_osx_ring_buffer_acquire_analog (GstOsxRingBuffer * osxbuf,
+    AudioStreamBasicDescription format, GstCaps * caps)
+{
+  /* Configure the output stream and allocate ringbuffer memory */
+  AudioChannelLayout *layout = NULL;
+  OSStatus status;
+  UInt32 propertySize;
+  int channels = format.mChannelsPerFrame;
+  int layoutSize;
+  int element;
+  int i;
+  AudioUnitScope scope;
+  gboolean ret = FALSE;
+  GstStructure *structure;
+  GstAudioChannelPosition *positions;
+  UInt32 frameSize;
+
+  /* Describe channels */
+  layoutSize = sizeof (AudioChannelLayout) +
+      channels * sizeof (AudioChannelDescription);
+  layout = g_malloc (layoutSize);
+
+  structure = gst_caps_get_structure (caps, 0);
+  positions = gst_audio_get_channel_positions (structure);
+
+  layout->mChannelLayoutTag = kAudioChannelLayoutTag_UseChannelDescriptions;
+  layout->mChannelBitmap = 0;   /* Not used */
+  layout->mNumberChannelDescriptions = channels;
+  for (i = 0; i < channels; i++) {
+    if (positions) {
+      layout->mChannelDescriptions[i].mChannelLabel =
+          gst_audio_channel_position_to_coreaudio_channel_label (positions[i],
+          i);
+    } else {
+      /* Discrete channel numbers are ORed into this */
+      layout->mChannelDescriptions[i].mChannelLabel =
+          kAudioChannelLabel_Discrete_0 | i;
+    }
+
+    /* Others unused */
+    layout->mChannelDescriptions[i].mChannelFlags = 0;
+    layout->mChannelDescriptions[i].mCoordinates[0] = 0.f;
+    layout->mChannelDescriptions[i].mCoordinates[1] = 0.f;
+    layout->mChannelDescriptions[i].mCoordinates[2] = 0.f;
+  }
+
+  if (positions) {
+    g_free (positions);
+    positions = NULL;
+  }
+
+  GST_DEBUG_OBJECT (osxbuf, "Setting format for AudioUnit");
+
+  scope = osxbuf->is_src ? kAudioUnitScope_Output : kAudioUnitScope_Input;
+  element = osxbuf->is_src ? 1 : 0;
+
+  propertySize = sizeof (AudioStreamBasicDescription);
+  status = AudioUnitSetProperty (osxbuf->audiounit,
+      kAudioUnitProperty_StreamFormat, scope, element, &format, propertySize);
+
+  if (status) {
+    GST_WARNING_OBJECT (osxbuf,
+        "Failed to set audio description: %" GST_FOURCC_FORMAT,
+        GST_FOURCC_ARGS (status));
+    goto done;
+  }
+
+  if (layoutSize) {
+    status = AudioUnitSetProperty (osxbuf->audiounit,
+        kAudioUnitProperty_AudioChannelLayout,
+        scope, element, layout, layoutSize);
+    if (status) {
+      GST_WARNING_OBJECT (osxbuf,
+          "Failed to set output channel layout: %" GST_FOURCC_FORMAT,
+          GST_FOURCC_ARGS (status));
+      goto done;
+    }
+  }
+
+  /* create AudioBufferList needed for recording */
+  if (osxbuf->is_src) {
+    propertySize = sizeof (frameSize);
+    status = AudioUnitGetProperty (osxbuf->audiounit, kAudioDevicePropertyBufferFrameSize, kAudioUnitScope_Global, 0,   /* N/A for global */
+        &frameSize, &propertySize);
+
+    if (status) {
+      GST_WARNING_OBJECT (osxbuf, "Failed to get frame size: %"
+          GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+      goto done;
+    }
+
+    osxbuf->recBufferList = buffer_list_alloc (channels,
+        frameSize * format.mBytesPerFrame);
+  }
+
+  /* Specify which device we're using. */
+  GST_DEBUG_OBJECT (osxbuf, "Bind AudioUnit to device %d",
+      (int) osxbuf->device_id);
+  status = AudioUnitSetProperty (osxbuf->audiounit, kAudioOutputUnitProperty_CurrentDevice, kAudioUnitScope_Global, 0,  /* N/A for global */
+      &osxbuf->device_id, sizeof (AudioDeviceID));
+  if (status) {
+    GST_ERROR_OBJECT (osxbuf, "Failed binding to device: %"
+        GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+    goto audiounit_error;
+  }
+
+  /* Initialize the AudioUnit */
+  status = AudioUnitInitialize (osxbuf->audiounit);
+  if (status) {
+    GST_ERROR_OBJECT (osxbuf, "Failed to initialise AudioUnit: %"
+        GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+    goto audiounit_error;
+  }
+
+  GST_DEBUG_OBJECT (osxbuf, "osx ring buffer acquired");
+
+  ret = TRUE;
+
+done:
+  g_free (layout);
+  return ret;
+
+audiounit_error:
+  if (osxbuf->recBufferList) {
+    buffer_list_free (osxbuf->recBufferList);
+    osxbuf->recBufferList = NULL;
+  }
+  return ret;
+}
+
+static gboolean
+gst_osx_ring_buffer_acquire (GstRingBuffer * buf, GstRingBufferSpec * spec)
+{
+  gboolean ret = FALSE;
+  GstOsxRingBuffer *osxbuf;
+  AudioStreamBasicDescription format;
+
+  osxbuf = GST_OSX_RING_BUFFER (buf);
+
+  if (RINGBUFFER_IS_SPDIF (spec->type)) {
+    format.mFormatID = kAudioFormat60958AC3;
+    format.mSampleRate = (double) spec->rate;
+    format.mChannelsPerFrame = 2;
+    format.mFormatFlags = kAudioFormatFlagIsSignedInteger |
+        kAudioFormatFlagIsPacked | kAudioFormatFlagIsNonMixable;
+    format.mBytesPerFrame = 0;
+    format.mBitsPerChannel = 16;
+    format.mBytesPerPacket = 6144;
+    format.mFramesPerPacket = 1536;
+    format.mReserved = 0;
+    spec->segsize = 6144;
+    spec->segtotal = 10;
+    osxbuf->is_passthrough = TRUE;
+  } else {
+    int width, depth;
+    /* Fill out the audio description we're going to be using */
+    format.mFormatID = kAudioFormatLinearPCM;
+    format.mSampleRate = (double) spec->rate;
+    format.mChannelsPerFrame = spec->channels;
+    if (spec->type == GST_BUFTYPE_FLOAT) {
+      format.mFormatFlags = kAudioFormatFlagsNativeFloatPacked;
+      width = depth = spec->width;
+    } else {
+      format.mFormatFlags = kAudioFormatFlagIsSignedInteger;
+      width = spec->width;
+      depth = spec->depth;
+      if (width == depth) {
+        format.mFormatFlags |= kAudioFormatFlagIsPacked;
+      } else {
+        format.mFormatFlags |= kAudioFormatFlagIsAlignedHigh;
+      }
+      if (spec->bigend) {
+        format.mFormatFlags |= kAudioFormatFlagIsBigEndian;
+      }
+    }
+    format.mBytesPerFrame = spec->channels * (width >> 3);
+    format.mBitsPerChannel = depth;
+    format.mBytesPerPacket = spec->channels * (width >> 3);
+    format.mFramesPerPacket = 1;
+    format.mReserved = 0;
+    spec->segsize =
+        (spec->latency_time * spec->rate / G_USEC_PER_SEC) *
+        spec->bytes_per_sample;
+    spec->segtotal = spec->buffer_time / spec->latency_time;
+    osxbuf->stream_idx = 0;
+    osxbuf->is_passthrough = FALSE;
+  }
+
+  GST_DEBUG_OBJECT (osxbuf, "Format: " CORE_AUDIO_FORMAT,
+      CORE_AUDIO_FORMAT_ARGS (format));
+
+  buf->data = gst_buffer_new_and_alloc (spec->segtotal * spec->segsize);
+  memset (GST_BUFFER_DATA (buf->data), 0, GST_BUFFER_SIZE (buf->data));
+
+  if (osxbuf->is_passthrough) {
+    ret = gst_osx_ring_buffer_acquire_spdif (osxbuf, format);
+    if (ret) {
+      gst_osx_ring_buffer_monitorize_spdif (osxbuf);
+    }
+  } else {
+    ret = gst_osx_ring_buffer_acquire_analog (osxbuf, format, spec->caps);
+  }
+
+  if (!ret) {
+    gst_buffer_unref (buf->data);
+    buf->data = NULL;
+  }
+
+  osxbuf->segoffset = 0;
+
+  return ret;
+}
+
+static gboolean
+gst_osx_ring_buffer_release (GstRingBuffer * buf)
+{
+  GstOsxRingBuffer *osxbuf;
+
+  osxbuf = GST_OSX_RING_BUFFER (buf);
+
+  AudioUnitUninitialize (osxbuf->audiounit);
+
+  gst_buffer_unref (buf->data);
+  buf->data = NULL;
+
+  if (osxbuf->recBufferList) {
+    buffer_list_free (osxbuf->recBufferList);
+    osxbuf->recBufferList = NULL;
+  }
+
+  return TRUE;
+}
+
+static OSStatus
+gst_osx_ring_buffer_render_notify (GstOsxRingBuffer * osxbuf,
+    AudioUnitRenderActionFlags * ioActionFlags,
+    const AudioTimeStamp * inTimeStamp,
+    unsigned int inBusNumber,
+    unsigned int inNumberFrames, AudioBufferList * ioData)
+{
+  /* Before rendering a frame, we get the PreRender notification.
+   * Here, we detach the RenderCallback if we've been paused.
+   *
+   * This is necessary (rather than just directly detaching it) to
+   * work around some thread-safety issues in CoreAudio
+   */
+  if ((*ioActionFlags) & kAudioUnitRenderAction_PreRender) {
+    if (osxbuf->io_proc_needs_deactivation) {
+      gst_osx_ring_buffer_remove_render_callback (osxbuf);
+    }
+  }
+
+  return noErr;
+}
+
+static void
+gst_osx_ring_buffer_remove_render_callback (GstOsxRingBuffer * osxbuf)
+{
+  AURenderCallbackStruct input;
+  OSStatus status;
+
+  /* Deactivate the render callback by calling SetRenderCallback
+   * with a NULL inputProc.
+   */
+  input.inputProc = NULL;
+  input.inputProcRefCon = NULL;
+
+  status = AudioUnitSetProperty (osxbuf->audiounit, kAudioUnitProperty_SetRenderCallback, kAudioUnitScope_Global, 0,    /* N/A for global */
+      &input, sizeof (input));
+
+  if (status) {
+    GST_WARNING_OBJECT (osxbuf, "Failed to remove render callback %"
+        GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+  }
+
+  /* Remove the RenderNotify too */
+  status = AudioUnitRemoveRenderNotify (osxbuf->audiounit,
+      (AURenderCallback) gst_osx_ring_buffer_render_notify, osxbuf);
+
+  if (status) {
+    GST_WARNING_OBJECT (osxbuf,
+        "Failed to remove render notify callback %" GST_FOURCC_FORMAT,
+        GST_FOURCC_ARGS (status));
+  }
+
+  /* We're deactivated.. */
+  osxbuf->io_proc_needs_deactivation = FALSE;
+  osxbuf->io_proc_active = FALSE;
+}
+
+static gboolean
+gst_osx_ring_buffer_io_proc_start (GstOsxRingBuffer * osxbuf)
+{
+  OSStatus status;
+  AURenderCallbackStruct input;
+  AudioUnitPropertyID callback_type;
+
+  GST_DEBUG ("osx ring buffer start ioproc: %p device_id %lu",
+      osxbuf->element->io_proc, (gulong) osxbuf->device_id);
+  if (!osxbuf->io_proc_active) {
+    callback_type = osxbuf->is_src ?
+        kAudioOutputUnitProperty_SetInputCallback :
+        kAudioUnitProperty_SetRenderCallback;
+
+    input.inputProc = (AURenderCallback) osxbuf->element->io_proc;
+    input.inputProcRefCon = osxbuf;
+
+    status = AudioUnitSetProperty (osxbuf->audiounit, callback_type, kAudioUnitScope_Global, 0, /* N/A for global */
+        &input, sizeof (input));
+
+    if (status) {
+      GST_ERROR ("AudioUnitSetProperty failed: %" GST_FOURCC_FORMAT,
+          GST_FOURCC_ARGS (status));
+      return FALSE;
+    }
+    // ### does it make sense to do this notify stuff for input mode?
+    status = AudioUnitAddRenderNotify (osxbuf->audiounit,
+        (AURenderCallback) gst_osx_ring_buffer_render_notify, osxbuf);
+
+    if (status) {
+      GST_ERROR ("AudioUnitAddRenderNotify failed %"
+          GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+      return FALSE;
+    }
+
+    osxbuf->io_proc_active = TRUE;
+  }
+
+  osxbuf->io_proc_needs_deactivation = FALSE;
+
+  status = AudioOutputUnitStart (osxbuf->audiounit);
+  if (status) {
+    GST_ERROR ("AudioOutputUnitStart failed: %"
+        GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+    return FALSE;
+  }
+  return TRUE;
+}
+
+static gboolean
+gst_osx_ring_buffer_io_proc_stop (GstOsxRingBuffer * osxbuf)
+{
+  OSErr status;
+
+  GST_DEBUG ("osx ring buffer stop ioproc: %p device_id %lu",
+      osxbuf->element->io_proc, (gulong) osxbuf->device_id);
+
+  status = AudioOutputUnitStop (osxbuf->audiounit);
+  if (status) {
+    GST_WARNING ("AudioOutputUnitStop failed: %" GST_FOURCC_FORMAT,
+        GST_FOURCC_ARGS (status));
+  }
+  // ###: why is it okay to directly remove from here but not from pause() ?
+  if (osxbuf->io_proc_active) {
+    gst_osx_ring_buffer_remove_render_callback (osxbuf);
+  }
+  return TRUE;
+}
+
+static void
+gst_osx_ring_buffer_remove_render_spdif_callback (GstOsxRingBuffer * osxbuf)
+{
+  OSStatus status;
+
+  /* Deactivate the render callback by calling
+   * AudioDeviceDestroyIOProcID */
+  status = AudioDeviceDestroyIOProcID (osxbuf->device_id, osxbuf->procID);
+  if (status != noErr) {
+    GST_ERROR ("AudioDeviceDestroyIOProcID failed: %"
+        GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+  }
+
+  GST_DEBUG ("osx ring buffer removed ioproc ID: %p device_id %lu",
+      osxbuf->procID, (gulong) osxbuf->device_id);
+
+  /* We're deactivated.. */
+  osxbuf->procID = 0;
+  osxbuf->io_proc_needs_deactivation = FALSE;
+  osxbuf->io_proc_active = FALSE;
+}
+
+static gboolean
+gst_osx_ring_buffer_io_proc_spdif_start (GstOsxRingBuffer * osxbuf)
+{
+  OSErr status;
+
+  GST_DEBUG ("osx ring buffer start ioproc ID: %p device_id %lu",
+      osxbuf->procID, (gulong) osxbuf->device_id);
+
+  if (!osxbuf->io_proc_active) {
+    /* Add IOProc callback */
+    status = AudioDeviceCreateIOProcID (osxbuf->device_id,
+        (AudioDeviceIOProc) gst_osx_ring_buffer_io_proc_spdif,
+        (void *) osxbuf, &osxbuf->procID);
+    if (status != noErr) {
+      GST_ERROR ("AudioDeviceCreateIOProcID failed: %"
+          GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+      return FALSE;
+    }
+    osxbuf->io_proc_active = TRUE;
+  }
+
+  osxbuf->io_proc_needs_deactivation = FALSE;
+
+  /* Start device */
+  status = AudioDeviceStart (osxbuf->device_id, osxbuf->procID);
+  if (status != noErr) {
+    GST_ERROR ("AudioDeviceStart failed: %" GST_FOURCC_FORMAT,
+        GST_FOURCC_ARGS (status));
+    return FALSE;
+  }
+  return TRUE;
+}
+
+static gboolean
+gst_osx_ring_buffer_io_proc_spdif_stop (GstOsxRingBuffer * osxbuf)
+{
+  OSErr status;
+
+  /* Stop device */
+  status = AudioDeviceStop (osxbuf->device_id, osxbuf->procID);
+  if (status != noErr) {
+    GST_ERROR ("AudioDeviceStop failed: %" GST_FOURCC_FORMAT,
+        GST_FOURCC_ARGS (status));
+  }
+
+  GST_DEBUG ("osx ring buffer stop ioproc ID: %p device_id %lu",
+      osxbuf->procID, (gulong) osxbuf->device_id);
+
+  if (osxbuf->io_proc_active) {
+    gst_osx_ring_buffer_remove_render_spdif_callback (osxbuf);
+  }
+
+  gst_osx_ring_buffer_close_spdif (osxbuf);
+
+  return TRUE;
+}
+
+static gboolean
+gst_osx_ring_buffer_start (GstRingBuffer * buf)
+{
+  GstOsxRingBuffer *osxbuf;
+
+  osxbuf = GST_OSX_RING_BUFFER (buf);
+
+  if (osxbuf->is_passthrough) {
+    return gst_osx_ring_buffer_io_proc_spdif_start (osxbuf);
+  } else {
+    return gst_osx_ring_buffer_io_proc_start (osxbuf);
+  }
+}
+
+static gboolean
+gst_osx_ring_buffer_pause (GstRingBuffer * buf)
+{
+  GstOsxRingBuffer *osxbuf = GST_OSX_RING_BUFFER (buf);
+
+  if (osxbuf->is_passthrough) {
+    GST_DEBUG ("osx ring buffer pause ioproc ID: %p device_id %lu",
+        osxbuf->procID, (gulong) osxbuf->device_id);
+
+    if (osxbuf->io_proc_active) {
+      gst_osx_ring_buffer_remove_render_spdif_callback (osxbuf);
+    }
+  } else {
+    GST_DEBUG ("osx ring buffer pause ioproc: %p device_id %lu",
+        osxbuf->element->io_proc, (gulong) osxbuf->device_id);
+    if (osxbuf->io_proc_active) {
+      /* CoreAudio isn't threadsafe enough to do this here;
+       * we must deactivate the render callback elsewhere. See:
+       * http://lists.apple.com/archives/Coreaudio-api/2006/Mar/msg00010.html
+       */
+      osxbuf->io_proc_needs_deactivation = TRUE;
+    }
+  }
+  return TRUE;
+}
+
+
+static gboolean
+gst_osx_ring_buffer_stop (GstRingBuffer * buf)
+{
+  GstOsxRingBuffer *osxbuf;
+
+  osxbuf = GST_OSX_RING_BUFFER (buf);
+
+  if (osxbuf->is_passthrough) {
+    gst_osx_ring_buffer_io_proc_spdif_stop (osxbuf);
+  } else {
+    gst_osx_ring_buffer_io_proc_stop (osxbuf);
+  }
+
+  return TRUE;
+}
+
+static guint
+gst_osx_ring_buffer_delay (GstRingBuffer * buf)
+{
+  double latency;
+  UInt32 size = sizeof (double);
+  GstOsxRingBuffer *osxbuf;
+  OSStatus status;
+  guint samples;
+
+  osxbuf = GST_OSX_RING_BUFFER (buf);
+
+  if (osxbuf->is_passthrough) {
+    samples = _audio_device_get_latency (osxbuf->device_id);
+    samples += _audio_stream_get_latency (osxbuf->stream_id);
+    latency = (double) samples / GST_RING_BUFFER (buf)->spec.rate;
+  } else {
+    status = AudioUnitGetProperty (osxbuf->audiounit, kAudioUnitProperty_Latency, kAudioUnitScope_Global, 0,    /* N/A for global */
+        &latency, &size);
+
+    if (status) {
+      GST_WARNING_OBJECT (buf, "Failed to get latency: %"
+          GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+      return 0;
+    }
+
+    samples = latency * GST_RING_BUFFER (buf)->spec.rate;
+  }
+  GST_DEBUG_OBJECT (buf, "Got latency: %f seconds -> %d samples",
+      latency, samples);
+  return samples;
+}
diff --git a/sys/osxaudio/gstosxringbuffer.h b/sys/osxaudio/gstosxringbuffer.h
index 5e6dbe4..4394fa6 100644
--- a/sys/osxaudio/gstosxringbuffer.h
+++ b/sys/osxaudio/gstosxringbuffer.h
@@ -1,6 +1,7 @@
 /*
  * GStreamer
  * Copyright (C) 2006 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+ * Copyright (C) 2012 Fluendo S.A. <support@fluendo.com>
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -47,6 +48,8 @@
 #include <gst/gst.h>
 #include <gst/audio/gstringbuffer.h>
 #include <CoreAudio/CoreAudio.h>
+#include <AudioToolbox/AudioToolbox.h>
+
 #include "gstosxaudioelement.h"
 
 G_BEGIN_DECLS
@@ -64,6 +67,8 @@
 #define GST_IS_OSX_RING_BUFFER_CLASS(klass) \
   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_OSX_RING_BUFFER))
 
+#define RINGBUFFER_IS_SPDIF(t) ((t) == GST_BUFTYPE_AC3 || (t) == GST_BUFTYPE_DTS)
+
 typedef struct _GstOsxRingBuffer GstOsxRingBuffer;
 typedef struct _GstOsxRingBufferClass GstOsxRingBufferClass;
 
@@ -72,14 +77,29 @@
   GstRingBuffer object;
 
   gboolean is_src;
-  AudioUnit audiounit;
+  gboolean is_passthrough;
+  gint stream_idx;
+
   AudioDeviceID device_id;
   gboolean io_proc_active;
   gboolean io_proc_needs_deactivation;
   guint buffer_len;
   guint segoffset;
-  AudioBufferList * recBufferList;
-  GstOsxAudioElementInterface * element;
+
+  GstOsxAudioElementInterface *element;
+
+  /* For LPCM in/out */
+  AudioUnit audiounit;
+  AudioBufferList *recBufferList;
+
+  /* For SPDIF out */
+  pid_t hog_pid;
+  gboolean disabled_mixing;
+  AudioStreamID stream_id;
+  gboolean revert_format;
+  AudioStreamBasicDescription stream_format;
+  AudioStreamBasicDescription original_format;
+  AudioDeviceIOProcID procID;
 };
 
 struct _GstOsxRingBufferClass
@@ -92,3 +112,4 @@
 G_END_DECLS
 
 #endif /* __GST_OSX_RING_BUFFER_H__ */
+
diff --git a/sys/osxvideo/Makefile.in b/sys/osxvideo/Makefile.in
index a616add..618afc0 100644
--- a/sys/osxvideo/Makefile.in
+++ b/sys/osxvideo/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -249,7 +249,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/sys/osxvideo/osxvideosink.h b/sys/osxvideo/osxvideosink.h
index 37b68c2..622f0ad 100644
--- a/sys/osxvideo/osxvideosink.h
+++ b/sys/osxvideo/osxvideosink.h
@@ -90,6 +90,10 @@
 #else
   guint cocoa_timeout;
 #endif
+  GMutex *mrl_check_lock;
+  GCond *mrl_check_cond;
+  gboolean mrl_check_done;
+  gboolean main_run_loop_running;
   gboolean app_started;
   gboolean keep_par;
   gboolean embed;
@@ -145,6 +149,7 @@
 #ifdef RUN_NS_APP_THREAD
 + (BOOL) isMainThread;
 -(void) nsAppThread;
+-(void) checkMainRunLoop;
 #endif
 @end
 
diff --git a/sys/osxvideo/osxvideosink.m b/sys/osxvideo/osxvideosink.m
index 0bcd494..7a452cb 100644
--- a/sys/osxvideo/osxvideosink.m
+++ b/sys/osxvideo/osxvideosink.m
@@ -115,6 +115,51 @@
 }
 
 static void
+gst_osx_videosink_check_main_run_loop (GstOSXVideoSink *sink)
+{
+  /* check if the main run loop is running */
+  gboolean is_running;
+
+  if (sink->mrl_check_done) {
+    return;
+  }
+  /* the easy way */
+  is_running = [[NSRunLoop mainRunLoop] currentMode] != nil;
+  if (is_running) {
+    goto exit;
+  } else {
+    /* the previous check doesn't always work with main loops that run
+     * cocoa's main run loop manually, like the gdk one, giving false
+     * negatives. This check defers a call to the main thread and waits to
+     * be awaken by this function. */
+    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+    GstOSXVideoSinkObject * object = (GstOSXVideoSinkObject *) sink->osxvideosinkobject;
+    GTimeVal abstime;
+
+    g_mutex_lock(sink->mrl_check_lock);
+    [object performSelectorOnMainThread:
+          @selector(checkMainRunLoop)
+          withObject:nil waitUntilDone:NO];
+    /* Wait 100 ms */
+    g_get_current_time (&abstime);
+    g_time_val_add (&abstime, 100 * 1000);
+    is_running = g_cond_timed_wait(sink->mrl_check_cond,
+        sink->mrl_check_lock, &abstime);
+    g_mutex_unlock(sink->mrl_check_lock);
+
+    [pool release];
+  }
+
+exit:
+  {
+  GST_DEBUG_OBJECT(sink, "The main runloop %s is running",
+      is_running ? "" : " not ");
+  sink->main_run_loop_running = is_running;
+  sink->mrl_check_done = TRUE;
+  }
+}
+
+static void
 gst_osx_video_sink_run_cocoa_loop (GstOSXVideoSink * sink )
 {
   /* Cocoa applications require a main runloop running to dispatch UI
@@ -124,7 +169,7 @@
    * external NSView is passed to the sink through the GstVideoOverlay API,
    * we need to run the cocoa mainloop somehow.
    */
-  if ([[NSRunLoop mainRunLoop] currentMode] == nil) {
+  if (!sink->main_run_loop_running) {
 #ifdef RUN_NS_APP_THREAD
     /* run the main runloop in a separate thread */
 
@@ -205,6 +250,7 @@
   GST_INFO_OBJECT (osxvideosink, "'have-ns-view' message sent");
 
   osxvideosink->ns_app_thread = [NSThread mainThread];
+  gst_osx_videosink_check_main_run_loop (osxvideosink);
   gst_osx_video_sink_run_cocoa_loop (osxvideosink);
   [osxwindow->gstview setMainThread:osxvideosink->ns_app_thread];
 
@@ -462,6 +508,10 @@
   sink->loop_thread_lock = g_mutex_new ();
   sink->loop_thread_cond = g_cond_new ();
 #endif
+  sink->mrl_check_lock = g_mutex_new ();
+  sink->mrl_check_cond = g_cond_new ();
+  sink->mrl_check_done = FALSE;
+  sink->main_run_loop_running = FALSE;
   sink->app_started = FALSE;
   sink->keep_par = FALSE;
 }
@@ -490,6 +540,12 @@
   if (osxvideosink->osxvideosinkobject)
     [(GstOSXVideoSinkObject*)(osxvideosink->osxvideosinkobject) release];
 
+  if (osxvideosink->mrl_check_lock)
+    g_mutex_free (osxvideosink->mrl_check_lock);
+
+  if (osxvideosink->mrl_check_cond)
+    g_cond_free (osxvideosink->mrl_check_cond);
+
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
@@ -537,7 +593,7 @@
   g_object_class_install_property (gobject_class, ARG_FORCE_PAR,
       g_param_spec_boolean ("force-aspect-ratio", "force aspect ration",
           "When enabled, scaling will respect original aspect ration",
-          FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 }
 
 static void
@@ -873,6 +929,13 @@
 }
 #endif
 
+-(void) checkMainRunLoop
+{
+  g_mutex_lock(osxvideosink->mrl_check_lock);
+  g_cond_signal(osxvideosink->mrl_check_cond);
+  g_mutex_unlock(osxvideosink->mrl_check_lock);
+}
+
 @end
 
 @ implementation GstBufferObject
diff --git a/sys/sunaudio/Makefile.in b/sys/sunaudio/Makefile.in
index f25c6fc..ae6b1b7 100644
--- a/sys/sunaudio/Makefile.in
+++ b/sys/sunaudio/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -253,7 +253,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/sys/v4l2/Makefile.in b/sys/v4l2/Makefile.in
index 966423d..889a398 100644
--- a/sys/v4l2/Makefile.in
+++ b/sys/v4l2/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -285,7 +285,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
@@ -1054,16 +1056,16 @@
 
 # these are all the rules generating the relevant files
 $(glib_gen_basename)-marshal.h: $(glib_gen_basename)-marshal.list
-	$(AM_V_GEN)glib-genmarshal --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
+	$(AM_V_GEN)$(GLIB_GENMARSHAL) --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
 	mv $(glib_gen_basename)-marshal.h.tmp $(glib_gen_basename)-marshal.h
 
 $(glib_gen_basename)-marshal.c: $(glib_gen_basename)-marshal.list
 	$(AM_V_GEN)echo "#include \"$(glib_gen_basename)-marshal.h\"" >> $(glib_gen_basename)-marshal.c.tmp && \
-	glib-genmarshal --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
+	$(GLIB_GENMARSHAL) --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
 	mv $(glib_gen_basename)-marshal.c.tmp $(glib_gen_basename)-marshal.c
 
 $(glib_gen_basename)-enumtypes.h: $(glib_enum_headers)
-	$(AM_V_GEN)glib-mkenums \
+	$(AM_V_GEN)$(GLIB_MKENUMS) \
 	--fhead "#ifndef __$(glib_enum_define)_ENUM_TYPES_H__\n#define __$(glib_enum_define)_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
 	--fprod "\n/* enumerations from \"@filename@\" */\n" \
 	--vhead "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n"         \
@@ -1072,7 +1074,7 @@
 
 $(glib_gen_basename)-enumtypes.c: $(glib_enum_headers)
 	@if test "x$(glib_enum_headers)" = "x"; then echo "ERROR: glib_enum_headers is empty, please fix Makefile"; exit 1; fi
-	$(AM_V_GEN)glib-mkenums \
+	$(AM_V_GEN)$(GLIB_MKENUMS) \
 	--fhead "#include \"$(glib_gen_basename)-enumtypes.h\"\n$(enum_headers)" \
 	--fprod "\n/* enumerations from \"@filename@\" */" \
 	--vhead "GType\n@enum_name@_get_type (void)\n{\n  static volatile gsize g_define_type_id__volatile = 0;\n  if (g_once_init_enter (&g_define_type_id__volatile)) {\n    static const G@Type@Value values[] = {"     \
diff --git a/sys/v4l2/gstv4l2bufferpool.c b/sys/v4l2/gstv4l2bufferpool.c
index 9798770..d040d9d 100644
--- a/sys/v4l2/gstv4l2bufferpool.c
+++ b/sys/v4l2/gstv4l2bufferpool.c
@@ -114,7 +114,7 @@
 
       index = meta->vbuffer.index;
       GST_LOG_OBJECT (pool,
-          "mmap buffer %p idx %d (data %p, len %u) freed, unmapping", buffer,
+          "unmap buffer %p idx %d (data %p, len %u)", buffer,
           index, meta->mem, meta->vbuffer.length);
 
       v4l2_munmap (meta->mem, meta->vbuffer.length);
@@ -190,24 +190,36 @@
 
       /* add metadata to raw video buffers */
       if (pool->add_videometa && info->finfo) {
+        const GstVideoFormatInfo *finfo = info->finfo;
         gsize offset[GST_VIDEO_MAX_PLANES];
-        gint stride[GST_VIDEO_MAX_PLANES];
+        gint width, height, n_planes, offs, i, stride[GST_VIDEO_MAX_PLANES];
 
-        offset[0] = 0;
-        stride[0] = obj->bytesperline;
+        width = GST_VIDEO_INFO_WIDTH (info);
+        height = GST_VIDEO_INFO_HEIGHT (info);
+        n_planes = GST_VIDEO_INFO_N_PLANES (info);
 
-        GST_DEBUG_OBJECT (pool, "adding video meta, stride %d", stride[0]);
+        GST_DEBUG_OBJECT (pool, "adding video meta, bytesperline %d",
+            obj->bytesperline);
+
+        offs = 0;
+        for (i = 0; i < n_planes; i++) {
+          offset[i] = offs;
+          stride[i] =
+              GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (finfo, i, obj->bytesperline);
+
+          offs +=
+              stride[i] * GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (finfo, i, height);
+        }
         gst_buffer_add_video_meta_full (newbuf, GST_VIDEO_FRAME_FLAG_NONE,
-            GST_VIDEO_INFO_FORMAT (info), GST_VIDEO_INFO_WIDTH (info),
-            GST_VIDEO_INFO_HEIGHT (info), GST_VIDEO_INFO_N_PLANES (info),
+            GST_VIDEO_INFO_FORMAT (info), width, height, n_planes,
             offset, stride);
       }
       break;
     }
     case GST_V4L2_IO_USERPTR:
     default:
+      newbuf = NULL;
       g_assert_not_reached ();
-      break;
   }
 
   pool->num_allocated++;
@@ -344,9 +356,9 @@
   pool->num_buffers = num_buffers;
   pool->copy_threshold = copy_threshold;
   if (pool->allocator)
-    gst_allocator_unref (pool->allocator);
+    gst_object_unref (pool->allocator);
   if ((pool->allocator = allocator))
-    gst_allocator_ref (allocator);
+    gst_object_ref (allocator);
   pool->params = params;
 
   gst_buffer_pool_config_set_params (config, caps, size, min_buffers,
@@ -484,6 +496,7 @@
   for (n = 0; n < pool->num_queued; n++) {
     gst_v4l2_buffer_pool_free_buffer (bpool, pool->buffers[n]);
   }
+  pool->num_queued = 0;
   g_free (pool->buffers);
   pool->buffers = NULL;
 
@@ -753,6 +766,7 @@
 
         case GST_V4L2_IO_USERPTR:
         default:
+          ret = GST_FLOW_ERROR;
           g_assert_not_reached ();
           break;
       }
@@ -775,12 +789,14 @@
 
         case GST_V4L2_IO_USERPTR:
         default:
+          ret = GST_FLOW_ERROR;
           g_assert_not_reached ();
           break;
       }
       break;
 
     default:
+      ret = GST_FLOW_ERROR;
       g_assert_not_reached ();
       break;
   }
@@ -874,7 +890,7 @@
   if (pool->video_fd >= 0)
     v4l2_close (pool->video_fd);
   if (pool->allocator)
-    gst_allocator_unref (pool->allocator);
+    gst_object_unref (pool->allocator);
   g_free (pool->buffers);
 
   G_OBJECT_CLASS (parent_class)->finalize (object);
diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c
index 1e1f9c9..0ff2182 100644
--- a/sys/v4l2/gstv4l2object.c
+++ b/sys/v4l2/gstv4l2object.c
@@ -1301,6 +1301,7 @@
           break;
 #endif
         default:
+          format = GST_VIDEO_FORMAT_UNKNOWN;
           g_assert_not_reached ();
           break;
       }
@@ -1589,10 +1590,18 @@
   gint int_width = width;
   gint int_height = height;
 
-  /* interlaced detection using VIDIOC_TRY/S_FMT */
-  if (!gst_v4l2_object_get_nearest_size (v4l2object, pixelformat,
-          &int_width, &int_height, &interlaced))
-    return NULL;
+  if (!strcmp ((char *) v4l2object->vcap.driver, "uvcvideo")) {
+    /*
+     * UVC devices are never interlaced, and doing VIDIOC_TRY_FMT on them
+     * causes expensive and slow USB IO, so don't probe them for interlaced
+     */
+    interlaced = FALSE;
+  } else {
+    /* Interlaced detection using VIDIOC_TRY/S_FMT */
+    if (!gst_v4l2_object_get_nearest_size (v4l2object, pixelformat,
+            &int_width, &int_height, &interlaced))
+      return NULL;
+  }
 
   memset (&ival, 0, sizeof (struct v4l2_frmivalenum));
   ival.index = 0;
diff --git a/sys/v4l2/gstv4l2sink.c b/sys/v4l2/gstv4l2sink.c
index 2730027..a01e5fb 100644
--- a/sys/v4l2/gstv4l2sink.c
+++ b/sys/v4l2/gstv4l2sink.c
@@ -653,8 +653,8 @@
   gst_query_add_allocation_pool (query, pool, size, 2, 0);
 
   /* we also support various metadata */
-  gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE);
-  gst_query_add_allocation_meta (query, GST_VIDEO_CROP_META_API_TYPE);
+  gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL);
+  gst_query_add_allocation_meta (query, GST_VIDEO_CROP_META_API_TYPE, NULL);
 
   if (pool)
     gst_object_unref (pool);
diff --git a/sys/v4l2/gstv4l2src.c b/sys/v4l2/gstv4l2src.c
index 6c56031..dfeb7b7 100644
--- a/sys/v4l2/gstv4l2src.c
+++ b/sys/v4l2/gstv4l2src.c
@@ -609,9 +609,11 @@
     gst_buffer_pool_config_set_params (config, caps, size, min, max);
 
     /* if downstream supports video metadata, add this to the pool config */
-    if (gst_query_has_allocation_meta (query, GST_VIDEO_META_API_TYPE))
+    if (gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL)) {
+      GST_DEBUG_OBJECT (pool, "activate Video Meta");
       gst_buffer_pool_config_add_option (config,
           GST_BUFFER_POOL_OPTION_VIDEO_META);
+    }
 
     gst_buffer_pool_set_config (pool, config);
   }
diff --git a/sys/waveform/Makefile.in b/sys/waveform/Makefile.in
index 4bd8d26..a6cfef7 100644
--- a/sys/waveform/Makefile.in
+++ b/sys/waveform/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -249,7 +249,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/sys/ximage/Makefile.in b/sys/ximage/Makefile.in
index ded8b1e..809e8a2 100644
--- a/sys/ximage/Makefile.in
+++ b/sys/ximage/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -250,7 +250,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/tests/Makefile.in b/tests/Makefile.in
index dcd6ef2..7de3440 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -219,7 +219,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am
index c6866d3..84b2661 100644
--- a/tests/check/Makefile.am
+++ b/tests/check/Makefile.am
@@ -48,7 +48,9 @@
 endif
 
 if USE_JPEG
-check_jpeg = elements/jpegenc
+check_jpeg = \
+        elements/jpegdec \
+        elements/jpegenc
 else
 check_jpeg =
 endif
@@ -254,11 +256,12 @@
 elements_imagefreeze_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
 elements_imagefreeze_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD)
 
+elements_jpegdec_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GIO_CFLAGS) $(AM_CFLAGS)
+elements_jpegdec_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstapp-$(GST_API_VERSION) -lgstpbutils-$(GST_API_VERSION) $(GST_BASE_LIBS) $(GIO_LIBS) $(LDADD)
+
 elements_jpegenc_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
 elements_jpegenc_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstapp-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD)
 
-elements_level_LDADD = $(LDADD) $(LIBM)
-
 elements_matroskamux_LDADD = $(GST_BASE_LIBS) $(LDADD) $(LIBM)
 
 elements_multifile_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
diff --git a/tests/check/Makefile.in b/tests/check/Makefile.in
index a0ca289..76240cd 100644
--- a/tests/check/Makefile.in
+++ b/tests/check/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -143,7 +143,8 @@
 	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
 @USE_FLAC_TRUE@am__EXEEXT_1 = pipelines/flacdec$(EXEEXT)
 @USE_GDK_PIXBUF_TRUE@am__EXEEXT_2 = elements/gdkpixbufsink$(EXEEXT)
-@USE_JPEG_TRUE@am__EXEEXT_3 = elements/jpegenc$(EXEEXT)
+@USE_JPEG_TRUE@am__EXEEXT_3 = elements/jpegdec$(EXEEXT) \
+@USE_JPEG_TRUE@	elements/jpegenc$(EXEEXT)
 @USE_SOUP_TRUE@am__EXEEXT_4 = elements/souphttpsrc$(EXEEXT)
 @USE_SUNAUDIO_TRUE@am__EXEEXT_5 = elements/sunaudio$(EXEEXT)
 @USE_TAGLIB_TRUE@am__EXEEXT_6 = elements/id3v2mux$(EXEEXT) \
@@ -367,6 +368,15 @@
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
 	$(elements_interleave_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
+elements_jpegdec_SOURCES = elements/jpegdec.c
+elements_jpegdec_OBJECTS = elements_jpegdec-jpegdec.$(OBJEXT)
+elements_jpegdec_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_2)
+elements_jpegdec_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(elements_jpegdec_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
 elements_jpegenc_SOURCES = elements/jpegenc.c
 elements_jpegenc_OBJECTS = elements_jpegenc-jpegenc.$(OBJEXT)
 elements_jpegenc_DEPENDENCIES = $(am__DEPENDENCIES_1) \
@@ -377,8 +387,8 @@
 	-o $@
 elements_level_SOURCES = elements/level.c
 elements_level_OBJECTS = elements_level-level.$(OBJEXT)
-elements_level_DEPENDENCIES = $(am__DEPENDENCIES_2) \
-	$(am__DEPENDENCIES_1)
+elements_level_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_2)
 elements_level_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
 	$(elements_level_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \
@@ -637,12 +647,13 @@
 	elements/equalizer.c elements/flacparse.c elements/flvdemux.c \
 	elements/flvmux.c elements/gdkpixbufsink.c elements/icydemux.c \
 	elements/id3demux.c elements/id3v2mux.c elements/imagefreeze.c \
-	elements/interleave.c elements/jpegenc.c elements/level.c \
-	elements/matroskamux.c elements/matroskaparse.c \
-	elements/mpegaudioparse.c elements/multifile.c \
-	elements/qtmux.c elements/rganalysis.c elements/rglimiter.c \
-	elements/rgvolume.c elements/rtp-payloading.c \
-	elements/rtpbin.c $(elements_rtpbin_buffer_list_SOURCES) \
+	elements/interleave.c elements/jpegdec.c elements/jpegenc.c \
+	elements/level.c elements/matroskamux.c \
+	elements/matroskaparse.c elements/mpegaudioparse.c \
+	elements/multifile.c elements/qtmux.c elements/rganalysis.c \
+	elements/rglimiter.c elements/rgvolume.c \
+	elements/rtp-payloading.c elements/rtpbin.c \
+	$(elements_rtpbin_buffer_list_SOURCES) \
 	elements/rtpjitterbuffer.c elements/shapewipe.c \
 	elements/souphttpsrc.c elements/spectrum.c elements/sunaudio.c \
 	elements/udpsink.c elements/udpsrc.c elements/videocrop.c \
@@ -669,12 +680,13 @@
 	elements/equalizer.c elements/flacparse.c elements/flvdemux.c \
 	elements/flvmux.c elements/gdkpixbufsink.c elements/icydemux.c \
 	elements/id3demux.c elements/id3v2mux.c elements/imagefreeze.c \
-	elements/interleave.c elements/jpegenc.c elements/level.c \
-	elements/matroskamux.c elements/matroskaparse.c \
-	elements/mpegaudioparse.c elements/multifile.c \
-	elements/qtmux.c elements/rganalysis.c elements/rglimiter.c \
-	elements/rgvolume.c elements/rtp-payloading.c \
-	elements/rtpbin.c $(elements_rtpbin_buffer_list_SOURCES) \
+	elements/interleave.c elements/jpegdec.c elements/jpegenc.c \
+	elements/level.c elements/matroskamux.c \
+	elements/matroskaparse.c elements/mpegaudioparse.c \
+	elements/multifile.c elements/qtmux.c elements/rganalysis.c \
+	elements/rglimiter.c elements/rgvolume.c \
+	elements/rtp-payloading.c elements/rtpbin.c \
+	$(elements_rtpbin_buffer_list_SOURCES) \
 	elements/rtpjitterbuffer.c elements/shapewipe.c \
 	elements/souphttpsrc.c elements/spectrum.c elements/sunaudio.c \
 	elements/udpsink.c elements/udpsrc.c elements/videocrop.c \
@@ -765,7 +777,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
@@ -1057,7 +1071,10 @@
 @USE_GDK_PIXBUF_FALSE@check_gdkpixbuf = 
 @USE_GDK_PIXBUF_TRUE@check_gdkpixbuf = elements/gdkpixbufsink
 @USE_JPEG_FALSE@check_jpeg = 
-@USE_JPEG_TRUE@check_jpeg = elements/jpegenc
+@USE_JPEG_TRUE@check_jpeg = \
+@USE_JPEG_TRUE@        elements/jpegdec \
+@USE_JPEG_TRUE@        elements/jpegenc
+
 @USE_SOUP_FALSE@check_soup = 
 @USE_SOUP_TRUE@check_soup = elements/souphttpsrc
 @USE_SUNAUDIO_FALSE@check_sunaudio = 
@@ -1149,9 +1166,11 @@
 elements_interleave_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
 elements_interleave_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_API_VERSION) $(LDADD)
 elements_level_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
-elements_level_LDADD = $(LDADD) $(LIBM)
+elements_level_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_API_VERSION) $(LDADD)
 elements_imagefreeze_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
 elements_imagefreeze_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD)
+elements_jpegdec_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GIO_CFLAGS) $(AM_CFLAGS)
+elements_jpegdec_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstapp-$(GST_API_VERSION) -lgstpbutils-$(GST_API_VERSION) $(GST_BASE_LIBS) $(GIO_LIBS) $(LDADD)
 elements_jpegenc_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
 elements_jpegenc_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstapp-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD)
 elements_matroskamux_LDADD = $(GST_BASE_LIBS) $(LDADD) $(LIBM)
@@ -1367,6 +1386,9 @@
 elements/interleave$(EXEEXT): $(elements_interleave_OBJECTS) $(elements_interleave_DEPENDENCIES) $(EXTRA_elements_interleave_DEPENDENCIES) elements/$(am__dirstamp)
 	@rm -f elements/interleave$(EXEEXT)
 	$(AM_V_CCLD)$(elements_interleave_LINK) $(elements_interleave_OBJECTS) $(elements_interleave_LDADD) $(LIBS)
+elements/jpegdec$(EXEEXT): $(elements_jpegdec_OBJECTS) $(elements_jpegdec_DEPENDENCIES) $(EXTRA_elements_jpegdec_DEPENDENCIES) elements/$(am__dirstamp)
+	@rm -f elements/jpegdec$(EXEEXT)
+	$(AM_V_CCLD)$(elements_jpegdec_LINK) $(elements_jpegdec_OBJECTS) $(elements_jpegdec_LDADD) $(LIBS)
 elements/jpegenc$(EXEEXT): $(elements_jpegenc_OBJECTS) $(elements_jpegenc_DEPENDENCIES) $(EXTRA_elements_jpegenc_DEPENDENCIES) elements/$(am__dirstamp)
 	@rm -f elements/jpegenc$(EXEEXT)
 	$(AM_V_CCLD)$(elements_jpegenc_LINK) $(elements_jpegenc_OBJECTS) $(elements_jpegenc_LDADD) $(LIBS)
@@ -1519,6 +1541,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_gdkpixbufsink-gdkpixbufsink.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_imagefreeze-imagefreeze.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_interleave-interleave.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_jpegdec-jpegdec.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_jpegenc-jpegenc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_level-level.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_multifile-multifile.Po@am__quote@
@@ -2052,6 +2075,20 @@
 @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) $(elements_interleave_CFLAGS) $(CFLAGS) -c -o elements_interleave-interleave.obj `if test -f 'elements/interleave.c'; then $(CYGPATH_W) 'elements/interleave.c'; else $(CYGPATH_W) '$(srcdir)/elements/interleave.c'; fi`
 
+elements_jpegdec-jpegdec.o: elements/jpegdec.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_jpegdec_CFLAGS) $(CFLAGS) -MT elements_jpegdec-jpegdec.o -MD -MP -MF $(DEPDIR)/elements_jpegdec-jpegdec.Tpo -c -o elements_jpegdec-jpegdec.o `test -f 'elements/jpegdec.c' || echo '$(srcdir)/'`elements/jpegdec.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/elements_jpegdec-jpegdec.Tpo $(DEPDIR)/elements_jpegdec-jpegdec.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/jpegdec.c' object='elements_jpegdec-jpegdec.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) $(elements_jpegdec_CFLAGS) $(CFLAGS) -c -o elements_jpegdec-jpegdec.o `test -f 'elements/jpegdec.c' || echo '$(srcdir)/'`elements/jpegdec.c
+
+elements_jpegdec-jpegdec.obj: elements/jpegdec.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_jpegdec_CFLAGS) $(CFLAGS) -MT elements_jpegdec-jpegdec.obj -MD -MP -MF $(DEPDIR)/elements_jpegdec-jpegdec.Tpo -c -o elements_jpegdec-jpegdec.obj `if test -f 'elements/jpegdec.c'; then $(CYGPATH_W) 'elements/jpegdec.c'; else $(CYGPATH_W) '$(srcdir)/elements/jpegdec.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/elements_jpegdec-jpegdec.Tpo $(DEPDIR)/elements_jpegdec-jpegdec.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/jpegdec.c' object='elements_jpegdec-jpegdec.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) $(elements_jpegdec_CFLAGS) $(CFLAGS) -c -o elements_jpegdec-jpegdec.obj `if test -f 'elements/jpegdec.c'; then $(CYGPATH_W) 'elements/jpegdec.c'; else $(CYGPATH_W) '$(srcdir)/elements/jpegdec.c'; fi`
+
 elements_jpegenc-jpegenc.o: elements/jpegenc.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_jpegenc_CFLAGS) $(CFLAGS) -MT elements_jpegenc-jpegenc.o -MD -MP -MF $(DEPDIR)/elements_jpegenc-jpegenc.Tpo -c -o elements_jpegenc-jpegenc.o `test -f 'elements/jpegenc.c' || echo '$(srcdir)/'`elements/jpegenc.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/elements_jpegenc-jpegenc.Tpo $(DEPDIR)/elements_jpegenc-jpegenc.Po
diff --git a/tests/check/elements/apev2mux.c b/tests/check/elements/apev2mux.c
index 867899e..8fecc66 100644
--- a/tests/check/elements/apev2mux.c
+++ b/tests/check/elements/apev2mux.c
@@ -328,7 +328,7 @@
 
   GST_LOG ("Got tags: %" GST_PTR_FORMAT, tags_read);
   test_taglib_apev2mux_check_tags (tags_read, mask);
-  gst_tag_list_free (tags_read);
+  gst_tag_list_unref (tags_read);
 
   GST_LOG ("Waiting for EOS ...");
   msg = gst_bus_poll (bus, GST_MESSAGE_EOS | GST_MESSAGE_ERROR, -1);
@@ -367,7 +367,7 @@
   /* internal consistency check */
   tags = test_taglib_apev2mux_create_tags (0xFFFFFFFF);
   test_taglib_apev2mux_check_tags (tags, 0xFFFFFFFF);
-  gst_tag_list_free (tags);
+  gst_tag_list_unref (tags);
 
   /* now the real tests */
   for (i = 0; i < 50; ++i) {
@@ -390,7 +390,7 @@
     test_taglib_apev2mux_with_tags (tags, mask);
 
     /* free tags */
-    gst_tag_list_free (tags);
+    gst_tag_list_unref (tags);
   }
 }
 
diff --git a/tests/check/elements/deinterlace.c b/tests/check/elements/deinterlace.c
index ee67002..258c875 100644
--- a/tests/check/elements/deinterlace.c
+++ b/tests/check/elements/deinterlace.c
@@ -431,6 +431,13 @@
 
   suite_add_tcase (s, tc_chain);
   tcase_set_timeout (tc_chain, 180);
+
+  if (!gst_registry_check_feature_version (gst_registry_get (), "deinterlace",
+          GST_VERSION_MAJOR, GST_VERSION_MINOR, GST_VERSION_MICRO)) {
+    GST_ERROR ("FIXME: port deinterlace element");
+    return s;
+  }
+
   tcase_add_test (tc_chain, test_create_and_unref);
   tcase_add_test (tc_chain, test_mode_auto_accept_caps);
   tcase_add_test (tc_chain, test_mode_forced_accept_caps);
diff --git a/tests/check/elements/flvdemux.c b/tests/check/elements/flvdemux.c
index f16a6aa..efc3061 100644
--- a/tests/check/elements/flvdemux.c
+++ b/tests/check/elements/flvdemux.c
@@ -73,7 +73,7 @@
 
   /* kids, don't use a sync handler for this at home, really; we do because
    * we just want to abort and nothing else */
-  gst_bus_set_sync_handler (bus, error_cb, (gpointer) file);
+  gst_bus_set_sync_handler (bus, error_cb, (gpointer) file, NULL);
 
   src = gst_element_factory_make ("filesrc", "filesrc");
   fail_unless (src != NULL, "Failed to create 'filesrc' element!");
diff --git a/tests/check/elements/flvmux.c b/tests/check/elements/flvmux.c
index a9b2bd1..e608535 100644
--- a/tests/check/elements/flvmux.c
+++ b/tests/check/elements/flvmux.c
@@ -66,7 +66,7 @@
 
   /* kids, don't use a sync handler for this at home, really; we do because
    * we just want to abort and nothing else */
-  gst_bus_set_sync_handler (GST_ELEMENT_BUS (pipeline), error_cb, NULL);
+  gst_bus_set_sync_handler (GST_ELEMENT_BUS (pipeline), error_cb, NULL, NULL);
 
   src = gst_element_factory_make ("audiotestsrc", "audiotestsrc");
   fail_unless (src != NULL, "Failed to create 'audiotestsrc' element!");
diff --git a/tests/check/elements/icydemux.c b/tests/check/elements/icydemux.c
index 266497d..4c8155a 100644
--- a/tests/check/elements/icydemux.c
+++ b/tests/check/elements/icydemux.c
@@ -186,7 +186,7 @@
 
   fail_unless_equals_string (TEST_METADATA, (char *) tag);
 
-  gst_tag_list_free (tags);
+  gst_tag_list_unref (tags);
   gst_message_unref (message);
   gst_caps_unref (caps);
 
diff --git a/tests/check/elements/id3demux.c b/tests/check/elements/id3demux.c
index b907da4..c1ec12e 100644
--- a/tests/check/elements/id3demux.c
+++ b/tests/check/elements/id3demux.c
@@ -56,7 +56,7 @@
 
   /* kids, don't use a sync handler for this at home, really; we do because
    * we just want to abort and nothing else */
-  gst_bus_set_sync_handler (bus, error_cb, (gpointer) file);
+  gst_bus_set_sync_handler (bus, error_cb, (gpointer) file, NULL);
 
   src = gst_element_factory_make ("filesrc", "filesrc");
   fail_unless (src != NULL, "Failed to create 'filesrc' element!");
@@ -124,7 +124,7 @@
   tags = read_tags_from_file (filename, FALSE);
   fail_unless (tags != NULL, "Failed to extract tags from '%s'", filename);
   check_func (tags, filename);
-  gst_tag_list_free (tags);
+  gst_tag_list_unref (tags);
 
   /* FIXME: need to fix id3demux for short content in push mode */
 #if 0
@@ -132,7 +132,7 @@
   tags = read_tags_from_file (filename, TRUE);
   fail_unless (tags != NULL, "Failed to extract tags from '%s'", filename);
   check_func (tags, filename);
-  gst_tag_list_free (tags);
+  gst_tag_list_unref (tags);
 #endif
 }
 
diff --git a/tests/check/elements/id3v2mux.c b/tests/check/elements/id3v2mux.c
index 5fce509..9c9beea 100644
--- a/tests/check/elements/id3v2mux.c
+++ b/tests/check/elements/id3v2mux.c
@@ -434,7 +434,7 @@
 
   GST_LOG ("Got tags: %" GST_PTR_FORMAT, tags_read);
   test_taglib_id3mux_check_tags (tags_read, mask);
-  gst_tag_list_free (tags_read);
+  gst_tag_list_unref (tags_read);
 
   fail_unless (tagbuf != NULL);
   test_taglib_id3mux_check_tag_buffer (tagbuf, mask);
@@ -477,7 +477,7 @@
   /* internal consistency check */
   tags = test_taglib_id3mux_create_tags (0xFFFFFFFF);
   test_taglib_id3mux_check_tags (tags, 0xFFFFFFFF);
-  gst_tag_list_free (tags);
+  gst_tag_list_unref (tags);
 
   /* now the real tests */
   for (i = 0; i < 50; ++i) {
@@ -500,7 +500,7 @@
     test_taglib_id3mux_with_tags (tags, mask);
 
     /* free tags */
-    gst_tag_list_free (tags);
+    gst_tag_list_unref (tags);
   }
 }
 
diff --git a/tests/check/elements/interleave.c b/tests/check/elements/interleave.c
index 5f30097..1c8c71f 100644
--- a/tests/check/elements/interleave.c
+++ b/tests/check/elements/interleave.c
@@ -456,17 +456,17 @@
   if (n == 0) {
     GstAudioChannelPosition pos[2] =
         { GST_AUDIO_CHANNEL_POSITION_NONE, GST_AUDIO_CHANNEL_POSITION_NONE };
-    gst_audio_channel_positions_to_mask (pos, 2, &mask);
+    gst_audio_channel_positions_to_mask (pos, 2, FALSE, &mask);
   } else if (n == 1) {
     GstAudioChannelPosition pos[2] = { GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
       GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT
     };
-    gst_audio_channel_positions_to_mask (pos, 2, &mask);
+    gst_audio_channel_positions_to_mask (pos, 2, FALSE, &mask);
   } else if (n == 2) {
     GstAudioChannelPosition pos[2] = { GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
       GST_AUDIO_CHANNEL_POSITION_REAR_CENTER
     };
-    gst_audio_channel_positions_to_mask (pos, 2, &mask);
+    gst_audio_channel_positions_to_mask (pos, 2, FALSE, &mask);
   }
 
   caps = gst_caps_new_simple ("audio/x-raw",
diff --git a/tests/check/elements/jpegdec.c b/tests/check/elements/jpegdec.c
new file mode 100644
index 0000000..070ccdd
--- /dev/null
+++ b/tests/check/elements/jpegdec.c
@@ -0,0 +1,156 @@
+/* GStreamer
+ * unit test for jpegdec
+ * Copyright (C) <2010> Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+ * Copyright (C) <2012> Mathias Hasselmann <mathias@openismus.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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <unistd.h>
+
+#include <gio/gio.h>
+#include <gst/check/gstcheck.h>
+#include <gst/app/gstappsink.h>
+#include <gst/pbutils/gstdiscoverer.h>
+
+/* Verify jpegdec is working when explictly requested by a pipeline. */
+GST_START_TEST (test_jpegdec_explicit)
+{
+  GstElement *pipeline, *source, *dec, *sink;
+  GstSample *sample;
+
+  /* construct a pipeline that explicitly uses jpegdec */
+  pipeline = gst_pipeline_new (NULL);
+  source = gst_element_factory_make ("filesrc", NULL);
+  dec = gst_element_factory_make ("jpegdec", NULL);
+  sink = gst_element_factory_make ("appsink", NULL);
+
+  gst_bin_add_many (GST_BIN (pipeline), source, dec, sink, NULL);
+  gst_element_link_many (source, dec, sink, NULL);
+
+  /* point that pipeline to our test image */
+  {
+    char *filename = g_build_filename (GST_TEST_FILES_PATH, "image.jpg", NULL);
+    g_object_set (G_OBJECT (source), "location", filename, NULL);
+    g_free (filename);
+  }
+
+  gst_element_set_state (pipeline, GST_STATE_PLAYING);
+
+  sample = gst_app_sink_pull_sample (GST_APP_SINK (sink));
+  fail_unless (GST_IS_SAMPLE (sample));
+
+  /* do some basic checks to verify image decoding */
+  {
+    GstCaps *decoded;
+    GstCaps *expected;
+
+    decoded = gst_sample_get_caps (sample);
+    expected = gst_caps_from_string ("video/x-raw, width=120, height=160");
+
+    fail_unless (gst_caps_is_always_compatible (decoded, expected));
+
+    gst_caps_unref (expected);
+  }
+  gst_sample_unref (sample);
+
+  /* wait for EOS */
+  sample = gst_app_sink_pull_sample (GST_APP_SINK (sink));
+  fail_unless (sample == NULL);
+  fail_unless (gst_app_sink_is_eos (GST_APP_SINK (sink)));
+
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_object_unref (pipeline);
+}
+
+GST_END_TEST;
+
+/* Verify JPEG discovery is working. Right now jpegdec would be used,
+ * but I have no idea how to actually verify this. */
+GST_START_TEST (test_jpegdec_discover)
+{
+  GstDiscoverer *disco;
+  GError *error = NULL;
+  char *uri;
+  GstDiscovererInfo *info;
+  GstDiscovererVideoInfo *video;
+
+  disco = gst_discoverer_new (5 * GST_SECOND, &error);
+
+  fail_unless (GST_IS_DISCOVERER (disco));
+  fail_unless (error == NULL, "%s", (error ? error->message : ""));
+
+  {
+    GFile *testdir = g_file_new_for_path (GST_TEST_FILES_PATH);
+    GFile *testfile = g_file_resolve_relative_path (testdir, "image.jpg");
+    uri = g_file_get_uri (testfile);
+    g_object_unref (testfile);
+    g_object_unref (testdir);
+  }
+
+  info = gst_discoverer_discover_uri (disco, uri, &error);
+  fail_unless (GST_IS_DISCOVERER_INFO (info));
+  fail_unless (error == NULL, "%s: %s", uri, (error ? error->message : ""));
+
+  fail_unless_equals_string (gst_discoverer_info_get_uri (info), uri);
+  fail_unless_equals_int (gst_discoverer_info_get_result (info),
+      GST_DISCOVERER_OK);
+
+  video =
+      GST_DISCOVERER_VIDEO_INFO (gst_discoverer_info_get_stream_info (info));
+  fail_unless (video != NULL);
+
+  fail_unless (gst_discoverer_video_info_is_image (video));
+  fail_unless_equals_int (gst_discoverer_video_info_get_width (video), 120);
+  fail_unless_equals_int (gst_discoverer_video_info_get_height (video), 160);
+
+  gst_discoverer_info_unref (video);
+  gst_discoverer_info_unref (info);
+  g_free (uri);
+  g_object_unref (disco);
+}
+
+GST_END_TEST;
+
+static Suite *
+jpegdec_suite (void)
+{
+  Suite *s = suite_create ("jpegdec");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_jpegdec_explicit);
+  tcase_add_test (tc_chain, test_jpegdec_discover);
+
+  return s;
+}
+
+int
+main (int argc, char **argv)
+{
+  int nf;
+
+  Suite *s = jpegdec_suite ();
+  SRunner *sr = srunner_create (s);
+
+  gst_check_init (&argc, &argv);
+
+  srunner_run_all (sr, CK_NORMAL);
+  nf = srunner_ntests_failed (sr);
+  srunner_free (sr);
+
+  return nf;
+}
diff --git a/tests/check/elements/qtmux.c b/tests/check/elements/qtmux.c
index e367634..cc36a89 100644
--- a/tests/check/elements/qtmux.c
+++ b/tests/check/elements/qtmux.c
@@ -768,7 +768,7 @@
 
       gst_message_parse_tag (msg, &tags);
       gst_tag_list_insert (*taglist, tags, GST_TAG_MERGE_REPLACE);
-      gst_tag_list_free (tags);
+      gst_tag_list_unref (tags);
     }
     gst_message_unref (msg);
   }
@@ -858,7 +858,7 @@
         (guint) gst_util_uint64_scale_round ((guint64) total_bytes,
         (guint64) 8 * GST_SECOND, (guint64) total_duration);
     fail_unless (bitrate == expected);
-    gst_tag_list_free (taglist);
+    gst_tag_list_unref (taglist);
   }
 
   /* delete file */
diff --git a/tests/check/elements/rganalysis.c b/tests/check/elements/rganalysis.c
index daad236..aaebd6d 100644
--- a/tests/check/elements/rganalysis.c
+++ b/tests/check/elements/rganalysis.c
@@ -195,14 +195,42 @@
 }
 
 static void
+send_flush_events (GstElement * element)
+{
+  gboolean res;
+  GstPad *pad;
+
+  pad = gst_element_get_static_pad (element, "sink");
+  res = gst_pad_send_event (pad, gst_event_new_flush_start ());
+  fail_unless (res, "flush-start even not handledt");
+  res = gst_pad_send_event (pad, gst_event_new_flush_stop (TRUE));
+  fail_unless (res, "flush-stop event not handled");
+  gst_object_unref (pad);
+}
+
+static void
+send_segment_event (GstElement * element)
+{
+  GstSegment segment;
+  gboolean res;
+  GstPad *pad;
+
+  pad = gst_element_get_static_pad (element, "sink");
+  gst_segment_init (&segment, GST_FORMAT_TIME);
+  res = gst_pad_send_event (pad, gst_event_new_segment (&segment));
+  fail_unless (res, "SEGMENT event not handled");
+  gst_object_unref (pad);
+}
+
+static void
 send_eos_event (GstElement * element)
 {
   GstBus *bus = gst_element_get_bus (element);
   GstPad *pad = gst_element_get_static_pad (element, "sink");
-  GstEvent *event = gst_event_new_eos ();
+  gboolean res;
 
-  fail_unless (gst_pad_send_event (pad, event),
-      "Cannot send EOS event: Not handled.");
+  res = gst_pad_send_event (pad, gst_event_new_eos ());
+  fail_unless (res, "EOS event not handled");
 
   /* There is no sink element, so _we_ post the EOS message on the bus here.  Of
    * course we generate any EOS ourselves, but this allows us to poll for the
@@ -218,7 +246,7 @@
 send_tag_event (GstElement * element, GstTagList * tag_list)
 {
   GstPad *pad = gst_element_get_static_pad (element, "sink");
-  GstEvent *event = gst_event_new_tag ("test", tag_list);
+  GstEvent *event = gst_event_new_tag (tag_list);
 
   fail_unless (gst_pad_send_event (pad, event),
       "Cannot send TAG event: Not handled.");
@@ -649,20 +677,27 @@
   set_playing_state (element);
 
   /* Single track: */
+  send_segment_event (element);
   send_eos_event (element);
   poll_eos (element);
 
   /* First album: */
   g_object_set (element, "num-tracks", 3, NULL);
 
+  send_flush_events (element);
+  send_segment_event (element);
   send_eos_event (element);
   poll_eos (element);
   fail_unless_num_tracks (element, 2);
 
+  send_flush_events (element);
+  send_segment_event (element);
   send_eos_event (element);
   poll_eos (element);
   fail_unless_num_tracks (element, 1);
 
+  send_flush_events (element);
+  send_segment_event (element);
   send_eos_event (element);
   poll_eos (element);
   fail_unless_num_tracks (element, 0);
@@ -670,15 +705,21 @@
   /* Second album: */
   g_object_set (element, "num-tracks", 2, NULL);
 
+  send_flush_events (element);
+  send_segment_event (element);
   send_eos_event (element);
   poll_eos (element);
   fail_unless_num_tracks (element, 1);
 
+  send_flush_events (element);
+  send_segment_event (element);
   send_eos_event (element);
   poll_eos (element);
   fail_unless_num_tracks (element, 0);
 
   /* Single track: */
+  send_flush_events (element);
+  send_segment_event (element);
   send_eos_event (element);
   poll_eos (element);
   fail_unless_num_tracks (element, 0);
@@ -700,6 +741,7 @@
 
   /* No buffer for the first track. */
 
+  send_segment_event (element);
   send_eos_event (element);
   /* No tags should be posted, there was nothing to analyze: */
   poll_eos (element);
@@ -707,6 +749,8 @@
 
   /* A test waveform with known gain result as second track: */
 
+  send_flush_events (element);
+  send_segment_event (element);
   for (i = 20; i--;)
     push_buffer (test_buffer_square_float_mono (&accumulator, 44100, 512,
             0.25));
@@ -716,11 +760,13 @@
   fail_unless_track_gain (tag_list, -6.20);
   /* Album is not finished yet: */
   fail_if_album_tags (tag_list);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
   fail_unless_num_tracks (element, 1);
 
   /* No buffer for the last track. */
 
+  send_flush_events (element);
+  send_segment_event (element);
   send_eos_event (element);
 
   tag_list = poll_tags (element);
@@ -728,7 +774,7 @@
   fail_unless_album_gain (tag_list, -6.20);
   /* No track tags should be posted, as there was no data for it: */
   fail_if_track_tags (tag_list);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
   fail_unless_num_tracks (element, 0);
 
   cleanup_rganalysis (element);
@@ -743,6 +789,7 @@
   set_playing_state (element);
 
   /* Single track: */
+  send_segment_event (element);
   push_buffer (test_buffer_const_float_stereo (44100, 0, 0.0, 0.0));
   send_eos_event (element);
   poll_eos (element);
@@ -750,11 +797,15 @@
   /* First album: */
   g_object_set (element, "num-tracks", 2, NULL);
 
+  send_flush_events (element);
+  send_segment_event (element);
   push_buffer (test_buffer_const_float_stereo (44100, 0, 0.0, 0.0));
   send_eos_event (element);
   poll_eos (element);
   fail_unless_num_tracks (element, 1);
 
+  send_flush_events (element);
+  send_segment_event (element);
   push_buffer (test_buffer_const_float_stereo (44100, 0, 0.0, 0.0));
   send_eos_event (element);
   poll_eos (element);
@@ -762,12 +813,16 @@
 
   /* Second album, with a single track: */
   g_object_set (element, "num-tracks", 1, NULL);
+  send_flush_events (element);
+  send_segment_event (element);
   push_buffer (test_buffer_const_float_stereo (44100, 0, 0.0, 0.0));
   send_eos_event (element);
   poll_eos (element);
   fail_unless_num_tracks (element, 0);
 
   /* Single track: */
+  send_flush_events (element);
+  send_segment_event (element);
   push_buffer (test_buffer_const_float_stereo (44100, 0, 0.0, 0.0));
   send_eos_event (element);
   poll_eos (element);
@@ -794,25 +849,30 @@
   GstTagList *tag_list;
 
   set_playing_state (element);
+  send_segment_event (element);
   push_buffer (test_buffer_const_float_stereo (8000, 512, -1.369, 0.0));
   send_eos_event (element);
   tag_list = poll_tags (element);
   fail_unless_track_peak (tag_list, 1.369);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
 
   /* Swapped channels. */
+  send_flush_events (element);
+  send_segment_event (element);
   push_buffer (test_buffer_const_float_stereo (8000, 512, 0.0, -1.369));
   send_eos_event (element);
   tag_list = poll_tags (element);
   fail_unless_track_peak (tag_list, 1.369);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
 
   /* Mono. */
+  send_flush_events (element);
+  send_segment_event (element);
   push_buffer (test_buffer_const_float_mono (8000, 512, -1.369));
   send_eos_event (element);
   tag_list = poll_tags (element);
   fail_unless_track_peak (tag_list, 1.369);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
 
   cleanup_rganalysis (element);
 }
@@ -827,46 +887,57 @@
   set_playing_state (element);
 
   /* Half amplitude. */
+  send_segment_event (element);
   push_buffer (test_buffer_const_int16_stereo (8000, 16, 512, 1 << 14, 0));
   send_eos_event (element);
   tag_list = poll_tags (element);
   fail_unless_track_peak (tag_list, 0.5);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
 
   /* Swapped channels. */
+  send_flush_events (element);
+  send_segment_event (element);
   push_buffer (test_buffer_const_int16_stereo (8000, 16, 512, 0, 1 << 14));
   send_eos_event (element);
   tag_list = poll_tags (element);
   fail_unless_track_peak (tag_list, 0.5);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
 
   /* Mono. */
+  send_flush_events (element);
+  send_segment_event (element);
   push_buffer (test_buffer_const_int16_mono (8000, 16, 512, 1 << 14));
   send_eos_event (element);
   tag_list = poll_tags (element);
   fail_unless_track_peak (tag_list, 0.5);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
 
   /* Half amplitude, negative variant. */
+  send_flush_events (element);
+  send_segment_event (element);
   push_buffer (test_buffer_const_int16_stereo (8000, 16, 512, -1 << 14, 0));
   send_eos_event (element);
   tag_list = poll_tags (element);
   fail_unless_track_peak (tag_list, 0.5);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
 
   /* Swapped channels. */
+  send_flush_events (element);
+  send_segment_event (element);
   push_buffer (test_buffer_const_int16_stereo (8000, 16, 512, 0, -1 << 14));
   send_eos_event (element);
   tag_list = poll_tags (element);
   fail_unless_track_peak (tag_list, 0.5);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
 
   /* Mono. */
+  send_flush_events (element);
+  send_segment_event (element);
   push_buffer (test_buffer_const_int16_mono (8000, 16, 512, -1 << 14));
   send_eos_event (element);
   tag_list = poll_tags (element);
   fail_unless_track_peak (tag_list, 0.5);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
 
 
   /* Now check for correct normalization of the peak value: Sample
@@ -874,47 +945,59 @@
    * highest positive amplitude we do not reach 1.0, only for
    * -32768! */
 
+  send_flush_events (element);
+  send_segment_event (element);
   push_buffer (test_buffer_const_int16_stereo (8000, 16, 512, 32767, 0));
   send_eos_event (element);
   tag_list = poll_tags (element);
   fail_unless_track_peak (tag_list, 32767. / 32768.);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
 
   /* Swapped channels. */
+  send_flush_events (element);
+  send_segment_event (element);
   push_buffer (test_buffer_const_int16_stereo (8000, 16, 512, 0, 32767));
   send_eos_event (element);
   tag_list = poll_tags (element);
   fail_unless_track_peak (tag_list, 32767. / 32768.);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
 
   /* Mono. */
+  send_flush_events (element);
+  send_segment_event (element);
   push_buffer (test_buffer_const_int16_mono (8000, 16, 512, 32767));
   send_eos_event (element);
   tag_list = poll_tags (element);
   fail_unless_track_peak (tag_list, 32767. / 32768.);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
 
 
   /* Negative variant, reaching 1.0. */
+  send_flush_events (element);
+  send_segment_event (element);
   push_buffer (test_buffer_const_int16_stereo (8000, 16, 512, -32768, 0));
   send_eos_event (element);
   tag_list = poll_tags (element);
   fail_unless_track_peak (tag_list, 1.0);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
 
   /* Swapped channels. */
+  send_flush_events (element);
+  send_segment_event (element);
   push_buffer (test_buffer_const_int16_stereo (8000, 16, 512, 0, -32768));
   send_eos_event (element);
   tag_list = poll_tags (element);
   fail_unless_track_peak (tag_list, 1.0);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
 
   /* Mono. */
+  send_flush_events (element);
+  send_segment_event (element);
   push_buffer (test_buffer_const_int16_mono (8000, 16, 512, -32768));
   send_eos_event (element);
   tag_list = poll_tags (element);
   fail_unless_track_peak (tag_list, 1.0);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
 
   cleanup_rganalysis (element);
 }
@@ -929,57 +1012,68 @@
   g_object_set (element, "num-tracks", 2, NULL);
   set_playing_state (element);
 
+  send_segment_event (element);
   push_buffer (test_buffer_const_float_stereo (8000, 1024, 1.0, 0.0));
   send_eos_event (element);
   tag_list = poll_tags (element);
   fail_unless_track_peak (tag_list, 1.0);
   fail_if_album_tags (tag_list);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
   fail_unless_num_tracks (element, 1);
 
+  send_flush_events (element);
+  send_segment_event (element);
   push_buffer (test_buffer_const_float_stereo (8000, 1024, 0.0, 0.5));
   send_eos_event (element);
   tag_list = poll_tags (element);
   fail_unless_track_peak (tag_list, 0.5);
   fail_unless_album_peak (tag_list, 1.0);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
   fail_unless_num_tracks (element, 0);
 
   /* Try a second album: */
   g_object_set (element, "num-tracks", 3, NULL);
 
+  send_flush_events (element);
+  send_segment_event (element);
   push_buffer (test_buffer_const_float_stereo (8000, 1024, 0.4, 0.4));
   send_eos_event (element);
   tag_list = poll_tags (element);
   fail_unless_track_peak (tag_list, 0.4);
   fail_if_album_tags (tag_list);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
   fail_unless_num_tracks (element, 2);
 
+  send_flush_events (element);
+  send_segment_event (element);
   push_buffer (test_buffer_const_float_stereo (8000, 1024, 0.45, 0.45));
   send_eos_event (element);
   tag_list = poll_tags (element);
   fail_unless_track_peak (tag_list, 0.45);
   fail_if_album_tags (tag_list);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
   fail_unless_num_tracks (element, 1);
 
+  send_flush_events (element);
+  send_segment_event (element);
   push_buffer (test_buffer_const_float_stereo (8000, 1024, 0.2, 0.2));
   send_eos_event (element);
   tag_list = poll_tags (element);
   fail_unless_track_peak (tag_list, 0.2);
   fail_unless_album_peak (tag_list, 0.45);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
   fail_unless_num_tracks (element, 0);
 
   /* And now a single track, not in album mode (num-tracks is 0
    * now): */
+  send_flush_events (element);
+  send_segment_event (element);
   push_buffer (test_buffer_const_float_stereo (8000, 1024, 0.1, 0.1));
   send_eos_event (element);
   tag_list = poll_tags (element);
   fail_unless_track_peak (tag_list, 0.1);
   fail_if_album_tags (tag_list);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
 
   cleanup_rganalysis (element);
 }
@@ -995,20 +1089,23 @@
 
   set_playing_state (element);
 
+  send_segment_event (element);
   push_buffer (test_buffer_const_float_mono (8000, 1024, 1.0));
   send_eos_event (element);
   tag_list = poll_tags (element);
   fail_unless_track_peak (tag_list, 1.0);
   fail_if_album_tags (tag_list);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
 
   g_object_set (element, "num-tracks", 1, NULL);
+  send_flush_events (element);
+  send_segment_event (element);
   push_buffer (test_buffer_const_float_mono (8000, 1024, 0.5));
   send_eos_event (element);
   tag_list = poll_tags (element);
   fail_unless_track_peak (tag_list, 0.5);
   fail_unless_album_peak (tag_list, 0.5);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
   fail_unless_num_tracks (element, 0);
 
   cleanup_rganalysis (element);
@@ -1029,22 +1126,25 @@
   g_object_set (element, "num-tracks", 2, NULL);
   set_playing_state (element);
 
+  send_segment_event (element);
   push_buffer (test_buffer_const_float_stereo (8000, 1024, 1.0, 0.0));
   send_eos_event (element);
   tag_list = poll_tags (element);
   fail_unless_track_peak (tag_list, 1.0);
   fail_if_album_tags (tag_list);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
   fail_unless_num_tracks (element, 1);
 
   g_object_set (element, "num-tracks", 0, NULL);
 
+  send_flush_events (element);
+  send_segment_event (element);
   push_buffer (test_buffer_const_float_stereo (8000, 1024, 0.0, 0.5));
   send_eos_event (element);
   tag_list = poll_tags (element);
   fail_unless_track_peak (tag_list, 0.5);
   fail_if_album_tags (tag_list);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
 
   cleanup_rganalysis (element);
 }
@@ -1063,7 +1163,7 @@
 
   /* The three tracks are constructed such that if any of these is in fact
    * ignored for the album gain, the album gain will differ. */
-
+  send_segment_event (element);
   accumulator = 0;
   for (i = 8; i--;)
     push_buffer (test_buffer_square_float_stereo (&accumulator, 44100, 512,
@@ -1073,8 +1173,10 @@
   fail_unless_track_peak (tag_list, 0.75);
   fail_unless_track_gain (tag_list, -15.70);
   fail_if_album_tags (tag_list);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
 
+  send_flush_events (element);
+  send_segment_event (element);
   accumulator = 0;
   for (i = 12; i--;)
     push_buffer (test_buffer_square_float_stereo (&accumulator, 44100, 512,
@@ -1084,8 +1186,10 @@
   fail_unless_track_peak (tag_list, 0.5);
   fail_unless_track_gain (tag_list, -12.22);
   fail_if_album_tags (tag_list);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
 
+  send_flush_events (element);
+  send_segment_event (element);
   accumulator = 0;
   for (i = 180; i--;)
     push_buffer (test_buffer_square_float_stereo (&accumulator, 44100, 512,
@@ -1099,7 +1203,7 @@
   /* Strangely, wavegain reports -12.17 for the album, but the fixed
    * metaflac agrees to us.  Could be a 32767 vs. 32768 issue. */
   fail_unless_album_gain (tag_list, -12.18);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
 
   cleanup_rganalysis (element);
 }
@@ -1118,6 +1222,7 @@
   g_object_set (element, "forced", FALSE, NULL);
   set_playing_state (element);
 
+  send_segment_event (element);
   tag_list = gst_tag_list_new_empty ();
   /* Provided values are totally arbitrary. */
   gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND,
@@ -1132,6 +1237,8 @@
 
   /* Now back to a track without tags. */
 
+  send_flush_events (element);
+  send_segment_event (element);
   for (i = 20; i--;)
     push_buffer (test_buffer_square_float_stereo (&accumulator, 44100, 512,
             0.25, 0.25));
@@ -1139,7 +1246,7 @@
   tag_list = poll_tags (element);
   fail_unless_track_peak (tag_list, 0.25);
   fail_unless_track_gain (tag_list, get_expected_gain (44100));
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
 
   cleanup_rganalysis (element);
 }
@@ -1158,6 +1265,7 @@
   g_object_set (element, "forced", FALSE, NULL);
   set_playing_state (element);
 
+  send_segment_event (element);
   tag_list = gst_tag_list_new_empty ();
   gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND, GST_TAG_TRACK_GAIN, 2.21,
       NULL);
@@ -1176,7 +1284,8 @@
   poll_eos (element);
 
   /* Now a track without tags. */
-
+  send_flush_events (element);
+  send_segment_event (element);
   accumulator = 0;
   for (i = 20; i--;)
     push_buffer (test_buffer_square_float_stereo (&accumulator, 44100, 512,
@@ -1186,7 +1295,7 @@
   fail_unless_track_peak (tag_list, 0.25);
   fail_unless_track_gain (tag_list, get_expected_gain (44100));
   fail_if_album_tags (tag_list);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
 
   cleanup_rganalysis (element);
 }
@@ -1209,6 +1318,7 @@
   g_object_set (element, "forced", FALSE, NULL);
   set_playing_state (element);
 
+  send_segment_event (element);
   for (i = 20; i--;)
     push_buffer (test_buffer_const_float_stereo (8000, 512, 0.5, 0.5));
 
@@ -1220,6 +1330,8 @@
   send_eos_event (element);
   poll_eos (element);
 
+  send_flush_events (element);
+  send_segment_event (element);
   /* Now back to a normal track, this one has no tags: */
   for (i = 20; i--;)
     push_buffer (test_buffer_square_float_stereo (&accumulator, 8000, 512, 0.25,
@@ -1228,7 +1340,7 @@
   tag_list = poll_tags (element);
   fail_unless_track_peak (tag_list, 0.25);
   fail_unless_track_gain (tag_list, get_expected_gain (8000));
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
 
   cleanup_rganalysis (element);
 }
@@ -1248,6 +1360,7 @@
   g_object_set (element, "forced", FALSE, NULL);
   set_playing_state (element);
 
+  send_segment_event (element);
   tag_list = gst_tag_list_new_empty ();
   /* Provided values are totally arbitrary. */
   gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND,
@@ -1265,6 +1378,8 @@
   /* Now an album without tags. */
   g_object_set (element, "num-tracks", 2, NULL);
 
+  send_flush_events (element);
+  send_segment_event (element);
   accumulator = 0;
   for (i = 20; i--;)
     push_buffer (test_buffer_square_float_stereo (&accumulator, 44100, 512,
@@ -1274,9 +1389,11 @@
   fail_unless_track_peak (tag_list, 0.25);
   fail_unless_track_gain (tag_list, get_expected_gain (44100));
   fail_if_album_tags (tag_list);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
   fail_unless_num_tracks (element, 1);
 
+  send_flush_events (element);
+  send_segment_event (element);
   accumulator = 0;
   for (i = 20; i--;)
     push_buffer (test_buffer_square_float_stereo (&accumulator, 44100, 512,
@@ -1287,7 +1404,7 @@
   fail_unless_track_gain (tag_list, get_expected_gain (44100));
   fail_unless_album_peak (tag_list, 0.25);
   fail_unless_album_gain (tag_list, get_expected_gain (44100));
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
   fail_unless_num_tracks (element, 0);
 
   cleanup_rganalysis (element);
@@ -1305,6 +1422,7 @@
   g_object_set (element, "forced", FALSE, "num-tracks", 2, NULL);
   set_playing_state (element);
 
+  send_segment_event (element);
   tag_list = gst_tag_list_new_empty ();
   /* Provided values are totally arbitrary. */
   gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND,
@@ -1321,6 +1439,8 @@
 
   /* This track has no tags, but needs to be skipped anyways since we
    * are in album processing mode. */
+  send_flush_events (element);
+  send_segment_event (element);
   for (i = 20; i--;)
     push_buffer (test_buffer_const_float_stereo (8000, 512, 0.0, 0.0));
   send_eos_event (element);
@@ -1328,6 +1448,8 @@
   fail_unless_num_tracks (element, 0);
 
   /* Normal track after the album.  Of course not to be skipped. */
+  send_flush_events (element);
+  send_segment_event (element);
   accumulator = 0;
   for (i = 20; i--;)
     push_buffer (test_buffer_square_float_stereo (&accumulator, 8000, 512, 0.25,
@@ -1337,7 +1459,7 @@
   fail_unless_track_peak (tag_list, 0.25);
   fail_unless_track_gain (tag_list, get_expected_gain (8000));
   fail_if_album_tags (tag_list);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
 
   cleanup_rganalysis (element);
 }
@@ -1354,6 +1476,7 @@
   g_object_set (element, "forced", FALSE, "num-tracks", 2, NULL);
   set_playing_state (element);
 
+  send_segment_event (element);
   for (i = 20; i--;)
     push_buffer (test_buffer_square_float_stereo (&accumulator, 8000, 512, 0.25,
             0.25));
@@ -1362,11 +1485,13 @@
   fail_unless_track_peak (tag_list, 0.25);
   fail_unless_track_gain (tag_list, get_expected_gain (8000));
   fail_if_album_tags (tag_list);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
   fail_unless_num_tracks (element, 1);
 
   /* The second track has indeed full tags, but although being not forced, this
    * one has to be processed because album processing is on. */
+  send_flush_events (element);
+  send_segment_event (element);
   tag_list = gst_tag_list_new_empty ();
   /* Provided values are totally arbitrary. */
   gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND,
@@ -1385,7 +1510,7 @@
   /* Statistical processing leads to the second track being
    * ignored for the gain (because it is so short): */
   fail_unless_album_gain (tag_list, get_expected_gain (8000));
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
   fail_unless_num_tracks (element, 0);
 
   cleanup_rganalysis (element);
@@ -1403,6 +1528,7 @@
   g_object_set (element, "forced", FALSE, "num-tracks", 2, NULL);
   set_playing_state (element);
 
+  send_segment_event (element);
   for (i = 20; i--;)
     push_buffer (test_buffer_square_float_stereo (&accumulator, 8000, 512, 0.25,
             0.25));
@@ -1411,12 +1537,15 @@
   fail_unless_track_peak (tag_list, 0.25);
   fail_unless_track_gain (tag_list, get_expected_gain (8000));
   fail_if_album_tags (tag_list);
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
   fail_unless_num_tracks (element, 1);
 
   /* Disabling album processing before end of album: */
   g_object_set (element, "num-tracks", 0, NULL);
 
+  send_flush_events (element);
+  send_segment_event (element);
+
   /* Processing a track that has to be skipped. */
   tag_list = gst_tag_list_new_empty ();
   /* Provided values are totally arbitrary. */
@@ -1444,6 +1573,7 @@
 
   set_playing_state (element);
 
+  send_segment_event (element);
   for (i = 20; i--;)
     push_buffer (test_buffer_square_float_stereo (&accumulator, 44100, 512,
             0.25, 0.25));
@@ -1455,10 +1585,12 @@
   fail_unless (gst_tag_list_get_double (tag_list, GST_TAG_REFERENCE_LEVEL,
           &ref_level) && MATCH_GAIN (ref_level, 89.),
       "Incorrect reference level tag");
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
 
   g_object_set (element, "reference-level", 83., "num-tracks", 2, NULL);
 
+  send_flush_events (element);
+  send_segment_event (element);
   for (i = 20; i--;)
     push_buffer (test_buffer_square_float_stereo (&accumulator, 44100, 512,
             0.25, 0.25));
@@ -1470,8 +1602,10 @@
   fail_unless (gst_tag_list_get_double (tag_list, GST_TAG_REFERENCE_LEVEL,
           &ref_level) && MATCH_GAIN (ref_level, 83.),
       "Incorrect reference level tag");
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
 
+  send_flush_events (element);
+  send_segment_event (element);
   accumulator = 0;
   for (i = 20; i--;)
     push_buffer (test_buffer_square_float_stereo (&accumulator, 44100, 512,
@@ -1487,7 +1621,7 @@
   fail_unless (gst_tag_list_get_double (tag_list, GST_TAG_REFERENCE_LEVEL,
           &ref_level) && MATCH_GAIN (ref_level, 83.),
       "Incorrect reference level tag");
-  gst_tag_list_free (tag_list);
+  gst_tag_list_unref (tag_list);
 
   cleanup_rganalysis (element);
 }
@@ -1503,6 +1637,8 @@
 
   set_playing_state (element);
   for (i = G_N_ELEMENTS (supported_rates); i--;) {
+    send_flush_events (element);
+    send_segment_event (element);
     accumulator = 0;
     for (j = 0; j < 4; j++)
       push_buffer (test_buffer_square_float_stereo (&accumulator,
@@ -1520,7 +1656,7 @@
     tag_list = poll_tags (element);
     fail_unless_track_peak (tag_list, 0.25);
     fail_unless_track_gain (tag_list, supported_rates[i].gain);
-    gst_tag_list_free (tag_list);
+    gst_tag_list_unref (tag_list);
   }
 
   cleanup_rganalysis (element);
@@ -1551,7 +1687,7 @@
   fail_unless_track_peak (tag_list, 0.25);                            \
   fail_unless_track_gain (tag_list,                                   \
       get_expected_gain (sample_rate));                               \
-  gst_tag_list_free (tag_list);                                       \
+  gst_tag_list_unref (tag_list);                                       \
                                                                       \
   cleanup_rganalysis (element);                                       \
 }                                                                     \
@@ -1576,7 +1712,7 @@
   fail_unless_track_peak (tag_list, 0.25);                            \
   fail_unless_track_gain (tag_list,                                   \
       get_expected_gain (sample_rate));                               \
-  gst_tag_list_free (tag_list);                                       \
+  gst_tag_list_unref (tag_list);                                       \
                                                                       \
   cleanup_rganalysis (element);                                       \
 }                                                                     \
@@ -1602,7 +1738,7 @@
   fail_unless_track_peak (tag_list, 0.25);                            \
   fail_unless_track_gain (tag_list,                                   \
       get_expected_gain (sample_rate));                               \
-  gst_tag_list_free (tag_list);                                       \
+  gst_tag_list_unref (tag_list);                                       \
                                                                       \
   cleanup_rganalysis (element);                                       \
 }                                                                     \
@@ -1628,7 +1764,7 @@
   fail_unless_track_peak (tag_list, 0.25);                            \
   fail_unless_track_gain (tag_list,                                   \
       get_expected_gain (sample_rate));                               \
-  gst_tag_list_free (tag_list);                                       \
+  gst_tag_list_unref (tag_list);                                       \
                                                                       \
   cleanup_rganalysis (element);                                       \
 }                                                                     \
diff --git a/tests/check/elements/rgvolume.c b/tests/check/elements/rgvolume.c
index 25c6fac..4c09d55 100644
--- a/tests/check/elements/rgvolume.c
+++ b/tests/check/elements/rgvolume.c
@@ -25,7 +25,7 @@
 
 #include <math.h>
 
-GList *events = NULL;
+static GList *events = NULL;
 
 /* For ease of programming we use globals to keep refs for our floating src and
  * sink pads we create; otherwise we always have to do get_pad, get_peer, and
@@ -164,6 +164,43 @@
 }
 
 static void
+clear_last_event (GstEventType type)
+{
+  GList *last = g_list_last (events);
+
+  fail_unless (last != NULL);
+  fail_unless_equals_int (GST_EVENT_TYPE (last->data), type);
+  gst_event_unref (GST_EVENT (last->data));
+  events = g_list_delete_link (events, last);
+}
+
+static void
+send_flush_events (GstElement * element)
+{
+  gboolean res;
+
+  res = gst_pad_push_event (mysrcpad, gst_event_new_flush_start ());
+  fail_unless (res, "flush-start even not handled");
+  clear_last_event (GST_EVENT_FLUSH_START);
+
+  res = gst_pad_push_event (mysrcpad, gst_event_new_flush_stop (TRUE));
+  fail_unless (res, "flush-stop event not handled");
+  clear_last_event (GST_EVENT_FLUSH_STOP);
+}
+
+static void
+send_segment_event (GstElement * element)
+{
+  GstSegment segment;
+  gboolean res;
+
+  gst_segment_init (&segment, GST_FORMAT_TIME);
+  res = gst_pad_push_event (mysrcpad, gst_event_new_segment (&segment));
+  fail_unless (res, "SEGMENT event not handled");
+  clear_last_event (GST_EVENT_SEGMENT);
+}
+
+static void
 send_eos_event (GstElement * element)
 {
   GstEvent *event = gst_event_new_eos ();
@@ -349,7 +386,7 @@
       GST_TAG_TRACK_GAIN, +4.95, GST_TAG_TRACK_PEAK, 0.59463,
       GST_TAG_ALBUM_GAIN, -1.54, GST_TAG_ALBUM_PEAK, 0.693415,
       GST_TAG_ARTIST, "Foobar", NULL);
-  event = gst_event_new_tag ("test", tag_list);
+  event = gst_event_new_tag (tag_list);
   new_event = send_tag_event (element, event);
   gst_event_parse_tag (new_event, &tag_list);
   fail_unless (gst_tag_list_get_string (tag_list, GST_TAG_ARTIST, &artist));
@@ -364,7 +401,7 @@
       GST_TAG_TRACK_GAIN, +4.95, GST_TAG_TRACK_PEAK, 0.59463,
       GST_TAG_ALBUM_GAIN, -1.54, GST_TAG_ALBUM_PEAK, 0.693415,
       GST_TAG_ARTIST, "Foobar", NULL);
-  event = gst_event_new_tag ("test", tag_list);
+  event = gst_event_new_tag (tag_list);
   new_event = send_tag_event (element, event);
   gst_event_parse_tag (new_event, &tag_list);
   fail_unless (gst_tag_list_get_string (tag_list, GST_TAG_ARTIST, &artist));
@@ -392,19 +429,20 @@
   gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
       GST_TAG_TRACK_GAIN, -3.45, GST_TAG_TRACK_PEAK, 1.0,
       GST_TAG_ALBUM_GAIN, +2.09, GST_TAG_ALBUM_PEAK, 1.0, NULL);
-  fail_unless (send_tag_event (element, gst_event_new_tag ("test",
-              tag_list)) == NULL);
+  fail_unless (send_tag_event (element, gst_event_new_tag (tag_list)) == NULL);
   fail_unless_gain (element, -9.45);    /* pre-amp + track gain */
   send_eos_event (element);
 
   g_object_set (element, "album-mode", TRUE, NULL);
 
+  send_flush_events (element);
+  send_segment_event (element);
+
   tag_list = gst_tag_list_new_empty ();
   gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
       GST_TAG_TRACK_GAIN, -3.45, GST_TAG_TRACK_PEAK, 1.0,
       GST_TAG_ALBUM_GAIN, +2.09, GST_TAG_ALBUM_PEAK, 1.0, NULL);
-  fail_unless (send_tag_event (element, gst_event_new_tag ("test",
-              tag_list)) == NULL);
+  fail_unless (send_tag_event (element, gst_event_new_tag (tag_list)) == NULL);
   fail_unless_gain (element, -3.91);    /* pre-amp + album gain */
 
   /* Switching back to track mode in the middle of a stream: */
@@ -436,12 +474,13 @@
   gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
       GST_TAG_TRACK_GAIN, +3.5, GST_TAG_TRACK_PEAK, 1.0,
       GST_TAG_ALBUM_GAIN, -0.5, GST_TAG_ALBUM_PEAK, 1.0, NULL);
-  fail_unless (send_tag_event (element, gst_event_new_tag ("test",
-              tag_list)) == NULL);
+  fail_unless (send_tag_event (element, gst_event_new_tag (tag_list)) == NULL);
   fail_unless_gain (element, -2.50);    /* pre-amp + track gain */
   send_eos_event (element);
 
   /* Now a track completely missing tags. */
+  send_flush_events (element);
+  send_segment_event (element);
 
   fail_unless_gain (element, -9.00);    /* pre-amp + fallback-gain */
 
@@ -453,6 +492,8 @@
 
   /* Verify that result gain is set to +0.00 with pre-amp + fallback-gain >
    * +0.00 and no headroom. */
+  send_flush_events (element);
+  send_segment_event (element);
 
   g_object_set (element, "fallback-gain", +12.00, "headroom", +0.00, NULL);
   fail_unless_target_gain (element, +6.00);     /* pre-amp + fallback-gain */
@@ -481,8 +522,7 @@
   tag_list = gst_tag_list_new_empty ();
   gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
       GST_TAG_TRACK_GAIN, +2.11, GST_TAG_TRACK_PEAK, 1.0, NULL);
-  fail_unless (send_tag_event (element, gst_event_new_tag ("test",
-              tag_list)) == NULL);
+  fail_unless (send_tag_event (element, gst_event_new_tag (tag_list)) == NULL);
   fail_unless_gain (element, -3.89);    /* pre-amp + track gain */
 
   send_eos_event (element);
@@ -509,8 +549,7 @@
   tag_list = gst_tag_list_new_empty ();
   gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
       GST_TAG_ALBUM_GAIN, +3.73, GST_TAG_ALBUM_PEAK, 1.0, NULL);
-  fail_unless (send_tag_event (element, gst_event_new_tag ("test",
-              tag_list)) == NULL);
+  fail_unless (send_tag_event (element, gst_event_new_tag (tag_list)) == NULL);
   fail_unless_gain (element, -2.27);    /* pre-amp + album gain */
 
   send_eos_event (element);
@@ -534,29 +573,32 @@
   tag_list = gst_tag_list_new_empty ();
   gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
       GST_TAG_TRACK_GAIN, +3.50, GST_TAG_TRACK_PEAK, 1.0, NULL);
-  fail_unless (send_tag_event (element, gst_event_new_tag ("test",
-              tag_list)) == NULL);
+  fail_unless (send_tag_event (element, gst_event_new_tag (tag_list)) == NULL);
   fail_unless_target_gain (element, +3.50);     /* pre-amp + track gain */
   fail_unless_result_gain (element, +0.00);
   send_eos_event (element);
 
+  send_flush_events (element);
+  send_segment_event (element);
+
   g_object_set (element, "headroom", +2.00, NULL);
   tag_list = gst_tag_list_new_empty ();
   gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
       GST_TAG_TRACK_GAIN, +9.18, GST_TAG_TRACK_PEAK, 0.687149, NULL);
-  fail_unless (send_tag_event (element, gst_event_new_tag ("test",
-              tag_list)) == NULL);
+  fail_unless (send_tag_event (element, gst_event_new_tag (tag_list)) == NULL);
   fail_unless_target_gain (element, +9.18);     /* pre-amp + track gain */
   /* Result is 20. * log10 (1. / peak) + headroom. */
   fail_unless_result_gain (element, 5.2589816238303335);
   send_eos_event (element);
 
+  send_flush_events (element);
+  send_segment_event (element);
+
   g_object_set (element, "album-mode", TRUE, NULL);
   tag_list = gst_tag_list_new_empty ();
   gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
       GST_TAG_ALBUM_GAIN, +5.50, GST_TAG_ALBUM_PEAK, 1.0, NULL);
-  fail_unless (send_tag_event (element, gst_event_new_tag ("test",
-              tag_list)) == NULL);
+  fail_unless (send_tag_event (element, gst_event_new_tag (tag_list)) == NULL);
   fail_unless_target_gain (element, +5.50);     /* pre-amp + album gain */
   fail_unless_result_gain (element, +2.00);     /* headroom */
   send_eos_event (element);
@@ -582,8 +624,7 @@
   gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
       GST_TAG_TRACK_GAIN, 0.00, GST_TAG_TRACK_PEAK, 0.2,
       GST_TAG_REFERENCE_LEVEL, 83., NULL);
-  fail_unless (send_tag_event (element, gst_event_new_tag ("test",
-              tag_list)) == NULL);
+  fail_unless (send_tag_event (element, gst_event_new_tag (tag_list)) == NULL);
   /* Because our authorative reference is 89 dB, we bump it up by +6 dB. */
   fail_unless_gain (element, +6.00);    /* pre-amp + track gain */
   send_eos_event (element);
@@ -591,14 +632,15 @@
   g_object_set (element, "album-mode", TRUE, NULL);
 
   /* Same as above, but with album gain. */
+  send_flush_events (element);
+  send_segment_event (element);
 
   tag_list = gst_tag_list_new_empty ();
   gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
       GST_TAG_TRACK_GAIN, 1.23, GST_TAG_TRACK_PEAK, 0.1,
       GST_TAG_ALBUM_GAIN, 0.00, GST_TAG_ALBUM_PEAK, 0.2,
       GST_TAG_REFERENCE_LEVEL, 83., NULL);
-  fail_unless (send_tag_event (element, gst_event_new_tag ("test",
-              tag_list)) == NULL);
+  fail_unless (send_tag_event (element, gst_event_new_tag (tag_list)) == NULL);
   fail_unless_gain (element, +6.00);    /* pre-amp + album gain */
 
   cleanup_rgvolume (element);
diff --git a/tests/check/elements/rtp-payloading.c b/tests/check/elements/rtp-payloading.c
index ab3fbab..7b04502 100644
--- a/tests/check/elements/rtp-payloading.c
+++ b/tests/check/elements/rtp-payloading.c
@@ -478,8 +478,28 @@
 GST_START_TEST (rtp_h263p)
 {
   rtp_pipeline_test (rtp_h263p_frame_data, rtp_h263p_frame_data_size,
-      rtp_h263p_frame_count, "video/x-h263,variant=(string)itu", "rtph263ppay",
-      "rtph263pdepay", 0, 0, FALSE);
+      rtp_h263p_frame_count, "video/x-h263,variant=(string)itu,"
+      "h263version=(string)h263", "rtph263ppay", "rtph263pdepay", 0, 0, FALSE);
+
+  /* payloader should accept any input that matches the template caps
+   * if there's just a udpsink or fakesink downstream */
+  rtp_pipeline_test (rtp_h263p_frame_data, rtp_h263p_frame_data_size,
+      rtp_h263p_frame_count, "video/x-h263,variant=(string)itu,"
+      "h263version=(string)h263", "rtph263ppay", "identity", 0, 0, FALSE);
+
+  /* default output of avenc_h263p */
+  rtp_pipeline_test (rtp_h263p_frame_data, rtp_h263p_frame_data_size,
+      rtp_h263p_frame_count, "video/x-h263,variant=(string)itu,"
+      "h263version=(string)h263p, annex-f=(boolean)true, "
+      "annex-j=(boolean)true, annex-i=(boolean)true, annex-t=(boolean)true",
+      "rtph263ppay", "identity", 0, 0, FALSE);
+
+  /* pay ! depay should also work with any input */
+  rtp_pipeline_test (rtp_h263p_frame_data, rtp_h263p_frame_data_size,
+      rtp_h263p_frame_count, "video/x-h263,variant=(string)itu,"
+      "h263version=(string)h263p, annex-f=(boolean)true, "
+      "annex-j=(boolean)true, annex-i=(boolean)true, annex-t=(boolean)true",
+      "rtph263ppay", "rtph263pdepay", 0, 0, FALSE);
 }
 
 GST_END_TEST;
diff --git a/tests/check/pipelines/tagschecking.c b/tests/check/pipelines/tagschecking.c
index dc4b11c..00a0068 100644
--- a/tests/check/pipelines/tagschecking.c
+++ b/tests/check/pipelines/tagschecking.c
@@ -55,10 +55,10 @@
           ntl = gst_tag_list_merge (received_tags, tl, GST_TAG_MERGE_PREPEND);
           if (ntl) {
             GST_LOG ("taglists merged: %" GST_PTR_FORMAT, ntl);
-            gst_tag_list_free (received_tags);
+            gst_tag_list_unref (received_tags);
             received_tags = ntl;
           }
-          gst_tag_list_free (tl);
+          gst_tag_list_unref (tl);
         }
       }
       break;
@@ -115,7 +115,7 @@
   sent_tags = gst_tag_list_new_from_string (tag_str);
   fail_unless (sent_tags != NULL);
   gst_tag_setter_merge_tags (setter, sent_tags, GST_TAG_MERGE_REPLACE);
-  gst_tag_list_free (sent_tags);
+  gst_tag_list_unref (sent_tags);
 
   gst_element_set_state (pipeline, GST_STATE_PLAYING);
   g_main_loop_run (loop);
@@ -155,7 +155,7 @@
   GST_DEBUG ("testing tags : %s", tag_str);
 
   if (received_tags) {
-    gst_tag_list_free (received_tags);
+    gst_tag_list_unref (received_tags);
     received_tags = NULL;
   }
 
@@ -232,9 +232,9 @@
     fail_unless (found, "tag item %s is lost", name_sent);
   }
 
-  gst_tag_list_free (received_tags);
+  gst_tag_list_unref (received_tags);
   received_tags = NULL;
-  gst_tag_list_free (sent_tags);
+  gst_tag_list_unref (sent_tags);
 
   gst_element_set_state (pipeline, GST_STATE_NULL);
 
@@ -288,7 +288,7 @@
   }
   test_tags (COMMON_TAGS, H264_CAPS, "qtmux", "qtdemux");
   test_tags (COMMON_TAGS, H264_CAPS, "mp4mux", "qtdemux");
-  test_tags (COMMON_TAGS, H264_CAPS, "gppmux", "qtdemux");
+  test_tags (COMMON_TAGS, H264_CAPS, "3gppmux", "qtdemux");
 }
 
 GST_END_TEST;
@@ -310,7 +310,7 @@
   }
   test_tags (GEO_LOCATION_TAGS, H264_CAPS, "qtmux", "qtdemux");
   test_tags (GEO_LOCATION_TAGS, H264_CAPS, "mp4mux", "qtdemux");
-  test_tags (GEO_LOCATION_TAGS, H264_CAPS, "gppmux", "qtdemux");
+  test_tags (GEO_LOCATION_TAGS, H264_CAPS, "3gppmux", "qtdemux");
 }
 
 GST_END_TEST;
@@ -329,7 +329,7 @@
 
   test_tags (USER_TAGS, H264_CAPS, "qtmux", "qtdemux");
   test_tags (USER_TAGS, H264_CAPS, "mp4mux", "qtdemux");
-  test_tags (USER_TAGS, H264_CAPS, "gppmux", "qtdemux");
+  test_tags (USER_TAGS, H264_CAPS, "3gppmux", "qtdemux");
 }
 
 GST_END_TEST;
diff --git a/tests/examples/Makefile.in b/tests/examples/Makefile.in
index c02599e..2f171fb 100644
--- a/tests/examples/Makefile.in
+++ b/tests/examples/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -225,7 +225,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/tests/examples/audiofx/Makefile.in b/tests/examples/audiofx/Makefile.in
index a72a6ac..cf4240f 100644
--- a/tests/examples/audiofx/Makefile.in
+++ b/tests/examples/audiofx/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -230,7 +230,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/tests/examples/cairo/Makefile.in b/tests/examples/cairo/Makefile.in
index 99c52e9..450210a 100644
--- a/tests/examples/cairo/Makefile.in
+++ b/tests/examples/cairo/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -216,7 +216,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/tests/examples/equalizer/Makefile.in b/tests/examples/equalizer/Makefile.in
index 522a4f9..c0a9ad1 100644
--- a/tests/examples/equalizer/Makefile.in
+++ b/tests/examples/equalizer/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -216,7 +216,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/tests/examples/equalizer/demo.c b/tests/examples/equalizer/demo.c
index fe0e513..46db870 100644
--- a/tests/examples/equalizer/demo.c
+++ b/tests/examples/equalizer/demo.c
@@ -177,7 +177,7 @@
   appwindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
   g_signal_connect (G_OBJECT (appwindow), "destroy",
       G_CALLBACK (on_window_destroy), NULL);
-  vbox = gtk_vbox_new (FALSE, 6);
+  vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
 
   drawingarea = gtk_drawing_area_new ();
   gtk_widget_set_size_request (drawingarea, spect_bands, spect_height);
@@ -185,7 +185,7 @@
       G_CALLBACK (on_configure_event), (gpointer) spectrum);
   gtk_box_pack_start (GTK_BOX (vbox), drawingarea, TRUE, TRUE, 0);
 
-  hbox = gtk_hbox_new (FALSE, 20);
+  hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 20);
 
   for (i = 0; i < NBANDS; i++) {
     GObject *band;
@@ -205,9 +205,10 @@
     frame = gtk_frame_new (label);
     g_free (label);
 
-    scales_hbox = gtk_hbox_new (FALSE, 6);
+    scales_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
 
-    widget = gtk_vscale_new_with_range (-24.0, 12.0, 0.5);
+    widget = gtk_scale_new_with_range (GTK_ORIENTATION_VERTICAL,
+        -24.0, 12.0, 0.5);
     gtk_scale_set_draw_value (GTK_SCALE (widget), TRUE);
     gtk_scale_set_value_pos (GTK_SCALE (widget), GTK_POS_TOP);
     gtk_range_set_value (GTK_RANGE (widget), gain);
@@ -216,7 +217,8 @@
         G_CALLBACK (on_gain_changed), (gpointer) band);
     gtk_box_pack_start (GTK_BOX (scales_hbox), widget, FALSE, FALSE, 0);
 
-    widget = gtk_vscale_new_with_range (0.0, 20000.0, 5.0);
+    widget = gtk_scale_new_with_range (GTK_ORIENTATION_VERTICAL,
+        0.0, 20000.0, 5.0);
     gtk_scale_set_draw_value (GTK_SCALE (widget), TRUE);
     gtk_scale_set_value_pos (GTK_SCALE (widget), GTK_POS_TOP);
     gtk_range_set_value (GTK_RANGE (widget), bw);
@@ -225,7 +227,8 @@
         G_CALLBACK (on_bandwidth_changed), (gpointer) band);
     gtk_box_pack_start (GTK_BOX (scales_hbox), widget, TRUE, TRUE, 0);
 
-    widget = gtk_vscale_new_with_range (20.0, 20000.0, 5.0);
+    widget = gtk_scale_new_with_range (GTK_ORIENTATION_VERTICAL,
+        20.0, 20000.0, 5.0);
     gtk_scale_set_draw_value (GTK_SCALE (widget), TRUE);
     gtk_scale_set_value_pos (GTK_SCALE (widget), GTK_POS_TOP);
     gtk_range_set_value (GTK_RANGE (widget), freq);
diff --git a/tests/examples/jack/Makefile.in b/tests/examples/jack/Makefile.in
index 0dc4ec9..36c1a84 100644
--- a/tests/examples/jack/Makefile.in
+++ b/tests/examples/jack/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -215,7 +215,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/tests/examples/level/Makefile.in b/tests/examples/level/Makefile.in
index 9c5a356..6f14141 100644
--- a/tests/examples/level/Makefile.in
+++ b/tests/examples/level/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -216,7 +216,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/tests/examples/pulse/Makefile.in b/tests/examples/pulse/Makefile.in
index 2bbc952..e5aa75d 100644
--- a/tests/examples/pulse/Makefile.in
+++ b/tests/examples/pulse/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -216,7 +216,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/tests/examples/rtp/Makefile.in b/tests/examples/rtp/Makefile.in
index 2b662f6..a6781dc 100644
--- a/tests/examples/rtp/Makefile.in
+++ b/tests/examples/rtp/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -228,7 +228,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/tests/examples/shapewipe/Makefile.in b/tests/examples/shapewipe/Makefile.in
index d343d01..dc47c11 100644
--- a/tests/examples/shapewipe/Makefile.in
+++ b/tests/examples/shapewipe/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -221,7 +221,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/tests/examples/spectrum/Makefile.in b/tests/examples/spectrum/Makefile.in
index d5f62cc..e2624e9 100644
--- a/tests/examples/spectrum/Makefile.in
+++ b/tests/examples/spectrum/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -238,7 +238,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/tests/examples/spectrum/demo-audiotest.c b/tests/examples/spectrum/demo-audiotest.c
index 1095d75..4b5cc00 100644
--- a/tests/examples/spectrum/demo-audiotest.c
+++ b/tests/examples/spectrum/demo-audiotest.c
@@ -192,7 +192,7 @@
         clock_id =
             gst_clock_new_single_shot_id (sync_clock, waittime + basetime);
         gst_clock_id_wait_async (clock_id, delayed_spectrum_update,
-            (gpointer) spect);
+            (gpointer) spect, NULL);
         gst_clock_id_unref (clock_id);
       }
     }
@@ -239,9 +239,9 @@
   appwindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
   g_signal_connect (G_OBJECT (appwindow), "destroy",
       G_CALLBACK (on_window_destroy), NULL);
-  vbox = gtk_vbox_new (FALSE, 6);
+  vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
 
-  hbox = gtk_hbox_new (FALSE, 6);
+  hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
   widget = gtk_check_button_new_with_label ("Fast");
   g_signal_connect (G_OBJECT (widget), "toggled",
       G_CALLBACK (on_fast_slow_mode_changed), (gpointer) spectrum);
@@ -251,7 +251,8 @@
 
   gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
 
-  widget = gtk_hscale_new_with_range (50.0, 20000.0, 10);
+  widget = gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL,
+      50.0, 20000.0, 10);
   gtk_scale_set_draw_value (GTK_SCALE (widget), TRUE);
   gtk_scale_set_value_pos (GTK_SCALE (widget), GTK_POS_TOP);
   gtk_range_set_value (GTK_RANGE (widget), 440.0);
diff --git a/tests/examples/spectrum/demo-osssrc.c b/tests/examples/spectrum/demo-osssrc.c
index f8fee78..9eeb6c6 100644
--- a/tests/examples/spectrum/demo-osssrc.c
+++ b/tests/examples/spectrum/demo-osssrc.c
@@ -145,7 +145,7 @@
         clock_id =
             gst_clock_new_single_shot_id (sync_clock, waittime + basetime);
         gst_clock_id_wait_async (clock_id, delayed_spectrum_update,
-            (gpointer) spect);
+            (gpointer) spect, NULL);
         gst_clock_id_unref (clock_id);
       }
     }
diff --git a/tests/examples/v4l2/Makefile.in b/tests/examples/v4l2/Makefile.in
index 5a0d09f..d0db3e3 100644
--- a/tests/examples/v4l2/Makefile.in
+++ b/tests/examples/v4l2/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -216,7 +216,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/tests/files/Makefile.in b/tests/files/Makefile.in
index 0607f5a..4f66e14 100644
--- a/tests/files/Makefile.in
+++ b/tests/files/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -180,7 +180,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/tests/icles/Makefile.in b/tests/icles/Makefile.in
index 548e346..c28910b 100644
--- a/tests/icles/Makefile.in
+++ b/tests/icles/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -285,7 +285,9 @@
 GIO_LIBS = @GIO_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GLIB_PREFIX = @GLIB_PREFIX@
 GLIB_REQ = @GLIB_REQ@
 GMSGFMT = @GMSGFMT@
diff --git a/tests/icles/gdkpixbufsink-test.c b/tests/icles/gdkpixbufsink-test.c
index a09d9f1..376f67f 100644
--- a/tests/icles/gdkpixbufsink-test.c
+++ b/tests/icles/gdkpixbufsink-test.c
@@ -283,14 +283,14 @@
   g_signal_connect (info->win, "delete-event", G_CALLBACK (gtk_main_quit),
       NULL);
 
-  vbox = gtk_vbox_new (FALSE, 6);
+  vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
   gtk_container_set_border_width (GTK_CONTAINER (vbox), 12);
   gtk_container_add (GTK_CONTAINER (info->win), vbox);
 
   info->img = gtk_image_new ();
   gtk_box_pack_start (GTK_BOX (vbox), info->img, FALSE, FALSE, 6);
 
-  hbox = gtk_hbox_new (FALSE, 6);
+  hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
   gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 6);
 
   info->accurate_cb = gtk_check_button_new_with_label ("accurate seek "
@@ -299,7 +299,8 @@
   g_signal_connect (info->accurate_cb, "toggled",
       G_CALLBACK (accurate_toggled_cb), info);
 
-  info->slider = gtk_hscale_new_with_range (0.0, 1.0, 0.001);
+  info->slider = gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL,
+      0.0, 1.0, 0.001);
   gtk_box_pack_start (GTK_BOX (vbox), info->slider, FALSE, FALSE, 6);
   g_signal_connect (info->slider, "value-changed",
       G_CALLBACK (slider_cb), info);
diff --git a/tests/icles/ximagesrc-test.c b/tests/icles/ximagesrc-test.c
index a01bf65..12ec0dc 100644
--- a/tests/icles/ximagesrc-test.c
+++ b/tests/icles/ximagesrc-test.c
@@ -37,9 +37,7 @@
 main (int argc, char **argv)
 {
   GstElement *pipeline;
-#ifndef G_DISABLE_ASSERT
-  GstState state, pending;
-#endif
+  GstState state;
   GError *error = NULL;
 
   gst_init (&argc, &argv);
@@ -55,9 +53,11 @@
   gst_element_set_state (pipeline, GST_STATE_PLAYING);
 
   /* lets check it gets to PLAYING */
-  g_assert (gst_element_get_state (pipeline, &state, &pending,
-          GST_CLOCK_TIME_NONE) != GST_STATE_CHANGE_FAILURE);
-  g_assert (state == GST_STATE_PLAYING || pending == GST_STATE_PLAYING);
+  if (gst_element_get_state (pipeline, &state, NULL,
+          GST_CLOCK_TIME_NONE) == GST_STATE_CHANGE_FAILURE ||
+      state != GST_STATE_PLAYING) {
+    g_warning ("State change to playing failed");
+  }
 
   /* We want to get out after 5 seconds */
   g_timeout_add (5000, (GSourceFunc) terminate_playback, pipeline);
diff --git a/win32/MANIFEST b/win32/MANIFEST
index cf63177..b3b879f 100644
--- a/win32/MANIFEST
+++ b/win32/MANIFEST
@@ -2,6 +2,12 @@
 win32/common/config.h
 win32/common/gstudp-enumtypes.c
 win32/common/gstudp-enumtypes.h
+win32/common/gstrtpbin-marshal.c
+win32/common/gstrtpbin-marshal.h
+win32/common/tuner-enumtypes.c
+win32/common/tuner-enumtypes.h
+win32/common/tuner-marshal.c
+win32/common/tuner-marshal.h
 win32/vs6/gst_plugins_good.dsw
 win32/vs6/autogen.dsp
 win32/vs6/libgstalaw.dsp
diff --git a/win32/common/config.h b/win32/common/config.h
index 96a3156..29bb487 100644
--- a/win32/common/config.h
+++ b/win32/common/config.h
@@ -58,7 +58,7 @@
 #define GST_PACKAGE_ORIGIN "Unknown package origin"
 
 /* GStreamer package release date/time for plugins as YYYY-MM-DD */
-#define GST_PACKAGE_RELEASE_DATETIME "2012-06-07"
+#define GST_PACKAGE_RELEASE_DATETIME "2012-08-08"
 
 /* struct v4l2_buffer missing */
 #undef GST_V4L2_MISSING_BUFDECL
@@ -366,7 +366,7 @@
 #define PACKAGE_NAME "GStreamer Good Plug-ins"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "GStreamer Good Plug-ins 0.11.92"
+#define PACKAGE_STRING "GStreamer Good Plug-ins 0.11.93"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "gst-plugins-good"
@@ -375,7 +375,7 @@
 #undef PACKAGE_URL
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "0.11.92"
+#define PACKAGE_VERSION "0.11.93"
 
 /* directory where plugins are located */
 #ifdef _DEBUG
@@ -409,7 +409,7 @@
 #undef TARGET_CPU
 
 /* Version number of package */
-#define VERSION "0.11.92"
+#define VERSION "0.11.93"
 
 /* old wavpack API */
 #undef WAVPACK_OLD_API
diff --git a/win32/common/gstrtpbin-marshal.c b/win32/common/gstrtpbin-marshal.c
new file mode 100644
index 0000000..bbea5a4
--- /dev/null
+++ b/win32/common/gstrtpbin-marshal.c
@@ -0,0 +1,424 @@
+#include "gstrtpbin-marshal.h"
+
+#include	<glib-object.h>
+
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v)  g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v)     g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v)    g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v)      g_value_get_int (v)
+#define g_marshal_value_peek_uint(v)     g_value_get_uint (v)
+#define g_marshal_value_peek_long(v)     g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v)    g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v)    g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v)   g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v)     g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v)    g_value_get_flags (v)
+#define g_marshal_value_peek_float(v)    g_value_get_float (v)
+#define g_marshal_value_peek_double(v)   g_value_get_double (v)
+#define g_marshal_value_peek_string(v)   (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v)    g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v)    g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v)  g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v)   g_value_get_object (v)
+#define g_marshal_value_peek_variant(v)  g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ *          Do not access GValues directly in your code. Instead, use the
+ *          g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v)  (v)->data[0].v_int
+#define g_marshal_value_peek_char(v)     (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v)    (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v)      (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v)     (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v)     (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v)    (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v)    (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v)   (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v)     (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v)    (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v)    (v)->data[0].v_float
+#define g_marshal_value_peek_double(v)   (v)->data[0].v_double
+#define g_marshal_value_peek_string(v)   (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v)    (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v)    (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v)  (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v)   (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v)  (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+/* UINT:UINT (gstrtpbin-marshal.list:1) */
+void
+gst_rtp_bin_marshal_UINT__UINT (GClosure * closure,
+    GValue * return_value G_GNUC_UNUSED,
+    guint n_param_values,
+    const GValue * param_values,
+    gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data)
+{
+  typedef guint (*GMarshalFunc_UINT__UINT) (gpointer data1,
+      guint arg_1, gpointer data2);
+  register GMarshalFunc_UINT__UINT callback;
+  register GCClosure *cc = (GCClosure *) closure;
+  register gpointer data1, data2;
+  guint v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 2);
+
+  if (G_CCLOSURE_SWAP_DATA (closure)) {
+    data1 = closure->data;
+    data2 = g_value_peek_pointer (param_values + 0);
+  } else {
+    data1 = g_value_peek_pointer (param_values + 0);
+    data2 = closure->data;
+  }
+  callback =
+      (GMarshalFunc_UINT__UINT) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+      g_marshal_value_peek_uint (param_values + 1), data2);
+
+  g_value_set_uint (return_value, v_return);
+}
+
+/* BOXED:UINT (gstrtpbin-marshal.list:2) */
+void
+gst_rtp_bin_marshal_BOXED__UINT (GClosure * closure,
+    GValue * return_value G_GNUC_UNUSED,
+    guint n_param_values,
+    const GValue * param_values,
+    gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data)
+{
+  typedef gpointer (*GMarshalFunc_BOXED__UINT) (gpointer data1,
+      guint arg_1, gpointer data2);
+  register GMarshalFunc_BOXED__UINT callback;
+  register GCClosure *cc = (GCClosure *) closure;
+  register gpointer data1, data2;
+  gpointer v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 2);
+
+  if (G_CCLOSURE_SWAP_DATA (closure)) {
+    data1 = closure->data;
+    data2 = g_value_peek_pointer (param_values + 0);
+  } else {
+    data1 = g_value_peek_pointer (param_values + 0);
+    data2 = closure->data;
+  }
+  callback =
+      (GMarshalFunc_BOXED__UINT) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+      g_marshal_value_peek_uint (param_values + 1), data2);
+
+  g_value_take_boxed (return_value, v_return);
+}
+
+/* BOXED:UINT,UINT (gstrtpbin-marshal.list:3) */
+void
+gst_rtp_bin_marshal_BOXED__UINT_UINT (GClosure * closure,
+    GValue * return_value G_GNUC_UNUSED,
+    guint n_param_values,
+    const GValue * param_values,
+    gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data)
+{
+  typedef gpointer (*GMarshalFunc_BOXED__UINT_UINT) (gpointer data1,
+      guint arg_1, guint arg_2, gpointer data2);
+  register GMarshalFunc_BOXED__UINT_UINT callback;
+  register GCClosure *cc = (GCClosure *) closure;
+  register gpointer data1, data2;
+  gpointer v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure)) {
+    data1 = closure->data;
+    data2 = g_value_peek_pointer (param_values + 0);
+  } else {
+    data1 = g_value_peek_pointer (param_values + 0);
+    data2 = closure->data;
+  }
+  callback =
+      (GMarshalFunc_BOXED__UINT_UINT) (marshal_data ? marshal_data :
+      cc->callback);
+
+  v_return = callback (data1,
+      g_marshal_value_peek_uint (param_values + 1),
+      g_marshal_value_peek_uint (param_values + 2), data2);
+
+  g_value_take_boxed (return_value, v_return);
+}
+
+/* OBJECT:UINT (gstrtpbin-marshal.list:4) */
+void
+gst_rtp_bin_marshal_OBJECT__UINT (GClosure * closure,
+    GValue * return_value G_GNUC_UNUSED,
+    guint n_param_values,
+    const GValue * param_values,
+    gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data)
+{
+  typedef GObject *(*GMarshalFunc_OBJECT__UINT) (gpointer data1,
+      guint arg_1, gpointer data2);
+  register GMarshalFunc_OBJECT__UINT callback;
+  register GCClosure *cc = (GCClosure *) closure;
+  register gpointer data1, data2;
+  GObject *v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 2);
+
+  if (G_CCLOSURE_SWAP_DATA (closure)) {
+    data1 = closure->data;
+    data2 = g_value_peek_pointer (param_values + 0);
+  } else {
+    data1 = g_value_peek_pointer (param_values + 0);
+    data2 = closure->data;
+  }
+  callback =
+      (GMarshalFunc_OBJECT__UINT) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+      g_marshal_value_peek_uint (param_values + 1), data2);
+
+  g_value_take_object (return_value, v_return);
+}
+
+/* VOID:UINT,OBJECT (gstrtpbin-marshal.list:5) */
+void
+gst_rtp_bin_marshal_VOID__UINT_OBJECT (GClosure * closure,
+    GValue * return_value G_GNUC_UNUSED,
+    guint n_param_values,
+    const GValue * param_values,
+    gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__UINT_OBJECT) (gpointer data1,
+      guint arg_1, gpointer arg_2, gpointer data2);
+  register GMarshalFunc_VOID__UINT_OBJECT callback;
+  register GCClosure *cc = (GCClosure *) closure;
+  register gpointer data1, data2;
+
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure)) {
+    data1 = closure->data;
+    data2 = g_value_peek_pointer (param_values + 0);
+  } else {
+    data1 = g_value_peek_pointer (param_values + 0);
+    data2 = closure->data;
+  }
+  callback =
+      (GMarshalFunc_VOID__UINT_OBJECT) (marshal_data ? marshal_data :
+      cc->callback);
+
+  callback (data1,
+      g_marshal_value_peek_uint (param_values + 1),
+      g_marshal_value_peek_object (param_values + 2), data2);
+}
+
+/* VOID:UINT (gstrtpbin-marshal.list:6) */
+
+/* VOID:UINT,UINT (gstrtpbin-marshal.list:7) */
+void
+gst_rtp_bin_marshal_VOID__UINT_UINT (GClosure * closure,
+    GValue * return_value G_GNUC_UNUSED,
+    guint n_param_values,
+    const GValue * param_values,
+    gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__UINT_UINT) (gpointer data1,
+      guint arg_1, guint arg_2, gpointer data2);
+  register GMarshalFunc_VOID__UINT_UINT callback;
+  register GCClosure *cc = (GCClosure *) closure;
+  register gpointer data1, data2;
+
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure)) {
+    data1 = closure->data;
+    data2 = g_value_peek_pointer (param_values + 0);
+  } else {
+    data1 = g_value_peek_pointer (param_values + 0);
+    data2 = closure->data;
+  }
+  callback =
+      (GMarshalFunc_VOID__UINT_UINT) (marshal_data ? marshal_data :
+      cc->callback);
+
+  callback (data1,
+      g_marshal_value_peek_uint (param_values + 1),
+      g_marshal_value_peek_uint (param_values + 2), data2);
+}
+
+/* VOID:OBJECT,OBJECT (gstrtpbin-marshal.list:8) */
+void
+gst_rtp_bin_marshal_VOID__OBJECT_OBJECT (GClosure * closure,
+    GValue * return_value G_GNUC_UNUSED,
+    guint n_param_values,
+    const GValue * param_values,
+    gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__OBJECT_OBJECT) (gpointer data1,
+      gpointer arg_1, gpointer arg_2, gpointer data2);
+  register GMarshalFunc_VOID__OBJECT_OBJECT callback;
+  register GCClosure *cc = (GCClosure *) closure;
+  register gpointer data1, data2;
+
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure)) {
+    data1 = closure->data;
+    data2 = g_value_peek_pointer (param_values + 0);
+  } else {
+    data1 = g_value_peek_pointer (param_values + 0);
+    data2 = closure->data;
+  }
+  callback =
+      (GMarshalFunc_VOID__OBJECT_OBJECT) (marshal_data ? marshal_data :
+      cc->callback);
+
+  callback (data1,
+      g_marshal_value_peek_object (param_values + 1),
+      g_marshal_value_peek_object (param_values + 2), data2);
+}
+
+/* UINT64:BOOL,UINT64 (gstrtpbin-marshal.list:9) */
+void
+gst_rtp_bin_marshal_UINT64__BOOLEAN_UINT64 (GClosure * closure,
+    GValue * return_value G_GNUC_UNUSED,
+    guint n_param_values,
+    const GValue * param_values,
+    gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data)
+{
+  typedef guint64 (*GMarshalFunc_UINT64__BOOLEAN_UINT64) (gpointer data1,
+      gboolean arg_1, guint64 arg_2, gpointer data2);
+  register GMarshalFunc_UINT64__BOOLEAN_UINT64 callback;
+  register GCClosure *cc = (GCClosure *) closure;
+  register gpointer data1, data2;
+  guint64 v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure)) {
+    data1 = closure->data;
+    data2 = g_value_peek_pointer (param_values + 0);
+  } else {
+    data1 = g_value_peek_pointer (param_values + 0);
+    data2 = closure->data;
+  }
+  callback =
+      (GMarshalFunc_UINT64__BOOLEAN_UINT64) (marshal_data ? marshal_data :
+      cc->callback);
+
+  v_return = callback (data1,
+      g_marshal_value_peek_boolean (param_values + 1),
+      g_marshal_value_peek_uint64 (param_values + 2), data2);
+
+  g_value_set_uint64 (return_value, v_return);
+}
+
+/* VOID:UINT64 (gstrtpbin-marshal.list:10) */
+void
+gst_rtp_bin_marshal_VOID__UINT64 (GClosure * closure,
+    GValue * return_value G_GNUC_UNUSED,
+    guint n_param_values,
+    const GValue * param_values,
+    gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__UINT64) (gpointer data1,
+      guint64 arg_1, gpointer data2);
+  register GMarshalFunc_VOID__UINT64 callback;
+  register GCClosure *cc = (GCClosure *) closure;
+  register gpointer data1, data2;
+
+  g_return_if_fail (n_param_values == 2);
+
+  if (G_CCLOSURE_SWAP_DATA (closure)) {
+    data1 = closure->data;
+    data2 = g_value_peek_pointer (param_values + 0);
+  } else {
+    data1 = g_value_peek_pointer (param_values + 0);
+    data2 = closure->data;
+  }
+  callback =
+      (GMarshalFunc_VOID__UINT64) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1, g_marshal_value_peek_uint64 (param_values + 1), data2);
+}
+
+/* BOOL:BOXED,BOOL (gstrtpbin-marshal.list:11) */
+void
+gst_rtp_bin_marshal_BOOLEAN__BOXED_BOOLEAN (GClosure * closure,
+    GValue * return_value G_GNUC_UNUSED,
+    guint n_param_values,
+    const GValue * param_values,
+    gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__BOXED_BOOLEAN) (gpointer data1,
+      gpointer arg_1, gboolean arg_2, gpointer data2);
+  register GMarshalFunc_BOOLEAN__BOXED_BOOLEAN callback;
+  register GCClosure *cc = (GCClosure *) closure;
+  register gpointer data1, data2;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure)) {
+    data1 = closure->data;
+    data2 = g_value_peek_pointer (param_values + 0);
+  } else {
+    data1 = g_value_peek_pointer (param_values + 0);
+    data2 = closure->data;
+  }
+  callback =
+      (GMarshalFunc_BOOLEAN__BOXED_BOOLEAN) (marshal_data ? marshal_data :
+      cc->callback);
+
+  v_return = callback (data1,
+      g_marshal_value_peek_boxed (param_values + 1),
+      g_marshal_value_peek_boolean (param_values + 2), data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+/* VOID:UINT,UINT,UINT,UINT,BOXED (gstrtpbin-marshal.list:12) */
+void
+gst_rtp_bin_marshal_VOID__UINT_UINT_UINT_UINT_BOXED (GClosure * closure,
+    GValue * return_value G_GNUC_UNUSED,
+    guint n_param_values,
+    const GValue * param_values,
+    gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__UINT_UINT_UINT_UINT_BOXED) (gpointer data1,
+      guint arg_1,
+      guint arg_2, guint arg_3, guint arg_4, gpointer arg_5, gpointer data2);
+  register GMarshalFunc_VOID__UINT_UINT_UINT_UINT_BOXED callback;
+  register GCClosure *cc = (GCClosure *) closure;
+  register gpointer data1, data2;
+
+  g_return_if_fail (n_param_values == 6);
+
+  if (G_CCLOSURE_SWAP_DATA (closure)) {
+    data1 = closure->data;
+    data2 = g_value_peek_pointer (param_values + 0);
+  } else {
+    data1 = g_value_peek_pointer (param_values + 0);
+    data2 = closure->data;
+  }
+  callback =
+      (GMarshalFunc_VOID__UINT_UINT_UINT_UINT_BOXED) (marshal_data ?
+      marshal_data : cc->callback);
+
+  callback (data1,
+      g_marshal_value_peek_uint (param_values + 1),
+      g_marshal_value_peek_uint (param_values + 2),
+      g_marshal_value_peek_uint (param_values + 3),
+      g_marshal_value_peek_uint (param_values + 4),
+      g_marshal_value_peek_boxed (param_values + 5), data2);
+}
diff --git a/win32/common/gstrtpbin-marshal.h b/win32/common/gstrtpbin-marshal.h
new file mode 100644
index 0000000..5a9a196
--- /dev/null
+++ b/win32/common/gstrtpbin-marshal.h
@@ -0,0 +1,105 @@
+
+#ifndef __gst_rtp_bin_marshal_MARSHAL_H__
+#define __gst_rtp_bin_marshal_MARSHAL_H__
+
+#include	<glib-object.h>
+
+G_BEGIN_DECLS
+
+/* UINT:UINT (gstrtpbin-marshal.list:1) */
+extern void gst_rtp_bin_marshal_UINT__UINT (GClosure     *closure,
+                                            GValue       *return_value,
+                                            guint         n_param_values,
+                                            const GValue *param_values,
+                                            gpointer      invocation_hint,
+                                            gpointer      marshal_data);
+
+/* BOXED:UINT (gstrtpbin-marshal.list:2) */
+extern void gst_rtp_bin_marshal_BOXED__UINT (GClosure     *closure,
+                                             GValue       *return_value,
+                                             guint         n_param_values,
+                                             const GValue *param_values,
+                                             gpointer      invocation_hint,
+                                             gpointer      marshal_data);
+
+/* BOXED:UINT,UINT (gstrtpbin-marshal.list:3) */
+extern void gst_rtp_bin_marshal_BOXED__UINT_UINT (GClosure     *closure,
+                                                  GValue       *return_value,
+                                                  guint         n_param_values,
+                                                  const GValue *param_values,
+                                                  gpointer      invocation_hint,
+                                                  gpointer      marshal_data);
+
+/* OBJECT:UINT (gstrtpbin-marshal.list:4) */
+extern void gst_rtp_bin_marshal_OBJECT__UINT (GClosure     *closure,
+                                              GValue       *return_value,
+                                              guint         n_param_values,
+                                              const GValue *param_values,
+                                              gpointer      invocation_hint,
+                                              gpointer      marshal_data);
+
+/* VOID:UINT,OBJECT (gstrtpbin-marshal.list:5) */
+extern void gst_rtp_bin_marshal_VOID__UINT_OBJECT (GClosure     *closure,
+                                                   GValue       *return_value,
+                                                   guint         n_param_values,
+                                                   const GValue *param_values,
+                                                   gpointer      invocation_hint,
+                                                   gpointer      marshal_data);
+
+/* VOID:UINT (gstrtpbin-marshal.list:6) */
+#define gst_rtp_bin_marshal_VOID__UINT	g_cclosure_marshal_VOID__UINT
+
+/* VOID:UINT,UINT (gstrtpbin-marshal.list:7) */
+extern void gst_rtp_bin_marshal_VOID__UINT_UINT (GClosure     *closure,
+                                                 GValue       *return_value,
+                                                 guint         n_param_values,
+                                                 const GValue *param_values,
+                                                 gpointer      invocation_hint,
+                                                 gpointer      marshal_data);
+
+/* VOID:OBJECT,OBJECT (gstrtpbin-marshal.list:8) */
+extern void gst_rtp_bin_marshal_VOID__OBJECT_OBJECT (GClosure     *closure,
+                                                     GValue       *return_value,
+                                                     guint         n_param_values,
+                                                     const GValue *param_values,
+                                                     gpointer      invocation_hint,
+                                                     gpointer      marshal_data);
+
+/* UINT64:BOOL,UINT64 (gstrtpbin-marshal.list:9) */
+extern void gst_rtp_bin_marshal_UINT64__BOOLEAN_UINT64 (GClosure     *closure,
+                                                        GValue       *return_value,
+                                                        guint         n_param_values,
+                                                        const GValue *param_values,
+                                                        gpointer      invocation_hint,
+                                                        gpointer      marshal_data);
+#define gst_rtp_bin_marshal_UINT64__BOOL_UINT64	gst_rtp_bin_marshal_UINT64__BOOLEAN_UINT64
+
+/* VOID:UINT64 (gstrtpbin-marshal.list:10) */
+extern void gst_rtp_bin_marshal_VOID__UINT64 (GClosure     *closure,
+                                              GValue       *return_value,
+                                              guint         n_param_values,
+                                              const GValue *param_values,
+                                              gpointer      invocation_hint,
+                                              gpointer      marshal_data);
+
+/* BOOL:BOXED,BOOL (gstrtpbin-marshal.list:11) */
+extern void gst_rtp_bin_marshal_BOOLEAN__BOXED_BOOLEAN (GClosure     *closure,
+                                                        GValue       *return_value,
+                                                        guint         n_param_values,
+                                                        const GValue *param_values,
+                                                        gpointer      invocation_hint,
+                                                        gpointer      marshal_data);
+#define gst_rtp_bin_marshal_BOOL__BOXED_BOOL	gst_rtp_bin_marshal_BOOLEAN__BOXED_BOOLEAN
+
+/* VOID:UINT,UINT,UINT,UINT,BOXED (gstrtpbin-marshal.list:12) */
+extern void gst_rtp_bin_marshal_VOID__UINT_UINT_UINT_UINT_BOXED (GClosure     *closure,
+                                                                 GValue       *return_value,
+                                                                 guint         n_param_values,
+                                                                 const GValue *param_values,
+                                                                 gpointer      invocation_hint,
+                                                                 gpointer      marshal_data);
+
+G_END_DECLS
+
+#endif /* __gst_rtp_bin_marshal_MARSHAL_H__ */
+
diff --git a/win32/common/tuner-enumtypes.c b/win32/common/tuner-enumtypes.c
new file mode 100644
index 0000000..32a3e17
--- /dev/null
+++ b/win32/common/tuner-enumtypes.c
@@ -0,0 +1,28 @@
+
+
+
+#include "tuner-enumtypes.h"
+
+#include "tuner.h"
+#include "tunernorm.h"
+#include "tunerchannel.h"
+
+/* enumerations from "tunerchannel.h" */
+GType
+gst_tuner_channel_flags_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GFlagsValue values[] = {
+      {GST_TUNER_CHANNEL_INPUT, "GST_TUNER_CHANNEL_INPUT", "input"},
+      {GST_TUNER_CHANNEL_OUTPUT, "GST_TUNER_CHANNEL_OUTPUT", "output"},
+      {GST_TUNER_CHANNEL_FREQUENCY, "GST_TUNER_CHANNEL_FREQUENCY", "frequency"},
+      {GST_TUNER_CHANNEL_AUDIO, "GST_TUNER_CHANNEL_AUDIO", "audio"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_flags_register_static ("GstTunerChannelFlags", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
diff --git a/win32/common/tuner-enumtypes.h b/win32/common/tuner-enumtypes.h
new file mode 100644
index 0000000..e9b9b7a
--- /dev/null
+++ b/win32/common/tuner-enumtypes.h
@@ -0,0 +1,19 @@
+
+
+
+#ifndef __GST_INTERFACES_ENUM_TYPES_H__
+#define __GST_INTERFACES_ENUM_TYPES_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+/* enumerations from "tunerchannel.h" */
+GType gst_tuner_channel_flags_get_type (void);
+#define GST_TYPE_TUNER_CHANNEL_FLAGS (gst_tuner_channel_flags_get_type())
+G_END_DECLS
+
+#endif /* __GST_INTERFACES_ENUM_TYPES_H__ */
+
+
+
diff --git a/win32/common/tuner-marshal.c b/win32/common/tuner-marshal.c
new file mode 100644
index 0000000..7e2cfcf
--- /dev/null
+++ b/win32/common/tuner-marshal.c
@@ -0,0 +1,115 @@
+#include "tuner-marshal.h"
+
+#include	<glib-object.h>
+
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v)  g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v)     g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v)    g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v)      g_value_get_int (v)
+#define g_marshal_value_peek_uint(v)     g_value_get_uint (v)
+#define g_marshal_value_peek_long(v)     g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v)    g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v)    g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v)   g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v)     g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v)    g_value_get_flags (v)
+#define g_marshal_value_peek_float(v)    g_value_get_float (v)
+#define g_marshal_value_peek_double(v)   g_value_get_double (v)
+#define g_marshal_value_peek_string(v)   (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v)    g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v)    g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v)  g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v)   g_value_get_object (v)
+#define g_marshal_value_peek_variant(v)  g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ *          Do not access GValues directly in your code. Instead, use the
+ *          g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v)  (v)->data[0].v_int
+#define g_marshal_value_peek_char(v)     (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v)    (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v)      (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v)     (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v)     (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v)    (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v)    (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v)   (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v)     (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v)    (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v)    (v)->data[0].v_float
+#define g_marshal_value_peek_double(v)   (v)->data[0].v_double
+#define g_marshal_value_peek_string(v)   (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v)    (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v)    (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v)  (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v)   (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v)  (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+/* VOID:OBJECT,ULONG (tuner-marshal.list:1) */
+void
+gst_interfaces_marshal_VOID__OBJECT_ULONG (GClosure * closure,
+    GValue * return_value G_GNUC_UNUSED,
+    guint n_param_values,
+    const GValue * param_values,
+    gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__OBJECT_ULONG) (gpointer data1,
+      gpointer arg_1, gulong arg_2, gpointer data2);
+  register GMarshalFunc_VOID__OBJECT_ULONG callback;
+  register GCClosure *cc = (GCClosure *) closure;
+  register gpointer data1, data2;
+
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure)) {
+    data1 = closure->data;
+    data2 = g_value_peek_pointer (param_values + 0);
+  } else {
+    data1 = g_value_peek_pointer (param_values + 0);
+    data2 = closure->data;
+  }
+  callback =
+      (GMarshalFunc_VOID__OBJECT_ULONG) (marshal_data ? marshal_data :
+      cc->callback);
+
+  callback (data1,
+      g_marshal_value_peek_object (param_values + 1),
+      g_marshal_value_peek_ulong (param_values + 2), data2);
+}
+
+/* VOID:OBJECT,INT (tuner-marshal.list:2) */
+void
+gst_interfaces_marshal_VOID__OBJECT_INT (GClosure * closure,
+    GValue * return_value G_GNUC_UNUSED,
+    guint n_param_values,
+    const GValue * param_values,
+    gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__OBJECT_INT) (gpointer data1,
+      gpointer arg_1, gint arg_2, gpointer data2);
+  register GMarshalFunc_VOID__OBJECT_INT callback;
+  register GCClosure *cc = (GCClosure *) closure;
+  register gpointer data1, data2;
+
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure)) {
+    data1 = closure->data;
+    data2 = g_value_peek_pointer (param_values + 0);
+  } else {
+    data1 = g_value_peek_pointer (param_values + 0);
+    data2 = closure->data;
+  }
+  callback =
+      (GMarshalFunc_VOID__OBJECT_INT) (marshal_data ? marshal_data :
+      cc->callback);
+
+  callback (data1,
+      g_marshal_value_peek_object (param_values + 1),
+      g_marshal_value_peek_int (param_values + 2), data2);
+}
diff --git a/win32/common/tuner-marshal.h b/win32/common/tuner-marshal.h
new file mode 100644
index 0000000..8217545
--- /dev/null
+++ b/win32/common/tuner-marshal.h
@@ -0,0 +1,28 @@
+
+#ifndef __gst_interfaces_marshal_MARSHAL_H__
+#define __gst_interfaces_marshal_MARSHAL_H__
+
+#include	<glib-object.h>
+
+G_BEGIN_DECLS
+
+/* VOID:OBJECT,ULONG (tuner-marshal.list:1) */
+extern void gst_interfaces_marshal_VOID__OBJECT_ULONG (GClosure     *closure,
+                                                       GValue       *return_value,
+                                                       guint         n_param_values,
+                                                       const GValue *param_values,
+                                                       gpointer      invocation_hint,
+                                                       gpointer      marshal_data);
+
+/* VOID:OBJECT,INT (tuner-marshal.list:2) */
+extern void gst_interfaces_marshal_VOID__OBJECT_INT (GClosure     *closure,
+                                                     GValue       *return_value,
+                                                     guint         n_param_values,
+                                                     const GValue *param_values,
+                                                     gpointer      invocation_hint,
+                                                     gpointer      marshal_data);
+
+G_END_DECLS
+
+#endif /* __gst_interfaces_marshal_MARSHAL_H__ */
+