diff --git a/configure.ac b/configure.ac
index cfdfa78..c6ec4b2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -313,7 +313,7 @@ dnl Make sure you have a space before and after all plugins
 GST_PLUGINS_NONPORTED=" aiff \
  cdxaparse \
  dccp faceoverlay \
- fieldanalysis freeverb freeze frei0r \
+ fieldanalysis freeverb freeze \
  hdvparse id3tag inter ivfparse jpegformat jp2kdecimator \
  kate liveadder librfb \
  mpegpsmux mve mxf mythtv nsf nuvdemux \
diff --git a/gst/frei0r/Makefile.am b/gst/frei0r/Makefile.am
index 79b23b8..dff76ce 100644
--- a/gst/frei0r/Makefile.am
+++ b/gst/frei0r/Makefile.am
@@ -4,7 +4,7 @@ libgstfrei0r_la_SOURCES = \
 	gstfrei0r.c \
 	gstfrei0rfilter.c \
 	gstfrei0rsrc.c \
-	gstfrei0rmixer.c
+	#gstfrei0rmixer.c
 
 libgstfrei0r_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
 libgstfrei0r_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) \
@@ -12,7 +12,7 @@ libgstfrei0r_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) \
 libgstfrei0r_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstfrei0r_la_LIBTOOLFLAGS = --tag=disable-static
 
-noinst_HEADERS = gstfrei0r.h gstfrei0rfilter.h gstfrei0rsrc.h gstfrei0rmixer.h frei0r.h
+noinst_HEADERS = gstfrei0rmixer.h
 
 Android.mk: Makefile.am $(BUILT_SOURCES)
 	androgenizer \
diff --git a/gst/frei0r/gstfrei0r.c b/gst/frei0r/gstfrei0r.c
index 42d62c1..8792ad3 100644
--- a/gst/frei0r/gstfrei0r.c
+++ b/gst/frei0r/gstfrei0r.c
@@ -27,20 +27,21 @@
 #include "gstfrei0rmixer.h"
 
 #include <string.h>
+#include <gmodule.h>
 
 GST_DEBUG_CATEGORY (frei0r_debug);
 #define GST_CAT_DEFAULT frei0r_debug
 
-static GstStaticCaps bgra8888_caps = GST_STATIC_CAPS (GST_VIDEO_CAPS_BGRA);
-static GstStaticCaps rgba8888_caps = GST_STATIC_CAPS (GST_VIDEO_CAPS_RGBA);
-static GstStaticCaps packed32_caps = GST_STATIC_CAPS (GST_VIDEO_CAPS_BGRA " ; "
-    GST_VIDEO_CAPS_RGBA " ; "
-    GST_VIDEO_CAPS_ABGR " ; "
-    GST_VIDEO_CAPS_ARGB " ; "
-    GST_VIDEO_CAPS_BGRx " ; "
-    GST_VIDEO_CAPS_RGBx " ; "
-    GST_VIDEO_CAPS_xBGR " ; "
-    GST_VIDEO_CAPS_xRGB " ; " GST_VIDEO_CAPS_YUV ("AYUV"));
+static GstStaticCaps bgra8888_caps =
+GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("BGRA"));
+static GstStaticCaps rgba8888_caps =
+GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("RGBA"));
+static GstStaticCaps packed32_caps =
+    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("BGRA") " ; "
+    GST_VIDEO_CAPS_MAKE ("RGBA") " ; " GST_VIDEO_CAPS_MAKE ("ABGR") " ; "
+    GST_VIDEO_CAPS_MAKE ("ARGB") " ; " GST_VIDEO_CAPS_MAKE ("BGRx") " ; "
+    GST_VIDEO_CAPS_MAKE ("RGBx") " ; " GST_VIDEO_CAPS_MAKE ("xBGR") " ; "
+    GST_VIDEO_CAPS_MAKE ("xRGB") " ; " GST_VIDEO_CAPS_MAKE ("AYUV"));
 
 GstCaps *
 gst_frei0r_caps_from_color_model (gint color_model)
@@ -565,7 +566,7 @@ register_plugin (GstPlugin * plugin, const gchar * vendor,
       break;
     case F0R_PLUGIN_TYPE_MIXER2:
     case F0R_PLUGIN_TYPE_MIXER3:
-      ret = gst_frei0r_mixer_register (plugin, vendor, &info, &ftable);
+      /*ret = gst_frei0r_mixer_register (plugin, vendor, &info, &ftable); */
       break;
     default:
       break;
diff --git a/gst/frei0r/gstfrei0rfilter.c b/gst/frei0r/gstfrei0rfilter.c
index b148131..3625343 100644
--- a/gst/frei0r/gstfrei0rfilter.c
+++ b/gst/frei0r/gstfrei0rfilter.c
@@ -26,8 +26,6 @@
 #include "gstfrei0r.h"
 #include "gstfrei0rfilter.h"
 
-#include <gst/controller/gstcontroller.h>
-
 GST_DEBUG_CATEGORY_EXTERN (frei0r_debug);
 #define GST_CAT_DEFAULT frei0r_debug
 
@@ -42,11 +40,14 @@ gst_frei0r_filter_set_caps (GstBaseTransform * trans, GstCaps * incaps,
     GstCaps * outcaps)
 {
   GstFrei0rFilter *self = GST_FREI0R_FILTER (trans);
-  GstVideoFormat fmt;
+  GstVideoInfo info;
 
-  if (!gst_video_format_parse_caps (incaps, &fmt, &self->width, &self->height))
+  if (!gst_video_info_from_caps (&info, incaps))
     return FALSE;
 
+  self->width = info.width;
+  self->height = info.height;
+
   return TRUE;
 }
 
@@ -91,6 +92,7 @@ gst_frei0r_filter_transform (GstBaseTransform * trans, GstBuffer * inbuf,
   GstFrei0rFilter *self = GST_FREI0R_FILTER (trans);
   GstFrei0rFilterClass *klass = GST_FREI0R_FILTER_GET_CLASS (trans);
   gdouble time;
+  GstMapInfo inmap, outmap;
 
   if (G_UNLIKELY (self->width <= 0 || self->height <= 0))
     return GST_FLOW_NOT_NEGOTIATED;
@@ -106,14 +108,20 @@ gst_frei0r_filter_transform (GstBaseTransform * trans, GstBuffer * inbuf,
   time = ((gdouble) GST_BUFFER_TIMESTAMP (inbuf)) / GST_SECOND;
 
   GST_OBJECT_LOCK (self);
+
+  gst_buffer_map (inbuf, &inmap, GST_MAP_READ);
+  gst_buffer_map (outbuf, &outmap, GST_MAP_WRITE);
+
   if (klass->ftable->update2)
     klass->ftable->update2 (self->f0r_instance, time,
-        (const guint32 *) GST_BUFFER_DATA (inbuf), NULL, NULL,
-        (guint32 *) GST_BUFFER_DATA (outbuf));
+        (const guint32 *) inmap.data, NULL, NULL, (guint32 *) outmap.data);
   else
     klass->ftable->update (self->f0r_instance, time,
-        (const guint32 *) GST_BUFFER_DATA (inbuf),
-        (guint32 *) GST_BUFFER_DATA (outbuf));
+        (const guint32 *) inmap.data, (guint32 *) outmap.data);
+
+  gst_buffer_unmap (outbuf, &outmap);
+  gst_buffer_unmap (inbuf, &inmap);
+
   GST_OBJECT_UNLOCK (self);
 
   return GST_FLOW_OK;
diff --git a/gst/frei0r/gstfrei0rsrc.c b/gst/frei0r/gstfrei0rsrc.c
index b3a8347..dc04f86 100644
--- a/gst/frei0r/gstfrei0rsrc.c
+++ b/gst/frei0r/gstfrei0rsrc.c
@@ -26,8 +26,6 @@
 #include "gstfrei0r.h"
 #include "gstfrei0rsrc.h"
 
-#include <gst/controller/gstcontroller.h>
-
 GST_DEBUG_CATEGORY_EXTERN (frei0r_debug);
 #define GST_CAT_DEFAULT frei0r_debug
 
@@ -42,19 +40,25 @@ gst_frei0r_src_set_caps (GstBaseSrc * src, GstCaps * caps)
 {
   GstFrei0rSrc *self = GST_FREI0R_SRC (src);
 
-  if (!gst_video_format_parse_caps (caps, &self->fmt, &self->width,
-          &self->height)
-      || !gst_video_parse_caps_framerate (caps, &self->fps_n, &self->fps_d))
+  if (!gst_video_info_from_caps (&(self->info), caps))
     return FALSE;
 
+  self->width = self->info.width;
+  self->height = self->info.height;
+  self->fps_n = self->info.fps_n;
+  self->fps_d = self->info.fps_d;
+
   return TRUE;
 }
 
 static GstCaps *
-gst_frei0r_src_get_caps (GstBaseSrc * src)
+gst_frei0r_src_get_caps (GstBaseSrc * src, GstCaps * filter)
 {
-  if (GST_PAD_CAPS (GST_BASE_SRC_PAD (src)))
-    return gst_caps_ref (GST_PAD_CAPS (GST_BASE_SRC_PAD (src)));
+  GstCaps *caps;
+
+  caps = gst_pad_get_current_caps (GST_BASE_SRC_PAD (src));
+  if (caps)
+    return (caps);
   else
     return
         gst_caps_copy (gst_pad_get_pad_template_caps (GST_BASE_SRC_PAD (src)));
@@ -70,6 +74,7 @@ gst_frei0r_src_create (GstPushSrc * src, GstBuffer ** buf)
   GstBuffer *outbuf = NULL;
   GstClockTime timestamp;
   gdouble time;
+  GstMapInfo outmap;
 
   *buf = NULL;
 
@@ -85,23 +90,21 @@ gst_frei0r_src_create (GstPushSrc * src, GstBuffer ** buf)
       return GST_FLOW_ERROR;
   }
 
-  newsize = gst_video_format_get_size (self->fmt, self->width, self->height);
+  newsize = self->info.size;
 
   ret =
-      gst_pad_alloc_buffer_and_set_caps (GST_BASE_SRC_PAD (src),
-      GST_BUFFER_OFFSET_NONE, newsize, GST_PAD_CAPS (GST_BASE_SRC_PAD (src)),
+      GST_BASE_SRC_GET_CLASS (src)->alloc (GST_BASE_SRC (src), 0, newsize,
       &outbuf);
+
   if (ret != GST_FLOW_OK)
     return ret;
 
   /* Format might have changed */
-  size = GST_BUFFER_SIZE (outbuf);
-  newsize = gst_video_format_get_size (self->fmt, self->width, self->height);
+  size = gst_buffer_get_size (outbuf);
 
   if (size != newsize) {
     gst_buffer_unref (outbuf);
     outbuf = gst_buffer_new_and_alloc (newsize);
-    gst_buffer_set_caps (outbuf, GST_PAD_CAPS (GST_BASE_SRC_PAD (src)));
   }
 
   GST_BUFFER_TIMESTAMP (outbuf) = timestamp =
@@ -127,12 +130,18 @@ gst_frei0r_src_create (GstPushSrc * src, GstBuffer ** buf)
   time = ((gdouble) GST_BUFFER_TIMESTAMP (outbuf)) / GST_SECOND;
 
   GST_OBJECT_LOCK (self);
+
+  gst_buffer_map (outbuf, &outmap, GST_MAP_WRITE);
+
   if (klass->ftable->update2)
     klass->ftable->update2 (self->f0r_instance, time, NULL, NULL, NULL,
-        (guint32 *) GST_BUFFER_DATA (outbuf));
+        (guint32 *) outmap.data);
   else
     klass->ftable->update (self->f0r_instance, time, NULL,
-        (guint32 *) GST_BUFFER_DATA (outbuf));
+        (guint32 *) outmap.data);
+
+  gst_buffer_unmap (outbuf, &outmap);
+
   GST_OBJECT_UNLOCK (self);
 
   *buf = outbuf;
@@ -161,7 +170,6 @@ gst_frei0r_src_stop (GstBaseSrc * basesrc)
     self->f0r_instance = NULL;
   }
 
-  self->fmt = GST_VIDEO_FORMAT_UNKNOWN;
   self->width = self->height = 0;
   self->fps_n = self->fps_d = 0;
   self->n_frames = 0;
@@ -182,7 +190,7 @@ gst_frei0r_src_do_seek (GstBaseSrc * bsrc, GstSegment * segment)
   GstFrei0rSrc *self = GST_FREI0R_SRC (bsrc);
 
   segment->time = segment->start;
-  time = segment->last_stop;
+  time = segment->position;
 
   /* now move to the time indicated */
   if (self->fps_n) {
@@ -268,8 +276,8 @@ error:
   }
 }
 
-static void
-gst_frei0r_src_src_fixate (GstPad * pad, GstCaps * caps)
+static GstCaps *
+gst_frei0r_src_src_fixate (GstBaseSrc * src, GstCaps * caps)
 {
   GstStructure *structure;
 
@@ -278,6 +286,7 @@ gst_frei0r_src_src_fixate (GstPad * pad, GstCaps * caps)
   gst_structure_fixate_field_nearest_int (structure, "width", 320);
   gst_structure_fixate_field_nearest_int (structure, "height", 240);
   gst_structure_fixate_field_nearest_fraction (structure, "framerate", 30, 1);
+  return caps;
 }
 
 static void
@@ -374,6 +383,7 @@ gst_frei0r_src_class_init (GstFrei0rSrcClass * klass,
   gstbasesrc_class->query = gst_frei0r_src_query;
   gstbasesrc_class->start = gst_frei0r_src_start;
   gstbasesrc_class->stop = gst_frei0r_src_stop;
+  gstbasesrc_class->fixate = GST_DEBUG_FUNCPTR (gst_frei0r_src_src_fixate);
 
   gstpushsrc_class->create = GST_DEBUG_FUNCPTR (gst_frei0r_src_create);
 }
@@ -381,13 +391,9 @@ gst_frei0r_src_class_init (GstFrei0rSrcClass * klass,
 static void
 gst_frei0r_src_init (GstFrei0rSrc * self, GstFrei0rSrcClass * klass)
 {
-  GstPad *pad = GST_BASE_SRC_PAD (self);
-
   self->property_cache =
       gst_frei0r_property_cache_init (klass->properties, klass->n_properties);
 
-  gst_pad_set_fixatecaps_function (pad, gst_frei0r_src_src_fixate);
-
   gst_base_src_set_format (GST_BASE_SRC_CAST (self), GST_FORMAT_TIME);
 }
 
diff --git a/gst/frei0r/gstfrei0rsrc.h b/gst/frei0r/gstfrei0rsrc.h
index cba620a..46f766d 100644
--- a/gst/frei0r/gstfrei0rsrc.h
+++ b/gst/frei0r/gstfrei0rsrc.h
@@ -28,31 +28,31 @@
 #include "gstfrei0r.h"
 
 G_BEGIN_DECLS
-
 #define GST_FREI0R_SRC(obj) \
   ((GstFrei0rSrc *) obj)
 #define GST_FREI0R_SRC_CLASS(klass) \
   ((GstFrei0rSrcClass *) klass)
 #define GST_FREI0R_SRC_GET_CLASS(obj) \
   ((GstFrei0rSrcClass *) g_type_class_peek (G_TYPE_FROM_INSTANCE (obj)))
-
 typedef struct _GstFrei0rSrc GstFrei0rSrc;
 typedef struct _GstFrei0rSrcClass GstFrei0rSrcClass;
 
-struct _GstFrei0rSrc {
+struct _GstFrei0rSrc
+{
   GstPushSrc parent;
 
   f0r_instance_t *f0r_instance;
   GstFrei0rPropertyValue *property_cache;
 
-  GstVideoFormat fmt;
+  GstVideoInfo info;
   gint width, height;
   gint fps_n, fps_d;
 
   guint64 n_frames;
 };
 
-struct _GstFrei0rSrcClass {
+struct _GstFrei0rSrcClass
+{
   GstPushSrcClass parent;
 
   f0r_plugin_info_t *info;
@@ -62,8 +62,7 @@ struct _GstFrei0rSrcClass {
   gint n_properties;
 };
 
-GstFrei0rPluginRegisterReturn gst_frei0r_src_register (GstPlugin *plugin, const gchar * vendor, const f0r_plugin_info_t *info, const GstFrei0rFuncTable *ftable);
+GstFrei0rPluginRegisterReturn gst_frei0r_src_register (GstPlugin * plugin, const gchar * vendor, const f0r_plugin_info_t * info, const GstFrei0rFuncTable * ftable);
 
 G_END_DECLS
-
 #endif /* __GST_FREI0R_SRC_H__ */
