diff --git a/ChangeLog b/ChangeLog
index 735bd58..5c3eb26 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,41 @@
+2003-12-21  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+	* configure.ac:
+	  Improve mpeg2enc detection. This is for distributions that do
+	  ship mjpegtools, but without mpeg2enc. Also does object check
+	  for might there ever be ABI incompatibility.
+	* ext/mpeg2enc/gstmpeg2enc.cc:
+	  Add Andrew as second maintainer (he's helping me), and also add
+	  an error if no caps was set. This happens if I pull before capsnego
+	  and that's something I should solve sometime else.
+	* gst/matroska/matroska-demux.c:
+	(gst_matroska_demux_parse_blockgroup):
+	  Fix time parsing.
+	* gst/matroska/matroska-mux.c: (gst_matroska_mux_audio_pad_link),
+	(gst_matroska_mux_track_header):
+	  Add caps to templates.
+	* gst/mpegaudioparse/gstmpegaudioparse.c: (mp3_sink_factory):
+	  Add mpegversion=1 to prevent confusion with MPEG/AAC.
+	* gst/mpegstream/gstmpegdemux.c:
+	  Remove layer since it causes warnings about unfixed caps.
+	* gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get):
+	  Fix obvious typo (we error out if caps were set, we should of
+	  course error out if *no* caps were set).
+	* sys/oss/gstosselement.c: (gst_osselement_convert):
+	  Fix format conversion, we confused bits/bytes.
+	* sys/oss/gstosselement.h:
+	  Improve documentation for 'bps'.
+	* sys/v4l/TODO:
+	  Remove stuff about plugins that need removing - this was done
+	  ages ago.
+	* sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_init),
+	(gst_v4lmjpegsrc_src_convert), (gst_v4lmjpegsrc_src_query):
+	* sys/v4l/gstv4lsrc.c: (gst_v4lsrc_init), (gst_v4lsrc_src_convert),
+	(gst_v4lsrc_src_query):
+	* sys/v4l2/gstv4l2src.c: (gst_v4l2src_init),
+	(gst_v4l2src_src_convert), (gst_v4l2src_src_query):
+	  Add get_query_types(), get_formats() and query() functions.
+
 2003-12-21  Thomas Vander Stichele  <thomas at apestaart dot org>
 
 	* ChangeLog: moved to gstreamer/docs/random/old/ChangeLog.gst-plugins
diff --git a/configure.ac b/configure.ac
index 2557072..6055d3b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1076,16 +1076,52 @@
 dnl *** mpeg2enc ***
 translit(dnm, m, l) AM_CONDITIONAL(USE_MPEG2ENC, true)
 GST_CHECK_FEATURE(MPEG2ENC, [mpeg2enc], mpeg2enc, [
-  PKG_CHECK_MODULES(MPEG2ENC, mjpegtools >= 1.6.1.92,
-      HAVE_MPEG2ENC="yes", HAVE_MPEG2ENC="no")
-  MPEG2ENC_LIBS="$MPEG2ENC_LIBS -lmpeg2encpp"
-  AC_SUBST(MPEG2ENC_CFLAGS)
-  AC_SUBST(MPEG2ENC_LIBS)
+  HAVE_MPEG2ENC="no"
+  dnl we require a c++ compiler for this one
+  if [ test x$HAVE_CXX = xyes ]; then
+    dnl libmpeg2enc was first included in mjpegtools-1.6.2-rc3 (1.6.1.92)
+    dnl since many distros include mjpegtools specifically without mplex
+    dnl and mpeg2enc, we check for mpeg2enc on its own, too.
+    PKG_CHECK_MODULES(MPEG2ENC, mjpegtools >= 1.6.1.92, [
+      dnl switch over to c++ to test things
+      AC_LANG_CPLUSPLUS
+      OLD_CPPFLAGS="$CPPFLAGS"
+      CPPFLAGS="$CPPFLAGS $MPEG2ENC_CFLAGS"
+      AC_CHECK_HEADER(mpeg2encoder.hh, [
+        MPEG2ENC_LIBS="$MPEG2ENC_LIBS -lmpeg2encpp -lm -lpthread"
+        OLD_LIBS="$LIBS"
+        LIBS="$LIBS $MPEG2ENC_LIBS"
+        AC_MSG_CHECKING([for valid mpeg2enc objects])
+        AC_TRY_RUN([
+#include <mpeg2encoder.hh>
+#include <mpeg2encoptions.hh>
+
+int
+main (int   argc,
+      char *argv[])
+{
+  MPEG2EncOptions *options = new MPEG2EncOptions ();
+  MPEG2Encoder encoder (*options);
+  return 0;
+}
+        ],[
+          HAVE_MPEG2ENC="yes"
+          AC_SUBST(MPEG2ENC_CFLAGS)
+          AC_SUBST(MPEG2ENC_LIBS)
+          AC_MSG_RESULT(yes)
+        ], AC_MSG_RESULT(no))
+        LIBS="$OLD_LIBS"
+      ])
+      CPPFLAGS="$OLD_CPPFLAGS"
+      AC_LANG_C
+    ])
+  fi
 ])
 
 dnl *** mplex ***
 translit(dnm, m, l) AM_CONDITIONAL(USE_MPLEX, true)
 GST_CHECK_FEATURE(MPLEX, [mplex], mplex, [HAVE_MPLEX=$HAVE_CXX])
+])
 
 dnl *** pango ***
 translit(dnm, m, l) AM_CONDITIONAL(USE_PANGO, true)
diff --git a/ext/mpeg2enc/gstmpeg2enc.cc b/ext/mpeg2enc/gstmpeg2enc.cc
index 5e5e028..ecf101a 100644
--- a/ext/mpeg2enc/gstmpeg2enc.cc
+++ b/ext/mpeg2enc/gstmpeg2enc.cc
@@ -135,7 +135,8 @@
     "mpeg2enc video encoder",
     "Codec/Video/Encoder",
     "High-quality MPEG-1/2 video encoder",
-    "Ronald Bultje <rbultje@ronald.bitfreak.net>",
+    "Andrew Stevens <andrew.stevens@nexgo.de>\n"
+    "Ronald Bultje <rbultje@ronald.bitfreak.net>"
   };
   GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
 
@@ -209,11 +210,15 @@
   if (!enc->encoder) {
     GstCaps *caps;
 
+    if (!(caps = GST_PAD_CAPS (enc->sinkpad))) {
+      gst_element_error (element,
+			 "No format given by previous element");
+      return;
+    }
+
     /* create new encoder with these settings */
-    enc->encoder = new GstMpeg2Encoder (enc->options,
-					enc->sinkpad,
-					GST_PAD_CAPS (enc->sinkpad),
-					enc->srcpad);
+    enc->encoder = new GstMpeg2Encoder (enc->options, enc->sinkpad,
+					caps, enc->srcpad);
 
     /* and set caps on other side */
     caps = enc->encoder->getFormat ();
diff --git a/gst/mpegaudioparse/gstmpegaudioparse.c b/gst/mpegaudioparse/gstmpegaudioparse.c
index 0ce2942..2dc6893 100644
--- a/gst/mpegaudioparse/gstmpegaudioparse.c
+++ b/gst/mpegaudioparse/gstmpegaudioparse.c
@@ -60,11 +60,12 @@
   	"sink",
   	GST_PAD_SINK,
   	GST_PAD_ALWAYS,
-  	gst_caps_new (
+  	GST_CAPS_NEW (
   	  "mp3parse_sink",
     	  "audio/mpeg",
-	  NULL),
-	NULL);
+	    "mpegversion", GST_PROPS_INT (1)
+        )
+    );
 };
 
 /* GstMPEGAudioParse signals and args */
diff --git a/sys/v4l2/gstv4l2src.c b/sys/v4l2/gstv4l2src.c
index c006dbc..cd98162 100644
--- a/sys/v4l2/gstv4l2src.c
+++ b/sys/v4l2/gstv4l2src.c
@@ -51,56 +51,67 @@
 	ARG_USE_FIXED_FPS
 };
 
+GST_FORMATS_FUNCTION (GstPad *, gst_v4l2src_get_formats,
+		      GST_FORMAT_TIME, GST_FORMAT_DEFAULT);
+GST_QUERY_TYPE_FUNCTION (GstPad *, gst_v4l2src_get_query_types,
+			 GST_QUERY_POSITION);
 
 /* init functions */
-static void			gst_v4l2src_class_init		(GstV4l2SrcClass *klass);
-static void			gst_v4l2src_base_init		(GstV4l2SrcClass *klass);
-static void			gst_v4l2src_init		(GstV4l2Src      *v4l2src);
+static void	gst_v4l2src_class_init		(GstV4l2SrcClass *klass);
+static void	gst_v4l2src_base_init		(GstV4l2SrcClass *klass);
+static void	gst_v4l2src_init		(GstV4l2Src      *v4l2src);
 
 /* signal functions */
-static void			gst_v4l2src_open		(GstElement      *element,
-								 const gchar     *device);
-static void			gst_v4l2src_close		(GstElement      *element,
-								 const gchar     *device);
+static void	gst_v4l2src_open		(GstElement      *element,
+						 const gchar     *device);
+static void	gst_v4l2src_close		(GstElement      *element,
+						 const gchar     *device);
 
-/* pad/buffer functions */
-static gboolean			gst_v4l2src_srcconvert		(GstPad          *pad,
-								 GstFormat       src_format,
-								 gint64          src_value,
-								 GstFormat       *dest_format,
-								 gint64          *dest_value);
-static GstPadLinkReturn		gst_v4l2src_srcconnect		(GstPad          *pad,
-								 GstCaps         *caps);
-static GstCaps *		gst_v4l2src_getcaps		(GstPad          *pad,
-								 GstCaps         *caps);
-static GstData *		gst_v4l2src_get			(GstPad          *pad);
+/* pad/info functions */
+static gboolean	gst_v4l2src_src_convert		(GstPad          *pad,
+						 GstFormat       src_format,
+						 gint64          src_value,
+						 GstFormat       *dest_format,
+						 gint64          *dest_value);
+static gboolean gst_v4l2src_src_query		(GstPad          *pad,
+						 GstQueryType    type, 
+						 GstFormat       *format,
+						 gint64          *value);
+
+/* buffer functions */
+static GstPadLinkReturn
+		gst_v4l2src_srcconnect		(GstPad          *pad,
+						 GstCaps         *caps);
+static GstCaps *gst_v4l2src_getcaps		(GstPad          *pad,
+						 GstCaps         *caps);
+static GstData *gst_v4l2src_get			(GstPad          *pad);
 
 /* get/set params */
-static void			gst_v4l2src_set_property	(GObject         *object,
-								 guint           prop_id,
-								 const GValue    *value,
-								 GParamSpec      *pspec);
-static void			gst_v4l2src_get_property	(GObject         *object,
-								 guint           prop_id,
-								 GValue          *value,
-								 GParamSpec      *pspec);
+static void	gst_v4l2src_set_property	(GObject         *object,
+						 guint           prop_id,
+						 const GValue    *value,
+						 GParamSpec      *pspec);
+static void	gst_v4l2src_get_property	(GObject         *object,
+						 guint           prop_id,
+						 GValue          *value,
+						 GParamSpec      *pspec);
 
 /* state handling */
-static GstElementStateReturn	gst_v4l2src_change_state	(GstElement      *element);
+static GstElementStateReturn
+		gst_v4l2src_change_state	(GstElement      *element);
 
 /* set_clock function for A/V sync */
-static void			gst_v4l2src_set_clock		(GstElement     *element,
-								 GstClock       *clock);
-
+static void	gst_v4l2src_set_clock		(GstElement     *element,
+						 GstClock       *clock);
 
 /* bufferpool functions */
-static GstBuffer *		gst_v4l2src_buffer_new		(GstBufferPool   *pool,
-								 guint64         offset,
-								 guint           size,
-								 gpointer        user_data);
-static void			gst_v4l2src_buffer_free		(GstBufferPool   *pool,
-								 GstBuffer       *buf,
-								 gpointer        user_data);
+static GstBuffer *gst_v4l2src_buffer_new	(GstBufferPool   *pool,
+						 guint64         offset,
+						 guint           size,
+						 gpointer        user_data);
+static void	gst_v4l2src_buffer_free		(GstBufferPool   *pool,
+						 GstBuffer       *buf,
+						 gpointer        user_data);
 
 
 static GstPadTemplate *src_template;
@@ -220,8 +231,14 @@
 
 	gst_pad_set_get_function(v4l2src->srcpad, gst_v4l2src_get);
 	gst_pad_set_link_function(v4l2src->srcpad, gst_v4l2src_srcconnect);
-	gst_pad_set_convert_function (v4l2src->srcpad, gst_v4l2src_srcconvert);
 	gst_pad_set_getcaps_function (v4l2src->srcpad, gst_v4l2src_getcaps);
+	gst_pad_set_convert_function (v4l2src->srcpad, gst_v4l2src_src_convert);
+	gst_pad_set_formats_function (v4l2src->srcpad,
+				      gst_v4l2src_get_formats);
+	gst_pad_set_query_function (v4l2src->srcpad,
+				    gst_v4l2src_src_query);
+	gst_pad_set_query_type_function (v4l2src->srcpad,
+					 gst_v4l2src_get_query_types);
 
 	v4l2src->bufferpool = gst_buffer_pool_new(NULL, NULL,
 					gst_v4l2src_buffer_new,
@@ -290,13 +307,12 @@
 	return 0.;
 }
 
-
 static gboolean
-gst_v4l2src_srcconvert (GstPad    *pad,
-                        GstFormat  src_format,
-                        gint64     src_value,
-                        GstFormat *dest_format,
-                        gint64    *dest_value)
+gst_v4l2src_src_convert (GstPad    *pad,
+                         GstFormat  src_format,
+                         gint64     src_value,
+                         GstFormat *dest_format,
+                         gint64    *dest_value)
 {
 	GstV4l2Src *v4l2src;
 	gdouble fps;
@@ -334,6 +350,41 @@
 	return TRUE;
 }
 
+static gboolean
+gst_v4l2src_src_query (GstPad      *pad,
+                       GstQueryType type, 
+                       GstFormat   *format,
+                       gint64      *value)
+{
+  GstV4l2Src *v4l2src = GST_V4L2SRC (gst_pad_get_parent (pad));
+  gboolean res = TRUE;
+  gdouble fps;
+
+  if ((fps = gst_v4l2src_get_fps(v4l2src)) == 0)
+    return FALSE;
+
+  switch (type) {
+    case GST_QUERY_POSITION:
+      switch (*format) {
+        case GST_FORMAT_TIME:
+          *value = v4l2src->handled * GST_SECOND / fps;
+          break;
+        case GST_FORMAT_DEFAULT:
+          *value = v4l2src->handled;
+          break;
+        default:
+          res = FALSE;
+          break;
+      }
+      break;
+    default:
+      res = FALSE;
+      break;
+  }
+
+  return res;
+}
+
 
 static GstCaps *
 gst_v4l2src_v4l2fourcc_to_caps (guint32        fourcc,
