diff --git a/acconfig.h b/acconfig.h
index 18fb864..c9b1b8a 100644
--- a/acconfig.h
+++ b/acconfig.h
@@ -8,6 +8,8 @@
 #undef HAVE_LC_MESSAGES
 #undef HAVE_STPCPY
 
+#undef USE_GLIB2
+
 #undef PLUGINS_DIR
 #undef PLUGINS_BUILDDIR
 #undef PLUGINS_USE_BUILDDIR
diff --git a/configure.base b/configure.base
index c44886d..1d41064 100644
--- a/configure.base
+++ b/configure.base
@@ -169,21 +169,62 @@
 dnl ====================================
 
 
-dnl Check for glib
-AM_PATH_GLIB(1.2.0,,
-            AC_MSG_ERROR(Cannot find glib: Is glib-config in path?),
-            glib gmodule gthread)
-dnl Put the glib flags into $LIBS and $CFLAGS since we always use them
-CORE_LIBS="$GLIB_LIBS"
-CORE_CFLAGS="$GLIB_CFLAGS"
+AC_ARG_ENABLE(glib2,
+[  --enable-glib2            enable the use of glib-2.0 and GObject if available],
+[ case "${enableval}" in
+	yes) USE_GLIB2=yes ;;
+	no) USE_GLIB2=no ;;
+	*) AC_MSG_ERROR(bad value ${enableval} for --enable-glib2) ;;
+	esac],
+[:])
+HAVE_OBJECT_MODEL=no
 
+if test x$USE_GLIB2 = xyes; then
+  AC_MSG_CHECKING(glib-2.0)
+  PKG_CHECK_MODULES(GLIB2, glib-2.0 gobject-2.0 gthread-2.0 gmodule-2.0,
+    HAVE_GLIB2=yes,HAVE_GLIB2=yes)
 
-dnl Check for gtk
-AM_PATH_GTK(1.2.0,,
-            AC_MSG_ERROR(Cannot find gtk: Is gtk-config in path?))
-dnl Put the gtk flags into $LIBS and $CFLAGS since we always use them
-CORE_LIBS="$CORE_LIBS $GTK_LIBS"
-CORE_CFLAGS="$CORE_CFLAGS $GTK_CFLAGS"
+  if test x$HAVE_GLIB2 = xyes; then
+    CORE_LIBS="$GLIB2_LIBS"
+    CORE_CFLAGS="$GLIB2_CFLAGS"
+    AC_SUBST(GLIB2_LIBS)
+    AC_SUBST(GLIB2_CFLAGS)
+
+    AC_DEFINE(USE_GLIB2)
+
+    HAVE_OBJECT_MODEL=yes
+  else
+    USE_GLIB2=no
+
+    HAVE_OBJECT_MODEL=no
+  fi
+fi
+
+AM_CONDITIONAL(USE_GLIB2, test "x$USE_GLIB2" = "xyes")
+AC_SUBST(USE_GLIB2)
+AM_CONDITIONAL(USE_GTK2, test "x$USE_GTK2" = "xyes")
+AC_SUBST(USE_GTK2)
+AM_CONDITIONAL(USE_GNOME2, test "x$USE_GNOME2" = "xyes")
+AC_SUBST(USE_GNOME2)
+
+if test x$HAVE_OBJECT_MODEL = xno; then
+  dnl Check for glib
+  AM_PATH_GLIB(1.2.0,,
+              AC_MSG_ERROR(Cannot find glib: Is glib-config in path?),
+              glib gmodule gthread)
+  dnl Put the glib flags into $LIBS and $CFLAGS since we always use them
+  CORE_LIBS="$GLIB_LIBS"
+  CORE_CFLAGS="$GLIB_CFLAGS"
+
+  dnl Check for gtk
+  AM_PATH_GTK(1.2.0,,
+              AC_MSG_ERROR(Cannot find gtk: Is gtk-config in path?))
+  dnl Put the gtk flags into $LIBS and $CFLAGS since we always use them
+  CORE_LIBS="$CORE_LIBS $GTK_LIBS"
+  CORE_CFLAGS="$CORE_CFLAGS $GTK_CFLAGS"
+
+  HAVE_OBJECT_MODEL=yes
+fi
 
 
 dnl Check for libxml
@@ -381,19 +422,27 @@
 AC_SUBST(GDK_PIXBUF_CFLAGS)
 
 
-dnl Check for libgnome
-AC_PATH_PROG(GNOME_CONFIG, gnome-config, no)
-if test x$GNOME_CONFIG = xno; then
-  AC_MSG_WARN(Couldn't find gnome-config: can't build editor or gstplay)
+if test x$USE_GLIB2 = xyes; then
+  dnl we don't support gnome/gtk with glib2.0 yet
   GNOME_LIBS=
   GNOME_CFLAGS=
   HAVE_GNOME=no
+  AC_MSG_WARN(gnome disabled for glib2.0)
 else
-  GNOME_LIBS=`gnome-config --libs gnome gnomeui`
-  GNOME_CFLAGS=`gnome-config --cflags gnome gnomeui`
-  GHTTP_LIBS=`gnome-config --libs gnome gnomeui`
-  GHTTP_CFLAGS=`gnome-config --cflags gnome gnomeui`
-  HAVE_GNOME=yes
+  dnl Check for libgnome
+  AC_PATH_PROG(GNOME_CONFIG, gnome-config, no)
+  if test x$GNOME_CONFIG = xno; then
+    AC_MSG_WARN(Couldn't find gnome-config: can't build editor or gstplay)
+    GNOME_LIBS=
+    GNOME_CFLAGS=
+    HAVE_GNOME=no
+  else
+    GNOME_LIBS=`gnome-config --libs gnome gnomeui`
+    GNOME_CFLAGS=`gnome-config --cflags gnome gnomeui`
+    GHTTP_LIBS=`gnome-config --libs gnome gnomeui`
+    GHTTP_CFLAGS=`gnome-config --cflags gnome gnomeui`
+    HAVE_GNOME=yes
+  fi
 fi
 AC_SUBST(GNOME_LIBS)
 AC_SUBST(GNOME_CFLAGS)
@@ -401,57 +450,77 @@
 
 dnl Check for libghttp
 dnl FIXME: need to check for header
-AC_CHECK_LIB(ghttp, ghttp_request_new,
-  [GHTTP_LIBS="-lghttp"
-   GST_HTTPSRC_GET_TYPE="gst_httpsrc_get_type"
-   HAVE_LIBGHTTP=yes
-  ],
-  [AC_MSG_WARN(Cannot find libghttp: can't build gsthttpsrc)
-   GHTTP_LIBS=
-   GST_HTTPSRC_GET_TYPE=
-   HAVE_LIBGHTTP=no
-  ],
-  $LIBS)
+if test x$USE_GLIB2 = xyes; then
+  GHTTP_LIBS=
+  GST_HTTPSRC_GET_TYPE=
+  HAVE_LIBGHTTP=no
+  AC_MSG_WARN(ghttp disabled for glib2.0)
+else
+  AC_CHECK_LIB(ghttp, ghttp_request_new,
+    [GHTTP_LIBS="-lghttp"
+     GST_HTTPSRC_GET_TYPE="gst_httpsrc_get_type"
+     HAVE_LIBGHTTP=yes
+    ],
+    [AC_MSG_WARN(Cannot find libghttp: can't build gsthttpsrc)
+     GHTTP_LIBS=
+     GST_HTTPSRC_GET_TYPE=
+     HAVE_LIBGHTTP=no
+    ],
+    $LIBS)
+fi
 AC_SUBST(GST_HTTPSRC_GET_TYPE)
 
 dnl Check for libglade
 HAVE_LIBGLADE_GNOME="no"
-AC_PATH_PROG(LIBGLADE_CONFIG_PATH, libglade-config, no)
-if test x$LIBGLADE_CONFIG_PATH = xno; then
-  AC_MSG_WARN(Couldn't find libglade-config - Can't build gstplay)
+if test x$USE_GLIB2 = xyes; then
+  dnl no glade for glib2.0
   LIBGLADE_GNOME_LIBS=
   LIBGLADE_GNOME_CFLAGS=
+  AC_MSG_WARN(libglade disabled for glib2.0)
 else
-  LIBGLADE_GNOME_LIBS=`libglade-config --libs gnome`
-  LIBGLADE_GNOME_CFLAGS=`libglade-config --cflags gnome`
-  libglade_save_CFLAGS="$CFLAGS"
-  libglade_save_LIBS="$LIBS"
-  CFLAGS="$CFLAGS $LIBGLADE_GNOME_CFLAGS $GTK_CFLAGS"
-  LIBS="$LIBS $LIBGLADE_GNOME_LIBS $GTK_LIBS"
-  AC_TRY_LINK([#include <glade/glade.h>],[glade_gnome_init();],
-	      HAVE_LIBGLADE_GNOME="yes",
-	      AC_MSG_WARN(
+  AC_PATH_PROG(LIBGLADE_CONFIG_PATH, libglade-config, no)
+  if test x$LIBGLADE_CONFIG_PATH = xno; then
+    AC_MSG_WARN(Couldn't find libglade-config - Can't build gstplay)
+    LIBGLADE_GNOME_LIBS=
+    LIBGLADE_GNOME_CFLAGS=
+  else
+    LIBGLADE_GNOME_LIBS=`libglade-config --libs gnome`
+    LIBGLADE_GNOME_CFLAGS=`libglade-config --cflags gnome`
+    libglade_save_CFLAGS="$CFLAGS"
+    libglade_save_LIBS="$LIBS"
+    CFLAGS="$CFLAGS $LIBGLADE_GNOME_CFLAGS $GTK_CFLAGS"
+    LIBS="$LIBS $LIBGLADE_GNOME_LIBS $GTK_LIBS"
+    AC_TRY_LINK([#include <glade/glade.h>],[glade_gnome_init();],
+  	        HAVE_LIBGLADE_GNOME="yes",
+	        AC_MSG_WARN(
       [Couldn't find gnome libraries for libglade - Can't build gstmediaplay and gsteditor])
 	     )
-  CFLAGS="$libglade_save_CFLAGS"
-  LIBS="$libglade_save_LIBS"
+    CFLAGS="$libglade_save_CFLAGS"
+    LIBS="$libglade_save_LIBS"
+  fi
 fi
 AC_SUBST(LIBGLADE_GNOME_LIBS)
 AC_SUBST(LIBGLADE_GNOME_CFLAGS)
 
 dnl Check for Gnome VFS
 HAVE_GNOME_VFS="no"
-AC_MSG_CHECKING(for Gnome VFS)
-if gnome-config --libs vfs > /dev/null 2>&1; then
+if test x$USE_GLIB2 = xyes; then
+  VFS_LIBS=
+  VFS_CFLAGS=
+  AC_MSG_WARN(Gnome-VFS disabled for glib2.0)
+else
+  AC_MSG_CHECKING(for Gnome VFS)
+  if gnome-config --libs vfs > /dev/null 2>&1; then
 	HAVE_GNOME_VFS="yes"
 	AC_MSG_RESULT(found)
-else
+        VFS_LIBS="`gnome-config --libs vfs`"
+        VFS_CFLAGS="`gnome-config --cflags vfs`"
+  else
 	AC_MSG_WARN(Did not find Gnome-VFS installed)
+        VFS_LIBS=
+        VFS_CFLAGS=
+  fi
 fi
-
-VFS_LIBS="`gnome-config --libs vfs`"
-VFS_CFLAGS="`gnome-config --cflags vfs`"
-
 AC_SUBST(VFS_LIBS)
 AC_SUBST(VFS_CFLAGS)
 
@@ -459,15 +528,13 @@
 HAVE_AVIFILE="no"
 AC_MSG_CHECKING(for Avifile)
 if avifile-config --libs > /dev/null 2>&1; then
-	HAVE_AVIFILE="yes"
-	AC_MSG_RESULT(found)
+        HAVE_AVIFILE="yes"
+        AC_MSG_RESULT(found)
 else
-	AC_MSG_WARN(Did not find Avifile installed)
+        AC_MSG_WARN(Did not find Avifile installed)
 fi
-
 AVIFILE_LIBS="`avifile-config --libs`"
 AVIFILE_CFLAGS="`avifile-config --cflags`"
-
 AC_SUBST(AVIFILE_LIBS)
 AC_SUBST(AVIFILE_CFLAGS)
 
@@ -1148,8 +1215,6 @@
 gst/autoplug/Makefile
 libs/Makefile
 libs/riff/Makefile
-libs/colorspace/Makefile
-libs/videoscale/Makefile
 libs/getbits/Makefile
 libs/putbits/Makefile
 libs/idct/Makefile
@@ -1164,6 +1229,7 @@
 plugins/avi/wincodec/Makefile
 plugins/avi/winaudio/Makefile
 plugins/flx/Makefile
+plugins/festival/Makefile
 plugins/flac/Makefile
 plugins/jpeg/Makefile
 plugins/mp3decode/Makefile
@@ -1219,6 +1285,7 @@
 plugins/effects/Makefile
 plugins/effects/stereo/Makefile
 plugins/effects/volume/Makefile
+plugins/udp/Makefile
 plugins/visualization/Makefile
 plugins/visualization/spectrum/Makefile
 plugins/visualization/vumeter/Makefile
diff --git a/docs/random/wtay/events b/docs/random/wtay/events
new file mode 100644
index 0000000..2e9b7c5
--- /dev/null
+++ b/docs/random/wtay/events
@@ -0,0 +1,140 @@
+some random ramblings about the event system:
+
+Possible candidates for events
+------------------------------
+
+  - QoS
+  - EOS
+  - Seek
+  - caps nego??
+  - bufferpool get??
+  - ...
+
+Assumptions for events
+----------------------
+
+- They are tied to a pad.
+- get rid of gst_pad_set_*_function (except for the chain/get ones)
+- occur async to dataflow. (need locking?)
+- fixed set of events only for core features. (elements cannot abuse
+     events for doing dataflow)
+
+Questions
+---------
+
+limit the valid directions an event can travel in? ie. Can EOS only 
+travel downstream (left to right)? 
+
+eg. Seek travels upstream, but it makes sense to also make it travel 
+    downstream (the case of a disksink, where we overwrite the header)
+
+
+Setting an event function
+-------------------------
+
+void gst_pad_set_event_function (GstPad *pad, gint event_mask,
+				 GstEventFunction *function);
+
+
+event masks:
+
+typedef enum {
+  GST_EVENT_EOS 		= (1 << 0),
+  GST_EVENT_QOS			= (1 << 1),
+  GST_EVENT_SEEK		= (1 << 2),
+  GST_EVENT_CAPS		= (1 << 3),
+} GstEventType;
+
+Event structure
+---------------
+
+typedef struct {
+  GstEventType type;
+  GstEventMinorType minor;
+  guint64 timestamp;  /* also sequence number ?? */
+
+  union {
+    /* EOS stuff */
+    /* QoS stuff */
+    /* Seek stuff */
+    GstSeekType type; /* time, bytes, ... */
+    gint64 offset;
+    gint64 lenth;
+    /* Caps stuff */
+    GstCaps *caps;
+  } data;
+} GstEvent;
+
+
+typedef enum {
+  GST_EVENT_MINOR_NONE,
+  /* EOS stuff */
+
+  /* QoS stuff */
+  /* Seek stuff */
+  GST_EVENT_MINOR_OFFSET,
+  GST_EVENT_MINOR_TIME,
+
+  /* caps nego stuff */
+  GST_EVENT_MINOR_CAPS_TRY,
+  GST_EVENT_MINOR_CAPS_START,
+  GST_EVENT_MINOR_CAPS_FINAL,
+} GstEventMinorType;  
+
+
+Receiving events
+----------------
+
+a sample GstEventFunction, the event functions returns TRUE if the event is handled, 
+FALSE otherwise.
+
+gboolean
+gst_anelement_handle_event (GstPad *pad, GstEvent *event)
+{
+  if (event->type == GST_EVENT_EOS) {
+    /* do something */
+    return TRUE;
+  }
+  else if (event->type == GST_EVENT_CAPS) {
+    if (event->minor == GST_EVENT_CAPS_TRY) {
+      /* try using this caps structure */
+      return TRUE; /* return FALSE to proxy ???*/
+    }
+  }
+  return FALSE;
+}
+
+
+Default event handler for pads
+------------------------------
+
+gboolean
+gst_pad_handle_event (GstPad *pad, GstEvent *event)
+{
+  GstElement *element;
+  GList *pads;
+  GstPad *srcpad;
+  gboolean result = TRUE;
+  GstPadDirection dir = GST_PAD_DIRECTION (pad);
+
+  g_return_val_if_fail (pad != NULL, FALSE);
+  g_return_val_if_fail (GST_IS_REAL_PAD(pad), FALSE);   // NOTE the restriction
+
+  element = GST_ELEMENT (gst_object_get_parent (GST_OBJECT (pad)));
+
+  /* send out the events to all pad with opposite direction */
+  pads = gst_element_get_pad_list(element);
+  while (pads) {
+    otherpad = GST_PAD(pads->data);
+    pads = g_list_next(pads);
+
+    if (gst_pad_get_direction(otherpad) != dir) {
+      result &= gst_pad_send_event (GST_REAL_PAD(otherpad), event);
+    }
+  }
+
+  /* result is combined result of all handlers? */
+  return result;
+}
+
+  
diff --git a/examples/Makefile.am b/examples/Makefile.am
index cbe7fda..6fe9c9c 100644
--- a/examples/Makefile.am
+++ b/examples/Makefile.am
@@ -9,3 +9,9 @@
           helloworld helloworld2 \
           queue queue2 queue3 queue4 \
           launch thread xml plugins typefind mixer cutter
+
+DIST_SUBDIRS = autoplug \
+          helloworld helloworld2 \
+          queue queue2 queue3 queue4 \
+          launch thread xml plugins typefind mixer cutter
+
diff --git a/examples/cutter/cutter.c b/examples/cutter/cutter.c
index 7062722..5954eee 100644
--- a/examples/cutter/cutter.c
+++ b/examples/cutter/cutter.c
@@ -53,8 +53,8 @@
 	ct->tm_hour, ct->tm_min, ct->tm_sec);
   }
   g_print ("DEBUG: cut_start: setting new location to %s\n", buffer);
-  gtk_object_set (GTK_OBJECT (disksink), "location", buffer, NULL);
-  gtk_object_set (GTK_OBJECT (disksink), "type", 4, NULL);
+  g_object_set (G_OBJECT (disksink), "location", buffer, NULL);
+  g_object_set (G_OBJECT (disksink), "type", 4, NULL);
 
   gst_element_set_state (main_bin, GST_STATE_PLAYING);
   ++id;
@@ -78,7 +78,7 @@
   gst_element_set_state (main_bin, GST_STATE_PAUSED);
 
   g_print ("DEBUG: cut_stop: setting new location\n");
-  gtk_object_set (GTK_OBJECT (disksink), "location", "/dev/null", NULL);
+  g_object_set (G_OBJECT (disksink), "location", "/dev/null", NULL);
 
   gst_element_set_state (main_bin, GST_STATE_PLAYING);
   g_print ("stop_cut_signal done\n");
@@ -116,7 +116,7 @@
   /* create cutter */
   cutter = gst_elementfactory_make ("cutter", "cutter");
 
-  gtk_object_set (GTK_OBJECT (cutter), 
+  g_object_set (G_OBJECT (cutter), 
 	"threshold_dB", -40.0, 
 	"runlength", 0.5,
 	NULL);
@@ -126,14 +126,14 @@
 
   /* set params */
 
-  gtk_object_set (GTK_OBJECT (audiosrc), "frequency", 44100, 
+  g_object_set (G_OBJECT (audiosrc), "frequency", 44100, 
                                          "channels", 1,
   					 "format", 16, NULL);
 
   encoder = gst_elementfactory_make ("passthrough", "encoder");
   disksink = gst_elementfactory_make ("afsink", "disk_sink");
 
-  gtk_object_set (GTK_OBJECT (disksink), "location", "/dev/null", NULL);
+  g_object_set (G_OBJECT (disksink), "location", "/dev/null", NULL);
 
   thread = gst_thread_new ("thread");
   g_assert (thread != NULL);
@@ -168,10 +168,10 @@
 
   /* set signal handlers */
   g_print ("setting signal handlers\n");
-  gtk_signal_connect (GTK_OBJECT(cutter), "cut_start",
-                      GTK_SIGNAL_FUNC(cut_start_signal), NULL);
-  gtk_signal_connect (GTK_OBJECT(cutter), "cut_stop",
-                      GTK_SIGNAL_FUNC(cut_stop_signal), NULL);
+  g_signal_connectc (G_OBJECT(cutter), "cut_start",
+                     (GCallback)cut_start_signal, NULL, FALSE);
+  g_signal_connectc (G_OBJECT(cutter), "cut_stop",
+                     (GCallback)cut_stop_signal, NULL, FALSE);
 
   /* start playing */
   g_print ("setting to play\n");
diff --git a/examples/helloworld/helloworld.c b/examples/helloworld/helloworld.c
index 9e3f93e..74e2a4f 100644
--- a/examples/helloworld/helloworld.c
+++ b/examples/helloworld/helloworld.c
@@ -27,9 +27,9 @@
 
   /* create a disk reader */
   disksrc = gst_elementfactory_make("disksrc", "disk_source");
-  gtk_object_set(GTK_OBJECT(disksrc),"location", argv[1],NULL);
-  gtk_signal_connect(GTK_OBJECT(disksrc),"eos",
-                     GTK_SIGNAL_FUNC(eos),NULL);
+  g_object_set(G_OBJECT(disksrc),"location", argv[1],NULL);
+  g_signal_connectc(G_OBJECT(disksrc),"eos",
+                     G_CALLBACK(eos),NULL,FALSE);
 
   /* now it's time to get the parser */
   parse = gst_elementfactory_make("mp3parse","parse");
diff --git a/examples/helloworld2/helloworld2.c b/examples/helloworld2/helloworld2.c
index 19e0b1e..fc1dcd1 100644
--- a/examples/helloworld2/helloworld2.c
+++ b/examples/helloworld2/helloworld2.c
@@ -32,9 +32,9 @@
   /* create a disk reader */
   disksrc = gst_elementfactory_make("disksrc", "disk_source");
   g_assert(disksrc != NULL);
-  gtk_object_set(GTK_OBJECT(disksrc),"location", argv[1],NULL);
-  gtk_signal_connect(GTK_OBJECT(disksrc),"eos",
-                     GTK_SIGNAL_FUNC(eos),NULL);
+  g_object_set(G_OBJECT(disksrc),"location", argv[1],NULL);
+  g_signal_connectc(G_OBJECT(disksrc),"eos",
+                     G_CALLBACK(eos),NULL,FALSE);
 
   /* and an audio sink */
   osssink = gst_elementfactory_make("osssink", "play_audio");
diff --git a/examples/mixer/mixer.c b/examples/mixer/mixer.c
index 4461d47..998bafb 100644
--- a/examples/mixer/mixer.c
+++ b/examples/mixer/mixer.c
@@ -270,14 +270,14 @@
   g_assert(channel->disksrc != NULL);    
 
   GST_DEBUG(0, "c_i_p : setting location\n");
-  gtk_object_set(GTK_OBJECT(channel->disksrc),"location", location, NULL);
+  g_object_set(G_OBJECT(channel->disksrc),"location", location, NULL);
 
   /* add disksrc to the bin before autoplug */
   gst_bin_add(GST_BIN(channel->pipe), channel->disksrc);
 
   /* connect signal to eos of disksrc */
-  gtk_signal_connect(GTK_OBJECT(channel->disksrc),"eos",
-                     GTK_SIGNAL_FUNC(eos),NULL);
+  g_signal_connectc (G_OBJECT(channel->disksrc),"eos",
+                     G_CALLBACK(eos),NULL,FALSE);
 
 
 #ifdef DEBUG
@@ -395,7 +395,7 @@
   char buffer[30];
 
   sprintf (buffer, "%f:%f", cp_time, cp_level);
-  gtk_object_set(GTK_OBJECT(volenv), "controlpoint", buffer, NULL);
+  g_object_set(G_OBJECT(volenv), "controlpoint", buffer, NULL);
 
 }
 
diff --git a/examples/plugins/example.c b/examples/plugins/example.c
index 05db9b1..0b61fb1 100644
--- a/examples/plugins/example.c
+++ b/examples/plugins/example.c
@@ -100,8 +100,8 @@
 
 static void	gst_example_chain	(GstPad *pad, GstBuffer *buf);
 
-static void	gst_example_set_arg	(GtkObject *object,GtkArg *arg,guint id);
-static void	gst_example_get_arg	(GtkObject *object,GtkArg *arg,guint id);
+static void	gst_example_set_property	(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void	gst_example_get_property	(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
 /* These hold the constructed pad templates, which are created during
  * plugin load, and used during element instantiation.
@@ -123,29 +123,29 @@
  * register the type, providing the name of the class, struct sizes,
  * and pointers to the various functions that define the class.
  */
-GtkType
+GType
 gst_example_get_type(void)
 {
-  static GtkType example_type = 0;
+  static GType example_type = 0;
 
   if (!example_type) {
-    static const GtkTypeInfo example_info = {
-      "GstExample",
+    static const GTypeInfo example_info = {
+      sizeof(GstExampleClass),      NULL,
+      NULL,
+      (GClassInitFunc)gst_example_class_init,
+      NULL,
+      NULL,
       sizeof(GstExample),
-      sizeof(GstExampleClass),
-      (GtkClassInitFunc)gst_example_class_init,
-      (GtkObjectInitFunc)gst_example_init,
-      (GtkArgSetFunc)NULL,	/* These last three are depracated */
-      (GtkArgGetFunc)NULL,
-      (GtkClassInitFunc)NULL,
+      0,
+      (GInstanceInitFunc)gst_example_init,
     };
-    example_type = gtk_type_unique(GST_TYPE_ELEMENT,&example_info);
+    example_type = g_type_register_static(GST_TYPE_ELEMENT, "GstExample", &example_info, 0);
   }
   return example_type;
 }
 
 /* In order to create an instance of an object, the class must be
- * initialized by this function.  GtkObject will take care of running
+ * initialized by this function.  GObject will take care of running
  * it, based on the pointer to the function provided above.
  */
 static void
@@ -154,41 +154,40 @@
   /* Class pointers are needed to supply pointers to the private
    * implementations of parent class methods.
    */
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
   GstElementClass *gstelement_class;
 
   /* Since the example class contains the parent classes, you can simply
    * cast the pointer to get access to the parent classes.
    */
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
   gstelement_class = (GstElementClass*)klass;
 
   /* The parent class is needed for class method overrides. */
-  parent_class = gtk_type_class(GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref(GST_TYPE_ELEMENT);
 
   /* Here we add an argument to the object.  This argument is an integer,
    * and can be both read and written.
    */
-  gtk_object_add_arg_type("GstExample::active", GTK_TYPE_INT,
-                          GTK_ARG_READWRITE, ARG_ACTIVE);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_ACTIVE,
+    g_param_spec_int("active","active","active",
+                     G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
 
   /* Here we add a signal to the object. This is avery useless signal
    * called asdf. The signal will also pass a pointer to the listeners
    * which happens to be the example element itself */
   gst_example_signals[ASDF] =
-    gtk_signal_new("asdf", GTK_RUN_LAST, gtkobject_class->type,
-                   GTK_SIGNAL_OFFSET (GstExampleClass, asdf),
-                   gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
+    g_signal_newc("asdf", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                   G_STRUCT_OFFSET (GstExampleClass, asdf), NULL, NULL,
+                   g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
                    GST_TYPE_EXAMPLE);
 
-  gtk_object_class_add_signals (gtkobject_class, gst_example_signals,
-                                LAST_SIGNAL);
 
   /* The last thing is to provide the functions that implement get and set
    * of arguments.
    */
-  gtkobject_class->set_arg = gst_example_set_arg;
-  gtkobject_class->get_arg = gst_example_get_arg;
+  gobject_class->set_property = gst_example_set_property;
+  gobject_class->get_property = gst_example_get_property;
 }
 
 /* This function is responsible for initializing a specific instance of
@@ -277,8 +276,8 @@
     gst_pad_push(example->srcpad,outbuf);
 
     /* For fun we'll emit our useless signal here */
-    gtk_signal_emit (GTK_OBJECT (example), gst_example_signals[ASDF],
-                     example);
+    g_signal_emit(G_OBJECT (example), gst_example_signals[ASDF], 0,
+                  example);
 
   /* If we're not doing something, just send the original incoming buffer. */
   } else {
@@ -290,7 +289,7 @@
  * enable the element to respond to various arguments.
  */
 static void
-gst_example_set_arg (GtkObject *object,GtkArg *arg,guint id)
+gst_example_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
   GstExample *example;
 
@@ -301,14 +300,14 @@
   example = GST_EXAMPLE(object);
 
   /* Check the argument id to see which argument we're setting. */
-  switch (id) {
+  switch (prop_id) {
     case ARG_ACTIVE:
       /* Here we simply copy the value of the argument to our private
        * storage.  More complex operations can be done, but beware that
        * they may occur at any time, possibly even while your chain function
        * is running, if you are using threads.
        */
-      example->active = GTK_VALUE_INT(*arg);
+      example->active = g_value_get_int (value);
       g_print("example: set active to %d\n",example->active);
       break;
     default:
@@ -318,7 +317,7 @@
 
 /* The set function is simply the inverse of the get fuction. */
 static void
-gst_example_get_arg (GtkObject *object,GtkArg *arg,guint id)
+gst_example_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
   GstExample *example;
 
@@ -326,12 +325,12 @@
   g_return_if_fail(GST_IS_EXAMPLE(object));
   example = GST_EXAMPLE(object);
 
-  switch (id) {
+  switch (prop_id) {
     case ARG_ACTIVE:
-      GTK_VALUE_INT(*arg) = example->active;
+      g_value_set_int (value, example->active);
       break;
     default:
-      arg->type = GTK_TYPE_INVALID;
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
@@ -345,7 +344,7 @@
   GstElementFactory *factory;
 
   /* We need to create an ElementFactory for each element we provide.
-   * This consists of the name of the element, the GtkType identifier,
+   * This consists of the name of the element, the GType identifier,
    * and a pointer to the details structure at the top of the file.
    */
   factory = gst_elementfactory_new("example", GST_TYPE_EXAMPLE, &example_details);
diff --git a/examples/plugins/example.h b/examples/plugins/example.h
index 840b8a3..36ae999 100644
--- a/examples/plugins/example.h
+++ b/examples/plugins/example.h
@@ -60,7 +60,7 @@
 };
 
 /* Five standard preprocessing macros are used in the Gtk+ object system.
- * The first uses the object's _get_type function to return the GtkType
+ * The first uses the object's _get_type function to return the GType
  * of the object.
  */
 #define GST_TYPE_EXAMPLE \
@@ -69,21 +69,21 @@
  * is not the right type, a warning will be generated on stderr.
  */
 #define GST_EXAMPLE(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_EXAMPLE,GstExample))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_EXAMPLE,GstExample))
 /* The third is a checking cast of the class instead of the object. */
 #define GST_EXAMPLE_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_EXAMPLE,GstExample))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_EXAMPLE,GstExample))
 /* The last two simply check to see if the passed pointer is an object or
  * class of the correct type. */
 #define GST_IS_EXAMPLE(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_EXAMPLE))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_EXAMPLE))
 #define GST_IS_EXAMPLE_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_EXAMPLE))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_EXAMPLE))
 
 /* This is the only prototype needed, because it is used in the above
  * GST_TYPE_EXAMPLE macro.
  */
-GtkType gst_example_get_type(void);
+GType gst_example_get_type(void);
 
 
 #ifdef __cplusplus
diff --git a/examples/queue/queue.c b/examples/queue/queue.c
index 7137f11..763a035 100644
--- a/examples/queue/queue.c
+++ b/examples/queue/queue.c
@@ -25,7 +25,7 @@
   /* create a disk reader */
   disksrc = gst_elementfactory_make("disksrc", "disk_source");
   g_assert(disksrc != NULL);
-  gtk_object_set(GTK_OBJECT(disksrc),"location", argv[1],NULL);
+  g_object_set(G_OBJECT(disksrc),"location", argv[1],NULL);
 
   parse = gst_elementfactory_make("mp3parse", "parse");
   decode = gst_elementfactory_make("mpg123", "decode");
diff --git a/examples/queue2/queue2.c b/examples/queue2/queue2.c
index 837732e..19d4478 100644
--- a/examples/queue2/queue2.c
+++ b/examples/queue2/queue2.c
@@ -35,9 +35,9 @@
   /* create a disk reader */
   disksrc = gst_elementfactory_make("disksrc", "disk_source");
   g_assert(disksrc != NULL);
-  gtk_object_set(GTK_OBJECT(disksrc),"location", argv[1],NULL);
-  gtk_signal_connect(GTK_OBJECT(disksrc),"eos",
-                     GTK_SIGNAL_FUNC(eos), thread);
+  g_object_set(G_OBJECT(disksrc),"location", argv[1],NULL);
+  g_signal_connectc (G_OBJECT(disksrc),"eos",
+                     G_CALLBACK(eos), thread, FALSE);
 
   queue = gst_elementfactory_make("queue", "queue");
 
diff --git a/examples/queue3/queue3.c b/examples/queue3/queue3.c
index 152cd1e..fbc2dcd 100644
--- a/examples/queue3/queue3.c
+++ b/examples/queue3/queue3.c
@@ -35,9 +35,9 @@
   /* create a disk reader */
   disksrc = gst_elementfactory_make("disksrc", "disk_source");
   g_assert(disksrc != NULL);
-  gtk_object_set(GTK_OBJECT(disksrc),"location", argv[1],NULL);
-  gtk_signal_connect(GTK_OBJECT(disksrc),"eos",
-                     GTK_SIGNAL_FUNC(eos), thread);
+  g_object_set(G_OBJECT(disksrc),"location", argv[1],NULL);
+  g_signal_connectc(G_OBJECT(disksrc),"eos",
+                     G_CALLBACK(eos), thread, FALSE);
 
   queue = gst_elementfactory_make("queue", "queue");
 
diff --git a/examples/queue4/queue4.c b/examples/queue4/queue4.c
index cb984cc..896a54b 100644
--- a/examples/queue4/queue4.c
+++ b/examples/queue4/queue4.c
@@ -37,9 +37,9 @@
   /* create a disk reader */
   disksrc = gst_elementfactory_make("disksrc", "disk_source");
   g_assert(disksrc != NULL);
-  gtk_object_set(GTK_OBJECT(disksrc),"location", argv[1],NULL);
-  gtk_signal_connect(GTK_OBJECT(disksrc),"eos",
-                     GTK_SIGNAL_FUNC(eos), thread);
+  g_object_set(G_OBJECT(disksrc),"location", argv[1],NULL);
+  g_signal_connectc(G_OBJECT(disksrc),"eos",
+                     G_CALLBACK(eos), thread, FALSE);
 
   queue = gst_elementfactory_make("queue", "queue");
   queue2 = gst_elementfactory_make("queue", "queue2");
diff --git a/examples/thread/thread.c b/examples/thread/thread.c
index 5c691a0..afc3892 100644
--- a/examples/thread/thread.c
+++ b/examples/thread/thread.c
@@ -36,9 +36,9 @@
   /* create a disk reader */
   disksrc = gst_elementfactory_make("disksrc", "disk_source");
   g_assert(disksrc != NULL);
-  gtk_object_set(GTK_OBJECT(disksrc),"location", argv[1],NULL);
-  gtk_signal_connect(GTK_OBJECT(disksrc),"eos",
-                     GTK_SIGNAL_FUNC(eos), thread);
+  g_object_set(G_OBJECT(disksrc),"location", argv[1],NULL);
+  g_signal_connectc(G_OBJECT(disksrc),"eos",
+                     G_CALLBACK(eos), thread, FALSE);
 
   /* and an audio sink */
   osssink = gst_elementfactory_make("osssink", "play_audio");
diff --git a/examples/typefind/typefind.c b/examples/typefind/typefind.c
index 4e19f26..a69a296 100644
--- a/examples/typefind/typefind.c
+++ b/examples/typefind/typefind.c
@@ -34,7 +34,7 @@
   /* create a disk reader */
   disksrc = gst_elementfactory_make("disksrc", "disk_source");
   g_assert(disksrc != NULL);
-  gtk_object_set(GTK_OBJECT(disksrc),"location", argv[1],NULL);
+  g_object_set(G_OBJECT(disksrc),"location", argv[1],NULL);
 
   typefind = gst_elementfactory_make("typefind", "typefind");
   g_assert(typefind != NULL);
@@ -43,8 +43,8 @@
   gst_bin_add(GST_BIN(bin), disksrc);
   gst_bin_add(GST_BIN(bin), typefind);
 
-  gtk_signal_connect (GTK_OBJECT (typefind), "have_type", 
-		  type_found, NULL);
+  g_signal_connectc (G_OBJECT (typefind), "have_type", 
+		  type_found, NULL, FALSE);
 
   gst_pad_connect(gst_element_get_pad(disksrc,"src"),
                   gst_element_get_pad(typefind,"sink"));
diff --git a/examples/xml/createxml.c b/examples/xml/createxml.c
index ce8b395..e3cfa4e 100644
--- a/examples/xml/createxml.c
+++ b/examples/xml/createxml.c
@@ -32,12 +32,12 @@
   //thread = gst_thread_new("thread");
   thread = gst_elementfactory_make("thread", "thread");
   g_assert(thread != NULL);
-  gtk_signal_connect (GTK_OBJECT (thread), "object_saved", object_saved, g_strdup ("decoder thread"));
+  g_signal_connectc (G_OBJECT (thread), "object_saved", object_saved, g_strdup ("decoder thread"), FALSE);
 
   thread2 = gst_elementfactory_make("thread", "thread2");
   //thread2 = gst_thread_new("thread2");
   g_assert(thread2 != NULL);
-  gtk_signal_connect (GTK_OBJECT (thread2), "object_saved", object_saved, g_strdup ("render thread"));
+  g_signal_connectc (G_OBJECT (thread2), "object_saved", object_saved, g_strdup ("render thread"), FALSE);
 
   /* create a new bin to hold the elements */
   bin = gst_bin_new("bin");
@@ -46,7 +46,7 @@
   /* create a disk reader */
   disksrc = gst_elementfactory_make("disksrc", "disk_source");
   g_assert(disksrc != NULL);
-  gtk_object_set(GTK_OBJECT(disksrc),"location", argv[1],NULL);
+  g_object_set(G_OBJECT(disksrc),"location", argv[1],NULL);
 
   queue = gst_elementfactory_make("queue", "queue");
   queue2 = gst_elementfactory_make("queue", "queue2");
diff --git a/examples/xml/runxml.c b/examples/xml/runxml.c
index 400e825..4fbaf2a 100644
--- a/examples/xml/runxml.c
+++ b/examples/xml/runxml.c
@@ -35,7 +35,7 @@
 
   xml = gst_xml_new ();
 
-  gtk_signal_connect (GTK_OBJECT (xml), "object_loaded", xml_loaded, xml);
+  g_signal_connectc (G_OBJECT (xml), "object_loaded", xml_loaded, xml, FALSE);
 
   ret = gst_xml_parse_file(xml, "xmlTest.gst", NULL);
   g_assert (ret == TRUE);
diff --git a/gst/Makefile.am b/gst/Makefile.am
index c4286a5..790a0cc 100644
--- a/gst/Makefile.am
+++ b/gst/Makefile.am
@@ -12,9 +12,19 @@
 EXTRA_libgst_la_SOURCES =	\
 	gstcpuid_i386.s
 
+if USE_GLIB2
+GST_OBJECT_MODEL_SRC = gstmarshal.c
+GST_OBJECT_MODEL_HDR = gstmarshal.h
+else
+GST_OBJECT_MODEL_SRC = gobject2gtk.c
+GST_OBJECT_MODEL_HDR = gobject2gtk.h
+endif
+
 libgst_la_SOURCES =		\
 	cothreads.c		\
 	gst.c			\
+	$(GST_OBJECT_MODEL_SRC)	\
+	gstobject.c		\
 	gstautoplug.c		\
 	gstbin.c		\
 	gstbuffer.c		\
@@ -27,7 +37,6 @@
 	gstextratypes.c		\
 	gstinfo.c		\
 	gstmeta.c		\
-	gstobject.c		\
 	gstpad.c		\
 	gstpipeline.c		\
 	gstplugin.c		\
@@ -91,6 +100,8 @@
 libgstinclude_HEADERS =		\
 	cothreads.h		\
 	gst.h			\
+	$(GST_OBJECT_MODEL_HDR)	\
+	gstobject.h		\
 	gsttypes.h		\
 	gstautoplug.h		\
 	gstbin.h		\
@@ -104,7 +115,6 @@
 	gstinfo.h		\
 	gstlog.h		\
 	gstmeta.h		\
-	gstobject.h		\
 	gstpad.h		\
 	gstpipeline.h		\
 	gstplugin.h		\
diff --git a/gst/autoplug/autoplugtest.c b/gst/autoplug/autoplugtest.c
index a3c60d1..41b5e80 100644
--- a/gst/autoplug/autoplugtest.c
+++ b/gst/autoplug/autoplugtest.c
@@ -41,7 +41,7 @@
     gst_bin_add(GST_BIN(autobin),sink);
     gst_element_connect(decoder,"src",sink,"sink");
 
-    gtk_object_set (GTK_OBJECT(cache), "reset", TRUE, NULL);
+    g_object_set (G_OBJECT(cache), "reset", TRUE, NULL);
 
     gst_element_connect(cache,"src",decoder,"sink");
   }
@@ -52,7 +52,7 @@
     gst_bin_add(GST_BIN(autobin),sink);
     gst_element_connect(decoder,"src",sink,"sink");
 
-    gtk_object_set (GTK_OBJECT(cache), "reset", TRUE, NULL);
+    g_object_set (G_OBJECT(cache), "reset", TRUE, NULL);
 
     gst_element_connect(cache,"src",decoder,"sink");
   }
@@ -68,14 +68,14 @@
 
   pipeline = gst_pipeline_new("pipeline");
   src = gst_elementfactory_make ("disksrc","src");
-  gtk_object_set(GTK_OBJECT(src),"location",argv[1],NULL);
+  g_object_set(G_OBJECT(src),"location",argv[1],NULL);
   gst_bin_add (GST_BIN(pipeline),src);
 
   autobin = gst_bin_new("autobin");
   cache = gst_elementfactory_make ("autoplugcache","cache");
-  gtk_signal_connect (GTK_OBJECT(cache),"cache_empty",GTK_SIGNAL_FUNC(cache_empty),NULL);
+  g_signal_connectc (G_OBJECT(cache),"cache_empty",(GCallback)cache_empty,NULL,FALSE);
   typefind = gst_elementfactory_make ("typefind", "typefind");
-  gtk_signal_connect (GTK_OBJECT(typefind),"have_type",GTK_SIGNAL_FUNC(have_type),&caps);
+  g_signal_connectc (G_OBJECT(typefind),"have_type",(GCallback)have_type,&caps,FALSE);
   gst_bin_add (GST_BIN(autobin),cache);
   gst_bin_add (GST_BIN(autobin),typefind);
   gst_element_connect(cache,"src",typefind,"sink");
diff --git a/gst/autoplug/gstautoplugcache.c b/gst/autoplug/gstautoplugcache.c
index 906eec8..2136326 100644
--- a/gst/autoplug/gstautoplugcache.c
+++ b/gst/autoplug/gstautoplugcache.c
@@ -33,13 +33,13 @@
 #define GST_TYPE_AUTOPLUGCACHE \
   (gst_autoplugcache_get_type())
 #define GST_AUTOPLUGCACHE(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_AUTOPLUGCACHE,GstAutoplugCache))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUTOPLUGCACHE,GstAutoplugCache))
 #define GST_AUTOPLUGCACHE_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_AUTOPLUGCACHE,GstAutoplugCacheClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUTOPLUGCACHE,GstAutoplugCacheClass))
 #define GST_IS_AUTOPLUGCACHE(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_AUTOPLUGCACHE))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUTOPLUGCACHE))
 #define GST_IS_AUTOPLUGCACHE_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_AUTOPLUGCACHE))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUTOPLUGCACHE))
 
 typedef struct _GstAutoplugCache GstAutoplugCache;
 typedef struct _GstAutoplugCacheClass GstAutoplugCacheClass;
@@ -85,8 +85,10 @@
 static void			gst_autoplugcache_class_init	(GstAutoplugCacheClass *klass);
 static void			gst_autoplugcache_init		(GstAutoplugCache *cache);
 
-static void			gst_autoplugcache_set_arg	(GtkObject *object, GtkArg *arg, guint id);
-static void			gst_autoplugcache_get_arg	(GtkObject *object, GtkArg *arg, guint id);
+static void			gst_autoplugcache_set_property	(GObject *object, guint prop_id, 
+								 const GValue *value, GParamSpec *pspec);
+static void			gst_autoplugcache_get_property	(GObject *object, guint prop_id, 
+								 GValue *value, GParamSpec *pspec);
 
 static void			gst_autoplugcache_loop		(GstElement *element);
 
@@ -98,22 +100,23 @@
 static GstElementClass *parent_class = NULL;
 static guint gst_autoplugcache_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_autoplugcache_get_type(void) {
-  static GtkType autoplugcache_type = 0;
+  static GType autoplugcache_type = 0;
 
   if (!autoplugcache_type) {
-    static const GtkTypeInfo autoplugcache_info = {
-      "GstAutoplugCache",
-      sizeof(GstAutoplugCache),
+    static const GTypeInfo autoplugcache_info = {
       sizeof(GstAutoplugCacheClass),
-      (GtkClassInitFunc)gst_autoplugcache_class_init,
-      (GtkObjectInitFunc)gst_autoplugcache_init,
-      (GtkArgSetFunc)gst_autoplugcache_set_arg,
-      (GtkArgGetFunc)gst_autoplugcache_get_arg,
-      (GtkClassInitFunc)NULL,
+      NULL,
+      NULL,
+      (GClassInitFunc)gst_autoplugcache_class_init,
+      NULL,
+      NULL,
+      sizeof(GstAutoplugCache),
+      0,
+      (GInstanceInitFunc)gst_autoplugcache_init,
     };
-    autoplugcache_type = gtk_type_unique (GST_TYPE_ELEMENT, &autoplugcache_info);
+    autoplugcache_type = g_type_register_static (GST_TYPE_ELEMENT, "GstAutoplugCache", &autoplugcache_info, 0);
   }
   return autoplugcache_type;
 }
@@ -121,34 +124,36 @@
 static void
 gst_autoplugcache_class_init (GstAutoplugCacheClass *klass)
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
   GstElementClass *gstelement_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
   gstelement_class = (GstElementClass*)klass;
 
-  parent_class = gtk_type_class (GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
+
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_BUFFER_COUNT,
+    g_param_spec_int("buffer_count","buffer_count","buffer_count",
+                     0,G_MAXINT,0,G_PARAM_READABLE)); // CHECKME!
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_CAPS_PROXY,
+    g_param_spec_boolean("caps_proxy","caps_proxy","caps_proxy",
+                         FALSE,G_PARAM_READWRITE)); // CHECKME!
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_RESET,
+    g_param_spec_boolean("reset","reset","reset",
+                         FALSE,G_PARAM_WRITABLE)); // CHECKME!
 
   gst_autoplugcache_signals[FIRST_BUFFER] =
-    gtk_signal_new ("first_buffer", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstAutoplugCacheClass, first_buffer),
-                    gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
-                    GTK_TYPE_POINTER);
+    g_signal_newc ("first_buffer", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GstAutoplugCacheClass, first_buffer), NULL, NULL,
+                    g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
+                    G_TYPE_POINTER);
   gst_autoplugcache_signals[CACHE_EMPTY] =
-    gtk_signal_new ("cache_empty", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstAutoplugCacheClass, cache_empty),
-                    gtk_marshal_NONE__NONE, GTK_TYPE_NONE, 0);
-  gtk_object_class_add_signals (gtkobject_class, gst_autoplugcache_signals, LAST_SIGNAL);
+    g_signal_newc ("cache_empty", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GstAutoplugCacheClass, cache_empty), NULL, NULL,
+                    g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
 
-  gtk_object_add_arg_type ("GstAutoplugCache::buffer_count", GTK_TYPE_INT,
-                           GTK_ARG_READABLE, ARG_BUFFER_COUNT);
-  gtk_object_add_arg_type ("GstAutoplugCache::caps_proxy", GTK_TYPE_BOOL,
-                           GTK_ARG_READWRITE, ARG_CAPS_PROXY);
-  gtk_object_add_arg_type ("GstAutoplugCache::reset", GTK_TYPE_BOOL,
-                           GTK_ARG_WRITABLE, ARG_RESET);
-
-  gtkobject_class->set_arg = gst_autoplugcache_set_arg;
-  gtkobject_class->get_arg = gst_autoplugcache_get_arg;
+  gobject_class->set_property = gst_autoplugcache_set_property;
+  gobject_class->get_property = gst_autoplugcache_get_property;
 
   gstelement_class->change_state = gst_autoplugcache_change_state;
 }
@@ -193,7 +198,7 @@
    * buffer, i.e. the end of the list.
    * If the playout pointer does not have a prev (towards the most recent) buffer 
    * (== NULL), a buffer must be pulled from the sink pad and added to the cache.
-   * When the playout pointer gets reset (as in a set_arg), the cache is walked
+   * When the playout pointer gets reset (as in a set_property), the cache is walked
    * without problems, because the playout pointer has a non-NULL next.  When
    * the playout pointer hits the end of cache again it has to start pulling.
    */
@@ -212,7 +217,7 @@
       // set the current_playout pointer
       cache->current_playout = cache->cache;
 
-      gtk_signal_emit (GTK_OBJECT(cache), gst_autoplugcache_signals[FIRST_BUFFER], buf);
+      g_signal_emit (G_OBJECT(cache), gst_autoplugcache_signals[FIRST_BUFFER], 0, buf);
 
       // send the buffer on its way
       gst_pad_push (cache->srcpad, buf);
@@ -226,7 +231,7 @@
         int oldstate = GST_STATE(cache);
         GST_DEBUG(0,"at front of cache, about to pull, but firing signal\n");
         gst_object_ref (GST_OBJECT (cache));
-        gtk_signal_emit (GTK_OBJECT(cache), gst_autoplugcache_signals[CACHE_EMPTY], NULL);
+        g_signal_emit (G_OBJECT(cache), gst_autoplugcache_signals[CACHE_EMPTY], 0, NULL);
         if (GST_STATE(cache) != oldstate) {
           gst_object_ref (GST_OBJECT (cache));
           GST_DEBUG(GST_CAT_AUTOPLUG, "state changed during signal, aborting\n");
@@ -256,7 +261,7 @@
       cache->current_playout = g_list_previous (cache->current_playout);
 
       if (cache->fire_first) {
-        gtk_signal_emit (GTK_OBJECT(cache), gst_autoplugcache_signals[FIRST_BUFFER], buf);
+        g_signal_emit (G_OBJECT(cache), gst_autoplugcache_signals[FIRST_BUFFER], 0, buf);
         cache->fire_first = FALSE;
       }
 
@@ -294,15 +299,15 @@
 }
 
 static void
-gst_autoplugcache_set_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_autoplugcache_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
   GstAutoplugCache *cache;
 
   cache = GST_AUTOPLUGCACHE (object);
 
-  switch (id) {
+  switch (prop_id) {
     case ARG_CAPS_PROXY:
-      cache->caps_proxy = GTK_VALUE_BOOL(*arg);
+      cache->caps_proxy = g_value_get_boolean (value);
 GST_DEBUG(0,"caps_proxy is %d\n",cache->caps_proxy);
       if (cache->caps_proxy) {
         gst_pad_set_negotiate_function (cache->sinkpad, GST_DEBUG_FUNCPTR(gst_autoplugcache_nego_sink));
@@ -314,7 +319,7 @@
       break;
     case ARG_RESET:
       // no idea why anyone would set this to FALSE, but just in case ;-)
-      if (GTK_VALUE_BOOL(*arg)) {
+      if (g_value_get_boolean (value)) {
         GST_DEBUG(0,"resetting playout pointer\n");
         // reset the playout pointer to the begining again
         cache->current_playout = cache->cache_start;
@@ -330,20 +335,20 @@
 }
 
 static void
-gst_autoplugcache_get_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_autoplugcache_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
   GstAutoplugCache *cache;
 
   cache = GST_AUTOPLUGCACHE (object);
 
-  switch (id) {
+  switch (prop_id) {
     case ARG_BUFFER_COUNT:
-      GTK_VALUE_INT(*arg) = cache->buffer_count;
+      g_value_set_int (value, cache->buffer_count);
       break;
     case ARG_CAPS_PROXY:
-      GTK_VALUE_BOOL(*arg) = cache->caps_proxy;
+      g_value_set_boolean (value, cache->caps_proxy);
     default:
-      arg->type = GTK_TYPE_INVALID;
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
diff --git a/gst/autoplug/gstautoplugger.c b/gst/autoplug/gstautoplugger.c
index 883d8cd..f8c9e51 100644
--- a/gst/autoplug/gstautoplugger.c
+++ b/gst/autoplug/gstautoplugger.c
@@ -33,13 +33,13 @@
 #define GST_TYPE_AUTOPLUGGER \
   (gst_autoplugger_get_type())
 #define GST_AUTOPLUGGER(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_AUTOPLUGGER,GstAutoplugger))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUTOPLUGGER,GstAutoplugger))
 #define GST_AUTOPLUGGER_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_AUTOPLUGGER,GstAutopluggerClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUTOPLUGGER,GstAutopluggerClass))
 #define GST_IS_AUTOPLUGGER(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_AUTOPLUGGER))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUTOPLUGGER))
 #define GST_IS_AUTOPLUGGER_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_AUTOPLUGGER))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUTOPLUGGER))
 
 typedef struct _GstAutoplugger GstAutoplugger;
 typedef struct _GstAutopluggerClass GstAutopluggerClass;
@@ -84,8 +84,8 @@
 static void			gst_autoplugger_class_init	(GstAutopluggerClass *klass);
 static void			gst_autoplugger_init		(GstAutoplugger *queue);
 
-static void			gst_autoplugger_set_arg		(GtkObject *object, GtkArg *arg, guint id);
-static void			gst_autoplugger_get_arg		(GtkObject *object, GtkArg *arg, guint id);
+static void			gst_autoplugger_set_property		(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void			gst_autoplugger_get_property		(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
 //static GstElementStateReturn	gst_autoplugger_change_state	(GstElement *element);
 
@@ -104,22 +104,23 @@
 static GstElementClass *parent_class = NULL;
 //static guint gst_autoplugger_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_autoplugger_get_type(void) {
-  static GtkType autoplugger_type = 0;
+  static GType autoplugger_type = 0;
 
   if (!autoplugger_type) {
-    static const GtkTypeInfo autoplugger_info = {
-      "GstAutoplugger",
-      sizeof(GstAutoplugger),
+    static const GTypeInfo autoplugger_info = {
       sizeof(GstAutopluggerClass),
-      (GtkClassInitFunc)gst_autoplugger_class_init,
-      (GtkObjectInitFunc)gst_autoplugger_init,
-      (GtkArgSetFunc)gst_autoplugger_set_arg,
-      (GtkArgGetFunc)gst_autoplugger_get_arg,
-      (GtkClassInitFunc)NULL,
+      NULL,
+      NULL,
+      (GClassInitFunc)gst_autoplugger_class_init,
+      NULL,
+      NULL,
+      sizeof(GstAutoplugger),
+      0,
+      (GInstanceInitFunc)gst_autoplugger_init,
     };
-    autoplugger_type = gtk_type_unique (GST_TYPE_BIN, &autoplugger_info);
+    autoplugger_type = g_type_register_static (GST_TYPE_BIN, "GstAutoplugger", &autoplugger_info, 0);
   }
   return autoplugger_type;
 }
@@ -127,31 +128,32 @@
 static void
 gst_autoplugger_class_init (GstAutopluggerClass *klass)
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
   GstElementClass *gstelement_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
   gstelement_class = (GstElementClass*)klass;
 
-  parent_class = gtk_type_class (GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
 
 /*
   gst_autoplugger_signals[_EMPTY] =
-    gtk_signal_new ("_empty", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstAutopluggerClass, _empty),
-                    gtk_marshal_NONE__NONE, GTK_TYPE_NONE, 0);
-  gtk_object_class_add_signals (gtkobject_class, gst_autoplugger_signals, LAST_SIGNAL);
+    g_signal_newc ("_empty", G_OBJECT_TYPE(gobject_class), G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GstAutopluggerClass, _empty), NULL, NULL,
+                    g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
 */
 
 /*
-  gtk_object_add_arg_type ("GstAutoplugger::buffer_count", GTK_TYPE_INT,
-                           GTK_ARG_READABLE, ARG_BUFFER_COUNT);
-  gtk_object_add_arg_type ("GstAutoplugger::reset", GTK_TYPE_BOOL,
-                           GTK_ARG_WRITABLE, ARG_RESET);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_BUFFER_COUNT,
+    g_param_spec_int("buffer_count","buffer_count","buffer_count",
+                      0,G_MAXINT,0,G_PARAM_READABLE)); // CHECKME!
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_RESET,
+    g_param_spec_boolean("reset","reset","reset",
+                         FALSE,G_PARAM_WRITABLE)); // CHECKME!
 */
 
-  gtkobject_class->set_arg = gst_autoplugger_set_arg;
-  gtkobject_class->get_arg = gst_autoplugger_get_arg;
+  gobject_class->set_property = gst_autoplugger_set_property;
+  gobject_class->get_property = gst_autoplugger_get_property;
 
 //  gstelement_class->change_state = gst_autoplugger_change_state;
 }
@@ -166,11 +168,11 @@
   g_return_if_fail (autoplugger->cache != NULL);
 
   GST_DEBUG(GST_CAT_AUTOPLUG, "turning on caps nego proxying in cache\n");
-  gtk_object_set(GTK_OBJECT(autoplugger->cache),"caps_proxy",TRUE,NULL);
+  g_object_set(G_OBJECT(autoplugger->cache),"caps_proxy",TRUE,NULL);
 
   // attach signals to the cache
-  gtk_signal_connect (GTK_OBJECT (autoplugger->cache), "first_buffer",
-                      GTK_SIGNAL_FUNC (gst_autoplugger_cache_first_buffer), autoplugger);
+  g_signal_connectc (G_OBJECT (autoplugger->cache), "first_buffer",
+                     G_CALLBACK (gst_autoplugger_cache_first_buffer), autoplugger, FALSE);
 
   // add the cache to self
   gst_bin_add (GST_BIN(autoplugger), autoplugger->cache);
@@ -180,18 +182,18 @@
   autoplugger->cache_srcpad = gst_element_get_pad (autoplugger->cache, "src");
 
   // attach handlers to the typefind pads
-  gtk_signal_connect (GTK_OBJECT (autoplugger->cache_sinkpad), "caps_changed",
-                      GTK_SIGNAL_FUNC (gst_autoplugger_external_sink_caps_changed), autoplugger);
-  gtk_signal_connect (GTK_OBJECT (autoplugger->cache_srcpad), "caps_changed",
-                      GTK_SIGNAL_FUNC (gst_autoplugger_external_src_caps_changed), autoplugger);
-  gtk_signal_connect (GTK_OBJECT (autoplugger->cache_sinkpad), "caps_nego_failed",
-                      GTK_SIGNAL_FUNC (gst_autoplugger_external_sink_caps_nego_failed), autoplugger);
-  gtk_signal_connect (GTK_OBJECT (autoplugger->cache_srcpad), "caps_nego_failed",
-                      GTK_SIGNAL_FUNC (gst_autoplugger_external_src_caps_nego_failed), autoplugger);
-//  gtk_signal_connect (GTK_OBJECT (autoplugger->cache_sinkpad), "connected",
-//                      GTK_SIGNAL_FUNC (gst_autoplugger_external_sink_connected), autoplugger);
-//  gtk_signal_connect (GTK_OBJECT (autoplugger->cache_srcpad), "connected",
-//                      GTK_SIGNAL_FUNC (gst_autoplugger_external_src_connected), autoplugger);
+  g_signal_connectc (G_OBJECT (autoplugger->cache_sinkpad), "caps_changed",
+                     G_CALLBACK (gst_autoplugger_external_sink_caps_changed), autoplugger,FALSE);
+  g_signal_connectc (G_OBJECT (autoplugger->cache_srcpad), "caps_changed",
+                     G_CALLBACK (gst_autoplugger_external_src_caps_changed), autoplugger,FALSE);
+  g_signal_connectc (G_OBJECT (autoplugger->cache_sinkpad), "caps_nego_failed",
+                     G_CALLBACK (gst_autoplugger_external_sink_caps_nego_failed), autoplugger,FALSE);
+  g_signal_connectc (G_OBJECT (autoplugger->cache_srcpad), "caps_nego_failed",
+                     G_CALLBACK (gst_autoplugger_external_src_caps_nego_failed), autoplugger,FALSE);
+//  g_signal_connectc (G_OBJECT (autoplugger->cache_sinkpad), "connected",
+//                     gst_autoplugger_external_sink_connected, autoplugger,FALSE);
+//  g_signal_connectc (G_OBJECT (autoplugger->cache_srcpad), "connected",
+//                     gst_autoplugger_external_src_connected, autoplugger,FALSE);
 
   // ghost both of these pads to the outside world
   gst_element_add_ghost_pad (GST_ELEMENT(autoplugger), autoplugger->cache_sinkpad, "sink");
@@ -246,7 +248,7 @@
                  gst_caps_get_mime(peertemplatecaps));
         autoplugger->sinktemplatecaps = peertemplatecaps;
 //        GST_DEBUG(GST_CAT_AUTOPLUG, "turning on caps nego proxying in cache\n");
-//        gtk_object_set(GTK_OBJECT(autoplugger->cache),"caps_proxy",TRUE,NULL);
+//        gtk_object_set(G_OBJECT(autoplugger->cache),"caps_proxy",TRUE,NULL);
       }
     }
   }
@@ -482,12 +484,12 @@
 
   // now reset the autoplugcache
   GST_DEBUG(GST_CAT_AUTOPLUG, "resetting the cache to send first buffer(s) again\n");
-  gtk_object_set(GTK_OBJECT(autoplugger->cache),"reset",TRUE,NULL);
+  g_object_set(G_OBJECT(autoplugger->cache),"reset",TRUE,NULL);
 
   // attach the cache_empty handler
   // FIXME this is the wrong place, it shouldn't be done until we get successful caps nego!
-  gtk_signal_connect(GTK_OBJECT(autoplugger->cache),"cache_empty",
-                     GTK_SIGNAL_FUNC(gst_autoplugger_cache_empty),autoplugger);
+  g_signal_connectc (G_OBJECT(autoplugger->cache),"cache_empty",
+                     G_CALLBACK (gst_autoplugger_cache_empty), autoplugger, FALSE);
 
   autoplugger->paused--;
   if (autoplugger->paused == 0)
@@ -530,8 +532,8 @@
       GST_DEBUG(GST_CAT_AUTOPLUG, "creating typefind and setting signal handler\n");
       autoplugger->typefind = gst_elementfactory_make("typefind","unnamed_typefind");
       autoplugger->typefind_sinkpad = gst_element_get_pad(autoplugger->typefind,"sink");
-      gtk_signal_connect(GTK_OBJECT(autoplugger->typefind),"have_type",
-                         GTK_SIGNAL_FUNC (gst_autoplugger_typefind_have_type), autoplugger);
+      g_signal_connectc (G_OBJECT(autoplugger->typefind),"have_type",
+                         G_CALLBACK (gst_autoplugger_typefind_have_type), autoplugger, FALSE);
     }
     // add it to self and attach it
     GST_DEBUG(GST_CAT_AUTOPLUG, "adding typefind to self and connecting to cache\n");
@@ -551,34 +553,34 @@
 gst_schedule_show(GST_ELEMENT_SCHED(autoplugger));
   } else {
 //    // attach the cache_empty handler, since the cache simply isn't needed
-//    gtk_signal_connect(GTK_OBJECT(autoplugger->cache),"cache_empty",
-//                       GTK_SIGNAL_FUNC(gst_autoplugger_cache_empty),autoplugger);  
+//    g_signal_connectc (G_OBJECT(autoplugger->cache),"cache_empty",
+//                       gst_autoplugger_cache_empty,autoplugger,FALSE);
   }
 }
 
 static void
-gst_autoplugger_set_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_autoplugger_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
   GstAutoplugger *autoplugger;
 
   autoplugger = GST_AUTOPLUGGER (object);
 
-  switch (id) {
+  switch (prop_id) {
     default:
       break;
   }
 }
 
 static void
-gst_autoplugger_get_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_autoplugger_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
   GstAutoplugger *autoplugger;
 
   autoplugger = GST_AUTOPLUGGER (object);
 
-  switch (id) {
+  switch (prop_id) {
     default:
-      arg->type = GTK_TYPE_INVALID;
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
diff --git a/gst/autoplug/gststaticautoplug.c b/gst/autoplug/gststaticautoplug.c
index 3edf83e..d1becd2 100644
--- a/gst/autoplug/gststaticautoplug.c
+++ b/gst/autoplug/gststaticautoplug.c
@@ -45,22 +45,23 @@
 
 static GstAutoplugClass *parent_class = NULL;
 
-GtkType gst_static_autoplug_get_type(void)
+GType gst_static_autoplug_get_type(void)
 {
-  static GtkType static_autoplug_type = 0;
+  static GType static_autoplug_type = 0;
 
   if (!static_autoplug_type) {
-    static const GtkTypeInfo static_autoplug_info = {
-      "GstStaticAutoplug",
-      sizeof(GstElement),
+    static const GTypeInfo static_autoplug_info = {
       sizeof(GstElementClass),
-      (GtkClassInitFunc)gst_static_autoplug_class_init,
-      (GtkObjectInitFunc)gst_static_autoplug_init,
-      (GtkArgSetFunc)NULL,
-      (GtkArgGetFunc)NULL,
-      (GtkClassInitFunc)NULL,
+      NULL,
+      NULL,
+      (GClassInitFunc)gst_static_autoplug_class_init,
+      NULL,
+      NULL,
+      sizeof(GstElement),
+      0,
+      (GInstanceInitFunc)gst_static_autoplug_init,
     };
-    static_autoplug_type = gtk_type_unique (GST_TYPE_AUTOPLUG, &static_autoplug_info);
+    static_autoplug_type = g_type_register_static (GST_TYPE_AUTOPLUG, "GstStaticAutoplug", &static_autoplug_info, 0);
   }
   return static_autoplug_type;
 }
@@ -72,7 +73,7 @@
 
   gstautoplug_class = (GstAutoplugClass*) klass;
 
-  parent_class = gtk_type_class(GST_TYPE_AUTOPLUG);
+  parent_class = g_type_class_ref(GST_TYPE_AUTOPLUG);
 
   gstautoplug_class->autoplug_to_caps = gst_static_autoplug_to_caps;
 }
@@ -225,8 +226,8 @@
   if (!connected) {
     GST_DEBUG (0,"gstpipeline: delaying pad connections for \"%s\" to \"%s\"\n",
 		    GST_ELEMENT_NAME(src), GST_ELEMENT_NAME(sink));
-    gtk_signal_connect(GTK_OBJECT(src),"new_pad",
-                 GTK_SIGNAL_FUNC(gst_autoplug_pads_autoplug_func), sink);
+    g_signal_connectc (G_OBJECT(src), "new_pad", 
+		    G_CALLBACK (gst_autoplug_pads_autoplug_func), sink, FALSE);
   }
 }
 
@@ -459,10 +460,10 @@
 	data->i = i;
 
         GST_DEBUG (0,"delaying the creation of a ghostpad for %s\n", GST_ELEMENT_NAME (thesrcelement));
-	gtk_signal_connect (GTK_OBJECT (thesrcelement), "new_pad", 
-			autoplug_dynamic_pad, data);
-        gtk_signal_connect (GTK_OBJECT (thesrcelement), "new_ghost_pad",
-                 	autoplug_dynamic_pad, data);
+	g_signal_connectc (G_OBJECT (thesrcelement), "new_pad", 
+			G_CALLBACK (autoplug_dynamic_pad), data, FALSE);
+        g_signal_connectc (G_OBJECT (thesrcelement), "new_ghost_pad", 
+			G_CALLBACK (autoplug_dynamic_pad), data, FALSE);
       }
     }
   }
diff --git a/gst/autoplug/gststaticautoplug.h b/gst/autoplug/gststaticautoplug.h
index 9a99097..11511d4 100644
--- a/gst/autoplug/gststaticautoplug.h
+++ b/gst/autoplug/gststaticautoplug.h
@@ -33,13 +33,13 @@
 #define GST_TYPE_STATIC_AUTOPLUG \
   (gst_static_autoplug_get_type())
 #define GST_STATIC_AUTOPLUG(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_STATIC_AUTOPLUG,GstStaticAutoplug))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_STATIC_AUTOPLUG,GstStaticAutoplug))
 #define GST_STATIC_AUTOPLUG_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_STATIC_AUTOPLUG,GstStaticAutoplugClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_STATIC_AUTOPLUG,GstStaticAutoplugClass))
 #define GST_IS_STATIC_AUTOPLUG(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_STATIC_AUTOPLUG))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_STATIC_AUTOPLUG))
 #define GST_IS_STATIC_AUTOPLUG_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_STATIC_AUTOPLUG))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_STATIC_AUTOPLUG))
 
 typedef struct _GstStaticAutoplug GstStaticAutoplug;
 typedef struct _GstStaticAutoplugClass GstStaticAutoplugClass;
@@ -53,7 +53,7 @@
 };
 
 
-GtkType			gst_static_autoplug_get_type		(void);
+GType			gst_static_autoplug_get_type		(void);
 
 #ifdef __cplusplus
 }
diff --git a/gst/autoplug/gststaticautoplugrender.c b/gst/autoplug/gststaticautoplugrender.c
index 05bbea7..483c3df 100644
--- a/gst/autoplug/gststaticautoplugrender.c
+++ b/gst/autoplug/gststaticautoplugrender.c
@@ -45,22 +45,23 @@
 
 static GstAutoplugClass *parent_class = NULL;
 
-GtkType gst_static_autoplug_render_get_type(void)
+GType gst_static_autoplug_render_get_type(void)
 {
-  static GtkType static_autoplug_type = 0;
+  static GType static_autoplug_type = 0;
 
   if (!static_autoplug_type) {
-    static const GtkTypeInfo static_autoplug_info = {
-      "GstStaticAutoplugRender",
-      sizeof(GstElement),
+    static const GTypeInfo static_autoplug_info = {
       sizeof(GstElementClass),
-      (GtkClassInitFunc)gst_static_autoplug_render_class_init,
-      (GtkObjectInitFunc)gst_static_autoplug_render_init,
-      (GtkArgSetFunc)NULL,
-      (GtkArgGetFunc)NULL,
-      (GtkClassInitFunc)NULL,
+      NULL,
+      NULL,
+      (GClassInitFunc)gst_static_autoplug_render_class_init,
+      NULL,
+      NULL,
+      sizeof(GstElement),
+      0,
+      (GInstanceInitFunc)gst_static_autoplug_render_init,
     };
-    static_autoplug_type = gtk_type_unique (GST_TYPE_AUTOPLUG, &static_autoplug_info);
+    static_autoplug_type = g_type_register_static (GST_TYPE_AUTOPLUG, "GstStaticAutoplugRender", &static_autoplug_info, 0);
   }
   return static_autoplug_type;
 }
@@ -72,7 +73,7 @@
 
   gstautoplug_class = (GstAutoplugClass*) klass;
 
-  parent_class = gtk_type_class(GST_TYPE_AUTOPLUG);
+  parent_class = g_type_class_ref(GST_TYPE_AUTOPLUG);
 
   gstautoplug_class->autoplug_to_renderers = gst_static_autoplug_to_render;
 }
@@ -202,10 +203,10 @@
   if (!connected) {
     GST_DEBUG (0,"gstpipeline: delaying pad connections for \"%s\" to \"%s\"\n",
 		    GST_ELEMENT_NAME(src), GST_ELEMENT_NAME(sink));
-    gtk_signal_connect(GTK_OBJECT(src),"new_pad",
-                 GTK_SIGNAL_FUNC(gst_autoplug_pads_autoplug_func), sink);
-    gtk_signal_connect(GTK_OBJECT(src),"new_ghost_pad",
-                 GTK_SIGNAL_FUNC(gst_autoplug_pads_autoplug_func), sink);
+    g_signal_connectc (G_OBJECT(src),"new_pad",
+                       G_CALLBACK (gst_autoplug_pads_autoplug_func), sink, FALSE);
+    g_signal_connectc (G_OBJECT(src),"new_ghost_pad",
+                       G_CALLBACK (gst_autoplug_pads_autoplug_func), sink, FALSE);
   }
 }
 
diff --git a/gst/autoplug/gststaticautoplugrender.h b/gst/autoplug/gststaticautoplugrender.h
index 351d4cd..6af32d4 100644
--- a/gst/autoplug/gststaticautoplugrender.h
+++ b/gst/autoplug/gststaticautoplugrender.h
@@ -33,13 +33,13 @@
 #define GST_TYPE_STATIC_AUTOPLUG_RENDER \
   (gst_static_autoplug_render_get_type())
 #define GST_STATIC_AUTOPLUG_RENDER(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_STATIC_AUTOPLUG_RENDER,GstStaticAutoplugRender))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_STATIC_AUTOPLUG_RENDER,GstStaticAutoplugRender))
 #define GST_STATIC_AUTOPLUG_RENDER_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_STATIC_AUTOPLUG_RENDER,GstStaticAutoplugRenderClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_STATIC_AUTOPLUG_RENDER,GstStaticAutoplugRenderClass))
 #define GST_IS_STATIC_AUTOPLUG_RENDER(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_STATIC_AUTOPLUG_RENDER))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_STATIC_AUTOPLUG_RENDER))
 #define GST_IS_STATIC_AUTOPLUG_RENDER_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_STATIC_AUTOPLUG_RENDER))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_STATIC_AUTOPLUG_RENDER))
 
 typedef struct _GstStaticAutoplugRender GstStaticAutoplugRender;
 typedef struct _GstStaticAutoplugRenderClass GstStaticAutoplugRenderClass;
@@ -53,7 +53,7 @@
 };
 
 
-GtkType			gst_static_autoplug_render_get_type		(void);
+GType			gst_static_autoplug_render_get_type		(void);
 
 #ifdef __cplusplus
 }
diff --git a/gst/elements/Makefile.am b/gst/elements/Makefile.am
index e29530e..156116a 100644
--- a/gst/elements/Makefile.am
+++ b/gst/elements/Makefile.am
@@ -39,6 +39,7 @@
 	gstsinesrc.h
 
 CFLAGS += -O2 -Wall
+LDFLAGS += -lm
 
 libgstelements_la_LIBADD = $(GHTTP_LIBS)
 libgstelements_la_LDFLAGS = -version-info $(GST_LIBVERSION)
diff --git a/gst/elements/gstdisksink.c b/gst/elements/gstdisksink.c
index efd626d..2922ccc 100644
--- a/gst/elements/gstdisksink.c
+++ b/gst/elements/gstdisksink.c
@@ -51,8 +51,8 @@
 static void	gst_disksink_class_init	(GstDiskSinkClass *klass);
 static void	gst_disksink_init	(GstDiskSink *disksink);
 
-static void	gst_disksink_set_arg	(GtkObject *object, GtkArg *arg, guint id);
-static void	gst_disksink_get_arg	(GtkObject *object, GtkArg *arg, guint id);
+static void	gst_disksink_set_property	(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void	gst_disksink_get_property	(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
 static gboolean gst_disksink_open_file 	(GstDiskSink *sink);
 static void 	gst_disksink_close_file (GstDiskSink *sink);
@@ -64,23 +64,23 @@
 static GstElementClass *parent_class = NULL;
 static guint gst_disksink_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_disksink_get_type (void) 
 {
-  static GtkType disksink_type = 0;
+  static GType disksink_type = 0;
 
   if (!disksink_type) {
-    static const GtkTypeInfo disksink_info = {
-      "GstDiskSink",
+    static const GTypeInfo disksink_info = {
+      sizeof(GstDiskSinkClass),      NULL,
+      NULL,
+      (GClassInitFunc)gst_disksink_class_init,
+      NULL,
+      NULL,
       sizeof(GstDiskSink),
-      sizeof(GstDiskSinkClass),
-      (GtkClassInitFunc)gst_disksink_class_init,
-      (GtkObjectInitFunc)gst_disksink_init,
-      (GtkArgSetFunc)gst_disksink_set_arg,
-      (GtkArgGetFunc)gst_disksink_get_arg,
-      (GtkClassInitFunc)NULL,	/* deprecated, do not use ! */
+      0,
+      (GInstanceInitFunc)gst_disksink_init,
     };
-    disksink_type = gtk_type_unique (GST_TYPE_ELEMENT, &disksink_info);
+    disksink_type = g_type_register_static (GST_TYPE_ELEMENT, "GstDiskSink", &disksink_info, 0);
   }
   return disksink_type;
 }
@@ -88,27 +88,25 @@
 static void
 gst_disksink_class_init (GstDiskSinkClass *klass) 
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
   GstElementClass *gstelement_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
   gstelement_class = (GstElementClass*)klass;
 
-  parent_class = gtk_type_class (GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
 
-  gtk_object_add_arg_type ("GstDiskSink::location", GST_TYPE_FILENAME,
-                           GTK_ARG_READWRITE, ARG_LOCATION);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_LOCATION,
+    g_param_spec_string("location","location","location",
+                        NULL,G_PARAM_READWRITE)); // CHECKME!
 
   gst_disksink_signals[SIGNAL_HANDOFF] =
-    gtk_signal_new ("handoff", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstDiskSinkClass, handoff),
-                    gtk_marshal_NONE__NONE, GTK_TYPE_NONE, 0);
+    g_signal_newc ("handoff", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GstDiskSinkClass, handoff), NULL, NULL,
+                    g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
 
-  gtk_object_class_add_signals (gtkobject_class, gst_disksink_signals,
-                                    LAST_SIGNAL);
-
-  gtkobject_class->set_arg = gst_disksink_set_arg;
-  gtkobject_class->get_arg = gst_disksink_get_arg;
+  gobject_class->set_property = gst_disksink_set_property;
+  gobject_class->get_property = gst_disksink_get_property;
 
   gstelement_class->change_state = gst_disksink_change_state;
 }
@@ -126,21 +124,21 @@
 }
 
 static void
-gst_disksink_set_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_disksink_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
   GstDiskSink *sink;
 
   /* it's not null if we got it, but it might not be ours */
   sink = GST_DISKSINK (object);
 
-  switch(id) {
+  switch (prop_id) {
     case ARG_LOCATION:
       /* the element must be stopped or paused in order to do this */
       g_return_if_fail ((GST_STATE (sink) < GST_STATE_PLAYING)
                       || (GST_STATE (sink) == GST_STATE_PAUSED));
       if (sink->filename)
 	g_free (sink->filename);
-      sink->filename = g_strdup (GTK_VALUE_STRING (*arg));
+      sink->filename = g_strdup (g_value_get_string (value));
       if ( (GST_STATE (sink) == GST_STATE_PAUSED) 
         && (sink->filename != NULL))
       {
@@ -155,7 +153,7 @@
 }
 
 static void   
-gst_disksink_get_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_disksink_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
   GstDiskSink *sink;
  
@@ -164,12 +162,12 @@
  
   sink = GST_DISKSINK (object);
   
-  switch (id) {
+  switch (prop_id) {
     case ARG_LOCATION:
-      GTK_VALUE_STRING (*arg) = sink->filename;
+      g_value_set_string (value, sink->filename);
       break;
     default:
-      arg->type = GTK_TYPE_INVALID;
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
@@ -237,7 +235,7 @@
   }
   gst_buffer_unref (buf);
 
-  gtk_signal_emit (GTK_OBJECT (disksink), gst_disksink_signals[SIGNAL_HANDOFF],
+  g_signal_emit (G_OBJECT (disksink), gst_disksink_signals[SIGNAL_HANDOFF], 0,
 	                      disksink);
 }
 
diff --git a/gst/elements/gstdisksink.h b/gst/elements/gstdisksink.h
index 15f3d32..1797135 100644
--- a/gst/elements/gstdisksink.h
+++ b/gst/elements/gstdisksink.h
@@ -40,13 +40,13 @@
 #define GST_TYPE_DISKSINK \
   (gst_disksink_get_type())
 #define GST_DISKSINK(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_DISKSINK,GstDiskSink))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISKSINK,GstDiskSink))
 #define GST_DISKSINK_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_DISKSINK,GstDiskSinkClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DISKSINK,GstDiskSinkClass))
 #define GST_IS_DISKSINK(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_DISKSINK))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISKSINK))
 #define GST_IS_DISKSINK_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_DISKSINK))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DISKSINK))
 
 typedef struct _GstDiskSink GstDiskSink;
 typedef struct _GstDiskSinkClass GstDiskSinkClass;
@@ -71,7 +71,7 @@
   void (*handoff) (GstElement *element,GstPad *pad);
 };
 
-GtkType gst_disksink_get_type(void);
+GType gst_disksink_get_type(void);
 
 
 #ifdef __cplusplus
diff --git a/gst/elements/gstdisksrc.c b/gst/elements/gstdisksrc.c
index 694d3e3..259473e 100644
--- a/gst/elements/gstdisksrc.c
+++ b/gst/elements/gstdisksrc.c
@@ -59,8 +59,8 @@
 static void		gst_disksrc_class_init	(GstDiskSrcClass *klass);
 static void		gst_disksrc_init		(GstDiskSrc *disksrc);
 
-static void		gst_disksrc_set_arg	(GtkObject *object, GtkArg *arg, guint id);
-static void		gst_disksrc_get_arg	(GtkObject *object, GtkArg *arg, guint id);
+static void		gst_disksrc_set_property	(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void		gst_disksrc_get_property	(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
 static GstBuffer *	gst_disksrc_get		(GstPad *pad);
 static GstBuffer *	gst_disksrc_get_region	(GstPad *pad,GstRegionType type,guint64 offset,guint64 len);
@@ -73,23 +73,23 @@
 static GstElementClass *parent_class = NULL;
 //static guint gst_disksrc_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_disksrc_get_type(void)
 {
-  static GtkType disksrc_type = 0;
+  static GType disksrc_type = 0;
 
   if (!disksrc_type) {
-    static const GtkTypeInfo disksrc_info = {
-      "GstDiskSrc",
+    static const GTypeInfo disksrc_info = {
+      sizeof(GstDiskSrcClass),      NULL,
+      NULL,
+      (GClassInitFunc)gst_disksrc_class_init,
+      NULL,
+      NULL,
       sizeof(GstDiskSrc),
-      sizeof(GstDiskSrcClass),
-      (GtkClassInitFunc)gst_disksrc_class_init,
-      (GtkObjectInitFunc)gst_disksrc_init,
-      (GtkArgSetFunc)gst_disksrc_set_arg,
-      (GtkArgGetFunc)gst_disksrc_get_arg,
-      (GtkClassInitFunc)NULL,
+      0,
+      (GInstanceInitFunc)gst_disksrc_init,
     };
-    disksrc_type = gtk_type_unique (GST_TYPE_ELEMENT, &disksrc_info);
+    disksrc_type = g_type_register_static (GST_TYPE_ELEMENT, "GstDiskSrc", &disksrc_info, 0);
   }
   return disksrc_type;
 }
@@ -97,25 +97,29 @@
 static void
 gst_disksrc_class_init (GstDiskSrcClass *klass)
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
   GstElementClass *gstelement_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
   gstelement_class = (GstElementClass*)klass;
 
-  parent_class = gtk_type_class (GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
 
-  gtk_object_add_arg_type ("GstDiskSrc::location", GST_TYPE_FILENAME,
-                           GTK_ARG_READWRITE, ARG_LOCATION);
-  gtk_object_add_arg_type ("GstDiskSrc::bytesperread", GTK_TYPE_INT,
-                           GTK_ARG_READWRITE, ARG_BYTESPERREAD);
-  gtk_object_add_arg_type ("GstDiskSrc::offset", GTK_TYPE_LONG,
-                           GTK_ARG_READWRITE, ARG_OFFSET);
-  gtk_object_add_arg_type ("GstDiskSrc::size", GTK_TYPE_LONG,
-                           GTK_ARG_READABLE, ARG_SIZE);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_LOCATION,
+    g_param_spec_string("location","location","location",
+                        NULL,G_PARAM_READWRITE)); // CHECKME!
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_BYTESPERREAD,
+    g_param_spec_int("bytesperread","bytesperread","bytesperread",
+                     G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_OFFSET,
+    g_param_spec_long("offset","offset","offset",
+                     G_MINLONG,G_MAXLONG,0,G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_SIZE,
+    g_param_spec_long("size","size","size",
+                     G_MINLONG,G_MAXLONG,0,G_PARAM_READABLE)); // CHECKME
 
-  gtkobject_class->set_arg = gst_disksrc_set_arg;
-  gtkobject_class->get_arg = gst_disksrc_get_arg;
+  gobject_class->set_property = gst_disksrc_set_property;
+  gobject_class->get_property = gst_disksrc_get_property;
 
   gstelement_class->change_state = gst_disksrc_change_state;
 }
@@ -142,7 +146,7 @@
 
 
 static void
-gst_disksrc_set_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_disksrc_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
   GstDiskSrc *src;
 
@@ -151,7 +155,7 @@
 
   src = GST_DISKSRC (object);
 
-  switch(id) {
+  switch (prop_id) {
     case ARG_LOCATION:
       /* the element must be stopped or paused in order to do this */
       g_return_if_fail ((GST_STATE (src) < GST_STATE_PLAYING)
@@ -159,12 +163,12 @@
 
       if (src->filename) g_free (src->filename);
       /* clear the filename if we get a NULL (is that possible?) */
-      if (GTK_VALUE_STRING (*arg) == NULL) {
+      if (g_value_get_string (value) == NULL) {
         gst_element_set_state (GST_ELEMENT (object), GST_STATE_NULL);
         src->filename = NULL;
       /* otherwise set the new filename */
       } else {
-        src->filename = g_strdup (GTK_VALUE_STRING (*arg));
+        src->filename = g_strdup (g_value_get_string (value));
       }
       if ((GST_STATE (src) == GST_STATE_PAUSED) && (src->filename != NULL))
       {
@@ -173,10 +177,10 @@
       }
       break;
     case ARG_BYTESPERREAD:
-      src->bytes_per_read = GTK_VALUE_INT (*arg);
+      src->bytes_per_read = g_value_get_int (value);
       break;
     case ARG_OFFSET:
-      src->curoffset = GTK_VALUE_LONG (*arg);
+      src->curoffset = g_value_get_long (value);
       src->new_seek = TRUE;
       break;
     default:
@@ -185,7 +189,7 @@
 }
 
 static void
-gst_disksrc_get_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_disksrc_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
   GstDiskSrc *src;
 
@@ -194,21 +198,21 @@
 
   src = GST_DISKSRC (object);
 
-  switch (id) {
+  switch (prop_id) {
     case ARG_LOCATION:
-      GTK_VALUE_STRING (*arg) = src->filename;
+      g_value_set_string (value, src->filename);
       break;
     case ARG_BYTESPERREAD:
-      GTK_VALUE_INT (*arg) = src->bytes_per_read;
+      g_value_set_int (value, src->bytes_per_read);
       break;
     case ARG_OFFSET:
-      GTK_VALUE_LONG (*arg) = src->curoffset;
+      g_value_set_long (value, src->curoffset);
       break;
     case ARG_SIZE:
-      GTK_VALUE_LONG (*arg) = src->size;
+      g_value_set_long (value, src->size);
       break;
     default:
-      arg->type = GTK_TYPE_INVALID;
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
diff --git a/gst/elements/gstdisksrc.h b/gst/elements/gstdisksrc.h
index e049a10..155a362 100644
--- a/gst/elements/gstdisksrc.h
+++ b/gst/elements/gstdisksrc.h
@@ -38,13 +38,13 @@
 #define GST_TYPE_DISKSRC \
   (gst_disksrc_get_type())
 #define GST_DISKSRC(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_DISKSRC,GstDiskSrc))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISKSRC,GstDiskSrc))
 #define GST_DISKSRC_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_DISKSRC,GstDiskSrcClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DISKSRC,GstDiskSrcClass))
 #define GST_IS_DISKSRC(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_DISKSRC))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISKSRC))
 #define GST_IS_DISKSRC_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_DISKSRC))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DISKSRC))
 
 typedef enum {
   GST_DISKSRC_OPEN		= GST_ELEMENT_FLAG_LAST,
@@ -81,7 +81,7 @@
   GstElementClass parent_class;
 };
 
-GtkType gst_disksrc_get_type(void);
+GType gst_disksrc_get_type(void);
 
 #ifdef __cplusplus
 }
diff --git a/gst/elements/gstelements.c b/gst/elements/gstelements.c
index 6a46c67..b1bf952 100644
--- a/gst/elements/gstelements.c
+++ b/gst/elements/gstelements.c
@@ -42,7 +42,7 @@
 
 struct _elements_entry {
   gchar *name;
-  GtkType (*type) (void);
+  GType (*type) (void);
   GstElementDetails *details;
   gboolean (*factoryinit) (GstElementFactory *factory);
 };
diff --git a/gst/elements/gstfakesink.c b/gst/elements/gstfakesink.c
index 1d22865..913c303 100644
--- a/gst/elements/gstfakesink.c
+++ b/gst/elements/gstfakesink.c
@@ -51,31 +51,31 @@
 static void	gst_fakesink_class_init	(GstFakeSinkClass *klass);
 static void	gst_fakesink_init	(GstFakeSink *fakesink);
 
-static void	gst_fakesink_set_arg	(GtkObject *object, GtkArg *arg, guint id);
-static void	gst_fakesink_get_arg	(GtkObject *object, GtkArg *arg, guint id);
+static void	gst_fakesink_set_property	(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void	gst_fakesink_get_property	(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
 static void	gst_fakesink_chain	(GstPad *pad,GstBuffer *buf);
 
 static GstElementClass *parent_class = NULL;
 static guint gst_fakesink_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_fakesink_get_type (void) 
 {
-  static GtkType fakesink_type = 0;
+  static GType fakesink_type = 0;
 
   if (!fakesink_type) {
-    static const GtkTypeInfo fakesink_info = {
-      "GstFakeSink",
+    static const GTypeInfo fakesink_info = {
+      sizeof(GstFakeSinkClass),      NULL,
+      NULL,
+      (GClassInitFunc)gst_fakesink_class_init,
+      NULL,
+      NULL,
       sizeof(GstFakeSink),
-      sizeof(GstFakeSinkClass),
-      (GtkClassInitFunc)gst_fakesink_class_init,
-      (GtkObjectInitFunc)gst_fakesink_init,
-      (GtkArgSetFunc)NULL,
-      (GtkArgGetFunc)NULL,
-      (GtkClassInitFunc)NULL,
+      0,
+      (GInstanceInitFunc)gst_fakesink_init,
     };
-    fakesink_type = gtk_type_unique (GST_TYPE_ELEMENT, &fakesink_info);
+    fakesink_type = g_type_register_static (GST_TYPE_ELEMENT, "GstFakeSink", &fakesink_info, 0);
   }
   return fakesink_type;
 }
@@ -83,28 +83,27 @@
 static void
 gst_fakesink_class_init (GstFakeSinkClass *klass) 
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
 
-  parent_class = gtk_type_class (GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
 
-  gtk_object_add_arg_type ("GstFakeSink::num_sources", GTK_TYPE_INT,
-                           GTK_ARG_READWRITE, ARG_NUM_SOURCES);
-  gtk_object_add_arg_type ("GstFakeSink::silent", GTK_TYPE_BOOL,
-                           GTK_ARG_READWRITE, ARG_SILENT);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_NUM_SOURCES,
+    g_param_spec_int("num_sources","num_sources","num_sources",
+                     G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_SILENT,
+    g_param_spec_boolean("silent","silent","silent",
+                         TRUE,G_PARAM_READWRITE)); // CHECKME
 
   gst_fakesink_signals[SIGNAL_HANDOFF] =
-    gtk_signal_new ("handoff", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstFakeSinkClass, handoff),
-                    gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
-                    GTK_TYPE_POINTER);
+    g_signal_newc ("handoff", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GstFakeSinkClass, handoff), NULL, NULL,
+                    g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
+                    G_TYPE_POINTER);
 
-  gtk_object_class_add_signals (gtkobject_class, gst_fakesink_signals,
-                                    LAST_SIGNAL);
-
-  gtkobject_class->set_arg = gst_fakesink_set_arg;
-  gtkobject_class->get_arg = gst_fakesink_get_arg;
+  gobject_class->set_property = gst_fakesink_set_property;
+  gobject_class->get_property = gst_fakesink_get_property;
 }
 
 static void 
@@ -123,7 +122,7 @@
 }
 
 static void
-gst_fakesink_set_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_fakesink_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
   GstFakeSink *sink;
   gint new_numsinks;
@@ -132,9 +131,9 @@
   /* it's not null if we got it, but it might not be ours */
   sink = GST_FAKESINK (object);
 
-  switch(id) {
+  switch (prop_id) {
     case ARG_NUM_SOURCES:
-      new_numsinks = GTK_VALUE_INT (*arg);
+      new_numsinks = g_value_get_int (value);
       while (sink->numsinkpads < new_numsinks) {
         pad = gst_pad_new (g_strdup_printf ("sink%d", sink->numsinkpads), GST_PAD_SINK);
         gst_pad_set_chain_function (pad, gst_fakesink_chain);
@@ -144,7 +143,7 @@
       }
       break;
     case ARG_SILENT:
-      sink->silent = GTK_VALUE_BOOL (*arg);
+      sink->silent = g_value_get_boolean (value);
       break;
     default:
       break;
@@ -152,7 +151,7 @@
 }
 
 static void   
-gst_fakesink_get_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_fakesink_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
   GstFakeSink *sink;
  
@@ -161,15 +160,15 @@
  
   sink = GST_FAKESINK (object);
   
-  switch (id) {
+  switch (prop_id) {
     case ARG_NUM_SOURCES:
-      GTK_VALUE_INT (*arg) = sink->numsinkpads;
+      g_value_set_int (value, sink->numsinkpads);
       break;
     case ARG_SILENT:
-      GTK_VALUE_BOOL (*arg) = sink->silent;
+      g_value_set_boolean (value, sink->silent);
       break;
     default:
-      arg->type = GTK_TYPE_INVALID;
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
@@ -195,7 +194,7 @@
   if (!fakesink->silent)
     g_print("fakesink: ******* (%s:%s)< (%d bytes) \n",GST_DEBUG_PAD_NAME(pad),GST_BUFFER_SIZE(buf));
   
-  gtk_signal_emit (GTK_OBJECT (fakesink), gst_fakesink_signals[SIGNAL_HANDOFF],
+  g_signal_emit (G_OBJECT (fakesink), gst_fakesink_signals[SIGNAL_HANDOFF], 0,
                    buf);
 
   gst_buffer_unref (buf);
diff --git a/gst/elements/gstfakesink.h b/gst/elements/gstfakesink.h
index 37fa1f2..483f948 100644
--- a/gst/elements/gstfakesink.h
+++ b/gst/elements/gstfakesink.h
@@ -40,13 +40,13 @@
 #define GST_TYPE_FAKESINK \
   (gst_fakesink_get_type())
 #define GST_FAKESINK(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_FAKESINK,GstFakeSink))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_FAKESINK,GstFakeSink))
 #define GST_FAKESINK_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_FAKESINK,GstFakeSinkClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_FAKESINK,GstFakeSinkClass))
 #define GST_IS_FAKESINK(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_FAKESINK))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_FAKESINK))
 #define GST_IS_FAKESINK_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_FAKESINK))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_FAKESINK))
 
 typedef struct _GstFakeSink GstFakeSink;
 typedef struct _GstFakeSinkClass GstFakeSinkClass;
@@ -66,7 +66,7 @@
   void (*handoff) (GstElement *element, GstBuffer *buf, GstPad *pad);
 };
 
-GtkType gst_fakesink_get_type(void);
+GType gst_fakesink_get_type(void);
 
 
 #ifdef __cplusplus
diff --git a/gst/elements/gstfakesrc.c b/gst/elements/gstfakesrc.c
index 97570bb..a8496a5 100644
--- a/gst/elements/gstfakesrc.c
+++ b/gst/elements/gstfakesrc.c
@@ -54,10 +54,10 @@
 };
 
 #define GST_TYPE_FAKESRC_OUTPUT (gst_fakesrc_output_get_type())
-static GtkType
+static GType
 gst_fakesrc_output_get_type(void) {
-  static GtkType fakesrc_output_type = 0;
-  static GtkEnumValue fakesrc_output[] = {
+  static GType fakesrc_output_type = 0;
+  static GEnumValue fakesrc_output[] = {
     { FAKESRC_FIRST_LAST_LOOP, 		"1", "First-Last loop"},
     { FAKESRC_LAST_FIRST_LOOP, 		"2", "Last-First loop"},
     { FAKESRC_PING_PONG, 		"3", "Ping-Pong"},
@@ -69,7 +69,7 @@
     {0, NULL, NULL},
   };
   if (!fakesrc_output_type) {
-    fakesrc_output_type = gtk_type_register_enum("GstFakeSrcOutput", fakesrc_output);
+    fakesrc_output_type = g_enum_register_static("GstFakeSrcOutput", fakesrc_output);
   }
   return fakesrc_output_type;
 }
@@ -77,8 +77,8 @@
 static void		gst_fakesrc_class_init	(GstFakeSrcClass *klass);
 static void		gst_fakesrc_init	(GstFakeSrc *fakesrc);
 
-static void		gst_fakesrc_set_arg	(GtkObject *object, GtkArg *arg, guint id);
-static void		gst_fakesrc_get_arg	(GtkObject *object, GtkArg *arg, guint id);
+static void		gst_fakesrc_set_property	(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void		gst_fakesrc_get_property	(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
 static GstBuffer*	gst_fakesrc_get		(GstPad *pad);
 static void 		gst_fakesrc_loop	(GstElement *element);
@@ -86,23 +86,24 @@
 static GstElementClass *parent_class = NULL;
 static guint gst_fakesrc_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_fakesrc_get_type (void) 
 {
-  static GtkType fakesrc_type = 0;
+  static GType fakesrc_type = 0;
 
   if (!fakesrc_type) {
-    static const GtkTypeInfo fakesrc_info = {
-      "GstFakeSrc",
-      sizeof(GstFakeSrc),
+    static const GTypeInfo fakesrc_info = {
       sizeof(GstFakeSrcClass),
-      (GtkClassInitFunc)gst_fakesrc_class_init,
-      (GtkObjectInitFunc)gst_fakesrc_init,
-      (GtkArgSetFunc)NULL,
-      (GtkArgGetFunc)NULL,
-      (GtkClassInitFunc)NULL,
+      NULL,
+      NULL,
+      (GClassInitFunc)gst_fakesrc_class_init,
+      NULL,
+      NULL,
+      sizeof(GstFakeSrc),
+      0,
+      (GInstanceInitFunc)gst_fakesrc_init,
     };
-    fakesrc_type = gtk_type_unique (GST_TYPE_ELEMENT, &fakesrc_info);
+    fakesrc_type = g_type_register_static (GST_TYPE_ELEMENT, "GstFakeSrc", &fakesrc_info, 0);
   }
   return fakesrc_type;
 }
@@ -110,38 +111,42 @@
 static void
 gst_fakesrc_class_init (GstFakeSrcClass *klass) 
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
 
-  parent_class = gtk_type_class (GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
 
-  gtk_object_add_arg_type ("GstFakeSrc::num_sources", GTK_TYPE_INT,
-                           GTK_ARG_READWRITE, ARG_NUM_SOURCES);
-  gtk_object_add_arg_type ("GstFakeSrc::loop_based", GTK_TYPE_BOOL,
-                           GTK_ARG_READWRITE, ARG_LOOP_BASED);
-  gtk_object_add_arg_type ("GstFakeSrc::output", GST_TYPE_FAKESRC_OUTPUT,
-                           GTK_ARG_READWRITE, ARG_OUTPUT);
-  gtk_object_add_arg_type ("GstFakeSrc::pattern", GTK_TYPE_STRING,
-                           GTK_ARG_READWRITE, ARG_PATTERN);
-  gtk_object_add_arg_type ("GstFakeSrc::num_buffers", GTK_TYPE_INT,
-                           GTK_ARG_READWRITE, ARG_NUM_BUFFERS);
-  gtk_object_add_arg_type ("GstFakeSrc::eos", GTK_TYPE_BOOL,
-                           GTK_ARG_READWRITE, ARG_EOS);
-  gtk_object_add_arg_type ("GstFakeSrc::silent", GTK_TYPE_BOOL,
-                           GTK_ARG_READWRITE, ARG_SILENT);
-
-  gtkobject_class->set_arg = gst_fakesrc_set_arg;
-  gtkobject_class->get_arg = gst_fakesrc_get_arg;
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_NUM_SOURCES,
+    g_param_spec_int("num_sources","num_sources","num_sources",
+                     G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_LOOP_BASED,
+    g_param_spec_boolean("loop_based","loop_based","loop_based",
+                         TRUE,G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_OUTPUT,
+    g_param_spec_enum("output","output","output",
+                      GST_TYPE_FAKESRC_OUTPUT,FAKESRC_FIRST_LAST_LOOP,G_PARAM_READWRITE)); // CHECKME!
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_PATTERN,
+    g_param_spec_string("pattern","pattern","pattern",
+                        NULL, G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_NUM_BUFFERS,
+    g_param_spec_int("num_buffers","num_buffers","num_buffers",
+                     G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_EOS,
+    g_param_spec_boolean("eos","eos","eos",
+                         TRUE,G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_SILENT,
+    g_param_spec_boolean("silent","silent","silent",
+                         TRUE,G_PARAM_READWRITE)); // CHECKME
 
   gst_fakesrc_signals[SIGNAL_HANDOFF] =
-    gtk_signal_new ("handoff", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstFakeSrcClass, handoff),
-                    gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
-                    GTK_TYPE_POINTER);
+    g_signal_newc ("handoff", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GstFakeSrcClass, handoff), NULL, NULL,
+                    g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
+                    G_TYPE_POINTER);
 
-  gtk_object_class_add_signals (gtkobject_class, gst_fakesrc_signals,
-                                LAST_SIGNAL);
+  gobject_class->set_property = gst_fakesrc_set_property;
+  gobject_class->get_property = gst_fakesrc_get_property;
 }
 
 static void 
@@ -192,7 +197,7 @@
 }
 
 static void
-gst_fakesrc_set_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_fakesrc_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
   GstFakeSrc *src;
   gint new_numsrcs;
@@ -201,9 +206,9 @@
   /* it's not null if we got it, but it might not be ours */
   src = GST_FAKESRC (object);
    
-  switch(id) {
+  switch (prop_id) {
     case ARG_NUM_SOURCES:
-      new_numsrcs = GTK_VALUE_INT (*arg);
+      new_numsrcs = g_value_get_int (value);
       if (new_numsrcs > src->numsrcpads) {
         while (src->numsrcpads != new_numsrcs) {
           pad = gst_pad_new(g_strdup_printf("src%d",src->numsrcpads),GST_PAD_SRC);
@@ -215,7 +220,7 @@
       }
       break;
     case ARG_LOOP_BASED:
-      src->loop_based = GTK_VALUE_BOOL (*arg);
+      src->loop_based = g_value_get_boolean (value);
       gst_fakesrc_update_functions (src);
       break;
     case ARG_OUTPUT:
@@ -223,14 +228,14 @@
     case ARG_PATTERN:
       break;
     case ARG_NUM_BUFFERS:
-      src->num_buffers = GTK_VALUE_INT (*arg);
+      src->num_buffers = g_value_get_int (value);
       break;
     case ARG_EOS:
-      src->eos = GTK_VALUE_BOOL (*arg);
+      src->eos = g_value_get_boolean (value);
 GST_INFO (0, "will EOS on next buffer");
       break;
     case ARG_SILENT:
-      src->silent = GTK_VALUE_BOOL (*arg);
+      src->silent = g_value_get_boolean (value);
       break;
     default:
       break;
@@ -238,7 +243,7 @@
 }
 
 static void 
-gst_fakesrc_get_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_fakesrc_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
   GstFakeSrc *src;
    
@@ -247,29 +252,30 @@
   
   src = GST_FAKESRC (object);
    
-  switch (id) {
+  switch (prop_id) {
     case ARG_NUM_SOURCES:
-      GTK_VALUE_INT (*arg) = src->numsrcpads;
+      g_value_set_int (value, src->numsrcpads);
       break;
     case ARG_LOOP_BASED:
-      GTK_VALUE_BOOL (*arg) = src->loop_based;
+      g_value_set_boolean (value, src->loop_based);
       break;
     case ARG_OUTPUT:
-      GTK_VALUE_INT (*arg) = src->output;
+      g_value_set_int (value, src->output);
       break;
     case ARG_PATTERN:
-      GTK_VALUE_STRING (*arg) = src->pattern;
+      g_value_set_string (value, src->pattern);
       break;
     case ARG_NUM_BUFFERS:
-      GTK_VALUE_INT (*arg) = src->num_buffers;
+      g_value_set_int (value, src->num_buffers);
       break;
     case ARG_EOS:
-      GTK_VALUE_BOOL (*arg) = src->eos;
+      g_value_set_boolean (value, src->eos);
+      break;
     case ARG_SILENT:
-      GTK_VALUE_BOOL (*arg) = src->silent;
+      g_value_set_boolean (value, src->silent);
       break;
     default:
-      arg->type = GTK_TYPE_INVALID;
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
@@ -314,7 +320,7 @@
     g_print("fakesrc: ******* (%s:%s)> \n",GST_DEBUG_PAD_NAME(pad));
   buf = gst_buffer_new();
 
-  gtk_signal_emit (GTK_OBJECT (src), gst_fakesrc_signals[SIGNAL_HANDOFF],
+  g_signal_emit (G_OBJECT (src), gst_fakesrc_signals[SIGNAL_HANDOFF], 0,
                    buf);
 
   return buf;
@@ -364,7 +370,7 @@
       if (!src->silent)
         g_print("fakesrc: ******* (%s:%s)> \n",GST_DEBUG_PAD_NAME(pad));
 
-      gtk_signal_emit (GTK_OBJECT (src), gst_fakesrc_signals[SIGNAL_HANDOFF],
+      g_signal_emit (G_OBJECT (src), gst_fakesrc_signals[SIGNAL_HANDOFF], 0,
                        buf);
       gst_pad_push (pad, buf);
 
diff --git a/gst/elements/gstfakesrc.h b/gst/elements/gstfakesrc.h
index ba92f63..dc327e2 100644
--- a/gst/elements/gstfakesrc.h
+++ b/gst/elements/gstfakesrc.h
@@ -50,13 +50,13 @@
 #define GST_TYPE_FAKESRC \
   (gst_fakesrc_get_type())
 #define GST_FAKESRC(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_FAKESRC,GstFakeSrc))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_FAKESRC,GstFakeSrc))
 #define GST_FAKESRC_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_FAKESRC,GstFakeSrcClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_FAKESRC,GstFakeSrcClass))
 #define GST_IS_FAKESRC(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_FAKESRC))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_FAKESRC))
 #define GST_IS_FAKESRC_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_FAKESRC))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_FAKESRC))
 
 typedef struct _GstFakeSrc GstFakeSrc;
 typedef struct _GstFakeSrcClass GstFakeSrcClass;
@@ -82,7 +82,7 @@
   void (*handoff) (GstElement *element, GstBuffer *buf, GstPad *pad);
 };
 
-GtkType gst_fakesrc_get_type(void);
+GType gst_fakesrc_get_type(void);
 
 #ifdef __cplusplus
 }
diff --git a/gst/elements/gstfdsink.c b/gst/elements/gstfdsink.c
index 1b6fed7..256e6a8 100644
--- a/gst/elements/gstfdsink.c
+++ b/gst/elements/gstfdsink.c
@@ -49,31 +49,31 @@
 static void gst_fdsink_class_init	(GstFdSinkClass *klass);
 static void gst_fdsink_init		(GstFdSink *fdsink);
 
-static void gst_fdsink_set_arg		(GtkObject *object, GtkArg *arg, guint id);
-static void gst_fdsink_get_arg		(GtkObject *object, GtkArg *arg, guint id);
+static void gst_fdsink_set_property		(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void gst_fdsink_get_property		(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
 static void gst_fdsink_chain		(GstPad *pad,GstBuffer *buf);
 
 static GstElementClass *parent_class = NULL;
 //static guint gst_fdsink_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_fdsink_get_type (void) 
 {
-  static GtkType fdsink_type = 0;
+  static GType fdsink_type = 0;
 
   if (!fdsink_type) {
-    static const GtkTypeInfo fdsink_info = {
-      "GstFdSink",
+    static const GTypeInfo fdsink_info = {
+      sizeof(GstFdSinkClass),      NULL,
+      NULL,
+      (GClassInitFunc)gst_fdsink_class_init,
+      NULL,
+      NULL,
       sizeof(GstFdSink),
-      sizeof(GstFdSinkClass),
-      (GtkClassInitFunc)gst_fdsink_class_init,
-      (GtkObjectInitFunc)gst_fdsink_init,
-      (GtkArgSetFunc)gst_fdsink_set_arg,
-      (GtkArgGetFunc)gst_fdsink_get_arg,
-      (GtkClassInitFunc)NULL,
+      0,
+      (GInstanceInitFunc)gst_fdsink_init,
     };
-    fdsink_type = gtk_type_unique (GST_TYPE_ELEMENT, &fdsink_info);
+    fdsink_type = g_type_register_static (GST_TYPE_ELEMENT, "GstFdSink", &fdsink_info, 0);
   }
   return fdsink_type;
 }
@@ -81,17 +81,18 @@
 static void
 gst_fdsink_class_init (GstFdSinkClass *klass) 
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
 
-  parent_class = gtk_type_class (GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
 
-  gtk_object_add_arg_type ("GstFdSink::fd", GTK_TYPE_INT,
-                           GTK_ARG_READWRITE, ARG_FD);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_FD,
+    g_param_spec_int("fd","fd","fd",
+                     G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
 
-  gtkobject_class->set_arg = gst_fdsink_set_arg;
-  gtkobject_class->get_arg = gst_fdsink_get_arg;
+  gobject_class->set_property = gst_fdsink_set_property;
+  gobject_class->get_property = gst_fdsink_get_property;
 }
 
 static void 
@@ -126,7 +127,7 @@
 }
 
 static void 
-gst_fdsink_set_arg (GtkObject *object, GtkArg *arg, guint id) 
+gst_fdsink_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) 
 {
   GstFdSink *fdsink;
    
@@ -135,9 +136,9 @@
   
   fdsink = GST_FDSINK (object);
 
-  switch(id) {
+  switch (prop_id) {
     case ARG_FD:
-      fdsink->fd = GTK_VALUE_INT (*arg);
+      fdsink->fd = g_value_get_int (value);
       break;
     default:
       break;
@@ -145,7 +146,7 @@
 }
 
 static void 
-gst_fdsink_get_arg (GtkObject *object, GtkArg *arg, guint id) 
+gst_fdsink_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) 
 {
   GstFdSink *fdsink;
    
@@ -154,9 +155,9 @@
   
   fdsink = GST_FDSINK (object);
 
-  switch(id) {
+  switch (prop_id) {
     case ARG_FD:
-      GTK_VALUE_INT (*arg) = fdsink->fd;
+      g_value_set_int (value, fdsink->fd);
       break;
     default:
       break;
diff --git a/gst/elements/gstfdsink.h b/gst/elements/gstfdsink.h
index 3a18efb..8cf98c2 100644
--- a/gst/elements/gstfdsink.h
+++ b/gst/elements/gstfdsink.h
@@ -40,13 +40,13 @@
 #define GST_TYPE_FDSINK \
   (gst_fdsink_get_type())
 #define GST_FDSINK(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_FDSINK,GstFdSink))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_FDSINK,GstFdSink))
 #define GST_FDSINK_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_FDSINK,GstFdSinkClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_FDSINK,GstFdSinkClass))
 #define GST_IS_FDSINK(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_FDSINK))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_FDSINK))
 #define GST_IS_FDSINK_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_FDSINK))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_FDSINK))
 
 typedef struct _GstFdSink GstFdSink;
 typedef struct _GstFdSinkClass GstFdSinkClass;
@@ -63,7 +63,7 @@
   GstElementClass parent_class;
 };
 
-GtkType gst_fdsink_get_type(void);
+GType gst_fdsink_get_type(void);
 
 
 #ifdef __cplusplus
diff --git a/gst/elements/gstfdsrc.c b/gst/elements/gstfdsrc.c
index b256890..658a894 100644
--- a/gst/elements/gstfdsrc.c
+++ b/gst/elements/gstfdsrc.c
@@ -57,8 +57,8 @@
 static void		gst_fdsrc_class_init	(GstFdSrcClass *klass);
 static void		gst_fdsrc_init		(GstFdSrc *fdsrc);
 
-static void		gst_fdsrc_set_arg	(GtkObject *object, GtkArg *arg, guint id);
-static void		gst_fdsrc_get_arg	(GtkObject *object, GtkArg *arg, guint id);
+static void		gst_fdsrc_set_property	(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void		gst_fdsrc_get_property	(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
 static GstBuffer *	gst_fdsrc_get		(GstPad *pad);
 
@@ -66,23 +66,23 @@
 static GstElementClass *parent_class = NULL;
 //static guint gst_fdsrc_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_fdsrc_get_type (void) 
 {
-  static GtkType fdsrc_type = 0;
+  static GType fdsrc_type = 0;
 
   if (!fdsrc_type) {
-    static const GtkTypeInfo fdsrc_info = {
-      "GstFdSrc",
+    static const GTypeInfo fdsrc_info = {
+      sizeof(GstFdSrcClass),      NULL,
+      NULL,
+      (GClassInitFunc)gst_fdsrc_class_init,
+      NULL,
+      NULL,
       sizeof(GstFdSrc),
-      sizeof(GstFdSrcClass),
-      (GtkClassInitFunc)gst_fdsrc_class_init,
-      (GtkObjectInitFunc)gst_fdsrc_init,
-      (GtkArgSetFunc)gst_fdsrc_set_arg,
-      (GtkArgGetFunc)gst_fdsrc_get_arg,
-      (GtkClassInitFunc)NULL,
+      0,
+      (GInstanceInitFunc)gst_fdsrc_init,
     };
-    fdsrc_type = gtk_type_unique (GST_TYPE_ELEMENT, &fdsrc_info);
+    fdsrc_type = g_type_register_static (GST_TYPE_ELEMENT, "GstFdSrc", &fdsrc_info, 0);
   }
   return fdsrc_type;
 }
@@ -90,21 +90,24 @@
 static void
 gst_fdsrc_class_init (GstFdSrcClass *klass) 
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
 
-  parent_class = gtk_type_class(GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref(GST_TYPE_ELEMENT);
 
-  gtk_object_add_arg_type ("GstFdSrc::location", GST_TYPE_FILENAME,
-                           GTK_ARG_WRITABLE, ARG_LOCATION);
-  gtk_object_add_arg_type ("GstFdSrc::bytesperread", GTK_TYPE_INT,
-                           GTK_ARG_READWRITE, ARG_BYTESPERREAD);
-  gtk_object_add_arg_type ("GstFdSrc::offset", GTK_TYPE_INT,
-                           GTK_ARG_READABLE, ARG_OFFSET);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_LOCATION,
+    g_param_spec_string("location","location","location",
+                        "",G_PARAM_WRITABLE)); // CHECKME!
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_BYTESPERREAD,
+    g_param_spec_int("bytesperread","bytesperread","bytesperread",
+                     G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_OFFSET,
+    g_param_spec_int("offset","offset","offset",
+                     G_MININT,G_MAXINT,0,G_PARAM_READABLE)); // CHECKME
 
-  gtkobject_class->set_arg = gst_fdsrc_set_arg;
-  gtkobject_class->get_arg = gst_fdsrc_get_arg;
+  gobject_class->set_property = gst_fdsrc_set_property;
+  gobject_class->get_property = gst_fdsrc_get_property;
 }
 
 static void gst_fdsrc_init(GstFdSrc *fdsrc) {
@@ -120,7 +123,7 @@
 
 
 static void 
-gst_fdsrc_set_arg (GtkObject *object, GtkArg *arg, guint id) 
+gst_fdsrc_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) 
 {
   GstFdSrc *src;
   int fd;
@@ -130,23 +133,23 @@
   
   src = GST_FDSRC (object);
 
-  switch(id) {
+  switch (prop_id) {
     case ARG_LOCATION:
       /* the element must not be playing in order to do this */
       g_return_if_fail (GST_STATE (src) < GST_STATE_PLAYING);
 
       /* if we get a NULL, consider it to be a fd of 0 */
-      if (GTK_VALUE_STRING (*arg) == NULL) {
+      if (g_value_get_string (value) == NULL) {
         gst_element_set_state (GST_ELEMENT (object), GST_STATE_NULL);
         src->fd = 0;
       /* otherwise set the new filename */
       } else {
-        if (sscanf (GTK_VALUE_STRING (*arg), "%d", &fd))
+        if (sscanf (g_value_get_string (value), "%d", &fd))
           src->fd = fd;
       }
       break;
     case ARG_BYTESPERREAD:
-      src->bytes_per_read = GTK_VALUE_INT (*arg);
+      src->bytes_per_read = g_value_get_int (value);
       break;
     default:
       break;
@@ -154,7 +157,7 @@
 }
 
 static void 
-gst_fdsrc_get_arg (GtkObject *object, GtkArg *arg, guint id) 
+gst_fdsrc_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) 
 {
   GstFdSrc *src;
 
@@ -163,15 +166,15 @@
   
   src = GST_FDSRC (object);
 
-  switch (id) {
+  switch (prop_id) {
     case ARG_BYTESPERREAD:
-      GTK_VALUE_INT (*arg) = src->bytes_per_read;
+      g_value_set_int (value, src->bytes_per_read);
       break;
     case ARG_OFFSET:
-      GTK_VALUE_INT (*arg) = src->curoffset;
+      g_value_set_int (value, src->curoffset);
       break;
     default:
-      arg->type = GTK_TYPE_INVALID;
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
diff --git a/gst/elements/gstfdsrc.h b/gst/elements/gstfdsrc.h
index 4c4c3cb..0fa2155 100644
--- a/gst/elements/gstfdsrc.h
+++ b/gst/elements/gstfdsrc.h
@@ -40,13 +40,13 @@
 #define GST_TYPE_FDSRC \
   (gst_fdsrc_get_type())
 #define GST_FDSRC(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_FDSRC,GstFdSrc))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_FDSRC,GstFdSrc))
 #define GST_FDSRC_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_FDSRC,GstFdSrcClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_FDSRC,GstFdSrcClass))
 #define GST_IS_FDSRC(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_FDSRC))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_FDSRC))
 #define GST_IS_FDSRC_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_FDSRC))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_FDSRC))
 
 
 typedef struct _GstFdSrc GstFdSrc;
@@ -70,7 +70,7 @@
   GstElementClass parent_class;
 };
 
-GtkType gst_fdsrc_get_type(void);
+GType gst_fdsrc_get_type(void);
 
 #ifdef __cplusplus
 }
diff --git a/gst/elements/gsthttpsrc.c b/gst/elements/gsthttpsrc.c
index 68c51b7..82be7b3 100644
--- a/gst/elements/gsthttpsrc.c
+++ b/gst/elements/gsthttpsrc.c
@@ -54,8 +54,8 @@
 static void 			gst_httpsrc_class_init	(GstHttpSrcClass *klass);
 static void 			gst_httpsrc_init	(GstHttpSrc *httpsrc);
 
-static void 			gst_httpsrc_set_arg	(GtkObject *object, GtkArg *arg, guint id);
-static void 			gst_httpsrc_get_arg	(GtkObject *object, GtkArg *arg, guint id);
+static void 			gst_httpsrc_set_property	(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void 			gst_httpsrc_get_property	(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 static GstElementStateReturn	gst_httpsrc_change_state	(GstElement *element);
 
 static GstBuffer *		gst_httpsrc_get		(GstPad *pad);
@@ -67,23 +67,23 @@
 static GstElementClass *parent_class = NULL;
 //static guint gst_httpsrc_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_httpsrc_get_type (void) 
 {
-  static GtkType httpsrc_type = 0;
+  static GType httpsrc_type = 0;
 
   if (!httpsrc_type) {
-    static const GtkTypeInfo httpsrc_info = {
-      "GstHttpSrc",
+    static const GTypeInfo httpsrc_info = {
+      sizeof(GstHttpSrcClass),      NULL,
+      NULL,
+      (GClassInitFunc)gst_httpsrc_class_init,
+      NULL,
+      NULL,
       sizeof(GstHttpSrc),
-      sizeof(GstHttpSrcClass),
-      (GtkClassInitFunc)gst_httpsrc_class_init,
-      (GtkObjectInitFunc)gst_httpsrc_init,
-      (GtkArgSetFunc)gst_httpsrc_set_arg,
-      (GtkArgGetFunc)gst_httpsrc_get_arg,
-      (GtkClassInitFunc)NULL,
+      0,
+      (GInstanceInitFunc)gst_httpsrc_init,
     };
-    httpsrc_type = gtk_type_unique (GST_TYPE_ELEMENT, &httpsrc_info);
+    httpsrc_type = g_type_register_static (GST_TYPE_ELEMENT, "GstHttpSrc", &httpsrc_info, 0);
   }
   return httpsrc_type;
 }
@@ -91,22 +91,24 @@
 static void
 gst_httpsrc_class_init (GstHttpSrcClass *klass) 
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
   GstElementClass *gstelement_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
   gstelement_class = (GstElementClass*)klass;
 
-  parent_class = gtk_type_class (GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
 
 
-  gtk_object_add_arg_type ("GstHttpSrc::location", GTK_TYPE_STRING,
-                           GTK_ARG_READWRITE, ARG_LOCATION);
-  gtk_object_add_arg_type ("GstHttpSrc::bytesperread", GTK_TYPE_INT,
-                           GTK_ARG_READWRITE, ARG_BYTESPERREAD);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_LOCATION,
+    g_param_spec_string("location","location","location",
+                        NULL, G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_BYTESPERREAD,
+    g_param_spec_int("bytesperread","bytesperread","bytesperread",
+                     G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
 
-  gtkobject_class->set_arg = gst_httpsrc_set_arg;
-  gtkobject_class->get_arg = gst_httpsrc_get_arg;
+  gobject_class->set_property = gst_httpsrc_set_property;
+  gobject_class->get_property = gst_httpsrc_get_property;
 
   gstelement_class->change_state = gst_httpsrc_change_state;
 }
@@ -197,7 +199,7 @@
 }
 
 static void 
-gst_httpsrc_set_arg (GtkObject *object, GtkArg *arg, guint id) 
+gst_httpsrc_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) 
 {
   GstHttpSrc *src;
 
@@ -206,23 +208,23 @@
   
   src = GST_HTTPSRC (object);
 
-  switch(id) {
+  switch (prop_id) {
     case ARG_LOCATION:
       /* the element must not be playing in order to do this */
       g_return_if_fail (GST_STATE (src) < GST_STATE_PLAYING);
 
       if (src->url) g_free (src->url);
       /* clear the url if we get a NULL (is that possible?) */
-      if (GTK_VALUE_STRING (*arg) == NULL) {
+      if (g_value_get_string (value) == NULL) {
         gst_element_set_state (GST_ELEMENT (object),GST_STATE_NULL);
         src->url = NULL;
       /* otherwise set the new url */
       } else {
-        src->url = g_strdup (GTK_VALUE_STRING (*arg));
+        src->url = g_strdup (g_value_get_string (value));
       }
       break;
     case ARG_BYTESPERREAD:
-      src->bytes_per_read = GTK_VALUE_INT (*arg);
+      src->bytes_per_read = g_value_get_int (value);
       break;
     default:
       break;
@@ -230,7 +232,7 @@
 }
 
 static void 
-gst_httpsrc_get_arg (GtkObject *object, GtkArg *arg, guint id) 
+gst_httpsrc_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) 
 {
   GstHttpSrc *httpsrc;
 
@@ -239,15 +241,15 @@
   
   httpsrc = GST_HTTPSRC (object);
                           
-  switch (id) {
+  switch (prop_id) {
     case ARG_LOCATION:
-      GTK_VALUE_STRING (*arg) = httpsrc->url;
+      g_value_set_string (value, httpsrc->url);
       break;
     case ARG_BYTESPERREAD:
-      GTK_VALUE_INT (*arg) = httpsrc->bytes_per_read;
+      g_value_set_int (value, httpsrc->bytes_per_read);
       break;
     default:
-      arg->type = GTK_TYPE_INVALID;
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
diff --git a/gst/elements/gsthttpsrc.h b/gst/elements/gsthttpsrc.h
index 8a3935e..c5056ec 100644
--- a/gst/elements/gsthttpsrc.h
+++ b/gst/elements/gsthttpsrc.h
@@ -42,13 +42,13 @@
 #define GST_TYPE_HTTPSRC \
   (gst_httpsrc_get_type())
 #define GST_HTTPSRC(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_HTTPSRC,GstHttpSrc))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_HTTPSRC,GstHttpSrc))
 #define GST_HTTPSRC_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_HTTPSRC,GstHttpSrcClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_HTTPSRC,GstHttpSrcClass))
 #define GST_IS_HTTPSRC(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_HTTPSRC))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_HTTPSRC))
 #define GST_IS_HTTPSRC_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_HTTPSRC))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_HTTPSRC))
 
 typedef enum {
   GST_HTTPSRC_OPEN		= GST_ELEMENT_FLAG_LAST,
@@ -76,7 +76,7 @@
   GstElementClass parent_class;
 };
 
-GtkType gst_httpsrc_get_type(void);
+GType gst_httpsrc_get_type(void);
 
 #ifdef __cplusplus
 }
diff --git a/gst/elements/gstidentity.c b/gst/elements/gstidentity.c
index 2787fc0..d125575 100644
--- a/gst/elements/gstidentity.c
+++ b/gst/elements/gstidentity.c
@@ -51,31 +51,31 @@
 static void gst_identity_class_init	(GstIdentityClass *klass);
 static void gst_identity_init		(GstIdentity *identity);
 
-static void gst_identity_set_arg	(GtkObject *object, GtkArg *arg, guint id);
-static void gst_identity_get_arg	(GtkObject *object, GtkArg *arg, guint id);
+static void gst_identity_set_property	(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void gst_identity_get_property	(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
 static void gst_identity_chain		(GstPad *pad, GstBuffer *buf);
 
 static GstElementClass *parent_class = NULL;
 //static guint gst_identity_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_identity_get_type (void) 
 {
-  static GtkType identity_type = 0;
+  static GType identity_type = 0;
 
   if (!identity_type) {
-    static const GtkTypeInfo identity_info = {
-      "GstIdentity",
+    static const GTypeInfo identity_info = {
+      sizeof(GstIdentityClass),      NULL,
+      NULL,
+      (GClassInitFunc)gst_identity_class_init,
+      NULL,
+      NULL,
       sizeof(GstIdentity),
-      sizeof(GstIdentityClass),
-      (GtkClassInitFunc)gst_identity_class_init,
-      (GtkObjectInitFunc)gst_identity_init,
-      (GtkArgSetFunc)gst_identity_set_arg,
-      (GtkArgGetFunc)gst_identity_get_arg,
-      (GtkClassInitFunc)NULL,
+      0,
+      (GInstanceInitFunc)gst_identity_init,
     };
-    identity_type = gtk_type_unique (GST_TYPE_ELEMENT, &identity_info);
+    identity_type = g_type_register_static (GST_TYPE_ELEMENT, "GstIdentity", &identity_info, 0);
   }
   return identity_type;
 }
@@ -83,21 +83,24 @@
 static void 
 gst_identity_class_init (GstIdentityClass *klass) 
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
 
-  parent_class = gtk_type_class (GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
 
-  gtk_object_add_arg_type ("GstIdentity::loop_based", GTK_TYPE_BOOL,
-                           GTK_ARG_READWRITE, ARG_LOOP_BASED);
-  gtk_object_add_arg_type ("GstIdentity::sleep_time", GTK_TYPE_UINT,
-                           GTK_ARG_READWRITE, ARG_SLEEP_TIME);
-  gtk_object_add_arg_type ("GstIdentity::silent", GTK_TYPE_BOOL,
-                           GTK_ARG_READWRITE, ARG_SILENT);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_LOOP_BASED,
+    g_param_spec_boolean("loop_based","loop_based","loop_based",
+                         TRUE,G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_SLEEP_TIME,
+    g_param_spec_uint("sleep_time","sleep_time","sleep_time",
+                     0,G_MAXUINT,0,G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_SILENT,
+    g_param_spec_boolean("silent","silent","silent",
+                         TRUE,G_PARAM_READWRITE)); // CHECKME
 
-  gtkobject_class->set_arg = gst_identity_set_arg;  
-  gtkobject_class->get_arg = gst_identity_get_arg;
+  gobject_class->set_property = gst_identity_set_property;  
+  gobject_class->get_property = gst_identity_get_property;
 }
 
 static GstBufferPool*
@@ -193,7 +196,7 @@
 }
 
 static void 
-gst_identity_set_arg (GtkObject *object, GtkArg *arg, guint id) 
+gst_identity_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) 
 {
   GstIdentity *identity;
 
@@ -202,9 +205,9 @@
   
   identity = GST_IDENTITY (object);
 
-  switch(id) {
+  switch (prop_id) {
     case ARG_LOOP_BASED:
-      identity->loop_based = GTK_VALUE_BOOL (*arg);
+      identity->loop_based = g_value_get_boolean (value);
       if (identity->loop_based) {
         gst_element_set_loop_function (GST_ELEMENT (identity), gst_identity_loop);
         gst_pad_set_chain_function (identity->sinkpad, NULL);
@@ -215,17 +218,17 @@
       }
       break;
     case ARG_SLEEP_TIME:
-      identity->sleep_time = GTK_VALUE_UINT (*arg);
+      identity->sleep_time = g_value_get_uint (value);
       break;
     case ARG_SILENT:
-      identity->silent = GTK_VALUE_BOOL (*arg);
+      identity->silent = g_value_get_boolean (value);
       break;
     default:
       break;
   }
 }
 
-static void gst_identity_get_arg(GtkObject *object,GtkArg *arg,guint id) {
+static void gst_identity_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) {
   GstIdentity *identity;
 
   /* it's not null if we got it, but it might not be ours */
@@ -233,18 +236,18 @@
   
   identity = GST_IDENTITY (object);
 
-  switch (id) {
+  switch (prop_id) {
     case ARG_LOOP_BASED:
-      GTK_VALUE_BOOL (*arg) = identity->loop_based;
+      g_value_set_boolean (value, identity->loop_based);
       break;
     case ARG_SLEEP_TIME:
-      GTK_VALUE_UINT (*arg) = identity->sleep_time;
+      g_value_set_uint (value, identity->sleep_time);
       break;
     case ARG_SILENT:
-      GTK_VALUE_BOOL (*arg) = identity->silent;
+      g_value_set_boolean (value, identity->silent);
       break;
     default:
-      arg->type = GTK_TYPE_INVALID;
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
diff --git a/gst/elements/gstidentity.h b/gst/elements/gstidentity.h
index 129c492..d6dd0bd 100644
--- a/gst/elements/gstidentity.h
+++ b/gst/elements/gstidentity.h
@@ -40,13 +40,13 @@
 #define GST_TYPE_IDENTITY \
   (gst_identity_get_type())
 #define GST_IDENTITY(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_IDENTITY,GstIdentity))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_IDENTITY,GstIdentity))
 #define GST_IDENTITY_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_IDENTITY,GstIdentityClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_IDENTITY,GstIdentityClass))
 #define GST_IS_IDENTITY(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_IDENTITY))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_IDENTITY))
 #define GST_IS_IDENTITY_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_IDENTITY))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_IDENTITY))
 
 typedef struct _GstIdentity GstIdentity;
 typedef struct _GstIdentityClass GstIdentityClass;
@@ -67,7 +67,7 @@
   GstElementClass parent_class;
 };
 
-GtkType gst_identity_get_type(void);
+GType gst_identity_get_type(void);
 
 
 #ifdef __cplusplus
diff --git a/gst/elements/gstmultidisksrc.c b/gst/elements/gstmultidisksrc.c
index 726aed9..7b0f683 100644
--- a/gst/elements/gstmultidisksrc.c
+++ b/gst/elements/gstmultidisksrc.c
@@ -54,8 +54,8 @@
 static void		gst_multidisksrc_class_init	(GstMultiDiskSrcClass *klass);
 static void		gst_multidisksrc_init		(GstMultiDiskSrc *disksrc);
 
-static void		gst_multidisksrc_set_arg	(GtkObject *object, GtkArg *arg, guint id);
-static void		gst_multidisksrc_get_arg	(GtkObject *object, GtkArg *arg, guint id);
+static void		gst_multidisksrc_set_property	(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void		gst_multidisksrc_get_property	(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
 static GstBuffer *	gst_multidisksrc_get		(GstPad *pad);
 //static GstBuffer *	gst_multidisksrc_get_region	(GstPad *pad,GstRegionType type,guint64 offset,guint64 len);
@@ -68,23 +68,23 @@
 static GstElementClass *parent_class = NULL;
 static guint gst_multidisksrc_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_multidisksrc_get_type(void)
 {
-  static GtkType multidisksrc_type = 0;
+  static GType multidisksrc_type = 0;
 
   if (!multidisksrc_type) {
-    static const GtkTypeInfo multidisksrc_info = {
-      "GstMultiDiskSrc",
+    static const GTypeInfo multidisksrc_info = {
+      sizeof(GstMultiDiskSrcClass),      NULL,
+      NULL,
+      (GClassInitFunc)gst_multidisksrc_class_init,
+      NULL,
+      NULL,
       sizeof(GstMultiDiskSrc),
-      sizeof(GstMultiDiskSrcClass),
-      (GtkClassInitFunc)gst_multidisksrc_class_init,
-      (GtkObjectInitFunc)gst_multidisksrc_init,
-      (GtkArgSetFunc)gst_multidisksrc_set_arg,
-      (GtkArgGetFunc)gst_multidisksrc_get_arg,
-      (GtkClassInitFunc)NULL,
+      0,
+      (GInstanceInitFunc)gst_multidisksrc_init,
     };
-    multidisksrc_type = gtk_type_unique (GST_TYPE_ELEMENT, &multidisksrc_info);
+    multidisksrc_type = g_type_register_static (GST_TYPE_ELEMENT, "GstMultiDiskSrc", &multidisksrc_info, 0);
   }
   return multidisksrc_type;
 }
@@ -92,26 +92,26 @@
 static void
 gst_multidisksrc_class_init (GstMultiDiskSrcClass *klass)
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
   GstElementClass *gstelement_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
   gstelement_class = (GstElementClass*)klass;
 
-  parent_class = gtk_type_class (GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
 
   gst_multidisksrc_signals[NEW_FILE] =
-    gtk_signal_new ("new_file", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstMultiDiskSrcClass, new_file),
-                    gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
-                    GTK_TYPE_POINTER);
-  gtk_object_class_add_signals (gtkobject_class, gst_multidisksrc_signals, LAST_SIGNAL);
+    g_signal_newc ("new_file", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GstMultiDiskSrcClass, new_file), NULL, NULL,
+                    g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
+                    G_TYPE_POINTER);
 
-  gtk_object_add_arg_type ("GstMultiDiskSrc::locations", GTK_TYPE_POINTER,
-                           GTK_ARG_READWRITE, ARG_LOCATIONS);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_LOCATIONS,
+    g_param_spec_string("locations","locations","locations",
+                        NULL, G_PARAM_READWRITE)); // CHECKME
 
-  gtkobject_class->set_arg = gst_multidisksrc_set_arg;
-  gtkobject_class->get_arg = gst_multidisksrc_get_arg;
+  gobject_class->set_property = gst_multidisksrc_set_property;
+  gobject_class->get_property = gst_multidisksrc_get_property;
 
   gstelement_class->change_state = gst_multidisksrc_change_state;
 }
@@ -135,7 +135,7 @@
 }
 
 static void
-gst_multidisksrc_set_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_multidisksrc_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
   GstMultiDiskSrc *src;
 
@@ -144,18 +144,18 @@
 
   src = GST_MULTIDISKSRC (object);
 
-  switch(id) {
+  switch (prop_id) {
     case ARG_LOCATIONS:
       /* the element must be stopped in order to do this */
       g_return_if_fail (GST_STATE (src) < GST_STATE_PLAYING);
 
       /* clear the filename if we get a NULL */
-      if (GTK_VALUE_POINTER (*arg) == NULL) {
+      if (g_value_get_pointer (value) == NULL) {
         gst_element_set_state (GST_ELEMENT (object), GST_STATE_NULL);
         src->listptr = NULL;
       /* otherwise set the new filenames */
       } else {
-        src->listptr = GTK_VALUE_POINTER(*arg);
+        src->listptr = g_value_get_pointer (value);
       }
       break;
     default:
@@ -164,7 +164,7 @@
 }
 
 static void
-gst_multidisksrc_get_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_multidisksrc_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
   GstMultiDiskSrc *src;
 
@@ -173,12 +173,12 @@
 
   src = GST_MULTIDISKSRC (object);
 
-  switch (id) {
+  switch (prop_id) {
     case ARG_LOCATIONS:
-      GTK_VALUE_POINTER (*arg) = src->listptr;
+      g_value_set_pointer (value, src->listptr);
       break;
     default:
-      arg->type = GTK_TYPE_INVALID;
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
@@ -215,7 +215,7 @@
       return NULL;
 
   // emitted after the open, as the user may free the list and string from here
-  gtk_signal_emit(GTK_OBJECT(src), gst_multidisksrc_signals[NEW_FILE], list);
+  g_signal_emit(G_OBJECT(src), gst_multidisksrc_signals[NEW_FILE], 0, list);
 
   /* create the buffer */
   // FIXME: should eventually use a bufferpool for this
diff --git a/gst/elements/gstmultidisksrc.h b/gst/elements/gstmultidisksrc.h
index ed4a94c..ba235e8 100644
--- a/gst/elements/gstmultidisksrc.h
+++ b/gst/elements/gstmultidisksrc.h
@@ -35,13 +35,13 @@
 #define GST_TYPE_MULTIDISKSRC \
   (gst_multidisksrc_get_type())
 #define GST_MULTIDISKSRC(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_MULTIDISKSRC,GstMultiDiskSrc))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_MULTIDISKSRC,GstMultiDiskSrc))
 #define GST_MULTIDISKSRC_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_MULTIDISKSRC,GstMultiDiskSrcClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_MULTIDISKSRC,GstMultiDiskSrcClass))
 #define GST_IS_MULTIDISKSRC(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_MULTIDISKSRC))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_MULTIDISKSRC))
 #define GST_IS_MULTIDISKSRC_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_MULTIDISKSRC))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_MULTIDISKSRC))
 
 typedef enum {
   GST_MULTIDISKSRC_OPEN		= GST_ELEMENT_FLAG_LAST,
@@ -75,7 +75,7 @@
   void (*new_file)  (GstMultiDiskSrc *multidisksrc, gchar *newfilename);
 };
 
-GtkType gst_multidisksrc_get_type(void);
+GType gst_multidisksrc_get_type(void);
 
 #ifdef __cplusplus
 }
diff --git a/gst/elements/gstmultifilesrc.c b/gst/elements/gstmultifilesrc.c
index 726aed9..7b0f683 100644
--- a/gst/elements/gstmultifilesrc.c
+++ b/gst/elements/gstmultifilesrc.c
@@ -54,8 +54,8 @@
 static void		gst_multidisksrc_class_init	(GstMultiDiskSrcClass *klass);
 static void		gst_multidisksrc_init		(GstMultiDiskSrc *disksrc);
 
-static void		gst_multidisksrc_set_arg	(GtkObject *object, GtkArg *arg, guint id);
-static void		gst_multidisksrc_get_arg	(GtkObject *object, GtkArg *arg, guint id);
+static void		gst_multidisksrc_set_property	(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void		gst_multidisksrc_get_property	(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
 static GstBuffer *	gst_multidisksrc_get		(GstPad *pad);
 //static GstBuffer *	gst_multidisksrc_get_region	(GstPad *pad,GstRegionType type,guint64 offset,guint64 len);
@@ -68,23 +68,23 @@
 static GstElementClass *parent_class = NULL;
 static guint gst_multidisksrc_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_multidisksrc_get_type(void)
 {
-  static GtkType multidisksrc_type = 0;
+  static GType multidisksrc_type = 0;
 
   if (!multidisksrc_type) {
-    static const GtkTypeInfo multidisksrc_info = {
-      "GstMultiDiskSrc",
+    static const GTypeInfo multidisksrc_info = {
+      sizeof(GstMultiDiskSrcClass),      NULL,
+      NULL,
+      (GClassInitFunc)gst_multidisksrc_class_init,
+      NULL,
+      NULL,
       sizeof(GstMultiDiskSrc),
-      sizeof(GstMultiDiskSrcClass),
-      (GtkClassInitFunc)gst_multidisksrc_class_init,
-      (GtkObjectInitFunc)gst_multidisksrc_init,
-      (GtkArgSetFunc)gst_multidisksrc_set_arg,
-      (GtkArgGetFunc)gst_multidisksrc_get_arg,
-      (GtkClassInitFunc)NULL,
+      0,
+      (GInstanceInitFunc)gst_multidisksrc_init,
     };
-    multidisksrc_type = gtk_type_unique (GST_TYPE_ELEMENT, &multidisksrc_info);
+    multidisksrc_type = g_type_register_static (GST_TYPE_ELEMENT, "GstMultiDiskSrc", &multidisksrc_info, 0);
   }
   return multidisksrc_type;
 }
@@ -92,26 +92,26 @@
 static void
 gst_multidisksrc_class_init (GstMultiDiskSrcClass *klass)
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
   GstElementClass *gstelement_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
   gstelement_class = (GstElementClass*)klass;
 
-  parent_class = gtk_type_class (GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
 
   gst_multidisksrc_signals[NEW_FILE] =
-    gtk_signal_new ("new_file", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstMultiDiskSrcClass, new_file),
-                    gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
-                    GTK_TYPE_POINTER);
-  gtk_object_class_add_signals (gtkobject_class, gst_multidisksrc_signals, LAST_SIGNAL);
+    g_signal_newc ("new_file", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GstMultiDiskSrcClass, new_file), NULL, NULL,
+                    g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
+                    G_TYPE_POINTER);
 
-  gtk_object_add_arg_type ("GstMultiDiskSrc::locations", GTK_TYPE_POINTER,
-                           GTK_ARG_READWRITE, ARG_LOCATIONS);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_LOCATIONS,
+    g_param_spec_string("locations","locations","locations",
+                        NULL, G_PARAM_READWRITE)); // CHECKME
 
-  gtkobject_class->set_arg = gst_multidisksrc_set_arg;
-  gtkobject_class->get_arg = gst_multidisksrc_get_arg;
+  gobject_class->set_property = gst_multidisksrc_set_property;
+  gobject_class->get_property = gst_multidisksrc_get_property;
 
   gstelement_class->change_state = gst_multidisksrc_change_state;
 }
@@ -135,7 +135,7 @@
 }
 
 static void
-gst_multidisksrc_set_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_multidisksrc_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
   GstMultiDiskSrc *src;
 
@@ -144,18 +144,18 @@
 
   src = GST_MULTIDISKSRC (object);
 
-  switch(id) {
+  switch (prop_id) {
     case ARG_LOCATIONS:
       /* the element must be stopped in order to do this */
       g_return_if_fail (GST_STATE (src) < GST_STATE_PLAYING);
 
       /* clear the filename if we get a NULL */
-      if (GTK_VALUE_POINTER (*arg) == NULL) {
+      if (g_value_get_pointer (value) == NULL) {
         gst_element_set_state (GST_ELEMENT (object), GST_STATE_NULL);
         src->listptr = NULL;
       /* otherwise set the new filenames */
       } else {
-        src->listptr = GTK_VALUE_POINTER(*arg);
+        src->listptr = g_value_get_pointer (value);
       }
       break;
     default:
@@ -164,7 +164,7 @@
 }
 
 static void
-gst_multidisksrc_get_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_multidisksrc_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
   GstMultiDiskSrc *src;
 
@@ -173,12 +173,12 @@
 
   src = GST_MULTIDISKSRC (object);
 
-  switch (id) {
+  switch (prop_id) {
     case ARG_LOCATIONS:
-      GTK_VALUE_POINTER (*arg) = src->listptr;
+      g_value_set_pointer (value, src->listptr);
       break;
     default:
-      arg->type = GTK_TYPE_INVALID;
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
@@ -215,7 +215,7 @@
       return NULL;
 
   // emitted after the open, as the user may free the list and string from here
-  gtk_signal_emit(GTK_OBJECT(src), gst_multidisksrc_signals[NEW_FILE], list);
+  g_signal_emit(G_OBJECT(src), gst_multidisksrc_signals[NEW_FILE], 0, list);
 
   /* create the buffer */
   // FIXME: should eventually use a bufferpool for this
diff --git a/gst/elements/gstmultifilesrc.h b/gst/elements/gstmultifilesrc.h
index ed4a94c..ba235e8 100644
--- a/gst/elements/gstmultifilesrc.h
+++ b/gst/elements/gstmultifilesrc.h
@@ -35,13 +35,13 @@
 #define GST_TYPE_MULTIDISKSRC \
   (gst_multidisksrc_get_type())
 #define GST_MULTIDISKSRC(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_MULTIDISKSRC,GstMultiDiskSrc))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_MULTIDISKSRC,GstMultiDiskSrc))
 #define GST_MULTIDISKSRC_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_MULTIDISKSRC,GstMultiDiskSrcClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_MULTIDISKSRC,GstMultiDiskSrcClass))
 #define GST_IS_MULTIDISKSRC(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_MULTIDISKSRC))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_MULTIDISKSRC))
 #define GST_IS_MULTIDISKSRC_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_MULTIDISKSRC))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_MULTIDISKSRC))
 
 typedef enum {
   GST_MULTIDISKSRC_OPEN		= GST_ELEMENT_FLAG_LAST,
@@ -75,7 +75,7 @@
   void (*new_file)  (GstMultiDiskSrc *multidisksrc, gchar *newfilename);
 };
 
-GtkType gst_multidisksrc_get_type(void);
+GType gst_multidisksrc_get_type(void);
 
 #ifdef __cplusplus
 }
diff --git a/gst/elements/gstpipefilter.c b/gst/elements/gstpipefilter.c
index 8b20e8b..50d42a1 100644
--- a/gst/elements/gstpipefilter.c
+++ b/gst/elements/gstpipefilter.c
@@ -59,8 +59,8 @@
 static void 			gst_pipefilter_class_init	(GstPipefilterClass *klass);
 static void 			gst_pipefilter_init		(GstPipefilter *pipefilter);
 
-static void 			gst_pipefilter_set_arg		(GtkObject *object, GtkArg *arg, guint id);
-static void 			gst_pipefilter_get_arg		(GtkObject *object, GtkArg *arg, guint id);
+static void 			gst_pipefilter_set_property	(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void 			gst_pipefilter_get_property	(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
 static GstBuffer*		gst_pipefilter_get		(GstPad *pad);
 static void 			gst_pipefilter_chain		(GstPad *pad, GstBuffer *buf);
@@ -71,23 +71,23 @@
 static GstElementClass *parent_class = NULL;
 //static guint gst_pipefilter_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_pipefilter_get_type (void)
 {
-  static GtkType pipefilter_type = 0;
+  static GType pipefilter_type = 0;
 
   if (!pipefilter_type) {
-    static const GtkTypeInfo pipefilter_info = {
-      "GstPipefilter",
+    static const GTypeInfo pipefilter_info = {
+      sizeof(GstPipefilterClass),      NULL,
+      NULL,
+      (GClassInitFunc)gst_pipefilter_class_init,
+      NULL,
+      NULL,
       sizeof(GstPipefilter),
-      sizeof(GstPipefilterClass),
-      (GtkClassInitFunc)gst_pipefilter_class_init,
-      (GtkObjectInitFunc)gst_pipefilter_init,
-      (GtkArgSetFunc)gst_pipefilter_set_arg,
-      (GtkArgGetFunc)gst_pipefilter_get_arg,
-      (GtkClassInitFunc)NULL,
+      0,
+      (GInstanceInitFunc)gst_pipefilter_init,
     };
-    pipefilter_type = gtk_type_unique(GST_TYPE_ELEMENT,&pipefilter_info);
+    pipefilter_type = g_type_register_static(GST_TYPE_ELEMENT, "GstPipefilter", &pipefilter_info, 0);
   }
   return pipefilter_type;
 }
@@ -95,21 +95,22 @@
 static void 
 gst_pipefilter_class_init (GstPipefilterClass *klass)
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
   GstElementClass *gstelement_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
   gstelement_class = (GstElementClass*)klass;
 
-  parent_class = gtk_type_class(GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref(GST_TYPE_ELEMENT);
 
   gstelement_class->change_state = gst_pipefilter_change_state;
 
-  gtk_object_add_arg_type("GstPipefilter::command", GTK_TYPE_STRING,
-                          GTK_ARG_READWRITE, ARG_COMMAND);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_COMMAND,
+    g_param_spec_string("command","command","command",
+                        NULL, G_PARAM_READWRITE)); // CHECKME
 
-  gtkobject_class->set_arg = gst_pipefilter_set_arg;  
-  gtkobject_class->get_arg = gst_pipefilter_get_arg;
+  gobject_class->set_property = gst_pipefilter_set_property;  
+  gobject_class->get_property = gst_pipefilter_get_property;
 }
 
 static void
@@ -219,7 +220,7 @@
 }
 
 static void
-gst_pipefilter_set_arg (GtkObject *object,GtkArg *arg,guint id)
+gst_pipefilter_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
   GstPipefilter *pipefilter;
 
@@ -227,10 +228,10 @@
   g_return_if_fail(GST_IS_PIPEFILTER(object));
   pipefilter = GST_PIPEFILTER(object);
 
-  switch(id) {
+  switch (prop_id) {
     case ARG_COMMAND:
-      pipefilter->orig_command = g_strdup(GTK_VALUE_STRING(*arg));
-      pipefilter->command = g_strsplit(GTK_VALUE_STRING(*arg), " ", 0);
+      pipefilter->orig_command = g_strdup(g_value_get_string (value));
+      pipefilter->command = g_strsplit(g_value_get_string (value), " ", 0);
       break;
     default:
       break;
@@ -238,7 +239,7 @@
 }
 
 static void
-gst_pipefilter_get_arg (GtkObject *object,GtkArg *arg,guint id)
+gst_pipefilter_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
   GstPipefilter *pipefilter;
 
@@ -246,12 +247,12 @@
   g_return_if_fail(GST_IS_PIPEFILTER(object));
   pipefilter = GST_PIPEFILTER(object);
 
-  switch (id) {
+  switch (prop_id) {
     case ARG_COMMAND:
-      GTK_VALUE_STRING(*arg) = pipefilter->orig_command;
+      g_value_set_string (value, pipefilter->orig_command);
       break;
     default:
-      arg->type = GTK_TYPE_INVALID;
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
diff --git a/gst/elements/gstpipefilter.h b/gst/elements/gstpipefilter.h
index 6872dec..221a914 100644
--- a/gst/elements/gstpipefilter.h
+++ b/gst/elements/gstpipefilter.h
@@ -39,13 +39,13 @@
 #define GST_TYPE_PIPEFILTER \
   (gst_pipefilter_get_type())
 #define GST_PIPEFILTER(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_PIPEFILTER,GstPipefilter))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_PIPEFILTER,GstPipefilter))
 #define GST_PIPEFILTER_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_PIPEFILTER,GstPipefilterClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_PIPEFILTER,GstPipefilterClass))
 #define GST_IS_PIPEFILTER(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_PIPEFILTER))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_PIPEFILTER))
 #define GST_IS_PIPEFILTER_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_PIPEFILTER))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_PIPEFILTER))
 
 typedef enum {
   GST_PIPEFILTER_OPEN		= GST_ELEMENT_FLAG_LAST,
@@ -80,7 +80,7 @@
   GstElementClass parent_class;
 };
 
-GtkType gst_pipefilter_get_type(void);
+GType gst_pipefilter_get_type(void);
 
 
 #ifdef __cplusplus
diff --git a/gst/elements/gstsinesrc.c b/gst/elements/gstsinesrc.c
index 6a00e1e..ea66bd2 100644
--- a/gst/elements/gstsinesrc.c
+++ b/gst/elements/gstsinesrc.c
@@ -83,8 +83,8 @@
 static void gst_sinesrc_class_init(GstSineSrcClass *klass);
 static void gst_sinesrc_init(GstSineSrc *src);
 static GstPadNegotiateReturn gst_sinesrc_negotiate (GstPad *pad, GstCaps **caps, gpointer *data); 
-static void gst_sinesrc_set_arg(GtkObject *object,GtkArg *arg,guint id);
-static void gst_sinesrc_get_arg(GtkObject *object,GtkArg *arg,guint id);
+static void gst_sinesrc_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void gst_sinesrc_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 //static gboolean gst_sinesrc_change_state(GstElement *element,
 //                                          GstElementState state);
 //static void gst_sinesrc_close_audio(GstSineSrc *src);
@@ -92,58 +92,64 @@
 static void gst_sinesrc_populate_sinetable(GstSineSrc *src);
 static inline void gst_sinesrc_update_table_inc(GstSineSrc *src);
 static inline void gst_sinesrc_update_vol_scale(GstSineSrc *src);
-void gst_sinesrc_force_caps(GstSineSrc *src);
+static void gst_sinesrc_force_caps(GstSineSrc *src);
 
 static GstBuffer * gst_sinesrc_get(GstPad *pad);
 
 static GstElementClass *parent_class = NULL;
 //static guint gst_sinesrc_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_sinesrc_get_type(void) {
-  static GtkType sinesrc_type = 0;
+  static GType sinesrc_type = 0;
 
   if (!sinesrc_type) {
-    static const GtkTypeInfo sinesrc_info = {
-      "GstSineSrc",
+    static const GTypeInfo sinesrc_info = {
+      sizeof(GstSineSrcClass),      NULL,
+      NULL,
+      (GClassInitFunc)gst_sinesrc_class_init,
+      NULL,
+      NULL,
       sizeof(GstSineSrc),
-      sizeof(GstSineSrcClass),
-      (GtkClassInitFunc)gst_sinesrc_class_init,
-      (GtkObjectInitFunc)gst_sinesrc_init,
-      (GtkArgSetFunc)gst_sinesrc_set_arg,
-      (GtkArgGetFunc)gst_sinesrc_get_arg,
-      (GtkClassInitFunc)NULL,
+      0,
+      (GInstanceInitFunc)gst_sinesrc_init,
     };
-    sinesrc_type = gtk_type_unique(GST_TYPE_ELEMENT,&sinesrc_info);
+    sinesrc_type = g_type_register_static(GST_TYPE_ELEMENT, "GstSineSrc", &sinesrc_info, 0);
   }
   return sinesrc_type;
 }
 
 static void
 gst_sinesrc_class_init(GstSineSrcClass *klass) {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
   GstElementClass *gstelement_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
   gstelement_class = (GstElementClass*)klass;
 
-  parent_class = gtk_type_class(GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref(GST_TYPE_ELEMENT);
 
-  gtk_object_add_arg_type("GstSineSrc::volume", GTK_TYPE_DOUBLE,
-                          GTK_ARG_READWRITE, ARG_VOLUME);
-  gtk_object_add_arg_type("GstSineSrc::format", GTK_TYPE_INT,
-                          GTK_ARG_READWRITE, ARG_FORMAT);
-  gtk_object_add_arg_type("GstSineSrc::samplerate", GTK_TYPE_INT,
-                          GTK_ARG_READWRITE, ARG_SAMPLERATE);
-  gtk_object_add_arg_type("GstSineSrc::tablesize", GTK_TYPE_INT,
-                          GTK_ARG_READWRITE, ARG_TABLESIZE);
-  gtk_object_add_arg_type("GstSineSrc::freq", GTK_TYPE_DOUBLE,
-                          GTK_ARG_READWRITE, ARG_FREQ);
-  gtk_object_add_arg_type("GstSineSrc::buffersize", GTK_TYPE_INT,
-                          GTK_ARG_READWRITE, ARG_BUFFER_SIZE);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_VOLUME,
+    g_param_spec_double("volume","volume","volume",
+                        0.0, 1.0, 0.0,G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_FORMAT,
+    g_param_spec_int("format","format","format",
+                     G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_SAMPLERATE,
+    g_param_spec_int("samplerate","samplerate","samplerate",
+                     G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_TABLESIZE,
+    g_param_spec_int("tablesize","tablesize","tablesize",
+                     G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_FREQ,
+    g_param_spec_double("freq","freq","freq",
+                        0.0,G_MAXDOUBLE, 440.0,G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_BUFFER_SIZE,
+    g_param_spec_int("buffersize","buffersize","buffersize",
+                     0, G_MAXINT, 1024, G_PARAM_READWRITE)); 
                           
-  gtkobject_class->set_arg = gst_sinesrc_set_arg;
-  gtkobject_class->get_arg = gst_sinesrc_get_arg;
+  gobject_class->set_property = gst_sinesrc_set_property;
+  gobject_class->get_property = gst_sinesrc_get_property;
 
 //  gstelement_class->change_state = gst_sinesrc_change_state;
 }
@@ -246,42 +252,40 @@
 }
 
 static void 
-gst_sinesrc_set_arg(GtkObject *object,GtkArg *arg,guint id) {
+gst_sinesrc_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) {
   GstSineSrc *src;
 
   /* it's not null if we got it, but it might not be ours */
   g_return_if_fail(GST_IS_SINESRC(object));
   src = GST_SINESRC(object);
 
-  switch (id) {
+  switch (prop_id) {
     case ARG_VOLUME:
-      if (GTK_VALUE_DOUBLE(*arg) < 0.0 || GTK_VALUE_DOUBLE(*arg) > 1.0)
-        break;
-      src->volume = GTK_VALUE_DOUBLE(*arg);
+      src->volume = g_value_get_double (value);
       gst_sinesrc_update_vol_scale(src);
       break;
     case ARG_FORMAT:
-      src->format = GTK_VALUE_INT(*arg);
+      src->format = g_value_get_int (value);
       src->newcaps=TRUE;
       break;
     case ARG_SAMPLERATE:
-      src->samplerate = GTK_VALUE_INT(*arg);
+      src->samplerate = g_value_get_int (value);
       src->newcaps=TRUE;
       gst_sinesrc_update_table_inc(src);
       break;
     case ARG_FREQ: {
-      if (GTK_VALUE_DOUBLE(*arg) <= 0.0 || GTK_VALUE_DOUBLE(*arg) > src->samplerate/2)
+      if (g_value_get_double (value) <= 0.0 || g_value_get_double (value) > src->samplerate/2)
         break;
-      src->freq = GTK_VALUE_DOUBLE(*arg);
+      src->freq = g_value_get_double (value);
       gst_sinesrc_update_table_inc(src);
       break;
     case ARG_TABLESIZE:
-      src->table_size = GTK_VALUE_INT(*arg);
+      src->table_size = g_value_get_int (value);
       gst_sinesrc_populate_sinetable(src);
       gst_sinesrc_update_table_inc(src);
       break;
     case ARG_BUFFER_SIZE:
-      src->buffer_size = GTK_VALUE_INT(*arg);
+      src->buffer_size = g_value_get_int (value);
       break;
     }
     default:
@@ -290,34 +294,34 @@
 }
 
 static void 
-gst_sinesrc_get_arg(GtkObject *object,GtkArg *arg,guint id) {
+gst_sinesrc_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) {
   GstSineSrc *src;
 
   /* it's not null if we got it, but it might not be ours */
   g_return_if_fail(GST_IS_SINESRC(object));
   src = GST_SINESRC(object);
 
-  switch (id) {
+  switch (prop_id) {
     case ARG_VOLUME:
-      GTK_VALUE_DOUBLE(*arg) = src->volume;
+      g_value_set_double (value, src->volume);
       break;
     case ARG_FORMAT:
-      GTK_VALUE_INT(*arg) = src->format;
+      g_value_set_int (value, src->format);
       break;
     case ARG_SAMPLERATE:
-      GTK_VALUE_INT(*arg) = src->samplerate;
+      g_value_set_int (value, src->samplerate);
       break;
     case ARG_FREQ:
-      GTK_VALUE_DOUBLE(*arg) = src->freq;
+      g_value_set_double (value, src->freq);
       break;
     case ARG_TABLESIZE:
-      GTK_VALUE_INT(*arg) = src->table_size;
+      g_value_set_int (value, src->table_size);
       break;
     case ARG_BUFFER_SIZE:
-      GTK_VALUE_INT(*arg) = src->buffer_size;
+      g_value_set_int (value, src->buffer_size);
       break;
     default:
-      arg->type = GTK_TYPE_INVALID;
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
@@ -372,7 +376,7 @@
   src->vol_scale = 32767 * src->volume;
 }
 
-void 
+static void 
 gst_sinesrc_force_caps(GstSineSrc *src) {
   GstCaps *caps;
 
diff --git a/gst/elements/gstsinesrc.h b/gst/elements/gstsinesrc.h
index ed38eeb..390d12b 100644
--- a/gst/elements/gstsinesrc.h
+++ b/gst/elements/gstsinesrc.h
@@ -39,13 +39,13 @@
 #define GST_TYPE_SINESRC \
   (gst_sinesrc_get_type())
 #define GST_SINESRC(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_SINESRC,GstSineSrc))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_SINESRC,GstSineSrc))
 #define GST_SINESRC_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_SINESRC,GstSineSrcClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_SINESRC,GstSineSrcClass))
 #define GST_IS_SINESRC(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_SINESRC))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_SINESRC))
 #define GST_IS_SINESRC_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_SINESRC))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_SINESRC))
 
 typedef struct _GstSineSrc GstSineSrc;
 typedef struct _GstSineSrcClass GstSineSrcClass;
@@ -85,7 +85,7 @@
   GstElementClass parent_class;
 };
 
-GtkType gst_sinesrc_get_type(void);
+GType gst_sinesrc_get_type(void);
 gboolean gst_sinesrc_factory_init (GstElementFactory *factory);
 
 #ifdef __cplusplus
diff --git a/gst/elements/gsttee.c b/gst/elements/gsttee.c
index 67ab4b1..0e1b418 100644
--- a/gst/elements/gsttee.c
+++ b/gst/elements/gsttee.c
@@ -63,7 +63,8 @@
 
 static GstPad* 	gst_tee_request_new_pad (GstElement *element, GstPadTemplate *temp);
 
-static void 	gst_tee_get_arg 	(GtkObject *object, GtkArg *arg, guint id);
+static void 	gst_tee_set_property 	(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void 	gst_tee_get_property 	(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
 static void  	gst_tee_chain 		(GstPad *pad, GstBuffer *buf);
 
@@ -71,22 +72,22 @@
 //static guint gst_tee_signals[LAST_SIGNAL] = { 0 };
 static GstPadTemplate *gst_tee_src_template;
 
-GtkType
+GType
 gst_tee_get_type(void) {
-  static GtkType tee_type = 0;
+  static GType tee_type = 0;
 
   if (!tee_type) {
-    static const GtkTypeInfo tee_info = {
-      "GstTee",
+    static const GTypeInfo tee_info = {
+      sizeof(GstTeeClass),      NULL,
+      NULL,
+      (GClassInitFunc)gst_tee_class_init,
+      NULL,
+      NULL,
       sizeof(GstTee),
-      sizeof(GstTeeClass),
-      (GtkClassInitFunc)gst_tee_class_init,
-      (GtkObjectInitFunc)gst_tee_init,
-      (GtkArgSetFunc)NULL,
-      (GtkArgGetFunc)NULL,
-      (GtkClassInitFunc)NULL,
+      0,
+      (GInstanceInitFunc)gst_tee_init,
     };
-    tee_type = gtk_type_unique (GST_TYPE_ELEMENT, &tee_info);
+    tee_type = g_type_register_static (GST_TYPE_ELEMENT, "GstTee", &tee_info, 0);
   }
   return tee_type;
 }
@@ -94,18 +95,20 @@
 static void
 gst_tee_class_init (GstTeeClass *klass) 
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
   GstElementClass *gstelement_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
   gstelement_class = (GstElementClass*)klass;
 
-  parent_class = gtk_type_class(GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref(GST_TYPE_ELEMENT);
 
-  gtk_object_add_arg_type ("GstTee::num_pads", GTK_TYPE_INT,
-                            GTK_ARG_READABLE, ARG_NUM_PADS);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_NUM_PADS,
+    g_param_spec_int("num_pads","num_pads","num_pads",
+                     G_MININT,G_MAXINT,0,G_PARAM_READABLE)); // CHECKME
 
-  gtkobject_class->get_arg = gst_tee_get_arg;
+  gobject_class->set_property = gst_tee_set_property;
+  gobject_class->get_property = gst_tee_get_property;
 
   gstelement_class->request_new_pad = gst_tee_request_new_pad;
 }
@@ -149,7 +152,7 @@
 }
 
 static void
-gst_tee_get_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_tee_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
   GstTee *tee;
 
@@ -158,9 +161,28 @@
 
   tee = GST_TEE (object);
 
-  switch(id) {
+  switch (prop_id) {
+//    case ARG_NUM_PADS:
+//      g_value_set_int (value, tee->numsrcpads);
+//      break;
+    default:
+      break;
+  }
+}
+
+static void
+gst_tee_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
+{
+  GstTee *tee;
+
+  /* it's not null if we got it, but it might not be ours */
+  g_return_if_fail (GST_IS_TEE (object));
+
+  tee = GST_TEE (object);
+
+  switch (prop_id) {
     case ARG_NUM_PADS:
-      GTK_VALUE_INT (*arg) = tee->numsrcpads;
+      g_value_set_int (value, tee->numsrcpads);
       break;
     default:
       break;
diff --git a/gst/elements/gsttee.h b/gst/elements/gsttee.h
index f7f3979..7607629 100644
--- a/gst/elements/gsttee.h
+++ b/gst/elements/gsttee.h
@@ -36,13 +36,13 @@
 #define GST_TYPE_TEE \
   (gst_tee_get_type())
 #define GST_TEE(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_TEE,GstTee))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_TEE,GstTee))
 #define GST_TEE_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_TEE,GstTeeClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_TEE,GstTeeClass))
 #define GST_IS_TEE(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_TEE))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_TEE))
 #define GST_IS_TEE_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_TEE))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_TEE))
 
 typedef struct _GstTee 		GstTee;
 typedef struct _GstTeeClass 	GstTeeClass;
@@ -60,7 +60,7 @@
   GstElementClass parent_class;
 };
 
-GtkType 	gst_tee_get_type	(void);
+GType 	gst_tee_get_type	(void);
 
 gboolean 	gst_tee_factory_init 	(GstElementFactory *factory);
 
diff --git a/gst/gobject2gtk.c b/gst/gobject2gtk.c
new file mode 100644
index 0000000..7e37aea
--- /dev/null
+++ b/gst/gobject2gtk.c
@@ -0,0 +1,294 @@
+#include <stdio.h>
+#include "gobject2gtk.h"
+
+
+
+// GObject dummy implementation
+static void
+g_object_set_arg(GtkObject *object, GtkArg *arg, guint id)
+{
+  ((GObjectClass *)object->klass)->set_property((GObject *)object,id,arg,NULL);
+}
+
+static void
+g_object_get_arg(GtkObject *object, GtkArg *arg, guint id)
+{
+  ((GObjectClass *)object->klass)->get_property((GObject *)object,id,arg,NULL);
+}
+
+static void
+g_object_base_class_init (GObjectClass *klass)
+{
+  GtkObjectClass *gtkobject_class;
+
+  gtkobject_class = (GtkObjectClass*) klass;
+ 
+  gtkobject_class->set_arg = g_object_set_arg;
+  gtkobject_class->get_arg = g_object_get_arg;
+}
+
+GType
+g_object_get_type (void)
+{
+  static GType object_type = 0;
+
+  if (!object_type) {
+    static const GtkTypeInfo object_info = {
+      "GObject",
+      sizeof(GObject),
+      sizeof(GObjectClass),
+      (GtkClassInitFunc)NULL,
+      (GtkObjectInitFunc)NULL,
+      (GtkArgSetFunc)NULL,
+      (GtkArgGetFunc)NULL,
+      (GtkClassInitFunc)g_object_base_class_init,
+    };
+    object_type = gtk_type_unique(gtk_object_get_type(),&object_info);
+  }
+  return object_type;
+} 
+
+
+
+
+guint
+g_type_register_static (GtkType parent_type, gchar *type_name,
+                        const GTypeInfo *info, guint flags)
+{
+  GtkTypeInfo gtkinfo = {
+    type_name,
+    info->instance_size,
+    info->class_size,
+    info->class_init,
+    info->instance_init,
+    NULL,
+    NULL,
+    info->base_init,
+  };
+  return gtk_type_unique(parent_type,&gtkinfo);
+}
+
+
+gpointer
+g_object_new(GtkType type,gpointer blah_varargs_stuff) {
+  return gtk_type_new(type);
+}
+
+
+void
+g_object_class_install_property(GtkObjectClass *oclass,guint property_id,GParamSpec *pspec)
+{
+  gchar *arg_fullname;
+ 
+  arg_fullname = g_strdup_printf("%s::%s",gtk_type_name(oclass->type),pspec->name);
+  //fprintf(stderr,"installing arg \"%s\" into class \"%s\"\n",arg_fullname,"");
+  gtk_object_add_arg_type(arg_fullname,pspec->value_type,pspec->flags,property_id);
+  g_free(pspec);
+}
+
+GParamSpec *
+g_object_class_find_property(GtkObjectClass *class,gchar *name)
+{
+  GtkArgInfo *info;
+  GParamSpec *spec;
+
+  //fprintf(stderr,"class name is %s\n",gtk_type_name(class->type));
+
+  gtk_object_arg_get_info(class->type,name,&info);
+  spec = g_new0(GParamSpec,1);
+
+  if (info) {
+    spec->name = name;
+    spec->value_type = info->type;
+    spec->flags = info->arg_flags;
+  } else {
+    spec->value_type = GTK_TYPE_NONE;
+  }
+
+  return spec;
+}
+
+GParamSpec **
+g_object_class_list_properties(GtkObjectClass *oclass,guint *n_properties) {
+  GType type = G_OBJECT_CLASS_TYPE (oclass);
+  guint32 *flags;
+  GtkArg *args;
+  gint num_args;
+  GParamSpec **params;
+  int i;
+
+  args = gtk_object_query_args (type, &flags, &num_args);
+
+  params = g_new0(GParamSpec *,num_args);
+  for (i=0;i<num_args;i++) {
+    params[i] = g_new0(GParamSpec,1);
+    params[i]->name = args[i].name;
+    params[i]->value_type = args[i].type;
+    params[i]->flags = flags[i];
+  }
+
+  return params;
+}
+
+GParamSpec *
+g_param_spec_boolean(gchar *name,gchar *nick,gchar *blurb,gboolean def,gint flags) {
+  GParamSpec *spec = g_new(GParamSpec,1);
+
+  spec->name = name;
+  spec->value_type = GTK_TYPE_BOOL;
+  spec->flags = flags;
+
+  return spec;
+}
+
+GParamSpec *
+g_param_spec_enum(gchar *name,gchar *nick,gchar *blurb,GtkType e,guint def,gint flags) {
+  GParamSpec *spec = g_new(GParamSpec,1);
+
+  spec->name = name;
+  spec->value_type = e;
+  spec->flags = flags;
+
+  return spec;
+}
+
+GParamSpec *
+g_param_spec_int(gchar *name,gchar *nick,gchar *blurb,gint min,gint max,gint def,gint flags) {
+  GParamSpec *spec = g_new(GParamSpec,1);
+
+  spec->name = name;
+  spec->value_type = GTK_TYPE_INT;
+  spec->flags = flags;
+
+  return spec;
+}
+
+GParamSpec *
+g_param_spec_uint(gchar *name,gchar *nick,gchar *blurb,guint min,guint max,guint def,gint flags) {
+  GParamSpec *spec = g_new(GParamSpec,1);
+
+  spec->name = name;
+  spec->value_type = GTK_TYPE_UINT;
+  spec->flags = flags;
+
+  return spec;
+}
+
+GParamSpec *
+g_param_spec_long(gchar *name,gchar *nick,gchar *blurb,glong min,glong max,glong def,gint flags) {
+  GParamSpec *spec = g_new(GParamSpec,1);
+
+  spec->name = name;
+  spec->value_type = GTK_TYPE_LONG;
+  spec->flags = flags;
+
+  return spec;
+}
+
+GParamSpec *
+g_param_spec_ulong(gchar *name,gchar *nick,gchar *blurb,gulong min,gulong max,gulong def,gint flags) {
+  GParamSpec *spec = g_new(GParamSpec,1);
+
+  spec->name = name;
+  spec->value_type = GTK_TYPE_ULONG;
+  spec->flags = flags;
+
+  return spec;
+}
+
+GParamSpec *
+g_param_spec_float(gchar *name,gchar *nick,gchar *blurb,float min,float max,float def,gint flags) {
+  GParamSpec *spec = g_new(GParamSpec,1);
+
+  spec->name = name;
+  spec->value_type = GTK_TYPE_FLOAT;
+  spec->flags = flags;
+
+  return spec;
+}
+
+GParamSpec *
+g_param_spec_double(gchar *name,gchar *nick,gchar *blurb,double min,double max,double def,gint flags) {
+  GParamSpec *spec = g_new(GParamSpec,1);
+
+  spec->name = name;
+  spec->value_type = GTK_TYPE_DOUBLE;
+  spec->flags = flags;
+
+  return spec;
+}
+
+GParamSpec *
+g_param_spec_pointer(gchar *name,gchar *nick,gchar *blurb,gint flags) {
+  GParamSpec *spec = g_new(GParamSpec,1);
+
+  spec->name = name;
+  spec->value_type = GTK_TYPE_POINTER;
+  spec->flags = flags;
+
+  return spec;
+}
+
+GParamSpec *
+g_param_spec_string(gchar *name,gchar *nick,gchar *blurb,gchar *def,gint flags) {
+  GParamSpec *spec = g_new(GParamSpec,1);
+
+  spec->name = name;
+  spec->value_type = GTK_TYPE_STRING;
+  spec->flags = flags;
+
+  return spec;
+}
+
+
+
+guint
+g_signal_newc (const gchar       *name,
+               GtkType            object_type,
+               GtkSignalRunType   signal_flags,
+               guint              function_offset,
+               gpointer           accumulator,  // GSignalAccumulator
+               gpointer           accu_data,
+               GtkSignalMarshaller  marshaller,
+               GType              return_val,
+               guint              nparams,
+               ...)
+{
+  GtkType *params;
+  guint i;
+  va_list args;
+  guint signal_id;
+
+#define MAX_SIGNAL_PARAMS		(31)		// from gtksignal.c
+  g_return_val_if_fail (nparams < MAX_SIGNAL_PARAMS, 0);
+     
+  if (nparams > 0) 
+    {
+      params = g_new (GtkType, nparams);
+
+      va_start (args, nparams);
+                   
+      for (i = 0; i < nparams; i++)
+        params[i] = va_arg (args, GtkType);
+  
+      va_end (args);
+    }           
+  else
+    params = NULL;
+ 
+  signal_id = gtk_signal_newv (name,
+                               signal_flags,
+                               object_type,
+                               function_offset,
+                               marshaller,
+                               return_val,
+                               nparams,
+                               params);
+          
+  g_free (params);
+
+  // now register it.
+  gtk_object_class_add_signals(gtk_type_class(object_type), &signal_id, 1);
+    
+  return signal_id;
+}
diff --git a/gst/gobject2gtk.h b/gst/gobject2gtk.h
new file mode 100644
index 0000000..b80f9fc
--- /dev/null
+++ b/gst/gobject2gtk.h
@@ -0,0 +1,326 @@
+#include <gtk/gtk.h>
+
+#define G_MAXUINT UINT_MAX
+#define G_MAXULONG ULONG_MAX
+
+#define g_object_ref(obj)			gtk_object_ref((GtkObject *)(obj))
+#define g_object_unref(obj)			gtk_object_unref((GtkObject *)(obj))
+
+// the helper macros for type checking
+#define G_TYPE_CHECK_INSTANCE_CAST		GTK_CHECK_CAST
+#define G_TYPE_CHECK_INSTANCE_TYPE		GTK_CHECK_TYPE
+#define G_TYPE_CHECK_CLASS_CAST			GTK_CHECK_CLASS_CAST
+#define G_TYPE_CHECK_CLASS_TYPE			GTK_CHECK_CLASS_TYPE
+#define G_TYPE_FROM_CLASS(klass)		(((GtkObjectClass *)(klass))->type)
+#define G_OBJECT_GET_CLASS(object)		(GTK_OBJECT(object)->klass)
+#define G_OBJECT_TYPE				GTK_OBJECT_TYPE
+#define G_OBJECT_CLASS_TYPE(gclass)		(gclass->type)
+
+// types
+#define G_TYPE_NONE				GTK_TYPE_NONE
+#define G_TYPE_CHAR				GTK_TYPE_CHAR
+#define G_TYPE_UCHAR				GTK_TYPE_UCHAR
+#define G_TYPE_BOOLEAN				GTK_TYPE_BOOL
+#define G_TYPE_INT				GTK_TYPE_INT
+#define G_TYPE_UINT				GTK_TYPE_UINT
+#define G_TYPE_LONG				GTK_TYPE_LONG
+#define G_TYPE_ULONG				GTK_TYPE_ULONG
+#define G_TYPE_ENUM				GTK_TYPE_ENUM
+#define G_TYPE_FLAGS				GTK_TYPE_FLAGS
+#define G_TYPE_FLOAT				GTK_TYPE_FLOAT
+#define G_TYPE_DOUBLE				GTK_TYPE_DOUBLE
+#define G_TYPE_STRING				GTK_TYPE_STRING
+#define G_TYPE_POINTER				GTK_TYPE_POINTER
+#define G_TYPE_BOXED				GTK_TYPE_BOXED
+#define G_TYPE_PARAM				GTK_TYPE_PARAM
+
+// marshallers
+#define g_cclosure_marshal_VOID__VOID		gtk_marshal_NONE__NONE
+#define g_cclosure_marshal_VOID__BOOLEAN	gtk_marshal_NONE__BOOL
+#define g_cclosure_marshal_VOID__CHAR		gtk_marshal_NONE__CHAR
+#define g_cclosure_marshal_VOID__UCHAR		gtk_marshal_NONE__UCHAR
+#define g_cclosure_marshal_VOID__INT		gtk_marshal_NONE__INT
+#define g_cclosure_marshal_VOID__UINT		gtk_marshal_NONE__UINT
+#define g_cclosure_marshal_VOID__LONG		gtk_marshal_NONE__LONG
+#define g_cclosure_marshal_VOID__ULONG		gtk_marshal_NONE__ULONG
+#define g_cclosure_marshal_VOID__ENUM		gtk_marshal_NONE__ENUM
+#define g_cclosure_marshal_VOID__FLAGS		gtk_marshal_NONE__FLAGS
+#define g_cclosure_marshal_VOID__FLOAT		gtk_marshal_NONE__FLOAT
+#define g_cclosure_marshal_VOID__DOUBLE		gtk_marshal_NONE__DOUBLE
+#define g_cclosure_marshal_VOID__STRING		gtk_marshal_NONE__STRING
+#define g_cclosure_marshal_VOID__PARAM		gtk_marshal_NONE__PARAM
+#define g_cclosure_marshal_VOID__BOXED		gtk_marshal_NONE__BOXED
+#define g_cclosure_marshal_VOID__POINTER	gtk_marshal_NONE__POINTER
+#define g_cclosure_marshal_VOID__OBJECT		gtk_marshal_NONE__OBJECT
+#define g_cclosure_marshal_STRING__OBJECT_POINTER	gtk_marshal_STRING__OBJECT_POINTER
+#define g_cclosure_marshal_VOID__UINT_POINTER	gtk_marshal_NONE__UINT_POINTER
+
+#define gst_marshal_VOID__OBJECT_POINTER	gtk_marshal_NONE__POINTER_POINTER
+#define gst_marshal_VOID__INT_INT		gtk_marshal_NONE__INT_INT
+
+
+// args
+//#define set_property set_arg
+//#define get_property get_arg
+
+#define g_object_get_property(obj,argname,pspec)\
+G_STMT_START{ \
+  (pspec)->name = (gchar*)argname;\
+  gtk_object_getv ((obj),1,(pspec));\
+}G_STMT_END
+
+#define g_object_set				gtk_object_set
+
+
+// type system
+#define GType					GtkType
+#define GTypeFlags				guint
+#define GClassInitFunc				GtkClassInitFunc
+#define GBaseInitFunc				GtkClassInitFunc
+#define GInstanceInitFunc			GtkObjectInitFunc
+//#define g_type_register_static			gtk_type_unique
+#define g_type_class_ref			gtk_type_class
+#define g_type_class_unref(c)
+#define g_type_name(t)				gtk_type_name(t)
+#define g_type_from_name(t)			gtk_type_from_name(t)
+#define GEnumValue				GtkEnumValue
+#define g_enum_register_static			gtk_type_register_enum
+
+/*********************************
+ * FIXME API NOT in glib2.0
+ ***********************************/
+
+
+// type registration
+typedef struct _GTypeInfo               GTypeInfo;
+struct _GTypeInfo
+{
+  /* interface types, classed types, instantiated types */
+  guint16                class_size;
+
+  gpointer               base_init;
+  gpointer               base_finalize;
+
+  /* classed types, instantiated types */
+  gpointer               class_init;
+  gpointer               class_finalize;
+  gconstpointer          class_data;
+  
+  /* instantiated types */
+  guint16                instance_size;
+  guint16                n_preallocs;
+  gpointer               instance_init;
+
+  /* value handling */
+  const gpointer         value_table;
+};
+
+#define G_TYPE_FLAG_ABSTRACT				0
+
+guint g_type_register_static (GtkType parent_type, gchar *type_name,
+                              const GTypeInfo *info, guint flags);
+
+
+
+// object creation
+gpointer g_object_new(GtkType type,gpointer blah_varargs_stuff);
+
+
+// signals
+#define G_SIGNAL_RUN_LAST				GTK_RUN_LAST
+#define G_SIGNAL_RUN_FIRST				GTK_RUN_FIRST
+
+#define GCallback					gpointer	// FIXME?
+#define G_CALLBACK(f)					((gpointer)(f))
+
+guint
+g_signal_newc (const gchar       *signal_name,
+               GtkType            object_type,
+               GtkSignalRunType   signal_flags,
+               guint              function_offset,
+               gpointer           accumulator,  // GSignalAccumulator   
+               gpointer           accu_data,
+               GtkSignalMarshaller  marshaller,
+               GType              return_type,
+               guint              nparams,
+               ...);
+
+#define \
+g_signal_emit(object,signal,detail,args...) \
+gtk_signal_emit((GtkObject *)object,signal, ## args )
+
+#define \
+g_signal_connectc(object,name,func,func_data,swap) \
+gtk_signal_connect((GtkObject *)object,name,func,func_data)
+
+#define \
+g_signal_emit_by_name(object,name,data,self) \
+gtk_signal_emit_by_name ((GtkObject *)object,name,data,self)
+
+#define \
+g_signal_has_handler_pending(object,name,data,may_block) \
+gtk_signal_handler_pending ((GtkObject *)object,name,may_block)
+
+#define g_signal_lookup			gtk_signal_lookup
+#define g_signal_handler_block		gtk_signal_handler_block
+#define g_signal_handler_unblock	gtk_signal_handler_unblock
+
+
+
+
+// arguments/parameters
+
+// first define GValue and GParamSpec
+#define GValue			GtkArg
+#define GParamFlags		gint
+#define G_VALUE_TYPE(v)		((v)->type)
+#define G_PARAM_READWRITE	GTK_ARG_READWRITE
+#define G_PARAM_READABLE	GTK_ARG_READABLE
+#define G_PARAM_WRITABLE	GTK_ARG_WRITABLE
+#define G_OBJECT_WARN_INVALID_PROPERTY_ID(a,b,c)
+typedef struct _GParamSpec GParamSpec;
+struct _GParamSpec {
+  gchar *name;
+  gint value_type;
+  gint flags;
+};
+
+#define g_value_init(value,t)			((value)->type = (t))
+
+void g_object_class_install_property(GtkObjectClass *oclass,guint property_id,GParamSpec *pspec);
+GParamSpec *g_object_class_find_property(GtkObjectClass *oclass,gchar *name);
+GParamSpec **g_object_class_list_properties(GtkObjectClass *oclass,guint *n_properties);
+
+#define G_IS_PARAM_SPEC_ENUM(pspec)		(GTK_FUNDAMENTAL_TYPE(pspec->value_type) == GTK_TYPE_ENUM)
+
+GParamSpec *g_param_spec_boolean(gchar *name,gchar *nick,gchar *blurb,gboolean def,gint flags);
+GParamSpec *g_param_spec_int(gchar *name,gchar *nick,gchar *blurb,gint min,gint max,gint def,gint flags);
+GParamSpec *g_param_spec_uint(gchar *name,gchar *nick,gchar *blurb,guint min,guint max,guint def,gint flags);
+GParamSpec *g_param_spec_long(gchar *name,gchar *nick,gchar *blurb,glong min,glong max,glong def,gint flags);
+GParamSpec *g_param_spec_ulong(gchar *name,gchar *nick,gchar *blurb,gulong min,gulong max,gulong def,gint flags);
+GParamSpec *g_param_spec_float(gchar *name,gchar *nick,gchar *blurb,float min,float max,float def,gint flags);
+GParamSpec *g_param_spec_double(gchar *name,gchar *nick,gchar *blurb,double min,double max,double def,gint flags);
+GParamSpec *g_param_spec_enum(gchar *name,gchar *nick,gchar *blurb,GtkType e,guint def,gint flags);
+GParamSpec *g_param_spec_pointer(gchar *name,gchar *nick,gchar *blurb,gint flags);
+GParamSpec *g_param_spec_string(gchar *name,gchar *nick,gchar *blurb,gchar *def,gint flags);
+
+#define g_value_get_boolean(value)		GTK_VALUE_BOOL(*value)
+#define g_value_set_boolean(value,data)		(GTK_VALUE_BOOL(*value) = (data))
+#define g_value_get_enum(value)			GTK_VALUE_INT(*value)
+#define g_value_set_enum(value,data)		(GTK_VALUE_INT(*value) = (data))
+#define g_value_get_int(value)			GTK_VALUE_INT(*value)
+#define g_value_set_int(value,data)		(GTK_VALUE_INT(*value) = (data))
+#define g_value_get_uint(value)			GTK_VALUE_UINT(*value)
+#define g_value_set_uint(value,data)		(GTK_VALUE_UINT(*value) = (data))
+#define g_value_get_long(value)			GTK_VALUE_LONG(*value)
+#define g_value_set_long(value,data)		(GTK_VALUE_LONG(*value) = (data))
+#define g_value_get_ulong(value)		GTK_VALUE_ULONG(*value)
+#define g_value_set_ulong(value,data)		(GTK_VALUE_ULONG(*value) = (data))
+#define g_value_get_float(value)		GTK_VALUE_FLOAT(*value)
+#define g_value_set_float(value,data)		(GTK_VALUE_FLOAT(*value) = (data))
+#define g_value_get_double(value)		GTK_VALUE_DOUBLE(*value)
+#define g_value_set_double(value,data)		(GTK_VALUE_DOUBLE(*value) = (data))
+#define g_value_get_string(value)		GTK_VALUE_STRING(*value)
+#define g_value_set_string(value,data)		(GTK_VALUE_STRING(*value) = (data))
+#define g_value_get_pointer(value)		GTK_VALUE_POINTER(*value)
+#define g_value_set_pointer(value,data)		(GTK_VALUE_POINTER(*value) = (data))
+
+
+
+
+
+// the object itself
+//#define GObject				GtkObject
+//#define GObjectClass				GtkObjectClass
+#define G_OBJECT				GTK_OBJECT
+#define G_OBJECT_CLASS				GTK_OBJECT_CLASS
+
+#define G_TYPE_OBJECT \
+  (g_object_get_type())
+//#define G_OBJECT(obj) 
+//  (GTK_CHECK_CAST((obj),G_TYPE_OBJECT,GObject))
+//#define G_OBJECT_CLASS(klass) 
+//  (GTK_CHECK_CLASS_CAST((klass),G_TYPE_OBJECT,GObjectClass)) 
+#define G_IS_OBJECT(obj) \
+  (GTK_CHECK_TYPE((obj),G_TYPE_OBJECT))
+#define G_IS_OBJECT_CLASS(obj) \
+  (GTK_CHECK_CLASS_TYPE((klass),G_TYPE_OBJECT))
+
+typedef struct _GObject GObject;
+typedef struct _GObjectClass GObjectClass;
+
+struct _GObject {
+/***** THE FOLLOWING IS A VERBATIM COPY FROM GTKOBJECT *****/
+  /* GtkTypeObject related fields: */
+  GtkObjectClass *klass;
+ 
+   
+  /* 32 bits of flags. GtkObject only uses 4 of these bits and
+   *  GtkWidget uses the rest. This is done because structs are
+   *  aligned on 4 or 8 byte boundaries. If a new bitfield were
+   *  used in GtkWidget much space would be wasted.
+   */
+  guint32 flags;
+  
+  /* reference count.
+   * refer to the file docs/refcounting.txt on this issue.
+   */
+  guint ref_count;
+  
+  /* A list of keyed data pointers, used for e.g. the list of signal
+   * handlers or an object's user_data.
+   */
+  GData *object_data;
+/***** END OF COPY FROM GTKOBJECT *****/
+};
+
+struct _GObjectClass {
+/***** THE FOLLOWING IS A VERBATIM COPY FROM GTKOBJECT *****/
+  /* GtkTypeClass fields: */               
+  GtkType type;
+
+   
+  /* The signals this object class handles. "signals" is an
+   *  array of signal ID's.
+   */
+  guint *signals;
+     
+  /* The number of signals listed in "signals".
+   */
+  guint nsignals;
+  
+  /* The number of arguments per class.
+   */
+  guint n_args;
+  GSList *construct_args;
+
+  /* Non overridable class methods to set and get per class arguments */
+  void (*set_arg) (GtkObject *object,
+                   GtkArg    *arg,
+                   guint      arg_id);
+  void (*get_arg) (GtkObject *object,
+                   GtkArg    *arg,
+                   guint      arg_id);
+  
+  /* The functions that will end an objects life time. In one way ore
+   *  another all three of them are defined for all objects. If an
+   *  object class overrides one of the methods in order to perform class
+   *  specific destruction then it must still invoke its superclass'
+   *  implementation of the method after it is finished with its
+   *  own cleanup. (See the destroy function for GtkWidget for
+   *  an example of how to do this).   
+   */
+  void (* shutdown) (GObject *object);
+  void (* destroy)  (GObject *object);
+ 
+  void (* finalize) (GObject *object);
+/***** END OF COPY FROM GTKOBJECT *****/
+
+  void (*set_property) (GObject *object, guint prop_id,
+                        const GValue *value, GParamSpec *pspec);
+  void (*get_property) (GObject *object, guint prop_id,
+                        GValue *value, GParamSpec *pspec);
+};
+
+GType g_object_get_type (void);
+
diff --git a/gst/gst.c b/gst/gst.c
index 47fce39..affcf53 100644
--- a/gst/gst.c
+++ b/gst/gst.c
@@ -57,20 +57,26 @@
 gst_init (int *argc, char **argv[]) 
 {
   GstTrace *gst_trace;
-  gchar *display;
 
   if (!g_thread_supported ()) g_thread_init (NULL);
 
-  /* Only initialise gtk fully if we have an X display.
-   * FIXME: this fails if the display is specified differently, eg, by
-   * a command line parameter. This is okay though, since this is only
-   * a quick hack and should be replaced when we move to gobject.*/
-  display = g_getenv("DISPLAY");
-  if (display == NULL) {
-    gtk_type_init ();
-  } else {
-    gtk_init (argc,argv);
+#ifdef USE_GLIB2
+  g_type_init(0);
+#else
+  {
+    gchar *display;
+    /* Only initialise gtk fully if we have an X display.
+     * FIXME: this fails if the display is specified differently, eg, by
+     * a command line parameter. This is okay though, since this is only
+     * a quick hack and should be replaced when we move to gobject.*/
+    display = g_getenv("DISPLAY");
+    if (display == NULL) {
+      gtk_type_init ();
+    } else {
+      gtk_init (argc,argv);
+    }
   }
+#endif
 
   if (!gst_init_check (argc,argv)) {
     exit (0);				// FIXME!
@@ -220,7 +226,7 @@
 
   /* check for ENV variables */
   {
-    gchar *plugin_path = g_getenv("GST_PLUGIN_PATH");
+    const gchar *plugin_path = g_getenv("GST_PLUGIN_PATH");
     gst_add_paths_func (plugin_path);
   }
 
@@ -270,7 +276,9 @@
 void 
 gst_main (void) 
 {
+#ifndef USE_GLIB2
   gtk_main ();
+#endif
 }
 
 /**
@@ -281,5 +289,7 @@
 void 
 gst_main_quit (void) 
 {
+#ifndef USE_GLIB2
   gtk_main_quit ();
+#endif
 }
diff --git a/gst/gst.h b/gst/gst.h
index 73bdb0b..5a58324 100644
--- a/gst/gst.h
+++ b/gst/gst.h
@@ -36,7 +36,6 @@
 #include <gst/gstcpu.h>
 #include <gst/gstclock.h>
 #include <gst/gstelement.h>
-#include <gst/gstextratypes.h>
 #include <gst/gstbin.h>
 #include <gst/gstpipeline.h>
 #include <gst/gstthread.h>
@@ -52,6 +51,7 @@
 #include <gst/gstscheduler.h>
 
 #include <gst/gstparse.h>
+#include <gst/gstextratypes.h>
 
 #ifdef __cplusplus
 extern "C" {
diff --git a/gst/gstautoplug.c b/gst/gstautoplug.c
index c6cefb6..9b1a012 100644
--- a/gst/gstautoplug.c
+++ b/gst/gstautoplug.c
@@ -44,22 +44,23 @@
 static GstObjectClass *parent_class = NULL;
 static guint gst_autoplug_signals[LAST_SIGNAL] = { 0 };
 
-GtkType gst_autoplug_get_type(void)
+GType gst_autoplug_get_type(void)
 {
-  static GtkType autoplug_type = 0;
+  static GType autoplug_type = 0;
 
   if (!autoplug_type) {
-    static const GtkTypeInfo autoplug_info = {
-      "GstAutoplug",
-      sizeof(GstAutoplug),
+    static const GTypeInfo autoplug_info = {
       sizeof(GstAutoplugClass),
-      (GtkClassInitFunc)gst_autoplug_class_init,
-      (GtkObjectInitFunc)gst_autoplug_init,
-      (GtkArgSetFunc)NULL,
-      (GtkArgGetFunc)NULL,
-      (GtkClassInitFunc)NULL,
+      NULL,
+      NULL,
+      (GClassInitFunc)gst_autoplug_class_init,
+      NULL,
+      NULL,
+      sizeof(GstAutoplug),
+      4,
+      (GInstanceInitFunc)gst_autoplug_init,
     };
-    autoplug_type = gtk_type_unique (GST_TYPE_OBJECT, &autoplug_info);
+    autoplug_type = g_type_register_static (GST_TYPE_OBJECT, "GstAutoplug", &autoplug_info, 0);
   }
   return autoplug_type;
 }
@@ -67,21 +68,19 @@
 static void
 gst_autoplug_class_init(GstAutoplugClass *klass)
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
   GstObjectClass *gstobject_class;
 
-  gtkobject_class = (GtkObjectClass*) klass;
+  gobject_class = (GObjectClass*) klass;
   gstobject_class = (GstObjectClass*) klass;
 
-  parent_class = gtk_type_class(GST_TYPE_OBJECT);
+  parent_class = g_type_class_ref (GST_TYPE_OBJECT);
 
   gst_autoplug_signals[NEW_OBJECT] =
-    gtk_signal_new ("new_object", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstAutoplugClass, new_object),
-                    gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
+    g_signal_newc ("new_object", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GstAutoplugClass, new_object), NULL, NULL,
+                    g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1,
                     GST_TYPE_OBJECT);
-
-  gtk_object_class_add_signals (gtkobject_class, gst_autoplug_signals, LAST_SIGNAL);
 }
 
 static void gst_autoplug_init(GstAutoplug *autoplug)
@@ -107,7 +106,7 @@
 void
 gst_autoplug_signal_new_object (GstAutoplug *autoplug, GstObject *object)
 {
-  gtk_signal_emit (GTK_OBJECT (autoplug), gst_autoplug_signals[NEW_OBJECT], object);
+  g_signal_emit (G_OBJECT (autoplug), gst_autoplug_signals[NEW_OBJECT], 0, object);
 }
 
 
@@ -132,7 +131,7 @@
 
   va_start (args, sinkcaps);
 
-  oclass = GST_AUTOPLUG_CLASS (GTK_OBJECT (autoplug)->klass);
+  oclass = GST_AUTOPLUG_CLASS (G_OBJECT_GET_CLASS(autoplug));
   if (oclass->autoplug_to_caps)
     element = (oclass->autoplug_to_caps) (autoplug, srccaps, sinkcaps, args);
 
@@ -162,7 +161,7 @@
 
   va_start (args, target);
 
-  oclass = GST_AUTOPLUG_CLASS (GTK_OBJECT (autoplug)->klass);
+  oclass = GST_AUTOPLUG_CLASS (G_OBJECT_GET_CLASS(autoplug));
   if (oclass->autoplug_to_renderers)
     element = (oclass->autoplug_to_renderers) (autoplug, srccaps, target, args);
 
@@ -183,7 +182,7 @@
  * Returns: a new #GstAutoplugFactory.
  */
 GstAutoplugFactory*
-gst_autoplugfactory_new (const gchar *name, const gchar *longdesc, GtkType type)
+gst_autoplugfactory_new (const gchar *name, const gchar *longdesc, GType type)
 {
   GstAutoplugFactory *factory;
 
@@ -280,7 +279,7 @@
   g_return_val_if_fail (factory != NULL, NULL);
   g_return_val_if_fail (factory->type != 0, NULL);
 
-  new = GST_AUTOPLUG (gtk_type_new (factory->type));
+  new = GST_AUTOPLUG (g_object_new(factory->type,NULL));
 
   return new;
 }
diff --git a/gst/gstautoplug.h b/gst/gstautoplug.h
index 6bb03c6..54dcd34 100644
--- a/gst/gstautoplug.h
+++ b/gst/gstautoplug.h
@@ -33,13 +33,13 @@
 #define GST_TYPE_AUTOPLUG \
   (gst_autoplug_get_type())
 #define GST_AUTOPLUG(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_AUTOPLUG,GstAutoplug))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUTOPLUG,GstAutoplug))
 #define GST_AUTOPLUG_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_AUTOPLUG,GstAutoplugClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUTOPLUG,GstAutoplugClass))
 #define GST_IS_AUTOPLUG(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_AUTOPLUG))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUTOPLUG))
 #define GST_IS_AUTOPLUG_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_AUTOPLUG))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUTOPLUG))
 
 typedef struct _GstAutoplug GstAutoplug;
 typedef struct _GstAutoplugClass GstAutoplugClass;
@@ -72,10 +72,10 @@
 struct _GstAutoplugFactory {
   gchar *name;                  /* name of autoplugger */
   gchar *longdesc;              /* long description of the autoplugger (well, don't overdo it..) */
-  GtkType type;                 /* unique GtkType of the autoplugger */
+  GType type;                 /* unique GType of the autoplugger */
 };
 
-GtkType			gst_autoplug_get_type			(void);
+GType			gst_autoplug_get_type			(void);
 
 void			gst_autoplug_signal_new_object		(GstAutoplug *autoplug, GstObject *object);
 
@@ -88,7 +88,7 @@
  * creating autopluggers
  *
  */
-GstAutoplugFactory*	gst_autoplugfactory_new			(const gchar *name, const gchar *longdesc, GtkType type);
+GstAutoplugFactory*	gst_autoplugfactory_new			(const gchar *name, const gchar *longdesc, GType type);
 void                    gst_autoplugfactory_destroy		(GstAutoplugFactory *factory);
 
 GstAutoplugFactory*	gst_autoplugfactory_find		(const gchar *name);
diff --git a/gst/gstbin.c b/gst/gstbin.c
index fc3e2e0..58a66d6 100644
--- a/gst/gstbin.c
+++ b/gst/gstbin.c
@@ -38,13 +38,13 @@
 };
 
 
-static void			gst_bin_real_destroy		(GtkObject *object);
+static void			gst_bin_real_destroy		(GObject *object);
 
 static GstElementStateReturn	gst_bin_change_state		(GstElement *element);
 static GstElementStateReturn	gst_bin_change_state_norecurse	(GstBin *bin);
 static gboolean			gst_bin_change_state_type	(GstBin *bin,
 								 GstElementState state,
-								 GtkType type);
+								 GType type);
 
 static gboolean			gst_bin_iterate_func		(GstBin *bin);
 
@@ -72,23 +72,24 @@
 static GstElementClass *parent_class = NULL;
 static guint gst_bin_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_bin_get_type (void)
 {
-  static GtkType bin_type = 0;
+  static GType bin_type = 0;
 
   if (!bin_type) {
-    static const GtkTypeInfo bin_info = {
-      "GstBin",
-      sizeof(GstBin),
+    static const GTypeInfo bin_info = {
       sizeof(GstBinClass),
-      (GtkClassInitFunc)gst_bin_class_init,
-      (GtkObjectInitFunc)gst_bin_init,
-      (GtkArgSetFunc)NULL,
-      (GtkArgGetFunc)NULL,
-      (GtkClassInitFunc)NULL,
+      NULL,
+      NULL,
+      (GClassInitFunc)gst_bin_class_init,
+      NULL,
+      NULL,
+      sizeof(GstBin),
+      8,
+      (GInstanceInitFunc)gst_bin_init,
     };
-    bin_type = gtk_type_unique (GST_TYPE_ELEMENT, &bin_info);
+    bin_type = g_type_register_static (GST_TYPE_ELEMENT, "GstBin", &bin_info, 0);
   }
   return bin_type;
 }
@@ -96,22 +97,21 @@
 static void
 gst_bin_class_init (GstBinClass *klass)
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
   GstObjectClass *gstobject_class;
   GstElementClass *gstelement_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
   gstobject_class = (GstObjectClass*)klass;
   gstelement_class = (GstElementClass*)klass;
 
-  parent_class = gtk_type_class (GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
 
   gst_bin_signals[OBJECT_ADDED] =
-    gtk_signal_new ("object_added", GTK_RUN_FIRST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstBinClass, object_added),
-                    gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
+    g_signal_newc ("object_added", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_FIRST,
+                    G_STRUCT_OFFSET (GstBinClass, object_added), NULL, NULL,
+                    g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
                     GST_TYPE_ELEMENT);
-  gtk_object_class_add_signals (gtkobject_class, gst_bin_signals, LAST_SIGNAL);
 
   klass->change_state_type =		gst_bin_change_state_type;
   klass->iterate =			gst_bin_iterate_func;
@@ -123,7 +123,8 @@
 
   gstelement_class->change_state =	gst_bin_change_state;
 
-  gtkobject_class->destroy =		gst_bin_real_destroy;
+// FIXME
+//  gobject_class->destroy =		gst_bin_real_destroy;
 }
 
 static void
@@ -295,7 +296,7 @@
 
   GST_INFO_ELEMENT (GST_CAT_PARENTAGE, bin, "added child \"%s\"", GST_ELEMENT_NAME (element));
 
-  gtk_signal_emit (GTK_OBJECT (bin), gst_bin_signals[OBJECT_ADDED], element);
+  g_signal_emit (G_OBJECT (bin), gst_bin_signals[OBJECT_ADDED], 0, element);
 }
 
 /**
@@ -377,7 +378,7 @@
 //    GST_DEBUG (GST_CAT_STATES,"setting state on '%s'\n",GST_ELEMENT_NAME  (child));
     switch (gst_element_set_state (child, GST_STATE_PENDING (element))) {
       case GST_STATE_FAILURE:
-        GST_STATE_PENDING (element) = GST_STATE_NONE_PENDING;
+        GST_STATE_PENDING (element) = GST_STATE_VOID_PENDING;
         GST_DEBUG (GST_CAT_STATES,"child '%s' failed to go to state %d(%s)\n", GST_ELEMENT_NAME (child),
               GST_STATE_PENDING (element), gst_element_statename (GST_STATE_PENDING (element)));
         return GST_STATE_FAILURE;
@@ -413,7 +414,7 @@
 static gboolean
 gst_bin_change_state_type(GstBin *bin,
                           GstElementState state,
-                          GtkType type)
+                          GType type)
 {
   GList *children;
   GstElement *child;
@@ -431,7 +432,7 @@
     if (GST_IS_BIN (child)) {
       if (!gst_bin_set_state_type (GST_BIN (child), state,type))
         return FALSE;
-    } else if (GTK_CHECK_TYPE (child,type)) {
+    } else if (G_TYPE_CHECK_INSTANCE_TYPE (child,type)) {
       if (!gst_element_set_state (child,state))
         return FALSE;
     }
@@ -457,7 +458,7 @@
 gboolean
 gst_bin_set_state_type (GstBin *bin,
                         GstElementState state,
-                        GtkType type)
+                        GType type)
 {
   GstBinClass *oclass;
 
@@ -467,7 +468,7 @@
   g_return_val_if_fail (bin != NULL, FALSE);
   g_return_val_if_fail (GST_IS_BIN (bin), FALSE);
 
-  oclass = GST_BIN_CLASS (GTK_OBJECT (bin)->klass);
+  oclass = GST_BIN_CLASS (G_OBJECT_GET_CLASS(bin));
 
   if (oclass->change_state_type)
     (oclass->change_state_type) (bin,state,type);
@@ -475,7 +476,7 @@
 }
 
 static void
-gst_bin_real_destroy (GtkObject *object)
+gst_bin_real_destroy (GObject *object)
 {
   GstBin *bin = GST_BIN (object);
   GList *children, *orig;
@@ -500,8 +501,9 @@
 
   g_cond_free (bin->eoscond);
 
-  if (GTK_OBJECT_CLASS (parent_class)->destroy)
-    GTK_OBJECT_CLASS (parent_class)->destroy (object);
+// FIXME!!!
+//  if (G_OBJECT_CLASS (parent_class)->destroy)
+//    G_OBJECT_CLASS (parent_class)->destroy (object);
 }
 
 /**
@@ -666,7 +668,7 @@
 
   GST_DEBUG_ENTER("(\"%s\")",GST_ELEMENT_NAME (bin));
 
-  oclass = GST_BIN_CLASS (GTK_OBJECT (bin)->klass);
+  oclass = GST_BIN_CLASS (G_OBJECT_GET_CLASS(bin));
 
   if (oclass->iterate)
     eos = (oclass->iterate) (bin);
diff --git a/gst/gstbin.h b/gst/gstbin.h
index e18ad0e..cee2a69 100644
--- a/gst/gstbin.h
+++ b/gst/gstbin.h
@@ -36,13 +36,13 @@
 #define GST_TYPE_BIN \
   (gst_bin_get_type())
 #define GST_BIN(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_BIN,GstBin))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_BIN,GstBin))
 #define GST_BIN_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_BIN,GstBinClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_BIN,GstBinClass))
 #define GST_IS_BIN(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_BIN))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_BIN))
 #define GST_IS_BIN_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_BIN))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_BIN))
 
 typedef enum {
   /* this bin is a manager of child elements, i.e. a pipeline or thread */
@@ -94,7 +94,7 @@
   /* change the state of elements of the given type */
   gboolean	(*change_state_type)	(GstBin *bin,
 					 GstElementState state,
-					 GtkType type);
+					 GType type);
   /* run a full iteration of operation */
   gboolean	(*iterate)		(GstBin *bin);
 };
@@ -110,7 +110,7 @@
 };
 
 
-GtkType		gst_bin_get_type		(void);
+GType		gst_bin_get_type		(void);
 GstElement*	gst_bin_new			(const gchar *name);
 #define		gst_bin_destroy(bin)		gst_object_destroy(GST_OBJECT(bin))
 
@@ -129,7 +129,7 @@
 
 gboolean	gst_bin_set_state_type		(GstBin *bin,
 						 GstElementState state,
-						 GtkType type);
+						 GType type);
 
 gboolean	gst_bin_iterate			(GstBin *bin);
 
diff --git a/gst/gstelement.c b/gst/gstelement.c
index ec6a98e..15d4f0a 100644
--- a/gst/gstelement.c
+++ b/gst/gstelement.c
@@ -51,11 +51,11 @@
 static void			gst_element_init		(GstElement *element);
 static void			gst_element_base_class_init	(GstElementClass *klass);
 
-static void			gst_element_set_arg		(GtkObject *object, GtkArg *arg, guint id);
-static void			gst_element_get_arg		(GtkObject *object, GtkArg *arg, guint id);
+static void			gst_element_set_property		(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void			gst_element_get_property		(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
 
-static void 			gst_element_shutdown 		(GtkObject *object);
-static void			gst_element_real_destroy	(GtkObject *object);
+static void 			gst_element_shutdown 		(GObject *object);
+static void			gst_element_real_destroy	(GObject *object);
 
 static GstElementStateReturn	gst_element_change_state	(GstElement *element);
 
@@ -67,21 +67,22 @@
 static GstObjectClass *parent_class = NULL;
 static guint gst_element_signals[LAST_SIGNAL] = { 0 };
 
-GtkType gst_element_get_type(void) {
-  static GtkType element_type = 0;
+GType gst_element_get_type(void) {
+  static GType element_type = 0;
 
   if (!element_type) {
-    static const GtkTypeInfo element_info = {
-      "GstElement",
-      sizeof(GstElement),
+    static const GTypeInfo element_info = {
       sizeof(GstElementClass),
-      (GtkClassInitFunc)gst_element_class_init,
-      (GtkObjectInitFunc)gst_element_init,
-      (GtkArgSetFunc)gst_element_set_arg,
-      (GtkArgGetFunc)gst_element_get_arg,
-      (GtkClassInitFunc)gst_element_base_class_init,
+      (GBaseInitFunc)gst_element_base_class_init,
+      NULL,
+      (GClassInitFunc)gst_element_class_init,
+      NULL,
+      NULL,
+      sizeof(GstElement),
+      0,
+      (GInstanceInitFunc)gst_element_init,
     };
-    element_type = gtk_type_unique(GST_TYPE_OBJECT,&element_info);
+    element_type = g_type_register_static(GST_TYPE_OBJECT, "GstElement", &element_info, G_TYPE_FLAG_ABSTRACT);
   }
   return element_type;
 }
@@ -89,56 +90,56 @@
 static void
 gst_element_class_init (GstElementClass *klass)
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
   GstObjectClass *gstobject_class;
 
-  gtkobject_class = (GtkObjectClass*) klass;
+  gobject_class = (GObjectClass*) klass;
   gstobject_class = (GstObjectClass*) klass;
 
-  parent_class = gtk_type_class(GST_TYPE_OBJECT);
+  parent_class = g_type_class_ref(GST_TYPE_OBJECT);
 
   gst_element_signals[STATE_CHANGE] =
-    gtk_signal_new ("state_change", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstElementClass, state_change),
-                    gtk_marshal_NONE__INT, GTK_TYPE_NONE, 1,
-                    GTK_TYPE_INT);
+    g_signal_newc ("state_change", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GstElementClass, state_change), NULL, NULL,
+                    g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1,
+                    G_TYPE_INT);
   gst_element_signals[NEW_PAD] =
-    gtk_signal_new ("new_pad", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstElementClass, new_pad),
-                    gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
+    g_signal_newc ("new_pad", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GstElementClass, new_pad), NULL, NULL,
+                    g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
                     GST_TYPE_PAD);
   gst_element_signals[PAD_REMOVED] =
-    gtk_signal_new ("pad_removed", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstElementClass, pad_removed),
-                    gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
+    g_signal_newc ("pad_removed", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GstElementClass, pad_removed), NULL, NULL,
+                    g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
                     GST_TYPE_PAD);
   gst_element_signals[NEW_GHOST_PAD] =
-    gtk_signal_new ("new_ghost_pad", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstElementClass, new_ghost_pad),
-                    gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
+    g_signal_newc ("new_ghost_pad", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GstElementClass, new_ghost_pad), NULL, NULL,
+                    g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
                     GST_TYPE_PAD);
   gst_element_signals[GHOST_PAD_REMOVED] =
-    gtk_signal_new ("ghost_pad_removed", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstElementClass, ghost_pad_removed),
-                    gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
+    g_signal_newc ("ghost_pad_removed", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GstElementClass, ghost_pad_removed), NULL, NULL,
+                    g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
                     GST_TYPE_PAD);
   gst_element_signals[ERROR] =
-    gtk_signal_new ("error", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstElementClass, error),
-                    gtk_marshal_NONE__STRING, GTK_TYPE_NONE,1,
-                    GTK_TYPE_STRING);
+    g_signal_newc ("error", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GstElementClass, error), NULL, NULL,
+                    g_cclosure_marshal_VOID__STRING, G_TYPE_NONE,1,
+                    G_TYPE_STRING);
   gst_element_signals[EOS] =
-    gtk_signal_new ("eos", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstElementClass,eos),
-                    gtk_marshal_NONE__NONE, GTK_TYPE_NONE, 0);
+    g_signal_newc ("eos", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GstElementClass,eos), NULL, NULL,
+                    g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
 
 
-  gtk_object_class_add_signals (gtkobject_class, gst_element_signals, LAST_SIGNAL);
 
-  gtkobject_class->set_arg =		GST_DEBUG_FUNCPTR(gst_element_set_arg);
-  gtkobject_class->get_arg =		GST_DEBUG_FUNCPTR(gst_element_get_arg);
-  gtkobject_class->shutdown =		GST_DEBUG_FUNCPTR(gst_element_shutdown);
-  gtkobject_class->destroy =		GST_DEBUG_FUNCPTR(gst_element_real_destroy);
+  gobject_class->set_property =		GST_DEBUG_FUNCPTR(gst_element_set_property);
+  gobject_class->get_property =		GST_DEBUG_FUNCPTR(gst_element_get_property);
+  gobject_class->shutdown =		GST_DEBUG_FUNCPTR(gst_element_shutdown);
+// FIXME!
+//  gobject_class->destroy =		GST_DEBUG_FUNCPTR(gst_element_real_destroy);
 
 #ifndef GST_DISABLE_XML
   gstobject_class->save_thyself =	GST_DEBUG_FUNCPTR(gst_element_save_thyself);
@@ -152,12 +153,12 @@
 static void
 gst_element_base_class_init (GstElementClass *klass)
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
 
-  gtkobject_class = (GtkObjectClass*) klass;
+  gobject_class = (GObjectClass*) klass;
 
-  gtkobject_class->set_arg =		GST_DEBUG_FUNCPTR(gst_element_set_arg);
-  gtkobject_class->get_arg =		GST_DEBUG_FUNCPTR(gst_element_get_arg);
+  gobject_class->set_property =		GST_DEBUG_FUNCPTR(gst_element_set_property);
+  gobject_class->get_property =		GST_DEBUG_FUNCPTR(gst_element_get_property);
 }
 
 static void
@@ -176,28 +177,28 @@
 
 
 static void
-gst_element_set_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_element_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
-  GstElementClass *oclass = GST_ELEMENT_CLASS (object->klass);
+  GstElementClass *oclass = (GstElementClass *)G_OBJECT_GET_CLASS(object);
 
   GST_SCHEDULE_LOCK_ELEMENT ( GST_ELEMENT_SCHED(object), GST_ELEMENT(object) );
 
-  if (oclass->set_arg)
-    (oclass->set_arg)(object,arg,id);
+  if (oclass->set_property)
+    (oclass->set_property)(object,prop_id,value,pspec);
 
   GST_SCHEDULE_UNLOCK_ELEMENT ( GST_ELEMENT_SCHED(object), GST_ELEMENT(object) );
 }
 
 
 static void
-gst_element_get_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_element_get_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
-  GstElementClass *oclass = GST_ELEMENT_CLASS (object->klass);
+  GstElementClass *oclass = (GstElementClass *)G_OBJECT_GET_CLASS(object);
 
   GST_SCHEDULE_LOCK_ELEMENT (GST_ELEMENT_SCHED(object), GST_ELEMENT(object) );
 
-  if (oclass->get_arg)
-    (oclass->get_arg)(object,arg,id);
+  if (oclass->get_property)
+    (oclass->get_property)(object,prop_id,value,pspec);
 
   GST_SCHEDULE_UNLOCK_ELEMENT (GST_ELEMENT_SCHED(object), GST_ELEMENT(object) );
 }
@@ -213,7 +214,7 @@
 GstElement*
 gst_element_new(void)
 {
-  return GST_ELEMENT (gtk_type_new (GST_TYPE_ELEMENT));
+  return GST_ELEMENT (g_object_new(GST_TYPE_ELEMENT,NULL));
 }
 
 /**
@@ -265,7 +266,7 @@
   g_return_if_fail (GST_IS_ELEMENT (element));
   g_return_if_fail (GST_OBJECT_PARENT (element) == NULL);
   g_return_if_fail (parent != NULL);
-  g_return_if_fail (GTK_IS_OBJECT (parent));
+  g_return_if_fail (GST_IS_OBJECT (parent));
   g_return_if_fail ((gpointer)element != (gpointer)parent);
 
   gst_object_set_parent (GST_OBJECT (element), parent);
@@ -324,7 +325,7 @@
     element->numsinkpads++;
 
   /* emit the NEW_PAD signal */
-  gtk_signal_emit (GTK_OBJECT (element), gst_element_signals[NEW_PAD], pad);
+  g_signal_emit (G_OBJECT (element), gst_element_signals[NEW_PAD], 0, pad);
 }
 
 /**
@@ -352,7 +353,7 @@
   else
     element->numsinkpads--;
 
-  gtk_signal_emit (GTK_OBJECT (element), gst_element_signals[PAD_REMOVED], pad);
+  g_signal_emit (G_OBJECT (element), gst_element_signals[PAD_REMOVED], 0, pad);
 
   gst_object_unparent (GST_OBJECT (pad));
 }
@@ -394,7 +395,7 @@
   GST_DEBUG(GST_CAT_ELEMENT_PADS,"added ghostpad %s:%s\n",GST_DEBUG_PAD_NAME(ghostpad));
 
   /* emit the NEW_GHOST_PAD signal */
-  gtk_signal_emit (GTK_OBJECT (element), gst_element_signals[NEW_GHOST_PAD], ghostpad);
+  g_signal_emit (G_OBJECT (element), gst_element_signals[NEW_GHOST_PAD], 0, ghostpad);
 }
 
 /**
@@ -488,7 +489,7 @@
   g_return_val_if_fail (element != NULL, NULL);
   g_return_val_if_fail (GST_IS_ELEMENT (element), NULL);
 
-  oclass = GST_ELEMENT_CLASS (GTK_OBJECT (element)->klass);
+  oclass = GST_ELEMENT_CLASS (G_OBJECT_GET_CLASS(element));
 
   if (oclass->elementfactory == NULL) return NULL;
 
@@ -594,7 +595,7 @@
   GstPad *newpad = NULL;
   GstElementClass *oclass;
 
-  oclass = GST_ELEMENT_CLASS (GTK_OBJECT (element)->klass);
+  oclass = GST_ELEMENT_CLASS (G_OBJECT_GET_CLASS(element));
   if (oclass->request_new_pad)
     newpad = (oclass->request_new_pad)(element, templ);
 
@@ -755,7 +756,7 @@
 
   /* FIXME: this is not finished!!! */
 
-  gtk_signal_emit (GTK_OBJECT (element), gst_element_signals[ERROR], error);
+  g_signal_emit (G_OBJECT (element), gst_element_signals[ERROR], 0, error);
 }
 
 
@@ -804,7 +805,7 @@
                          gst_element_statename(curpending));
 
     /* call the state change function so it can set the state */
-    oclass = GST_ELEMENT_CLASS (GTK_OBJECT (element)->klass);
+    oclass = GST_ELEMENT_CLASS (G_OBJECT_GET_CLASS(element));
     if (oclass->change_state)
       return_val = (oclass->change_state)(element);
 
@@ -836,7 +837,7 @@
   g_return_val_if_fail (element != NULL, NULL);
   g_return_val_if_fail (GST_IS_ELEMENT (element), NULL);
 
-  oclass = GST_ELEMENT_CLASS (GTK_OBJECT (element)->klass);
+  oclass = GST_ELEMENT_CLASS (G_OBJECT_GET_CLASS(element));
 
   return oclass->elementfactory;
 }
@@ -876,20 +877,20 @@
   }
 
   GST_STATE (element) = GST_STATE_PENDING (element);
-  GST_STATE_PENDING (element) = GST_STATE_NONE_PENDING;
+  GST_STATE_PENDING (element) = GST_STATE_VOID_PENDING;
 
   // note: queues' state_change is a special case because it needs to lock
   // for synchronization (from another thread).  since this signal may block
   // or (worse) make another state change, the queue needs to unlock before
   // calling.  thus, gstqueue.c::gst_queue_state_change() blocks, unblocks,
   // unlocks, then emits this. 
-  gtk_signal_emit (GTK_OBJECT (element), gst_element_signals[STATE_CHANGE],
+  g_signal_emit (G_OBJECT (element), gst_element_signals[STATE_CHANGE], 0,
                    GST_STATE (element));
   return GST_STATE_SUCCESS;
 }
 
 static void
-gst_element_shutdown (GtkObject *object)
+gst_element_shutdown (GObject *object)
 {
   GstElement *element = GST_ELEMENT (object);
 
@@ -898,12 +899,12 @@
   if (GST_IS_BIN (GST_OBJECT_PARENT (element)))
     gst_bin_remove (GST_BIN (GST_OBJECT_PARENT (element)), element);
 
-  if (GTK_OBJECT_CLASS (parent_class)->shutdown)
-    GTK_OBJECT_CLASS (parent_class)->shutdown (object);
+  if (G_OBJECT_CLASS (parent_class)->shutdown)
+    G_OBJECT_CLASS (parent_class)->shutdown (object);
 }
 
 static void
-gst_element_real_destroy (GtkObject *object)
+gst_element_real_destroy (GObject *object)
 {
   GstElement *element = GST_ELEMENT (object);
   GList *pads;
@@ -930,8 +931,9 @@
   element->numsrcpads = 0;
   element->numsinkpads = 0;
 
-  if (GTK_OBJECT_CLASS (parent_class)->destroy)
-    GTK_OBJECT_CLASS (parent_class)->destroy (object);
+// FIXME!
+//  if (G_OBJECT_CLASS (parent_class)->destroy)
+//    G_OBJECT_CLASS (parent_class)->destroy (object);
 }
 
 /*
@@ -967,7 +969,7 @@
 {
   GList *pads;
   GstElementClass *oclass;
-  GtkType type;
+//  GType type;
   GstElement *element;
 
   g_return_val_if_fail (object != NULL, parent);
@@ -976,7 +978,7 @@
 
   element = GST_ELEMENT (object);
 
-  oclass = GST_ELEMENT_CLASS (GTK_OBJECT (element)->klass);
+  oclass = GST_ELEMENT_CLASS (G_OBJECT_GET_CLASS(element));
 
   xmlNewChild(parent, NULL, "name", GST_ELEMENT_NAME(element));
 
@@ -990,9 +992,10 @@
 //  if (element->manager)
 //    xmlNewChild(parent, NULL, "manager", GST_ELEMENT_NAME(element->manager));
 
+/* FIXME FIXME FIXME!
   // output all args to the element
-  type = GTK_OBJECT_TYPE (element);
-  while (type != GTK_TYPE_INVALID) {
+  type = G_OBJECT_TYPE (element);
+  while (type != G_TYPE_INVALID) {
     GtkArg *args;
     guint32 *flags;
     guint num_args,i;
@@ -1000,51 +1003,51 @@
     args = gtk_object_query_args (type, &flags, &num_args);
 
     for (i=0; i<num_args; i++) {
-      if ((args[i].type > GTK_TYPE_NONE) &&
+      if ((args[i].type > G_TYPE_NONE) &&
           (flags[i] & GTK_ARG_READABLE)) {
         xmlNodePtr arg;
-        gtk_object_getv (GTK_OBJECT (element), 1, &args[i]);
+        gtk_object_getv (G_OBJECT (element), 1, &args[i]);
         arg = xmlNewChild (parent, NULL, "arg", NULL);
         xmlNewChild (arg, NULL, "name", args[i].name);
         switch (args[i].type) {
-          case GTK_TYPE_CHAR:
+          case G_TYPE_CHAR:
             xmlNewChild (arg, NULL, "value",
-                         g_strdup_printf ("%c", GTK_VALUE_CHAR (args[i])));
+                         g_strdup_printf ("%c", G_VALUE_CHAR (args[i])));
             break;
-          case GTK_TYPE_UCHAR:
+          case G_TYPE_UCHAR:
             xmlNewChild (arg, NULL, "value",
-                         g_strdup_printf ("%d", GTK_VALUE_UCHAR (args[i])));
+                         g_strdup_printf ("%d", G_VALUE_UCHAR (args[i])));
             break;
-          case GTK_TYPE_BOOL:
+          case G_TYPE_BOOL:
             xmlNewChild (arg, NULL, "value",
-                        GTK_VALUE_BOOL (args[i]) ? "true" : "false");
+                        G_VALUE_BOOL (args[i]) ? "true" : "false");
             break;
-          case GTK_TYPE_INT:
+          case G_TYPE_INT:
             xmlNewChild (arg, NULL, "value",
-                         g_strdup_printf ("%d", GTK_VALUE_INT (args[i])));
+                         g_strdup_printf ("%d", G_VALUE_INT (args[i])));
             break;
-          case GTK_TYPE_LONG:
+          case G_TYPE_LONG:
             xmlNewChild (arg, NULL, "value",
-                         g_strdup_printf ("%ld", GTK_VALUE_LONG (args[i])));
+                         g_strdup_printf ("%ld", G_VALUE_LONG (args[i])));
             break;
-          case GTK_TYPE_ULONG:
+          case G_TYPE_ULONG:
             xmlNewChild (arg, NULL, "value",
-                         g_strdup_printf ("%lu", GTK_VALUE_ULONG (args[i])));
+                         g_strdup_printf ("%lu", G_VALUE_ULONG (args[i])));
             break;
-          case GTK_TYPE_FLOAT:
+          case G_TYPE_FLOAT:
             xmlNewChild (arg, NULL, "value",
-                         g_strdup_printf ("%f", GTK_VALUE_FLOAT (args[i])));
+                         g_strdup_printf ("%f", G_VALUE_FLOAT (args[i])));
             break;
-          case GTK_TYPE_DOUBLE:
+          case G_TYPE_DOUBLE:
             xmlNewChild (arg, NULL, "value",
-                         g_strdup_printf ("%g", GTK_VALUE_DOUBLE (args[i])));
+                         g_strdup_printf ("%g", G_VALUE_DOUBLE (args[i])));
             break;
-          case GTK_TYPE_STRING:
-            xmlNewChild (arg, NULL, "value", GTK_VALUE_STRING (args[i]));
+          case G_TYPE_STRING:
+            xmlNewChild (arg, NULL, "value", G_VALUE_STRING (args[i]));
             break;
 	  default:
 	    if (args[i].type == GST_TYPE_FILENAME) {
-              xmlNewChild (arg, NULL, "value", GTK_VALUE_STRING (args[i]));
+              xmlNewChild (arg, NULL, "value", G_VALUE_STRING (args[i]));
 	    }
 	    break;
         }
@@ -1052,6 +1055,7 @@
     }
     type = gtk_type_parent (type);
   }
+*/
 
   pads = GST_ELEMENT_PADS (element);
 
@@ -1126,7 +1130,7 @@
 	}
         child = child->next;
       }
-      gst_util_set_object_arg (GTK_OBJECT (element), name, value);
+      gst_util_set_object_arg (G_OBJECT (element), name, value);
     }
     children = children->next;
   }
@@ -1140,7 +1144,7 @@
     children = children->next;
   }
 
-  oclass = GST_OBJECT_CLASS (GTK_OBJECT (element)->klass);
+  oclass = GST_OBJECT_CLASS (G_OBJECT_GET_CLASS(element));
   if (oclass->restore_thyself)
     (oclass->restore_thyself) (GST_OBJECT (element), self);
 
@@ -1219,7 +1223,7 @@
   g_return_if_fail (element != NULL);
   g_return_if_fail (GST_IS_ELEMENT (element));
 
-  gtk_signal_emit (GTK_OBJECT (element), gst_element_signals[EOS]);
+  g_signal_emit (G_OBJECT (element), gst_element_signals[EOS], 0);
   GST_FLAG_SET(element,GST_ELEMENT_COTHREAD_STOPPING);
 }
 
@@ -1227,14 +1231,14 @@
 const gchar *gst_element_statename(int state) {
   switch (state) {
 #ifdef GST_DEBUG_COLOR
-    case GST_STATE_NONE_PENDING: return "NONE_PENDING";break;
+    case GST_STATE_VOID_PENDING: return "NONE_PENDING";break;
     case GST_STATE_NULL: return "\033[01;37mNULL\033[00m";break;
     case GST_STATE_READY: return "\033[01;31mREADY\033[00m";break;
     case GST_STATE_PLAYING: return "\033[01;32mPLAYING\033[00m";break;
     case GST_STATE_PAUSED: return "\033[01;33mPAUSED\033[00m";break;
     default: return "\033[01;37;41mUNKNOWN!\033[00m";
 #else
-    case GST_STATE_NONE_PENDING: return "NONE_PENDING";break;
+    case GST_STATE_VOID_PENDING: return "NONE_PENDING";break;
     case GST_STATE_NULL: return "NULL";break;
     case GST_STATE_READY: return "READY";break;
     case GST_STATE_PLAYING: return "PLAYING";break;
diff --git a/gst/gstelement.h b/gst/gstelement.h
index 9198eaf..2d84274 100644
--- a/gst/gstelement.h
+++ b/gst/gstelement.h
@@ -43,7 +43,7 @@
 
 
 typedef enum {
-  GST_STATE_NONE_PENDING	= 0,
+  GST_STATE_VOID_PENDING	= 0,
   GST_STATE_NULL		= (1 << 0),
   GST_STATE_READY		= (1 << 1),
   GST_STATE_PAUSED		= (1 << 2),
@@ -74,13 +74,13 @@
 #define GST_TYPE_ELEMENT \
   (gst_element_get_type())
 #define GST_ELEMENT(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_ELEMENT,GstElement))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ELEMENT,GstElement))
 #define GST_ELEMENT_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_ELEMENT,GstElementClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_ELEMENT,GstElementClass))
 #define GST_IS_ELEMENT(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_ELEMENT))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ELEMENT))
 #define GST_IS_ELEMENT_CLASS(klass) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_ELEMENT))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_ELEMENT))
 
 typedef enum {
   /* element is complex (for some def.) and generally require a cothread */
@@ -164,12 +164,8 @@
   void (*eos)			(GstElement *element);
 
   /* local pointers for get/set */
-  void (*set_arg) (GtkObject *object,
-                   GtkArg    *arg,
-                   guint      arg_id);
-  void (*get_arg) (GtkObject *object,
-                   GtkArg    *arg,
-                   guint      arg_id);      
+  void (*set_property) (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+  void (*get_property) (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
 
   /* change the element state */
   GstElementStateReturn (*change_state)		(GstElement *element);
@@ -188,7 +184,7 @@
 
 struct _GstElementFactory {
   gchar *name;			/* name of element */
-  GtkType type;			/* unique GtkType of element */
+  GType type;			/* unique GType of element */
 
   GstElementDetails *details;	/* pointer to details struct */
 
@@ -196,7 +192,7 @@
   guint16 numpadtemplates;
 };
 
-GtkType			gst_element_get_type		(void);
+GType			gst_element_get_type		(void);
 GstElement*		gst_element_new			(void);
 #define			gst_element_destroy(element)	gst_object_destroy (GST_OBJECT (element))
 
@@ -248,7 +244,7 @@
  * factories stuff
  *
  **/
-GstElementFactory*	gst_elementfactory_new			(const gchar *name,GtkType type,
+GstElementFactory*	gst_elementfactory_new			(const gchar *name,GType type,
                                                                  GstElementDetails *details);
 void			gst_elementfactory_destroy		(GstElementFactory *elementfactory);
 
diff --git a/gst/gstelementfactory.c b/gst/gstelementfactory.c
index 101873e..62e2072 100644
--- a/gst/gstelementfactory.c
+++ b/gst/gstelementfactory.c
@@ -98,7 +98,7 @@
 /**
  * gst_elementfactory_new:
  * @name: name of new elementfactory
- * @type: GtkType of new element
+ * @type: GType of new element
  * @details: #GstElementDetails structure with element details
  *
  * Create a new elementfactory capable of insantiating objects of the
@@ -107,7 +107,7 @@
  * Returns: new elementfactory
  */
 GstElementFactory*
-gst_elementfactory_new (const gchar *name, GtkType type,
+gst_elementfactory_new (const gchar *name, GType type,
                         GstElementDetails *details)
 {
   GstElementFactory *factory;
@@ -159,11 +159,11 @@
   g_return_val_if_fail(factory->type != 0, NULL);
 
   // create an instance of the element
-  element = GST_ELEMENT(gtk_type_new(factory->type));
+  element = GST_ELEMENT(g_object_new(factory->type,NULL));
   g_assert(element != NULL);
 
   // attempt to set the elemenfactory class pointer if necessary
-  oclass = GST_ELEMENT_CLASS(GTK_OBJECT(element)->klass);
+  oclass = GST_ELEMENT_CLASS(G_OBJECT_GET_CLASS(element));
   if (oclass->elementfactory == NULL) {
     GST_DEBUG (GST_CAT_ELEMENTFACTORY,"class %s\n", factory->name);
     oclass->elementfactory = factory;
diff --git a/gst/gstextratypes.c b/gst/gstextratypes.c
index 75e8a3a..162bdb5 100644
--- a/gst/gstextratypes.c
+++ b/gst/gstextratypes.c
@@ -2,7 +2,7 @@
  * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
  *                    2000 Wim Taymans <wtay@chello.be>
  *
- * gstextratypes.c: Extra GtkTypes: filename type, etc.
+ * gstextratypes.c: Extra GTypes: filename type, etc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -22,25 +22,27 @@
 
 #include "gst_private.h"
 
-#include "gstextratypes.h"
+#include <gst/gstobject.h>
+#include <gst/gstextratypes.h>
 
-GtkType 
+GType 
 gst_extra_get_filename_type (void) 
 {
-  static GtkType filename_type = 0;
+  static GType filename_type = 0;
 
   if (!filename_type) {
-    static const GtkTypeInfo filename_info = {
-      "GstFilename",
-      0, //sizeof(GstElement),
+    static const GTypeInfo filename_info = {
       0, //sizeof(GstElementClass),
-      (GtkClassInitFunc)NULL,
-      (GtkObjectInitFunc)NULL,
-      (GtkArgSetFunc)NULL,
-      (GtkArgGetFunc)NULL,
-      (GtkClassInitFunc)NULL,
+      NULL,
+      NULL,
+      NULL,
+      NULL,
+      NULL,
+      0, //sizeof(GstElement),
+      0,
+      NULL,
     };
-    filename_type = gtk_type_unique (GTK_TYPE_STRING, &filename_info);
+    filename_type = g_type_register_static (G_TYPE_STRING, "GstFilename", &filename_info, 0);
   }
   return filename_type;
 }
diff --git a/gst/gstextratypes.h b/gst/gstextratypes.h
index e482be6..eecd199 100644
--- a/gst/gstextratypes.h
+++ b/gst/gstextratypes.h
@@ -2,7 +2,7 @@
  * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
  *                    2000 Wim Taymans <wtay@chello.be>
  *
- * gstextratypes.h: Header for extra GtkTypes
+ * gstextratypes.h: Header for extra GTypes
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -24,16 +24,15 @@
 #ifndef __GST_EXTRA_TYPES_H__
 #define __GST_EXTRA_TYPES_H__
 
-#include <gtk/gtk.h>
-
-
 #ifdef __cplusplus
 extern "C" {
 #endif /* __cplusplus */
 
+
 #define GST_TYPE_FILENAME (gst_extra_get_filename_type())
 	
-GtkType gst_extra_get_filename_type(void);
+GType gst_extra_get_filename_type(void);
+
 
 #ifdef __cplusplus
 }
diff --git a/gst/gstmarshal.c b/gst/gstmarshal.c
new file mode 100644
index 0000000..c17898e
--- /dev/null
+++ b/gst/gstmarshal.c
@@ -0,0 +1,76 @@
+#include <glib-object.h>
+
+/* VOID:OBJECT,POINTER (gstmarshal.list:1) */
+void
+gst_marshal_VOID__OBJECT_POINTER (GClosure     *closure,
+                                  GValue       *return_value,
+                                  guint         n_param_values,
+                                  const GValue *param_values,
+                                  gpointer      invocation_hint,
+                                  gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__OBJECT_POINTER) (gpointer     data1,
+                                                     gpointer     arg_1,
+                                                     gpointer     arg_2,
+                                                     gpointer     data2);
+  register GMarshalFunc_VOID__OBJECT_POINTER 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_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_value_get_object (param_values + 1),
+            g_value_get_pointer (param_values + 2),
+            data2);
+}
+
+/* VOID:INT,INT (gstmarshal.list:2) */
+void
+gst_marshal_VOID__INT_INT (GClosure     *closure,
+                           GValue       *return_value,
+                           guint         n_param_values,
+                           const GValue *param_values,
+                           gpointer      invocation_hint,
+                           gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__INT_INT) (gpointer     data1,
+                                              gint         arg_1,
+                                              gint         arg_2,
+                                              gpointer     data2);
+  register GMarshalFunc_VOID__INT_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__INT_INT) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_value_get_int (param_values + 1),
+            g_value_get_int (param_values + 2),
+            data2);
+}
+
diff --git a/gst/gstmarshal.h b/gst/gstmarshal.h
new file mode 100644
index 0000000..e74c903
--- /dev/null
+++ b/gst/gstmarshal.h
@@ -0,0 +1,25 @@
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/* VOID:OBJECT,POINTER (gstmarshal.list:1) */
+extern void gst_marshal_VOID__OBJECT_POINTER (GClosure     *closure,
+                                              GValue       *return_value,
+                                              guint         n_param_values,
+                                              const GValue *param_values,
+                                              gpointer      invocation_hint,
+                                              gpointer      marshal_data);
+
+/* VOID:INT,INT (gstmarshal.list:2) */
+extern void gst_marshal_VOID__INT_INT (GClosure     *closure,
+                                       GValue       *return_value,
+                                       guint         n_param_values,
+                                       const GValue *param_values,
+                                       gpointer      invocation_hint,
+                                       gpointer      marshal_data);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
diff --git a/gst/gstobject.c b/gst/gstobject.c
index 5367b3d..2463e86 100644
--- a/gst/gstobject.c
+++ b/gst/gstobject.c
@@ -46,7 +46,7 @@
 typedef struct _GstSignalObject GstSignalObject;
 typedef struct _GstSignalObjectClass GstSignalObjectClass;
 
-static GtkType		gst_signal_object_get_type	(void);
+static GType		gst_signal_object_get_type	(void);
 static void		gst_signal_object_class_init	(GstSignalObjectClass *klass);
 static void		gst_signal_object_init		(GstSignalObject *object);
 
@@ -55,35 +55,31 @@
 static void		gst_object_class_init		(GstObjectClass *klass);
 static void		gst_object_init			(GstObject *object);
 
-static void 		gst_object_real_destroy 	(GtkObject *gtk_object);
-static void 		gst_object_shutdown 		(GtkObject *gtk_object);
-static void 		gst_object_finalize 		(GtkObject *gtk_object);
+static void 		gst_object_real_destroy 	(GObject *object);
+static void 		gst_object_shutdown 		(GObject *object);
+static void 		gst_object_finalize 		(GObject *object);
 
-static GtkObjectClass *parent_class = NULL;
+static GObjectClass *parent_class = NULL;
 static guint gst_object_signals[LAST_SIGNAL] = { 0 };
 
-void
-gst_object_inititialize (void)
-{
-}
-
-GtkType
+GType
 gst_object_get_type (void)
 {
-  static GtkType object_type = 0;
+  static GType object_type = 0;
 
   if (!object_type) {
-    static const GtkTypeInfo object_info = {
-      "GstObject",
-      sizeof(GstObject),
-      sizeof(GstObjectClass),
-      (GtkClassInitFunc)gst_object_class_init,
-      (GtkObjectInitFunc)gst_object_init,
-      (GtkArgSetFunc)NULL,
-      (GtkArgGetFunc)NULL,
-      (GtkClassInitFunc)NULL,
+    static const GTypeInfo object_info = {
+      sizeof (GstObjectClass),
+      NULL,
+      NULL,
+      (GClassInitFunc) gst_object_class_init,
+      NULL,
+      NULL,
+      sizeof (GstObject),
+      32,
+      (GInstanceInitFunc) gst_object_init,
     };
-    object_type = gtk_type_unique(gtk_object_get_type(),&object_info);
+    object_type = g_type_register_static (G_TYPE_OBJECT, "GstObject", &object_info, G_TYPE_FLAG_ABSTRACT);
   }
   return object_type;
 }
@@ -91,47 +87,38 @@
 static void
 gst_object_class_init (GstObjectClass *klass)
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
 
-  gtkobject_class = (GtkObjectClass*) klass;
+  gobject_class = (GObjectClass*) klass;
 
-  parent_class = gtk_type_class (gtk_object_get_type ());
+  parent_class = g_type_class_ref (G_TYPE_OBJECT);
 
   gst_object_signals[PARENT_SET] =
-    gtk_signal_new ("parent_set", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstObjectClass, parent_set),
-                    gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
-                    GST_TYPE_OBJECT);
+    g_signal_newc("parent_set", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (GstObjectClass, parent_set), NULL, NULL,
+                  g_cclosure_marshal_VOID__OBJECT,G_TYPE_NONE,1,
+                  G_TYPE_OBJECT);
 #ifndef GST_DISABLE_XML
   gst_object_signals[OBJECT_SAVED] =
-    gtk_signal_new ("object_saved", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstObjectClass, object_saved),
-                    gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
-                    GTK_TYPE_POINTER);
+    g_signal_newc("object_saved", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (GstObjectClass, object_saved), NULL, NULL,
+                  g_cclosure_marshal_VOID__POINTER,G_TYPE_NONE,1,
+                  G_TYPE_POINTER);
 #endif
-  gtk_object_class_add_signals (gtkobject_class, gst_object_signals, LAST_SIGNAL);
 
   klass->path_string_separator = "/";
-  klass->signal_object = gtk_type_new (gst_signal_object_get_type ());
+// FIXME!!!
+//  klass->signal_object = g_object_new(gst_signal_object_get_type (,NULL));
 
-  gtkobject_class->shutdown = gst_object_shutdown;
-  gtkobject_class->destroy = gst_object_real_destroy;
-  gtkobject_class->finalize = gst_object_finalize;
+  gobject_class->shutdown = gst_object_shutdown;
+//  gobject_class->destroy = gst_object_real_destroy;
+  gobject_class->finalize = gst_object_finalize;
 }
 
 static void
 gst_object_init (GstObject *object)
 {
-  GstObjectClass *oclass;
-
-  oclass = GST_OBJECT_CLASS (GTK_OBJECT (object)->klass);
-
   object->lock = g_mutex_new();
-#ifdef HAVE_ATOMIC_H
-  atomic_set(&(object->refcount),1);
-#else
-  object->refcount = 1;
-#endif
   object->parent = NULL;
 
   object->flags = 0;
@@ -148,7 +135,7 @@
 GstObject*
 gst_object_new (void)
 {
-  return GST_OBJECT (gtk_type_new (gst_object_get_type ()));
+  return GST_OBJECT (g_object_new (gst_object_get_type (), NULL));
 }
 
 /**
@@ -165,9 +152,9 @@
   g_return_val_if_fail (GST_IS_OBJECT (object), NULL);
 
   GST_DEBUG (GST_CAT_REFCOUNTING, "ref '%s' %d->%d\n",GST_OBJECT_NAME(object),
-             GTK_OBJECT(object)->ref_count,GTK_OBJECT(object)->ref_count+1);
+             G_OBJECT(object)->ref_count,G_OBJECT(object)->ref_count+1);
 
-  gtk_object_ref (GTK_OBJECT (object));
+  g_object_ref (G_OBJECT (object));
 
   return object;
 }
@@ -186,9 +173,9 @@
   g_return_if_fail (GST_IS_OBJECT (object));
 
   GST_DEBUG (GST_CAT_REFCOUNTING, "unref '%s' %d->%d\n",GST_OBJECT_NAME(object),
-             GTK_OBJECT(object)->ref_count,GTK_OBJECT(object)->ref_count-1);
+             G_OBJECT(object)->ref_count,G_OBJECT(object)->ref_count-1);
 
-  gtk_object_unref (GTK_OBJECT (object));
+  g_object_unref (G_OBJECT (object));
 }
 #define gst_object_unref gst_object_unref
 
@@ -227,46 +214,47 @@
      * invocations.
      */
     gst_object_ref (object);
-    GTK_OBJECT (object)->klass->shutdown (GTK_OBJECT (object));
+    G_OBJECT_GET_CLASS (object)->shutdown (G_OBJECT (object));
     gst_object_unref (object);
   }
 }
 
 static void
-gst_object_shutdown (GtkObject *object)
+gst_object_shutdown (GObject *object)
 {
   GST_DEBUG (GST_CAT_REFCOUNTING, "shutdown '%s'\n",GST_OBJECT_NAME(object));
   GST_FLAG_SET (GST_OBJECT (object), GST_DESTROYED);
-  parent_class->shutdown (GTK_OBJECT (object));
+  parent_class->shutdown (object);
 }
 
 /* finilize is called when the object has to free its resources */
 static void
-gst_object_real_destroy (GtkObject *gtk_object)
+gst_object_real_destroy (GObject *g_object)
 {
-  GST_DEBUG (GST_CAT_REFCOUNTING, "destroy '%s'\n",GST_OBJECT_NAME(gtk_object));
+  GST_DEBUG (GST_CAT_REFCOUNTING, "destroy '%s'\n",GST_OBJECT_NAME(g_object));
 
-  GST_OBJECT_PARENT (gtk_object) = NULL;
+  GST_OBJECT_PARENT (g_object) = NULL;
 
-  parent_class->destroy (gtk_object);
+// FIXME!!
+//  parent_class->destroy (g_object);
 }
 
 /* finilize is called when the object has to free its resources */
 static void
-gst_object_finalize (GtkObject *gtk_object)
+gst_object_finalize (GObject *object)
 {
-  GstObject *object;
+  GstObject *gstobject;
 
-  object = GST_OBJECT (gtk_object);
+  gstobject = GST_OBJECT (object);
 
   GST_DEBUG (GST_CAT_REFCOUNTING, "finalize '%s'\n",GST_OBJECT_NAME(object));
 
-  if (object->name != NULL)
-    g_free (object->name);
+  if (gstobject->name != NULL)
+    g_free (gstobject->name);
 
-  g_mutex_free (object->lock);
+  g_mutex_free (gstobject->lock);
 
-  parent_class->finalize (gtk_object);
+  parent_class->finalize (object);
 }
 
 /**
@@ -333,7 +321,7 @@
   gst_object_sink (object);
   object->parent = parent;
 
-  gtk_signal_emit (GTK_OBJECT (object), gst_object_signals[PARENT_SET], parent);
+  g_signal_emit (G_OBJECT (object), gst_object_signals[PARENT_SET], 0, parent);
 }
 
 /**
@@ -386,15 +374,16 @@
   g_return_if_fail (object != NULL, NULL);
   g_return_if_fail (GST_IS_OBJECT (object), NULL);
 
-#ifdef HAVE_ATOMIC_H
-  g_return_if_fail (atomic_read (&(object->refcount)) > 0);
-  atomic_inc (&(object->refcount))
-#else
+//#ifdef HAVE_ATOMIC_H
+//  g_return_if_fail (atomic_read (&(object->refcount)) > 0);
+//  atomic_inc (&(object->refcount))
+//#else
   g_return_if_fail (object->refcount > 0);
   GST_LOCK (object);
-  object->refcount++;
+//  object->refcount++;
+  g_object_ref((GObject *)object);
   GST_UNLOCK (object);
-#endif
+//#endif
 
   return object;
 }
@@ -436,7 +425,7 @@
     object->refcount = 1;
 #endif
     /* destroy it */
-    gtk_object_destroy (GTK_OBJECT (object));
+    gtk_object_destroy (G_OBJECT (object));
     /* drop the refcount back to zero */
 #ifdef HAVE_ATOMIC_H
     atomic_set (&(object->refcount),0);
@@ -446,7 +435,7 @@
     /* finalize the object */
     // FIXME this is an evil hack that should be killed
 // FIXMEFIXMEFIXMEFIXME
-//    gtk_object_finalize(GTK_OBJECT(object));
+//    gtk_object_finalize(G_OBJECT(object));
   }
 }
 #endif /* gst_object_unref */
@@ -498,13 +487,13 @@
   g_return_val_if_fail (GST_IS_OBJECT (object), parent);
   g_return_val_if_fail (parent != NULL, parent);
 
-  oclass = GST_OBJECT_CLASS (GTK_OBJECT (object)->klass);
+  oclass = (GstObjectClass *)G_OBJECT_GET_CLASS(object);
 
   if (oclass->save_thyself)
     oclass->save_thyself (object, parent);
 
 #ifndef GST_DISABLE_XML
-  gtk_signal_emit (GTK_OBJECT (object), gst_object_signals[OBJECT_SAVED], parent);
+  g_signal_emit (G_OBJECT (object), gst_object_signals[OBJECT_SAVED], 0, parent);
 #endif
 
   return parent;
@@ -556,7 +545,7 @@
   parents = parentage;
   while (parents) {
     if (GST_IS_OBJECT (parents->data)) {
-      GstObjectClass *oclass = GST_OBJECT_CLASS (GTK_OBJECT (parents->data)->klass);
+      GstObjectClass *oclass = (GstObjectClass *)G_OBJECT_GET_CLASS(parents->data);
 
       component = gst_object_get_name (parents->data);
       separator = oclass->path_string_separator;
@@ -584,11 +573,11 @@
 
 
 struct _GstSignalObject {
-  GtkObject object;
+  GObject object;
 };
 
 struct _GstSignalObjectClass {
-  GtkObjectClass        parent_class;
+  GObjectClass        parent_class;
 
   /* signals */
 #ifndef GST_DISABLE_XML
@@ -596,23 +585,24 @@
 #endif GST_DISABLE_XML
 };
 
-static GtkType
+static GType
 gst_signal_object_get_type (void)
 {
-  static GtkType signal_object_type = 0;
+  static GType signal_object_type = 0;
 
   if (!signal_object_type) {
-    static const GtkTypeInfo signal_object_info = {
-      "GstSignalObject",
-      sizeof(GstSignalObject),
+    static const GTypeInfo signal_object_info = {
       sizeof(GstSignalObjectClass),
-      (GtkClassInitFunc)gst_signal_object_class_init,
-      (GtkObjectInitFunc)gst_signal_object_init,
-      (GtkArgSetFunc)NULL,
-      (GtkArgGetFunc)NULL,
-      (GtkClassInitFunc)NULL,
+      NULL,
+      NULL,
+      (GClassInitFunc)gst_signal_object_class_init,
+      NULL,
+      NULL,
+      sizeof(GstSignalObject),
+      16,
+      (GInstanceInitFunc)gst_signal_object_init,
     };
-    signal_object_type = gtk_type_unique(gtk_object_get_type(),&signal_object_info);
+    signal_object_type = g_type_register_static(G_TYPE_OBJECT, "GstSignalObject", &signal_object_info, 0);
   }
   return signal_object_type;
 }
@@ -620,19 +610,18 @@
 static void
 gst_signal_object_class_init (GstSignalObjectClass *klass)
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
 
-  gtkobject_class = (GtkObjectClass*) klass;
+  gobject_class = (GObjectClass*) klass;
 
-  parent_class = gtk_type_class (gtk_object_get_type ());
+  parent_class = g_type_class_ref (G_TYPE_OBJECT);
 
 #ifndef GST_DISABLE_XML
   gst_signal_object_signals[SO_OBJECT_LOADED] =
-    gtk_signal_new ("object_loaded", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstSignalObjectClass, object_loaded),
-                    gtk_marshal_NONE__POINTER_POINTER, GTK_TYPE_NONE, 2,
-                    GST_TYPE_OBJECT, GTK_TYPE_POINTER);
-  gtk_object_class_add_signals (gtkobject_class, gst_signal_object_signals, LAST_SIGNAL);
+    g_signal_newc("object_loaded", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (GstObjectClass, parent_set), NULL, NULL,
+                  gst_marshal_VOID__OBJECT_POINTER,G_TYPE_NONE,2,
+                  G_TYPE_OBJECT,G_TYPE_POINTER);
 #endif
 }
 
@@ -655,10 +644,10 @@
 guint
 gst_class_signal_connect (GstObjectClass *klass,
 			  const gchar    *name,
-			  GtkSignalFunc  func,
+			  gpointer  func,
 		          gpointer       func_data)
 {
-  return gtk_signal_connect (klass->signal_object, name, func, func_data);
+  return g_signal_connectc (klass->signal_object, name, func, func_data, FALSE);
 }
 
 #ifndef GST_DISABLE_XML
@@ -677,9 +666,9 @@
 {
   GstObjectClass *oclass;
 
-  oclass = GST_OBJECT_CLASS (GTK_OBJECT (object)->klass);
+  oclass = (GstObjectClass *)G_OBJECT_GET_CLASS(object);
 
-  gtk_signal_emit_by_name (oclass->signal_object, name, object, self);
+  g_signal_emit_by_name (oclass->signal_object, name, object, self);
 }
 
 #endif // GST_DISABLE_XML
diff --git a/gst/gstobject.h b/gst/gstobject.h
index 1618318..ed6c6df 100644
--- a/gst/gstobject.h
+++ b/gst/gstobject.h
@@ -24,16 +24,23 @@
 #ifndef __GST_OBJECT_H__
 #define __GST_OBJECT_H__
 
-#include <gtk/gtk.h>
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+
+#ifdef USE_GLIB2
+#include <glib-object.h>
+#include <gst/gstmarshal.h>
+#else
+#include <gst/gobject2gtk.h>
+#endif
+
 #include <gst/gsttrace.h>
 #include <parser.h>
 
 #include <gst/gsttypes.h>
 
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
 #ifdef HAVE_ATOMIC_H
 #include <asm/atomic.h>
 #endif
@@ -49,13 +56,13 @@
 #define GST_TYPE_OBJECT \
   (gst_object_get_type())
 #define GST_OBJECT(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_OBJECT,GstObject))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_OBJECT,GstObject))
 #define GST_OBJECT_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_OBJECT,GstObjectClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_OBJECT,GstObjectClass))
 #define GST_IS_OBJECT(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_OBJECT))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_OBJECT))
 #define GST_IS_OBJECT_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_OBJECT))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_OBJECT))
 
 //typedef struct _GstObject GstObject;
 //typedef struct _GstObjectClass GstObjectClass;
@@ -69,7 +76,7 @@
 } GstObjectFlags;
 
 struct _GstObject {
-  GtkObject object;
+  GObject object;
 
   gchar *name;
   /* have to have a refcount for the object */
@@ -89,10 +96,10 @@
 };
 
 struct _GstObjectClass {
-  GtkObjectClass	parent_class;
+  GObjectClass	parent_class;
 
   gchar			*path_string_separator;
-  GtkObject		*signal_object;
+  GObject		*signal_object;
 
   /* signals */
   void		(*parent_set)		(GstObject *object, GstObject *parent);
@@ -127,8 +134,8 @@
 #define GST_GET_LOCK(obj)	(GST_OBJECT(obj)->lock)
 
 
-/* normal GtkObject stuff */
-GtkType		gst_object_get_type		(void);
+/* normal GObject stuff */
+GType		gst_object_get_type		(void);
 GstObject*	gst_object_new			(void);
 
 /* name routines */
@@ -147,19 +154,19 @@
 #endif
 
 /* refcounting */
-GstObject *	gst_object_ref			(GstObject *object);		
-void 		gst_object_unref		(GstObject *object);		
-void 		gst_object_sink			(GstObject *object);		
+GstObject *	gst_object_ref			(GstObject *object);
+void 		gst_object_unref		(GstObject *object);
+void 		gst_object_sink			(GstObject *object);
 
 /* destroying an object */
-void 		gst_object_destroy		(GstObject *object);		
+void 		gst_object_destroy		(GstObject *object);
 
 /* printing out the 'path' of the object */
 gchar *		gst_object_get_path_string	(GstObject *object);
 
 guint		gst_class_signal_connect	(GstObjectClass	*klass,
 						 const gchar	*name,
-						 GtkSignalFunc	func,
+						 gpointer	func,
 						 gpointer	func_data);
 
 #ifndef GST_DISABLE_XML
diff --git a/gst/gstpad.c b/gst/gstpad.c
index ce12e71..2bdd4f7 100644
--- a/gst/gstpad.c
+++ b/gst/gstpad.c
@@ -40,22 +40,23 @@
 
 static GstObject *pad_parent_class = NULL;
 
-GtkType
+GType
 gst_pad_get_type(void) {
-  static GtkType pad_type = 0;
+  static GType pad_type = 0;
 
   if (!pad_type) {
-    static const GtkTypeInfo pad_info = {
-      "GstPad",
-      sizeof(GstPad),
+    static const GTypeInfo pad_info = {
       sizeof(GstPadClass),
-      (GtkClassInitFunc)gst_pad_class_init,
-      (GtkObjectInitFunc)gst_pad_init,
-      (GtkArgSetFunc)NULL,
-      (GtkArgGetFunc)NULL,
-      (GtkClassInitFunc)NULL,
+      NULL,
+      NULL,
+      (GClassInitFunc)gst_pad_class_init,
+      NULL,
+      NULL,
+      sizeof(GstPad),
+      32,
+      (GInstanceInitFunc)gst_pad_init,
     };
-    pad_type = gtk_type_unique(GST_TYPE_OBJECT,&pad_info);
+    pad_type = g_type_register_static(GST_TYPE_OBJECT, "GstPad", &pad_info, 0);
   }
   return pad_type;
 }
@@ -63,7 +64,7 @@
 static void
 gst_pad_class_init (GstPadClass *klass)
 {
-  pad_parent_class = gtk_type_class(GST_TYPE_OBJECT);
+  pad_parent_class = g_type_class_ref(GST_TYPE_OBJECT);
 }
 
 static void
@@ -94,36 +95,37 @@
   /* FILL ME */
 };
 
-static void		gst_real_pad_class_init		(GstRealPadClass *klass);
-static void		gst_real_pad_init		(GstRealPad *pad);
+static void	gst_real_pad_class_init		(GstRealPadClass *klass);
+static void	gst_real_pad_init		(GstRealPad *pad);
 
-static void		gst_real_pad_set_arg		(GtkObject *object,GtkArg *arg,guint id);
-static void		gst_real_pad_get_arg		(GtkObject *object,GtkArg *arg,guint id);
+static void	gst_real_pad_set_property	(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void	gst_real_pad_get_property	(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
-static void		gst_real_pad_destroy		(GtkObject *object);
+static void	gst_real_pad_destroy		(GObject *object);
 
-static void		gst_pad_push_func		(GstPad *pad, GstBuffer *buf);
+static void	gst_pad_push_func		(GstPad *pad, GstBuffer *buf);
 
 
 static GstPad *real_pad_parent_class = NULL;
 static guint gst_real_pad_signals[REAL_LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_real_pad_get_type(void) {
-  static GtkType pad_type = 0;
+  static GType pad_type = 0;
 
   if (!pad_type) {
-    static const GtkTypeInfo pad_info = {
-      "GstRealPad",
-      sizeof(GstRealPad),
+    static const GTypeInfo pad_info = {
       sizeof(GstRealPadClass),
-      (GtkClassInitFunc)gst_real_pad_class_init,
-      (GtkObjectInitFunc)gst_real_pad_init,
-      (GtkArgSetFunc)NULL,
-      (GtkArgGetFunc)NULL,
-      (GtkClassInitFunc)NULL,
+      NULL,
+      NULL,
+      (GClassInitFunc)gst_real_pad_class_init,
+      NULL,
+      NULL,
+      sizeof(GstRealPad),
+      32,
+      (GInstanceInitFunc)gst_real_pad_init,
     };
-    pad_type = gtk_type_unique(GST_TYPE_PAD,&pad_info);
+    pad_type = g_type_register_static(GST_TYPE_PAD, "GstRealPad", &pad_info, 0);
   }
   return pad_type;
 }
@@ -131,47 +133,50 @@
 static void
 gst_real_pad_class_init (GstRealPadClass *klass)
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
   GstObjectClass *gstobject_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
   gstobject_class = (GstObjectClass*)klass;
 
-  real_pad_parent_class = gtk_type_class(GST_TYPE_PAD);
+  real_pad_parent_class = g_type_class_ref(GST_TYPE_PAD);
+
+// FIXME!
+//  gobject_class->destroy  = GST_DEBUG_FUNCPTR(gst_real_pad_destroy);
+  gobject_class->set_property  = GST_DEBUG_FUNCPTR(gst_real_pad_set_property);
+  gobject_class->get_property  = GST_DEBUG_FUNCPTR(gst_real_pad_get_property);
 
   gst_real_pad_signals[REAL_SET_ACTIVE] =
-    gtk_signal_new ("set_active", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstRealPadClass, set_active),
-                    gtk_marshal_NONE__BOOL, GTK_TYPE_NONE, 1,
-                    GTK_TYPE_BOOL);
+    g_signal_newc ("set_active", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GstRealPadClass, set_active), NULL, NULL,
+                    g_cclosure_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1,
+                    G_TYPE_BOOLEAN);
   gst_real_pad_signals[REAL_CAPS_CHANGED] =
-    gtk_signal_new ("caps_changed", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstRealPadClass, caps_changed),
-                    gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
-                    GTK_TYPE_POINTER);
+    g_signal_newc ("caps_changed", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GstRealPadClass, caps_changed), NULL, NULL,
+                    g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
+                    G_TYPE_POINTER);
   gst_real_pad_signals[REAL_CAPS_NEGO_FAILED] =
-    gtk_signal_new ("caps_nego_failed", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstRealPadClass, caps_nego_failed),
-                    gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
-                    GTK_TYPE_POINTER);
+    g_signal_newc ("caps_nego_failed", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GstRealPadClass, caps_nego_failed), NULL, NULL,
+                    g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
+                    G_TYPE_POINTER);
   gst_real_pad_signals[REAL_CONNECTED] =
-    gtk_signal_new ("connected", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstRealPadClass, connected),
-                    gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
-                    GTK_TYPE_POINTER);
+    g_signal_newc ("connected", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GstRealPadClass, connected), NULL, NULL,
+                    g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
+                    G_TYPE_POINTER);
   gst_real_pad_signals[REAL_DISCONNECTED] =
-    gtk_signal_new ("disconnected", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstRealPadClass, disconnected),
-                    gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
-                    GTK_TYPE_POINTER);
-  gtk_object_class_add_signals (gtkobject_class, gst_real_pad_signals, REAL_LAST_SIGNAL);
+    g_signal_newc ("disconnected", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GstRealPadClass, disconnected), NULL, NULL,
+                    g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
+                    G_TYPE_POINTER);
 
-  gtk_object_add_arg_type ("GstRealPad::active", GTK_TYPE_BOOL,
-                           GTK_ARG_READWRITE, REAL_ARG_ACTIVE);
-
-  gtkobject_class->destroy  = GST_DEBUG_FUNCPTR(gst_real_pad_destroy);
-  gtkobject_class->set_arg  = GST_DEBUG_FUNCPTR(gst_real_pad_set_arg);
-  gtkobject_class->get_arg  = GST_DEBUG_FUNCPTR(gst_real_pad_get_arg);
+//  gtk_object_add_arg_type ("GstRealPad::active", G_TYPE_BOOLEAN,
+//                           GTK_ARG_READWRITE, REAL_ARG_ACTIVE);
+  g_object_class_install_property (G_OBJECT_CLASS(klass), REAL_ARG_ACTIVE,
+    g_param_spec_boolean("active","Active","Whether the pad is active.",
+                         TRUE,G_PARAM_READWRITE));
 
 #ifndef GST_DISABLE_XML
   gstobject_class->save_thyself = GST_DEBUG_FUNCPTR(gst_pad_save_thyself);
@@ -201,20 +206,20 @@
 }
 
 static void
-gst_real_pad_set_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_real_pad_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
   g_return_if_fail(GST_IS_PAD(object));
 
-  switch (id) {
+  switch (prop_id) {
     case REAL_ARG_ACTIVE:
-      if (GTK_VALUE_BOOL(*arg)) {
-        gst_info("gstpad: activating pad\n");
+      if (g_value_get_boolean(value)) {
+        GST_DEBUG(GST_CAT_PADS,"activating pad %s:%s\n",GST_DEBUG_PAD_NAME(object));
         GST_FLAG_UNSET(object,GST_PAD_DISABLED);
       } else {
-        gst_info("gstpad: de-activating pad\n");
+        GST_DEBUG(GST_CAT_PADS,"de-activating pad %s:%s\n",GST_DEBUG_PAD_NAME(object));
         GST_FLAG_SET(object,GST_PAD_DISABLED);
       }
-      gtk_signal_emit(GTK_OBJECT(object), gst_real_pad_signals[REAL_SET_ACTIVE],
+      g_signal_emit(G_OBJECT(object), gst_real_pad_signals[REAL_SET_ACTIVE], 0,
                       ! GST_FLAG_IS_SET(object,GST_PAD_DISABLED));
       break;
     default:
@@ -223,14 +228,14 @@
 }
 
 static void
-gst_real_pad_get_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_real_pad_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
   /* it's not null if we got it, but it might not be ours */
   g_return_if_fail (GST_IS_PAD (object));
 
-  switch (id) {
+  switch (prop_id) {
     case REAL_ARG_ACTIVE:
-      GTK_VALUE_BOOL (*arg) = ! GST_FLAG_IS_SET (object, GST_PAD_DISABLED);
+      g_value_set_boolean(value, ! GST_FLAG_IS_SET (object, GST_PAD_DISABLED) );
       break;
     default:
       break;
@@ -256,7 +261,7 @@
   g_return_val_if_fail (name != NULL, NULL);
   g_return_val_if_fail (direction != GST_PAD_UNKNOWN, NULL);
 
-  pad = gtk_type_new (gst_real_pad_get_type ());
+  pad = g_object_new (gst_real_pad_get_type (), NULL);
   gst_object_set_name (GST_OBJECT (pad), name);
   GST_RPAD_DIRECTION(pad) = direction;
 
@@ -585,8 +590,8 @@
   GST_RPAD_PEER(realsink) = NULL;
 
   /* fire off a signal to each of the pads telling them that they've been disconnected */
-  gtk_signal_emit(GTK_OBJECT(realsrc), gst_real_pad_signals[REAL_DISCONNECTED], realsink);
-  gtk_signal_emit(GTK_OBJECT(realsink), gst_real_pad_signals[REAL_DISCONNECTED], realsrc);
+  g_signal_emit(G_OBJECT(realsrc), gst_real_pad_signals[REAL_DISCONNECTED], 0, realsink);
+  g_signal_emit(G_OBJECT(realsink), gst_real_pad_signals[REAL_DISCONNECTED], 0, realsrc);
 
   // now tell the scheduler
   if (realsrc->sched)
@@ -672,8 +677,8 @@
   }
 
   /* fire off a signal to each of the pads telling them that they've been connected */
-  gtk_signal_emit(GTK_OBJECT(realsrc), gst_real_pad_signals[REAL_CONNECTED], realsink);
-  gtk_signal_emit(GTK_OBJECT(realsink), gst_real_pad_signals[REAL_CONNECTED], realsrc);
+  g_signal_emit(G_OBJECT(realsrc), gst_real_pad_signals[REAL_CONNECTED], 0, realsink);
+  g_signal_emit(G_OBJECT(realsink), gst_real_pad_signals[REAL_CONNECTED], 0, realsrc);
 
   // now tell the scheduler(s)
   if (realsrc->sched)
@@ -701,7 +706,7 @@
   g_return_if_fail (GST_IS_PAD (pad));
   g_return_if_fail (GST_PAD_PARENT (pad) == NULL);
   g_return_if_fail (parent != NULL);
-  g_return_if_fail (GTK_IS_OBJECT (parent));
+  g_return_if_fail (GST_IS_OBJECT (parent));
   g_return_if_fail ((gpointer)pad != (gpointer)parent);
 
   gst_object_set_parent (GST_OBJECT (pad), parent);
@@ -1047,7 +1052,7 @@
 }
 
 static void
-gst_real_pad_destroy (GtkObject *object)
+gst_real_pad_destroy (GObject *object)
 {
   GstPad *pad = GST_PAD (object);
 
@@ -1080,8 +1085,9 @@
     g_list_free (GST_REAL_PAD(pad)->ghostpads);
   }
 
-  if (GTK_OBJECT_CLASS (real_pad_parent_class)->destroy)
-    GTK_OBJECT_CLASS (real_pad_parent_class)->destroy (object);
+// FIXME !!
+//  if (G_OBJECT_CLASS (real_pad_parent_class)->destroy)
+//    G_OBJECT_CLASS (real_pad_parent_class)->destroy (object);
 }
 
 
@@ -1298,10 +1304,10 @@
   if (!result) {
     GST_DEBUG (GST_CAT_NEGOTIATION, "firing caps_nego_failed signal on %s:%s and %s:%s to give it a chance to succeed\n",
                GST_DEBUG_PAD_NAME(currentpad),GST_DEBUG_PAD_NAME(otherpad));
-    gtk_signal_emit (GTK_OBJECT(currentpad), 
-                     gst_real_pad_signals[REAL_CAPS_NEGO_FAILED],&result);
-    gtk_signal_emit (GTK_OBJECT(otherpad), 
-                     gst_real_pad_signals[REAL_CAPS_NEGO_FAILED],&result);
+    g_signal_emit (G_OBJECT(currentpad), 
+                     gst_real_pad_signals[REAL_CAPS_NEGO_FAILED], 0, &result);
+    g_signal_emit (G_OBJECT(otherpad), 
+                     gst_real_pad_signals[REAL_CAPS_NEGO_FAILED], 0, &result);
     if (result)
       GST_DEBUG (GST_CAT_NEGOTIATION, "caps_nego_failed handler claims success at renego, believing\n");
   }
@@ -1323,10 +1329,10 @@
 
     GST_DEBUG (GST_CAT_NEGOTIATION, "firing caps_changed signal on %s:%s and %s:%s\n",
                GST_DEBUG_PAD_NAME(currentpad),GST_DEBUG_PAD_NAME(otherpad));
-    gtk_signal_emit (GTK_OBJECT(currentpad), 
-                     gst_real_pad_signals[REAL_CAPS_CHANGED],GST_PAD_CAPS(currentpad));
-    gtk_signal_emit (GTK_OBJECT(otherpad), 
-                     gst_real_pad_signals[REAL_CAPS_CHANGED],GST_PAD_CAPS(otherpad));
+    g_signal_emit (G_OBJECT(currentpad), 
+                     gst_real_pad_signals[REAL_CAPS_CHANGED], 0, GST_PAD_CAPS(currentpad));
+    g_signal_emit (G_OBJECT(otherpad), 
+                     gst_real_pad_signals[REAL_CAPS_CHANGED], 0, GST_PAD_CAPS(otherpad));
   }
 
   return result;
@@ -1577,23 +1583,24 @@
 static GstObject *padtemplate_parent_class = NULL;
 static guint gst_padtemplate_signals[TEMPL_LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_padtemplate_get_type (void)
 {
-  static GtkType padtemplate_type = 0;
+  static GType padtemplate_type = 0;
 
   if (!padtemplate_type) {
-    static const GtkTypeInfo padtemplate_info = {
-      "GstPadTemplate",
-      sizeof(GstPadTemplate),
+    static const GTypeInfo padtemplate_info = {
       sizeof(GstPadTemplateClass),
-      (GtkClassInitFunc)gst_padtemplate_class_init,
-      (GtkObjectInitFunc)gst_padtemplate_init,
-      (GtkArgSetFunc)NULL,
-      (GtkArgGetFunc)NULL,
-      (GtkClassInitFunc)NULL,
+      NULL,
+      NULL,
+      (GClassInitFunc)gst_padtemplate_class_init,
+      NULL,
+      NULL,
+      sizeof(GstPadTemplate),
+      32,
+      (GInstanceInitFunc)gst_padtemplate_init,
     };
-    padtemplate_type = gtk_type_unique(GST_TYPE_OBJECT,&padtemplate_info);
+    padtemplate_type = g_type_register_static(GST_TYPE_OBJECT, "GstPadTemplate", &padtemplate_info, 0);
   }
   return padtemplate_type;
 }
@@ -1601,21 +1608,20 @@
 static void
 gst_padtemplate_class_init (GstPadTemplateClass *klass)
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
   GstObjectClass *gstobject_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
   gstobject_class = (GstObjectClass*)klass;
 
-  padtemplate_parent_class = gtk_type_class(GST_TYPE_OBJECT);
+  padtemplate_parent_class = g_type_class_ref(GST_TYPE_OBJECT);
 
   gst_padtemplate_signals[TEMPL_PAD_CREATED] =
-    gtk_signal_new ("pad_created", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstPadTemplateClass, pad_created),
-                    gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
+    g_signal_newc ("pad_created", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GstPadTemplateClass, pad_created), NULL, NULL,
+                    g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
                     GST_TYPE_PAD);
 
-  gtk_object_class_add_signals (gtkobject_class, gst_padtemplate_signals, TEMPL_LAST_SIGNAL);
 
   gstobject_class->path_string_separator = "*";
 }
@@ -1648,7 +1654,7 @@
 
   g_return_val_if_fail (name_template != NULL, NULL);
 
-  new = gtk_type_new (gst_padtemplate_get_type ());
+  new = g_object_new(gst_padtemplate_get_type () ,NULL);
 
   GST_PADTEMPLATE_NAME_TEMPLATE (new) = name_template;
   GST_PADTEMPLATE_DIRECTION (new) = direction;
@@ -1894,22 +1900,23 @@
 static GstPad *ghost_pad_parent_class = NULL;
 //static guint gst_ghost_pad_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_ghost_pad_get_type(void) {
-  static GtkType pad_type = 0;
+  static GType pad_type = 0;
 
   if (!pad_type) {
-    static const GtkTypeInfo pad_info = {
-      "GstGhostPad",
-      sizeof(GstGhostPad),
+    static const GTypeInfo pad_info = {
       sizeof(GstGhostPadClass),
-      (GtkClassInitFunc)gst_ghost_pad_class_init,
-      (GtkObjectInitFunc)gst_ghost_pad_init,
-      (GtkArgSetFunc)NULL,
-      (GtkArgGetFunc)NULL,
-      (GtkClassInitFunc)NULL,
+      NULL,
+      NULL,
+      (GClassInitFunc)gst_ghost_pad_class_init,
+      NULL,
+      NULL,
+      sizeof(GstGhostPad),
+      8,
+      (GInstanceInitFunc)gst_ghost_pad_init,
     };
-    pad_type = gtk_type_unique(GST_TYPE_PAD,&pad_info);
+    pad_type = g_type_register_static(GST_TYPE_PAD, "GstGhostPad", &pad_info, 0);
   }
   return pad_type;
 }
@@ -1917,11 +1924,11 @@
 static void
 gst_ghost_pad_class_init (GstGhostPadClass *klass)
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
 
-  ghost_pad_parent_class = gtk_type_class(GST_TYPE_PAD);
+  ghost_pad_parent_class = g_type_class_ref(GST_TYPE_PAD);
 }
 
 static void
@@ -1948,7 +1955,7 @@
   g_return_val_if_fail (name != NULL, NULL);
   g_return_val_if_fail (GST_IS_PAD(pad), NULL);
 
-  ghostpad = gtk_type_new (gst_ghost_pad_get_type ());
+  ghostpad = g_object_new(gst_ghost_pad_get_type () ,NULL);
   gst_pad_set_name (GST_PAD (ghostpad), name);
   GST_GPAD_REALPAD(ghostpad) = GST_PAD_REALIZE(pad);
   GST_PAD_PADTEMPLATE(ghostpad) = GST_PAD_PADTEMPLATE(pad);
diff --git a/gst/gstpad.h b/gst/gstpad.h
index dc75cd3..9626b34 100644
--- a/gst/gstpad.h
+++ b/gst/gstpad.h
@@ -45,22 +45,22 @@
 
 
 #define GST_TYPE_PAD			(gst_pad_get_type ())
-#define GST_PAD(obj)			(GTK_CHECK_CAST ((obj), GST_TYPE_PAD,GstPad))
-#define GST_PAD_CLASS(klass)		(GTK_CHECK_CLASS_CAST ((klass), GST_TYPE_PAD,GstPadClass))
-#define GST_IS_PAD(obj)			(GTK_CHECK_TYPE ((obj), GST_TYPE_PAD))
-#define GST_IS_PAD_CLASS(obj)		(GTK_CHECK_CLASS_TYPE ((klass), GST_TYPE_PAD))
+#define GST_PAD(obj)			(G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PAD,GstPad))
+#define GST_PAD_CLASS(klass)		(G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_PAD,GstPadClass))
+#define GST_IS_PAD(obj)			(G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PAD))
+#define GST_IS_PAD_CLASS(obj)		(G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_PAD))
 
 #define GST_TYPE_REAL_PAD		(gst_real_pad_get_type ())
-#define GST_REAL_PAD(obj)		(GTK_CHECK_CAST ((obj), GST_TYPE_REAL_PAD,GstRealPad))
-#define GST_REAL_PAD_CLASS(klass)	(GTK_CHECK_CLASS_CAST ((klass), GST_TYPE_REAL_PAD,GstRealPadClass))
-#define GST_IS_REAL_PAD(obj)		(GTK_CHECK_TYPE ((obj), GST_TYPE_REAL_PAD))
-#define GST_IS_REAL_PAD_CLASS(obj)	(GTK_CHECK_CLASS_TYPE ((klass), GST_TYPE_REAL_PAD))
+#define GST_REAL_PAD(obj)		(G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_REAL_PAD,GstRealPad))
+#define GST_REAL_PAD_CLASS(klass)	(G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_REAL_PAD,GstRealPadClass))
+#define GST_IS_REAL_PAD(obj)		(G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_REAL_PAD))
+#define GST_IS_REAL_PAD_CLASS(obj)	(G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_REAL_PAD))
 
 #define GST_TYPE_GHOST_PAD		(gst_ghost_pad_get_type ())
-#define GST_GHOST_PAD(obj)		(GTK_CHECK_CAST ((obj), GST_TYPE_GHOST_PAD,GstGhostPad))
-#define GST_GHOST_PAD_CLASS(klass)	(GTK_CHECK_CLASS_CAST ((klass), GST_TYPE_GHOST_PAD,GstGhostPadClass))
-#define GST_IS_GHOST_PAD(obj)		(GTK_CHECK_TYPE ((obj), GST_TYPE_GHOST_PAD))
-#define GST_IS_GHOST_PAD_CLASS(obj)	(GTK_CHECK_CLASS_TYPE ((klass), GST_TYPE_GHOST_PAD))
+#define GST_GHOST_PAD(obj)		(G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_GHOST_PAD,GstGhostPad))
+#define GST_GHOST_PAD_CLASS(klass)	(G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_GHOST_PAD,GstGhostPadClass))
+#define GST_IS_GHOST_PAD(obj)		(G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_GHOST_PAD))
+#define GST_IS_GHOST_PAD_CLASS(obj)	(G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_GHOST_PAD))
 
 
 //typedef struct _GstPad GstPad;
@@ -74,7 +74,7 @@
 
 
 typedef enum {
-  GST_REGION_NONE,
+  GST_REGION_VOID,
   GST_REGION_OFFSET_LEN,
   GST_REGION_TIME_LEN,
 } GstRegionType;
@@ -230,10 +230,10 @@
 
 /***** PadTemplate *****/
 #define GST_TYPE_PADTEMPLATE		(gst_padtemplate_get_type ())
-#define GST_PADTEMPLATE(obj)		(GTK_CHECK_CAST ((obj), GST_TYPE_PADTEMPLATE,GstPadTemplate))
-#define GST_PADTEMPLATE_CLASS(klass)	(GTK_CHECK_CLASS_CAST ((klass), GST_TYPE_PADTEMPLATE,GstPadTemplateClass))
-#define GST_IS_PADTEMPLATE(obj)		(GTK_CHECK_TYPE ((obj), GST_TYPE_PADTEMPLATE))
-#define GST_IS_PADTEMPLATE_CLASS(obj)	(GTK_CHECK_CLASS_TYPE ((klass), GST_TYPE_PADTEMPLATE))
+#define GST_PADTEMPLATE(obj)		(G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PADTEMPLATE,GstPadTemplate))
+#define GST_PADTEMPLATE_CLASS(klass)	(G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_PADTEMPLATE,GstPadTemplateClass))
+#define GST_IS_PADTEMPLATE(obj)		(G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PADTEMPLATE))
+#define GST_IS_PADTEMPLATE_CLASS(obj)	(G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_PADTEMPLATE))
 
 typedef enum {
   GST_PAD_ALWAYS,
@@ -288,9 +288,9 @@
 #define GST_PADTEMPLATE_GET(fact) (fact)()
 
 
-GtkType			gst_pad_get_type		(void);
-GtkType			gst_real_pad_get_type		(void);
-GtkType			gst_ghost_pad_get_type		(void);
+GType			gst_pad_get_type		(void);
+GType			gst_real_pad_get_type		(void);
+GType			gst_ghost_pad_get_type		(void);
 
 GstPad*			gst_pad_new			(gchar *name, GstPadDirection direction);
 #define			gst_pad_destroy(pad)		gst_object_destroy (GST_OBJECT (pad))
@@ -378,7 +378,7 @@
 
 
 /* templates and factories */
-GtkType			gst_padtemplate_get_type	(void);
+GType			gst_padtemplate_get_type	(void);
 
 GstPadTemplate*		gst_padtemplate_new		(gchar *name_template,
 		                                         GstPadDirection direction, GstPadPresence presence,
diff --git a/gst/gstparse.c b/gst/gstparse.c
index 7814399..1aee871 100644
--- a/gst/gstparse.c
+++ b/gst/gstparse.c
@@ -233,10 +233,9 @@
       argname = arg;
       pos[0] = '\0';
       argval = pos+1;
-      DEBUG("attempting to set argument '%s' to '%s' on element '%s'\n",
+      GST_DEBUG(0,"attempting to set argument '%s' to '%s' on element '%s'\n",
             argname,argval,GST_ELEMENT_NAME(previous));
-      //gtk_object_set(GTK_OBJECT(previous),argname,argval,NULL);
-      gst_util_set_object_arg (GTK_OBJECT(previous), argname, argval);
+      gst_util_set_object_arg (G_OBJECT(previous), argname, argval);
       g_free(argname);
 
     // element or argument, or beginning of bin or thread
@@ -346,8 +345,8 @@
           srcpadname,
           GST_DEBUG_PAD_NAME(GST_PARSE_LISTPAD(sinkpads)));
 
-        gtk_signal_connect (GTK_OBJECT (previous), "new_pad", dynamic_connect, connect);
-        gtk_signal_connect (GTK_OBJECT (previous), "new_ghost_pad", dynamic_connect, connect);
+        g_signal_connectc (G_OBJECT (previous), "new_pad", dynamic_connect, connect, FALSE);
+        g_signal_connectc (G_OBJECT (previous), "new_ghost_pad", dynamic_connect, connect, FALSE);
       }
       else {
         for (j=0; (j<numsrcpads) && (j<numsinkpads); j++){
@@ -369,8 +368,7 @@
       // thomas: if we're the first element, connect eos signal
       if (elementcount == 1) 
       {
-        gtk_signal_connect (GTK_OBJECT (element), "eos",
-                      GTK_SIGNAL_FUNC (have_eos), NULL);
+        g_signal_connectc (G_OBJECT (element), "eos", have_eos, NULL, FALSE);
 
       }
       // if we're the first element, ghost all the sinkpads
diff --git a/gst/gstpipeline.c b/gst/gstpipeline.c
index 17b4959..85a67da 100644
--- a/gst/gstpipeline.c
+++ b/gst/gstpipeline.c
@@ -60,22 +60,23 @@
 static GstBinClass *parent_class = NULL;
 //static guint gst_pipeline_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_pipeline_get_type (void) {
-  static GtkType pipeline_type = 0;
+  static GType pipeline_type = 0;
 
   if (!pipeline_type) {
-    static const GtkTypeInfo pipeline_info = {
-      "GstPipeline",
-      sizeof(GstPipeline),
+    static const GTypeInfo pipeline_info = {
       sizeof(GstPipelineClass),
-      (GtkClassInitFunc)gst_pipeline_class_init,
-      (GtkObjectInitFunc)gst_pipeline_init,
-      (GtkArgSetFunc)NULL,
-      (GtkArgGetFunc)NULL,
-      (GtkClassInitFunc)NULL,
+      NULL,
+      NULL,
+      (GClassInitFunc)gst_pipeline_class_init,
+      NULL,
+      NULL,
+      sizeof(GstPipeline),
+      0,
+      (GInstanceInitFunc)gst_pipeline_init,
     };
-    pipeline_type = gtk_type_unique (gst_bin_get_type (), &pipeline_info);
+    pipeline_type = g_type_register_static (GST_TYPE_BIN, "GstPipeline", &pipeline_info, 0);
   }
   return pipeline_type;
 }
@@ -87,7 +88,7 @@
 
   gstelement_class = (GstElementClass*)klass;
 
-  parent_class = gtk_type_class(gst_bin_get_type());
+  parent_class = g_type_class_ref(gst_bin_get_type());
 
   gstelement_class->change_state = gst_pipeline_change_state;
 }
diff --git a/gst/gstpipeline.h b/gst/gstpipeline.h
index 27f14e4..46209b7 100644
--- a/gst/gstpipeline.h
+++ b/gst/gstpipeline.h
@@ -37,13 +37,13 @@
 #define GST_TYPE_PIPELINE \
   (gst_pipeline_get_type())
 #define GST_PIPELINE(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_PIPELINE,GstPipeline))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_PIPELINE,GstPipeline))
 #define GST_PIPELINE_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_PIPELINE,GstPipelineClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_PIPELINE,GstPipelineClass))
 #define GST_IS_PIPELINE(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_PIPELINE))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_PIPELINE))
 #define GST_IS_PIPELINE_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_PIPELINE))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_PIPELINE))
 
 typedef struct _GstPipeline GstPipeline;
 typedef struct _GstPipelineClass GstPipelineClass;
@@ -56,7 +56,7 @@
   GstBinClass parent_class;
 };
 
-GtkType		gst_pipeline_get_type		(void);
+GType		gst_pipeline_get_type		(void);
 GstElement*	gst_pipeline_new		(const guchar *name);
 #define		gst_pipeline_destroy(pipeline)	gst_object_destroy(GST_OBJECT(pipeline))
 
diff --git a/gst/gstqueue.c b/gst/gstqueue.c
index 944b9de..22e6ce1 100644
--- a/gst/gstqueue.c
+++ b/gst/gstqueue.c
@@ -70,8 +70,8 @@
 static void			gst_queue_class_init	(GstQueueClass *klass);
 static void			gst_queue_init		(GstQueue *queue);
 
-static void			gst_queue_set_arg	(GtkObject *object, GtkArg *arg, guint id);
-static void			gst_queue_get_arg	(GtkObject *object, GtkArg *arg, guint id);
+static void			gst_queue_set_property	(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void			gst_queue_get_property	(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
 static gboolean			gst_queue_handle_eos	(GstPad *pad);
 static GstPadNegotiateReturn 	gst_queue_handle_negotiate_src (GstPad *pad, GstCaps **caps, gpointer *data);
@@ -85,17 +85,17 @@
 static GstElementStateReturn	gst_queue_change_state	(GstElement *element);
 
   
-static GtkType
+static GType
 queue_leaky_get_type(void) {
-  static GtkType queue_leaky_type = 0;
-  static GtkEnumValue queue_leaky[] = {
+  static GType queue_leaky_type = 0;
+  static GEnumValue queue_leaky[] = {
     { GST_QUEUE_NO_LEAK, "0", "Not Leaky" },
     { GST_QUEUE_LEAK_UPSTREAM, "1", "Leaky on Upstream" },
     { GST_QUEUE_LEAK_DOWNSTREAM, "2", "Leaky on Downstream" },
     { 0, NULL, NULL },
   };
   if (!queue_leaky_type) {
-    queue_leaky_type = gtk_type_register_enum("GstQueueLeaky", queue_leaky);
+    queue_leaky_type = g_enum_register_static("GstQueueLeaky", queue_leaky);
   }
   return queue_leaky_type;
 }
@@ -105,22 +105,23 @@
 static GstElementClass *parent_class = NULL;
 //static guint gst_queue_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_queue_get_type(void) {
-  static GtkType queue_type = 0;
+  static GType queue_type = 0;
 
   if (!queue_type) {
-    static const GtkTypeInfo queue_info = {
-      "GstQueue",
-      sizeof(GstQueue),
+    static const GTypeInfo queue_info = {
       sizeof(GstQueueClass),
-      (GtkClassInitFunc)gst_queue_class_init,
-      (GtkObjectInitFunc)gst_queue_init,
-      (GtkArgSetFunc)gst_queue_set_arg,
-      (GtkArgGetFunc)gst_queue_get_arg,
-      (GtkClassInitFunc)NULL,
+      NULL,
+      NULL,
+      (GClassInitFunc)gst_queue_class_init,
+      NULL,
+      NULL,
+      sizeof(GstQueue),
+      4,
+      (GInstanceInitFunc)gst_queue_init,
     };
-    queue_type = gtk_type_unique (GST_TYPE_ELEMENT, &queue_info);
+    queue_type = g_type_register_static (GST_TYPE_ELEMENT, "GstQueue", &queue_info, 0);
   }
   return queue_type;
 }
@@ -128,25 +129,28 @@
 static void
 gst_queue_class_init (GstQueueClass *klass)
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
   GstElementClass *gstelement_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
   gstelement_class = (GstElementClass*)klass;
 
-  parent_class = gtk_type_class (GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
 
-  gtk_object_add_arg_type ("GstQueue::leaky", GST_TYPE_QUEUE_LEAKY,
-                           GTK_ARG_READWRITE, ARG_LEAKY);
-  gtk_object_add_arg_type ("GstQueue::level", GTK_TYPE_INT,
-                           GTK_ARG_READABLE, ARG_LEVEL);
-  gtk_object_add_arg_type ("GstQueue::max_level", GTK_TYPE_INT,
-                           GTK_ARG_READWRITE, ARG_MAX_LEVEL);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_LEAKY,
+    g_param_spec_enum("leaky","Leaky","Where the queue leaks, if at all.",
+                      GST_TYPE_QUEUE_LEAKY,GST_QUEUE_NO_LEAK,G_PARAM_READWRITE));
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_LEVEL,
+    g_param_spec_int("level","Level","How many buffers are in the queue.",
+                     0,G_MAXINT,0,G_PARAM_READABLE));
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_MAX_LEVEL,
+    g_param_spec_int("max_level","Maximum Level","How many buffers the queue holds.",
+                     0,G_MAXINT,100,G_PARAM_READWRITE));
 
-  gtkobject_class->set_arg = gst_queue_set_arg;
-  gtkobject_class->get_arg = gst_queue_get_arg;
+  gobject_class->set_property = GST_DEBUG_FUNCPTR(gst_queue_set_property);
+  gobject_class->get_property = GST_DEBUG_FUNCPTR(gst_queue_get_property);
 
-  gstelement_class->change_state = gst_queue_change_state;
+  gstelement_class->change_state = GST_DEBUG_FUNCPTR(gst_queue_change_state);
 }
 
 static void
@@ -158,14 +162,14 @@
   queue->sinkpad = gst_pad_new ("sink", GST_PAD_SINK);
   gst_pad_set_chain_function (queue->sinkpad, GST_DEBUG_FUNCPTR(gst_queue_chain));
   gst_element_add_pad (GST_ELEMENT (queue), queue->sinkpad);
-  gst_pad_set_eos_function (queue->sinkpad, gst_queue_handle_eos);
-  gst_pad_set_negotiate_function (queue->sinkpad, gst_queue_handle_negotiate_sink);
-  gst_pad_set_bufferpool_function (queue->sinkpad, gst_queue_get_bufferpool);
+  gst_pad_set_eos_function (queue->sinkpad, GST_DEBUG_FUNCPTR(gst_queue_handle_eos));
+  gst_pad_set_negotiate_function (queue->sinkpad, GST_DEBUG_FUNCPTR(gst_queue_handle_negotiate_sink));
+  gst_pad_set_bufferpool_function (queue->sinkpad, GST_DEBUG_FUNCPTR(gst_queue_get_bufferpool));
 
   queue->srcpad = gst_pad_new ("src", GST_PAD_SRC);
   gst_pad_set_get_function (queue->srcpad, GST_DEBUG_FUNCPTR(gst_queue_get));
   gst_element_add_pad (GST_ELEMENT (queue), queue->srcpad);
-  gst_pad_set_negotiate_function (queue->srcpad, gst_queue_handle_negotiate_src);
+  gst_pad_set_negotiate_function (queue->srcpad, GST_DEBUG_FUNCPTR(gst_queue_handle_negotiate_src));
 
   queue->queue = NULL;
   queue->level_buffers = 0;
@@ -306,16 +310,16 @@
     while (queue->level_buffers >= queue->size_buffers) {
       // if there's a pending state change for this queue or its manager, switch
       // back to iterator so bottom half of state change executes
-      if (GST_STATE_PENDING(queue) != GST_STATE_NONE_PENDING ||
-//          GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_NONE_PENDING)
+      if (GST_STATE_PENDING(queue) != GST_STATE_VOID_PENDING ||
+//          GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_VOID_PENDING)
 GST_STATE_PENDING(GST_SCHED_PARENT(GST_ELEMENT_SCHED(GST_PAD_PARENT(GST_PAD_PEER(queue->sinkpad))))) != 
-GST_STATE_NONE_PENDING)
+GST_STATE_VOID_PENDING)
       {
         GST_DEBUG(GST_CAT_DATAFLOW,"interrupted!!\n");
-        if (GST_STATE_PENDING(queue) != GST_STATE_NONE_PENDING)
-          GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(queue) != GST_STATE_NONE_PENDING)\n");
-        if (GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_NONE_PENDING)
-          GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_NONE_PENDING\n");
+        if (GST_STATE_PENDING(queue) != GST_STATE_VOID_PENDING)
+          GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(queue) != GST_STATE_VOID_PENDING)\n");
+        if (GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_VOID_PENDING)
+          GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_VOID_PENDING\n");
         GST_UNLOCK(queue);
         cothread_switch(cothread_current_main());
       }
@@ -376,16 +380,16 @@
 
     // if there's a pending state change for this queue or its manager, switch
     // back to iterator so bottom half of state change executes
-    if (GST_STATE_PENDING(queue) != GST_STATE_NONE_PENDING ||
-//        GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_NONE_PENDING)
+    if (GST_STATE_PENDING(queue) != GST_STATE_VOID_PENDING ||
+//        GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_VOID_PENDING)
 GST_STATE_PENDING(GST_SCHED_PARENT(GST_ELEMENT_SCHED(GST_PAD_PARENT(GST_PAD_PEER(queue->srcpad))))) != 
-GST_STATE_NONE_PENDING)
+GST_STATE_VOID_PENDING)
     {
       GST_DEBUG(GST_CAT_DATAFLOW,"interrupted!!\n");
-      if (GST_STATE_PENDING(queue) != GST_STATE_NONE_PENDING)
-        GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(queue) != GST_STATE_NONE_PENDING)\n");
-      if (GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_NONE_PENDING)
-        GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_NONE_PENDING\n");
+      if (GST_STATE_PENDING(queue) != GST_STATE_VOID_PENDING)
+        GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(queue) != GST_STATE_VOID_PENDING)\n");
+      if (GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_VOID_PENDING)
+        GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_VOID_PENDING\n");
       GST_UNLOCK(queue);
       cothread_switch(cothread_current_main());
     }
@@ -435,11 +439,11 @@
     gst_queue_flush (queue);
   }
 
-  /* if we haven't failed already, give the parent class a chance to ;-) */
+  // if we haven't failed already, give the parent class a chance to ;-)
   if (GST_ELEMENT_CLASS (parent_class)->change_state)
   {
     gboolean valid_handler = FALSE;
-    guint state_change_id = gtk_signal_lookup("state_change", GTK_OBJECT_TYPE(element));
+    guint state_change_id = g_signal_lookup("state_change", G_OBJECT_TYPE(element));
 
     // determine whether we need to block the parent (element) class'
     // STATE_CHANGE signal so we can UNLOCK before returning.  we block
@@ -450,20 +454,20 @@
     // if element change_state() emits other signals, they need to be blocked
     // as well.
     if (state_change_id &&
-        gtk_signal_handler_pending(GTK_OBJECT(element), state_change_id, FALSE))
+        g_signal_has_handler_pending(G_OBJECT(element), state_change_id, 0, FALSE))
       valid_handler = TRUE;
     if (valid_handler)
-      gtk_signal_handler_block(GTK_OBJECT(element), state_change_id);
+      g_signal_handler_block(G_OBJECT(element), state_change_id);
 
     ret = GST_ELEMENT_CLASS (parent_class)->change_state (element);
 
     if (valid_handler)
-      gtk_signal_handler_unblock(GTK_OBJECT(element), state_change_id);
+      g_signal_handler_unblock(G_OBJECT(element), state_change_id);
 
     // UNLOCK, *then* emit signal (if there's one there)
     GST_UNLOCK(queue);
     if (valid_handler)
-      gtk_signal_emit(GTK_OBJECT (element), state_change_id, GST_STATE(element));
+      g_signal_emit(G_OBJECT (element), state_change_id, 0, GST_STATE(element));
   }
   else
   {
@@ -476,7 +480,7 @@
 
 
 static void
-gst_queue_set_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_queue_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
   GstQueue *queue;
 
@@ -485,20 +489,21 @@
 
   queue = GST_QUEUE (object);
 
-  switch(id) {
+  switch (prop_id) {
     case ARG_LEAKY:
-      queue->leaky = GTK_VALUE_INT (*arg);
+      queue->leaky = g_value_get_int(value);
       break;
     case ARG_MAX_LEVEL:
-      queue->size_buffers = GTK_VALUE_INT (*arg);
+      queue->size_buffers = g_value_get_int(value);
       break;
     default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
 
 static void
-gst_queue_get_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_queue_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
   GstQueue *queue;
 
@@ -507,18 +512,18 @@
 
   queue = GST_QUEUE (object);
 
-  switch (id) {
+  switch (prop_id) {
     case ARG_LEAKY:
-      GTK_VALUE_INT (*arg) = queue->leaky;
+      g_value_set_int(value, queue->leaky);
       break;
     case ARG_LEVEL:
-      GTK_VALUE_INT (*arg) = queue->level_buffers;
+      g_value_set_int(value, queue->level_buffers);
       break;
     case ARG_MAX_LEVEL:
-      GTK_VALUE_INT (*arg) = queue->size_buffers;
+      g_value_set_int(value, queue->size_buffers);
       break;
     default:
-      arg->type = GTK_TYPE_INVALID;
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
diff --git a/gst/gstqueue.h b/gst/gstqueue.h
index 085d5ac..02b73f2 100644
--- a/gst/gstqueue.h
+++ b/gst/gstqueue.h
@@ -39,13 +39,13 @@
 #define GST_TYPE_QUEUE \
   (gst_queue_get_type())
 #define GST_QUEUE(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_QUEUE,GstQueue))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_QUEUE,GstQueue))
 #define GST_QUEUE_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_QUEUE,GstQueueClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_QUEUE,GstQueueClass))
 #define GST_IS_QUEUE(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_QUEUE))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_QUEUE))
 #define GST_IS_QUEUE_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_QUEUE))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_QUEUE))
 
 enum {
   GST_QUEUE_NO_LEAK		= 0,
@@ -90,7 +90,7 @@
   void (*high_watermark)	(GstQueue *queue, gint level);
 };
 
-GtkType gst_queue_get_type (void);
+GType gst_queue_get_type (void);
 
 #ifdef __cplusplus
 }
diff --git a/gst/gstscheduler.c b/gst/gstscheduler.c
index ad23a17..53e7a2b 100644
--- a/gst/gstscheduler.c
+++ b/gst/gstscheduler.c
@@ -100,13 +100,13 @@
       pads = g_list_next(pads);
       if (GST_RPAD_DIRECTION(realpad) == GST_PAD_SRC) {
         GST_DEBUG (GST_CAT_DATAFLOW,"calling _getfunc for %s:%s\n",GST_DEBUG_PAD_NAME(realpad));
-        if (realpad->regiontype != GST_REGION_NONE) {
+        if (realpad->regiontype != GST_REGION_VOID) {
           g_return_val_if_fail (GST_RPAD_GETREGIONFUNC(realpad) != NULL, 0);
 //          if (GST_RPAD_GETREGIONFUNC(realpad) == NULL)
 //            fprintf(stderr,"error, no getregionfunc in \"%s\"\n", name);
 //          else
           buf = (GST_RPAD_GETREGIONFUNC(realpad))((GstPad*)realpad,realpad->regiontype,realpad->offset,realpad->len);
-	  realpad->regiontype = GST_REGION_NONE;
+	  realpad->regiontype = GST_REGION_VOID;
         } else {
           g_return_val_if_fail (GST_RPAD_GETFUNC(realpad) != NULL, 0);
 //          if (GST_RPAD_GETFUNC(realpad) == NULL)
@@ -429,7 +429,7 @@
       GST_DEBUG (GST_CAT_SCHEDULING,"adding '%s' to chain\n",GST_ELEMENT_NAME(element));
       chain->elements = g_list_prepend (chain->elements, element);
       chain->num_elements++;
-      gtk_signal_connect (GTK_OBJECT (element), "eos", gst_scheduler_handle_eos, chain);
+      gtk_signal_connect (G_OBJECT (element), "eos", gst_scheduler_handle_eos, chain);
       // set the cothreads flag as appropriate
       if (GST_FLAG_IS_SET (element, GST_ELEMENT_USE_COTHREAD))
         chain->need_cothreads = TRUE;
@@ -479,7 +479,7 @@
             if ((GST_RPAD_DIRECTION(pad) == GST_PAD_SINK) &&
                 (GST_FLAG_IS_SET (peerparent, GST_ELEMENT_DECOUPLED))) {
               chain->entries = g_list_prepend (chain->entries, peerparent);
-              gtk_signal_connect (GTK_OBJECT (peerparent), "eos", gst_scheduler_handle_eos, chain);
+              gtk_signal_connect (G_OBJECT (peerparent), "eos", gst_scheduler_handle_eos, chain);
               GST_DEBUG (GST_CAT_SCHEDULING,"added '%s' as DECOUPLED entry into the chain\n",GST_ELEMENT_NAME(peerparent));
             }
           } else
@@ -798,21 +798,22 @@
 
 static GstObjectClass *parent_class = NULL;
 
-GtkType gst_schedule_get_type(void) {
-  static GtkType schedule_type = 0;
+GType gst_schedule_get_type(void) {
+  static GType schedule_type = 0;
 
   if (!schedule_type) {
-    static const GtkTypeInfo schedule_info = {
-      "GstSchedule",
-      sizeof(GstSchedule),
+    static const GTypeInfo schedule_info = {
       sizeof(GstScheduleClass),
-      (GtkClassInitFunc)gst_schedule_class_init,
-      (GtkObjectInitFunc)gst_schedule_init,
-      (GtkArgSetFunc)NULL,
-      (GtkArgGetFunc)NULL,
-      (GtkClassInitFunc)NULL,
+      NULL,
+      NULL,
+      (GClassInitFunc)gst_schedule_class_init,
+      NULL,
+      NULL,
+      sizeof(GstSchedule),
+      0,
+      (GInstanceInitFunc)gst_schedule_init,
     };
-    schedule_type = gtk_type_unique(GST_TYPE_OBJECT,&schedule_info);
+    schedule_type = g_type_register_static(GST_TYPE_OBJECT, "GstSchedule", &schedule_info, 0);
   }
   return schedule_type;
 }
@@ -820,7 +821,7 @@
 static void
 gst_schedule_class_init (GstScheduleClass *klass)
 {
-  parent_class = gtk_type_class(GST_TYPE_OBJECT);
+  parent_class = g_type_class_ref(GST_TYPE_OBJECT);
 }
 
 static void
@@ -840,7 +841,7 @@
 GstSchedule*
 gst_schedule_new(GstElement *parent)
 {
-  GstSchedule *sched = GST_SCHEDULE (gtk_type_new (GST_TYPE_SCHEDULE));
+  GstSchedule *sched = GST_SCHEDULE (g_object_new(GST_TYPE_SCHEDULE,NULL));
 
   sched->parent = parent;
 
@@ -1339,7 +1340,7 @@
           // if it was, return to gstthread.c::gst_thread_main_loop() to
           // execute the state change.
           GST_DEBUG (GST_CAT_DATAFLOW,"cothread switch ended or interrupted\n");
-          if (GST_STATE_PENDING(GST_SCHEDULE(sched)->parent) != GST_STATE_NONE_PENDING)
+          if (GST_STATE_PENDING(GST_SCHEDULE(sched)->parent) != GST_STATE_VOID_PENDING)
           {
             GST_DEBUG (GST_CAT_DATAFLOW,"handle pending state %d\n",
                        GST_STATE_PENDING(GST_SCHEDULE(sched)->parent));
diff --git a/gst/gstscheduler.h b/gst/gstscheduler.h
index 39699da..4149b33 100644
--- a/gst/gstscheduler.h
+++ b/gst/gstscheduler.h
@@ -36,13 +36,13 @@
 #define GST_TYPE_SCHEDULE \
   (gst_schedule_get_type())
 #define GST_SCHEDULE(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_SCHEDULE,GstSchedule))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_SCHEDULE,GstSchedule))
 #define GST_SCHEDULE_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_SCHEDULE,GstScheduleClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_SCHEDULE,GstScheduleClass))
 #define GST_IS_SCHEDULE(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_SCHEDULE))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_SCHEDULE))
 #define GST_IS_SCHEDULE_CLASS(klass) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_SCHEDULE))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_SCHEDULE))
 
 
 #define GST_SCHED_PARENT(sched)		((sched)->parent)
@@ -126,7 +126,7 @@
 };
 
 
-GtkType			gst_schedule_get_type		(void);
+GType			gst_schedule_get_type		(void);
 GstSchedule*		gst_schedule_new		(GstElement *parent);
 
 void			gst_schedule_add_element	(GstSchedule *sched, GstElement *element);
diff --git a/gst/gstthread.c b/gst/gstthread.c
index bc297f8..983a300 100644
--- a/gst/gstthread.c
+++ b/gst/gstthread.c
@@ -61,10 +61,10 @@
 static void			gst_thread_class_init		(GstThreadClass *klass);
 static void			gst_thread_init			(GstThread *thread);
 
-static void 			gst_thread_real_destroy 	(GtkObject *gtk_object);
+static void 			gst_thread_real_destroy 	(GObject *object);
 
-static void			gst_thread_set_arg		(GtkObject *object, GtkArg *arg, guint id);
-static void			gst_thread_get_arg		(GtkObject *object, GtkArg *arg, guint id);
+static void			gst_thread_set_property		(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void			gst_thread_get_property		(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
 static GstElementStateReturn	gst_thread_change_state		(GstElement *element);
 
@@ -80,22 +80,23 @@
 static GstBinClass *parent_class = NULL;
 //static guint gst_thread_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_thread_get_type(void) {
-  static GtkType thread_type = 0;
+  static GType thread_type = 0;
 
   if (!thread_type) {
-    static const GtkTypeInfo thread_info = {
-      "GstThread",
-      sizeof(GstThread),
+    static const GTypeInfo thread_info = {
       sizeof(GstThreadClass),
-      (GtkClassInitFunc)gst_thread_class_init,
-      (GtkObjectInitFunc)gst_thread_init,
-      (GtkArgSetFunc)NULL,
-      (GtkArgGetFunc)NULL,
-      (GtkClassInitFunc)NULL,
+      NULL,
+      NULL,
+      (GClassInitFunc)gst_thread_class_init,
+      NULL,
+      NULL,
+      sizeof(GstThread),
+      4,
+      (GInstanceInitFunc)gst_thread_init,
     };
-    thread_type = gtk_type_unique(GST_TYPE_BIN,&thread_info);
+    thread_type = g_type_register_static(GST_TYPE_BIN, "GstThread", &thread_info, 0);
   }
   return thread_type;
 }
@@ -103,22 +104,24 @@
 static void
 gst_thread_class_init (GstThreadClass *klass)
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
   GstObjectClass *gstobject_class;
   GstElementClass *gstelement_class;
   GstBinClass *gstbin_class;
 
-  gtkobject_class =	(GtkObjectClass*)klass;
+  gobject_class =	(GObjectClass*)klass;
   gstobject_class =	(GstObjectClass*)klass;
   gstelement_class =	(GstElementClass*)klass;
   gstbin_class =	(GstBinClass*)klass;
 
-  parent_class = gtk_type_class (GST_TYPE_BIN);
+  parent_class = g_type_class_ref (GST_TYPE_BIN);
 
-  gtk_object_add_arg_type ("GstThread::create_thread", GTK_TYPE_BOOL,
-                           GTK_ARG_READWRITE, ARG_CREATE_THREAD);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_CREATE_THREAD,
+    g_param_spec_boolean("create_thread", "Create Thread", "Whether to create a thread.",
+                         TRUE,G_PARAM_READWRITE));
 
-  gtkobject_class->destroy =		gst_thread_real_destroy;
+// FIXME!
+//  gobject_class->destroy =		gst_thread_real_destroy;
 
 #ifndef GST_DISABLE_XML
   gstobject_class->save_thyself =	gst_thread_save_thyself;
@@ -129,8 +132,8 @@
 
 //  gstbin_class->schedule = gst_thread_schedule_dummy;
 
-  gtkobject_class->set_arg = gst_thread_set_arg;
-  gtkobject_class->get_arg = gst_thread_get_arg;
+  gobject_class->set_property = gst_thread_set_property;
+  gobject_class->get_property = gst_thread_get_property;
 
 }
 
@@ -158,33 +161,32 @@
 }
 
 static void
-gst_thread_real_destroy (GtkObject *gtk_object)
+gst_thread_real_destroy (GObject *object)
 {
-  GstThread *thread = GST_THREAD (gtk_object);
+  GstThread *thread = GST_THREAD (object);
 
   GST_DEBUG (GST_CAT_REFCOUNTING,"destroy()\n");
 
   g_mutex_free (thread->lock);
   g_cond_free (thread->cond);
 
-  if (GTK_OBJECT_CLASS (parent_class)->destroy)
-    GTK_OBJECT_CLASS (parent_class)->destroy (gtk_object);
+// FIXME!
+//  if (G_OBJECT_CLASS (parent_class)->destroy)
+//    G_OBJECT_CLASS (parent_class)->destroy (object);
 
   gst_object_destroy (GST_OBJECT (GST_ELEMENT_SCHED (thread)));
   gst_object_unref (GST_OBJECT (GST_ELEMENT_SCHED (thread)));
 }
 
 static void
-gst_thread_set_arg (GtkObject *object,
-		    GtkArg *arg,
-		    guint id)
+gst_thread_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
   /* it's not null if we got it, but it might not be ours */
   g_return_if_fail (GST_IS_THREAD (object));
 
-  switch(id) {
+  switch (prop_id) {
     case ARG_CREATE_THREAD:
-      if (GTK_VALUE_BOOL (*arg)) {
+      if (g_value_get_boolean(value)) {
         GST_INFO (GST_CAT_THREAD,"turning ON the creation of the thread");
         GST_FLAG_SET (object, GST_THREAD_CREATE);
 //        GST_DEBUG (GST_CAT_THREAD,"flags are 0x%08x\n", GST_FLAGS (object));
@@ -195,23 +197,23 @@
       }
       break;
     default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
 
 static void
-gst_thread_get_arg (GtkObject *object,
-		    GtkArg *arg,
-		    guint id)
+gst_thread_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
   /* it's not null if we got it, but it might not be ours */
   g_return_if_fail (GST_IS_THREAD (object));
 
-  switch (id) {
+  switch (prop_id) {
     case ARG_CREATE_THREAD:
-      GTK_VALUE_BOOL (*arg) = GST_FLAG_IS_SET (object, GST_THREAD_CREATE);
+      g_value_set_boolean(value, GST_FLAG_IS_SET (object, GST_THREAD_CREATE));
       break;
     default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
@@ -468,7 +470,7 @@
 static void gst_thread_update_state (GstThread *thread)
 {
   // check for state change
-  if (GST_STATE_PENDING(thread) != GST_STATE_NONE_PENDING) {
+  if (GST_STATE_PENDING(thread) != GST_STATE_VOID_PENDING) {
     // punt and change state on all the children
     if (GST_ELEMENT_CLASS (parent_class)->change_state)
       GST_ELEMENT_CLASS (parent_class)->change_state (GST_ELEMENT(thread));
diff --git a/gst/gstthread.h b/gst/gstthread.h
index be8b49c..a75261e 100644
--- a/gst/gstthread.h
+++ b/gst/gstthread.h
@@ -53,13 +53,13 @@
 #define GST_TYPE_THREAD \
   (gst_thread_get_type())
 #define GST_THREAD(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_THREAD,GstThread))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_THREAD,GstThread))
 #define GST_THREAD_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_THREAD,GstThreadClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_THREAD,GstThreadClass))
 #define GST_IS_THREAD(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_THREAD))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_THREAD))
 #define GST_IS_THREAD_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_THREAD))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_THREAD))
 
 typedef struct _GstThread 	GstThread;
 typedef struct _GstThreadClass 	GstThreadClass;
@@ -80,7 +80,7 @@
   GstBinClass parent_class;
 };
 
-GtkType 	gst_thread_get_type	(void);
+GType 	gst_thread_get_type	(void);
 
 GstElement*	gst_thread_new		(const guchar *name);
 
diff --git a/gst/gsttypefind.c b/gst/gsttypefind.c
index 2e045e0..b95ad17 100644
--- a/gst/gsttypefind.c
+++ b/gst/gsttypefind.c
@@ -55,31 +55,32 @@
 static void	gst_typefind_class_init	(GstTypeFindClass *klass);
 static void	gst_typefind_init	(GstTypeFind *typefind);
 
-static void	gst_typefind_set_arg	(GtkObject *object, GtkArg *arg, guint id);
-static void	gst_typefind_get_arg	(GtkObject *object, GtkArg *arg, guint id);
+static void	gst_typefind_set_property	(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void	gst_typefind_get_property	(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
 static void	gst_typefind_chain	(GstPad *pad, GstBuffer *buf);
 
 static GstElementClass *parent_class = NULL;
 static guint gst_typefind_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_typefind_get_type (void)
 {
-  static GtkType typefind_type = 0;
+  static GType typefind_type = 0;
 
   if (!typefind_type) {
-    static const GtkTypeInfo typefind_info = {
-      "GstTypeFind",
-      sizeof(GstTypeFind),
+    static const GTypeInfo typefind_info = {
       sizeof(GstTypeFindClass),
-      (GtkClassInitFunc)gst_typefind_class_init,
-      (GtkObjectInitFunc)gst_typefind_init,
-      (GtkArgSetFunc)gst_typefind_set_arg,
-      (GtkArgGetFunc)gst_typefind_get_arg,
-      (GtkClassInitFunc)NULL,
+      NULL,
+      NULL,
+      (GClassInitFunc)gst_typefind_class_init,
+      NULL,
+      NULL,
+      sizeof(GstTypeFind),
+      0,
+      (GInstanceInitFunc)gst_typefind_init,
     };
-    typefind_type = gtk_type_unique (GST_TYPE_ELEMENT, &typefind_info);
+    typefind_type = g_type_register_static (GST_TYPE_ELEMENT, "GstTypeFind", &typefind_info, 0);
   }
   return typefind_type;
 }
@@ -87,25 +88,23 @@
 static void
 gst_typefind_class_init (GstTypeFindClass *klass)
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
 
-  parent_class = gtk_type_class (GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
 
-  gtk_object_add_arg_type("GstTypeFind::caps", GTK_TYPE_POINTER,
-                          GTK_ARG_READABLE, ARG_CAPS);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_CAPS,
+    g_param_spec_pointer("caps", "Caps", "Found capabilities", G_PARAM_READABLE));
 
   gst_typefind_signals[HAVE_TYPE] =
-      gtk_signal_new ("have_type", GTK_RUN_LAST, gtkobject_class->type,
-                      GTK_SIGNAL_OFFSET (GstTypeFindClass, have_type),
-                      gtk_marshal_NONE__INT, GTK_TYPE_NONE, 1, GTK_TYPE_POINTER);
+      g_signal_newc ("have_type", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                     G_STRUCT_OFFSET (GstTypeFindClass, have_type), NULL, NULL,
+                     g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
+                     G_TYPE_POINTER);
 
-  gtk_object_class_add_signals (gtkobject_class, gst_typefind_signals,
-                                LAST_SIGNAL);
-
-  gtkobject_class->set_arg = gst_typefind_set_arg;
-  gtkobject_class->get_arg = gst_typefind_get_arg;
+  gobject_class->set_property = gst_typefind_set_property;
+  gobject_class->get_property = gst_typefind_get_property;
 }
 
 static void
@@ -117,7 +116,7 @@
 }
 
 static void
-gst_typefind_set_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_typefind_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
   GstTypeFind *typefind;
 
@@ -126,14 +125,14 @@
 
   typefind = GST_TYPEFIND (object);
 
-  switch(id) {
+  switch (prop_id) {
     default:
       break;
   }
 }
 
 static void
-gst_typefind_get_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_typefind_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
   GstTypeFind *typefind;
 
@@ -142,9 +141,9 @@
 
   typefind = GST_TYPEFIND (object);
 
-  switch(id) {
+  switch (prop_id) {
     case ARG_CAPS:
-      GTK_VALUE_POINTER (*arg) =  typefind->caps;
+      g_value_set_pointer(value, typefind->caps);
       break;
     default:
       break;
@@ -189,7 +188,7 @@
 { /* FIXME: this should all be in an _emit() wrapper eventually */
         int oldstate = GST_STATE(typefind);
 	gst_object_ref (GST_OBJECT (typefind));
-        gtk_signal_emit (GTK_OBJECT (typefind), gst_typefind_signals[HAVE_TYPE],
+        g_signal_emit (G_OBJECT (typefind), gst_typefind_signals[HAVE_TYPE], 0,
 	                      typefind->caps);
         if (GST_STATE(typefind) != oldstate) {
 	  gst_object_unref (GST_OBJECT (typefind));
diff --git a/gst/gsttypefind.h b/gst/gsttypefind.h
index 6b42015..ff3cf06 100644
--- a/gst/gsttypefind.h
+++ b/gst/gsttypefind.h
@@ -37,13 +37,13 @@
 #define GST_TYPE_TYPEFIND \
   (gst_typefind_get_type())
 #define GST_TYPEFIND(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_TYPEFIND,GstTypeFind))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_TYPEFIND,GstTypeFind))
 #define GST_TYPEFIND_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_TYPEFIND,GstTypeFindClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_TYPEFIND,GstTypeFindClass))
 #define GST_IS_TYPEFIND(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_TYPEFIND))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_TYPEFIND))
 #define GST_IS_TYPEFIND_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_TYPEFIND))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_TYPEFIND))
 
 typedef struct _GstTypeFind 		GstTypeFind;
 typedef struct _GstTypeFindClass 	GstTypeFindClass;
@@ -63,7 +63,7 @@
   void (*have_type) (GstElement *element);
 };
 
-GtkType gst_typefind_get_type (void);
+GType gst_typefind_get_type (void);
 
 
 #ifdef __cplusplus
diff --git a/gst/gstutils.c b/gst/gstutils.c
index 49ddf0d..ae26b29 100644
--- a/gst/gstutils.c
+++ b/gst/gstutils.c
@@ -2,7 +2,7 @@
  * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
  *                    2000 Wim Taymans <wtay@chello.be>
  *
- * gstutils.c: Utility functions: gtk_get_arg stuff, etc.
+ * gstutils.c: Utility functions: gtk_get_property stuff, etc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -23,10 +23,11 @@
 #include <stdio.h>
 #include <string.h>
 
-#include "gstextratypes.h"
-
+#include "gst_private.h"
 #include "gstutils.h"
 
+#include "gstextratypes.h"
+
 /**
  * gst_util_get_int_arg:
  * @object: the object to query
@@ -37,13 +38,14 @@
  * Returns: the property of the object
  */
 gint
-gst_util_get_int_arg (GtkObject *object,guchar *argname) 
+gst_util_get_int_arg (GObject *object, const gchar *argname) 
 {
-  GtkArg arg;
+  GValue value = {0, };
 
-  arg.name = argname;
-  gtk_object_getv(GTK_OBJECT(object),1,&arg);
-  return GTK_VALUE_INT(arg);
+  g_value_init (&value, G_TYPE_INT);
+  g_object_get_property(G_OBJECT(object),argname,&value);
+
+  return g_value_get_int(&value);
 }
 
 /**
@@ -56,13 +58,14 @@
  * Returns: the property of the object
  */
 gint
-gst_util_get_bool_arg (GtkObject *object,guchar *argname) 
+gst_util_get_bool_arg (GObject *object, const gchar *argname) 
 {
-  GtkArg arg;
+  GValue value = {0, };
 
-  arg.name = argname;
-  gtk_object_getv(GTK_OBJECT(object),1,&arg);
-  return GTK_VALUE_BOOL(arg);
+  g_value_init (&value, G_TYPE_BOOLEAN);
+  g_object_get_property(G_OBJECT(object),argname,&value);
+
+  return g_value_get_boolean(&value);
 }
 
 /**
@@ -75,13 +78,14 @@
  * Returns: the property of the object
  */
 glong
-gst_util_get_long_arg (GtkObject *object,guchar *argname) 
+gst_util_get_long_arg (GObject *object, const gchar *argname) 
 {
-  GtkArg arg;
+  GValue value = {0, };
 
-  arg.name = argname;
-  gtk_object_getv(GTK_OBJECT(object),1,&arg);
-  return GTK_VALUE_LONG(arg);
+  g_value_init (&value, G_TYPE_LONG);
+  g_object_get_property(G_OBJECT(object),argname,&value);
+
+  return g_value_get_long(&value);
 }
 
 /**
@@ -94,13 +98,14 @@
  * Returns: the property of the object
  */
 gfloat
-gst_util_get_float_arg (GtkObject *object,guchar *argname) 
+gst_util_get_float_arg (GObject *object, const gchar *argname) 
 {
-  GtkArg arg;
+  GValue value = {0, };
 
-  arg.name = argname;
-  gtk_object_getv(GTK_OBJECT(object),1,&arg);
-  return GTK_VALUE_FLOAT(arg);
+  g_value_init (&value, G_TYPE_FLOAT);
+  g_object_get_property(G_OBJECT(object),argname,&value);
+
+  return g_value_get_float(&value);
 }
 
 /**
@@ -113,13 +118,14 @@
  * Returns: the property of the object
  */
 gdouble 
-gst_util_get_double_arg (GtkObject *object,guchar *argname) 
+gst_util_get_double_arg (GObject *object, const gchar *argname) 
 {
-  GtkArg arg;
+  GValue value = {0, };
 
-  arg.name = argname;
-  gtk_object_getv(GTK_OBJECT(object),1,&arg);
-  return GTK_VALUE_DOUBLE(arg);
+  g_value_init (&value, G_TYPE_DOUBLE);
+  g_object_get_property(G_OBJECT(object),argname,&value);
+
+  return g_value_get_double(&value);
 }
 
 /**
@@ -131,14 +137,15 @@
  *
  * Returns: the property of the object
  */
-guchar*
-gst_util_get_string_arg (GtkObject *object,guchar *argname) 
+ const gchar*
+gst_util_get_string_arg (GObject *object, const gchar *argname) 
 {
-  GtkArg arg;
+  GValue value = {0, };
 
-  arg.name = argname;
-  gtk_object_getv(GTK_OBJECT(object),1,&arg);
-  return GTK_VALUE_STRING(arg);
+  g_value_init (&value, G_TYPE_STRING);
+  g_object_get_property(G_OBJECT(object),argname,&value);
+
+  return g_value_get_string(&value);
 }
 
 /**
@@ -151,18 +158,18 @@
  * Returns: the property of the object
  */
 gpointer
-gst_util_get_pointer_arg (GtkObject *object,guchar *argname) 
+gst_util_get_pointer_arg (GObject *object, const gchar *argname) 
 {
-  GtkArg arg;
+  GValue value = {0, };
 
-  arg.name = argname;
-  gtk_object_getv(GTK_OBJECT(object),1,&arg);
-  
-  return GTK_VALUE_POINTER(arg);
+  g_value_init (&value, G_TYPE_POINTER);
+  g_object_get_property(G_OBJECT(object),argname,&value);
+
+  return g_value_get_pointer(&value);
 }
 
 /**
- * gst_util_get_widget_arg:
+ * gst_util_get_widget_property:
  * @object: the object to query
  * @argname: the name of the argument
  *
@@ -170,16 +177,18 @@
  *
  * Returns: the property of the object
  */
+/* COMMENTED OUT BECAUSE WE HAVE NO MORE gtk.h
 GtkWidget*
-gst_util_get_widget_arg (GtkObject *object,guchar *argname) 
+gst_util_get_widget_property (GObject *object, const gchar *argname) 
 {
   GtkArg arg;
 
   arg.name = argname;
-  gtk_object_getv(GTK_OBJECT(object),1,&arg);
+  gtk_object_getv(G_OBJECT(object),1,&arg);
   
-  return GTK_WIDGET(GTK_VALUE_OBJECT(arg));
+  return GTK_WIDGET(G_VALUE_OBJECT(arg));
 }
+*/
 
 /**
  * gst_util_dump_mem:
@@ -218,80 +227,82 @@
  * sets the argument with it.
  */
 void
-gst_util_set_object_arg (GtkObject *object, guchar *name, gchar *value) 
+gst_util_set_object_arg (GObject *object,  const gchar *name,  const gchar *value) 
 {
   if (name && value) {
-    GtkType type = GTK_OBJECT_TYPE (object);
-    GtkArgInfo *info;
-    gchar *result;
+    GParamSpec *paramspec;
 
-    result = gtk_object_arg_get_info (type, name, &info);
+    paramspec = g_object_class_find_property(G_OBJECT_GET_CLASS(object),name);
 
-    if (result) {
-      g_print("gstutil: %s\n", result);
+    if (!paramspec) {
+      return;
     }
-    else if (info->arg_flags & GTK_ARG_WRITABLE) {
-      switch (info->type) {
-        case GTK_TYPE_STRING:
-          gtk_object_set (GTK_OBJECT (object), name, value, NULL);
+
+    GST_DEBUG(0,"paramspec->flags is %d, paramspec->value_type is %d\n",
+              paramspec->flags,paramspec->value_type);
+
+    if (paramspec->flags & G_PARAM_WRITABLE) {
+      switch (paramspec->value_type) {
+        case G_TYPE_STRING:
+          g_object_set (G_OBJECT (object), name, value, NULL);
           break;
-        case GTK_TYPE_ENUM: 
-        case GTK_TYPE_INT: {
+        case G_TYPE_ENUM: 
+        case G_TYPE_INT: {
           gint i;
           sscanf (value, "%d", &i);
-          gtk_object_set (GTK_OBJECT (object), name, i, NULL);
+          g_object_set (G_OBJECT (object), name, i, NULL);
 	  break;
 	}
-        case GTK_TYPE_LONG: {
+        case G_TYPE_LONG: {
 	  glong i;
 	  sscanf (value, "%ld", &i);
-          gtk_object_set (GTK_OBJECT (object), name, i, NULL);
+          g_object_set (G_OBJECT (object), name, i, NULL);
 	  break;
 	}
-        case GTK_TYPE_ULONG: {
+        case G_TYPE_ULONG: {
 	  gulong i;
 	  sscanf (value, "%lu", &i);
-          gtk_object_set (GTK_OBJECT (object), name, i, NULL);
+          g_object_set (G_OBJECT (object), name, i, NULL);
 	  break;
 	}
-        case GTK_TYPE_BOOL: {
+        case G_TYPE_BOOLEAN: {
 	  gboolean i = FALSE;
 	  if (!strncmp ("true", value, 4)) i = TRUE;
-          gtk_object_set (GTK_OBJECT (object), name, i, NULL);
+          g_object_set (G_OBJECT (object), name, i, NULL);
 	  break;
 	}
-        case GTK_TYPE_CHAR: {
+        case G_TYPE_CHAR: {
 	  gchar i;
 	  sscanf (value, "%c", &i);
-          gtk_object_set (GTK_OBJECT (object), name, i, NULL);
+          g_object_set (G_OBJECT (object), name, i, NULL);
 	  break;
 	}
-        case GTK_TYPE_UCHAR: {
+        case G_TYPE_UCHAR: {
 	  guchar i;
 	  sscanf (value, "%c", &i);
-          gtk_object_set (GTK_OBJECT (object), name, i, NULL);
+          g_object_set (G_OBJECT (object), name, i, NULL);
 	  break;
 	}
-        case GTK_TYPE_FLOAT: {
+        case G_TYPE_FLOAT: {
 	  gfloat i;
 	  sscanf (value, "%f", &i);
-          gtk_object_set (GTK_OBJECT (object), name, i, NULL);
+          g_object_set (G_OBJECT (object), name, i, NULL);
 	  break;
 	}
-        case GTK_TYPE_DOUBLE: {
+        case G_TYPE_DOUBLE: {
 	  gfloat i;
 	  sscanf (value, "%g", &i);
-          gtk_object_set (GTK_OBJECT (object), name, (gdouble)i, NULL);
+          g_object_set (G_OBJECT (object), name, (gdouble)i, NULL);
 	  break;
 	}
         default:
-	  if (GTK_FUNDAMENTAL_TYPE(info->type) == GTK_TYPE_ENUM) {
+	  if (G_IS_PARAM_SPEC_ENUM(paramspec)) {
             gint i;
             sscanf (value, "%d", &i);
-            gtk_object_set (GTK_OBJECT (object), name, i, NULL);
+            g_object_set (G_OBJECT (object), name, i, NULL);
 	  }
-	  else if (info->type == GST_TYPE_FILENAME) {
-            gtk_object_set (GTK_OBJECT (object), name, value, NULL);
+	  else if (paramspec->value_type == GST_TYPE_FILENAME) {
+            g_object_set (G_OBJECT (object), name, value, NULL);
 	  }
 	  break;
       }
diff --git a/gst/gstutils.h b/gst/gstutils.h
index b57f866..daf2b2a 100644
--- a/gst/gstutils.h
+++ b/gst/gstutils.h
@@ -24,22 +24,23 @@
 #ifndef __GST_UTILS_H__
 #define __GST_UTILS_H__
 
-#include <gtk/gtk.h>
+#include <glib.h>
+#include <gst/gstobject.h>
 
 #ifdef __cplusplus
 extern "C" {
 #endif /* __cplusplus */
 
-gint 		gst_util_get_int_arg		(GtkObject *object, guchar *argname);
-gboolean	gst_util_get_bool_arg		(GtkObject *object, guchar *argname);
-glong 		gst_util_get_long_arg		(GtkObject *object, guchar *argname);
-gfloat 		gst_util_get_float_arg		(GtkObject *object, guchar *argname);
-gdouble 	gst_util_get_double_arg		(GtkObject *object, guchar *argname);
-guchar*		gst_util_get_string_arg		(GtkObject *object, guchar *argname);
-gpointer 	gst_util_get_pointer_arg	(GtkObject *object, guchar *argname);
-GtkWidget*	gst_util_get_widget_arg		(GtkObject *object, guchar *argname);
+gint 		gst_util_get_int_arg		(GObject *object, const gchar *argname);
+gboolean	gst_util_get_bool_arg		(GObject *object, const gchar *argname);
+glong 		gst_util_get_long_arg		(GObject *object, const gchar *argname);
+gfloat 		gst_util_get_float_arg		(GObject *object, const gchar *argname);
+gdouble 	gst_util_get_double_arg		(GObject *object, const gchar *argname);
+const gchar*	gst_util_get_string_arg		(GObject *object, const gchar *argname);
+gpointer 	gst_util_get_pointer_arg	(GObject *object, const gchar *argname);
+//GtkWidget*	gst_util_get_widget_property	(GObject *object, const gchar *argname);
 
-void 		gst_util_set_object_arg 	(GtkObject *object, guchar *name, gchar *value);
+void 		gst_util_set_object_arg 	(GObject *object, const gchar *name, const gchar *value);
 	
 void 		gst_util_dump_mem		(guchar *mem, guint size);
 
diff --git a/gst/gstxml.c b/gst/gstxml.c
index 28f67c9..2391d3d 100644
--- a/gst/gstxml.c
+++ b/gst/gstxml.c
@@ -38,23 +38,24 @@
 static GstObjectClass *parent_class = NULL;
 static guint gst_xml_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_xml_get_type(void)
 {
-  static GtkType xml_type = 0;
+  static GType xml_type = 0;
 
   if (!xml_type) {
-    static const GtkTypeInfo xml_info = {
-      "GstXML",
-      sizeof(GstXML),
+    static const GTypeInfo xml_info = {
       sizeof(GstXMLClass),
-      (GtkClassInitFunc)gst_xml_class_init,
-      (GtkObjectInitFunc)gst_xml_init,
-      (GtkArgSetFunc)NULL,
-      (GtkArgGetFunc)NULL,
-      (GtkClassInitFunc)NULL,
+      NULL,
+      NULL,
+      (GClassInitFunc)gst_xml_class_init,
+      NULL,
+      NULL,
+      sizeof(GstXML),
+      0,
+      (GInstanceInitFunc)gst_xml_init,
     };
-    xml_type = gtk_type_unique (GST_TYPE_OBJECT, &xml_info);
+    xml_type = g_type_register_static (GST_TYPE_OBJECT, "GstXml", &xml_info, 0);
   }
   return xml_type;
 }
@@ -62,19 +63,18 @@
 static void
 gst_xml_class_init (GstXMLClass *klass)
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
 
-  gtkobject_class = (GtkObjectClass *)klass;
+  gobject_class = (GObjectClass *)klass;
 
-  parent_class = gtk_type_class (GST_TYPE_OBJECT);
+  parent_class = g_type_class_ref (GST_TYPE_OBJECT);
 
   gst_xml_signals[OBJECT_LOADED] =
-    gtk_signal_new ("object_loaded", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstXMLClass, object_loaded),
-                    gtk_marshal_NONE__POINTER_POINTER, GTK_TYPE_NONE, 2,
-                    GST_TYPE_OBJECT, GTK_TYPE_POINTER);
+    g_signal_newc ("object_loaded", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GstXMLClass, object_loaded), NULL, NULL,
+                    gst_marshal_VOID__OBJECT_POINTER, G_TYPE_NONE, 2,
+                    GST_TYPE_OBJECT, G_TYPE_POINTER);
 
-  gtk_object_class_add_signals (gtkobject_class, gst_xml_signals, LAST_SIGNAL);
 }
 
 static void
@@ -93,7 +93,7 @@
 GstXML*
 gst_xml_new (void)
 {
-  return GST_XML (gtk_type_new (GST_TYPE_XML));
+  return GST_XML (g_object_new(GST_TYPE_XML,NULL));
 }
 
 /**
@@ -156,7 +156,7 @@
     return FALSE;
   }
 
-  gst_class_signal_connect (GST_OBJECT_CLASS (GTK_OBJECT (xml)->klass),
+  gst_class_signal_connect (GST_OBJECT_CLASS (G_OBJECT_GET_CLASS(xml)),
 		  "object_loaded", gst_xml_object_loaded, xml);
 
   xml->ns = ns;
@@ -240,7 +240,7 @@
   GstXML *xml = GST_XML (data);
 
   // FIXME check that this element was created from the same xmlDocPtr...
-  gtk_signal_emit (GTK_OBJECT (xml), gst_xml_signals[OBJECT_LOADED], object, self);
+  g_signal_emit (G_OBJECT (xml), gst_xml_signals[OBJECT_LOADED], 0, object, self);
 }
 
 /**
diff --git a/gst/gstxml.h b/gst/gstxml.h
index cbc8869..35528ce 100644
--- a/gst/gstxml.h
+++ b/gst/gstxml.h
@@ -41,13 +41,13 @@
 #define GST_TYPE_XML \
   (gst_xml_get_type())
 #define GST_XML(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_XML,GstXML))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_XML,GstXML))
 #define GST_XML_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_XML,GstXMLClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_XML,GstXMLClass))
 #define GST_IS_XML(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_XML))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_XML))
 #define GST_IS_XML_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_XML))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_XML))
 
 typedef struct _GstXML GstXML;
 typedef struct _GstXMLClass GstXMLClass;
@@ -68,7 +68,7 @@
   void (*object_saved)          (GstXML *xml, GstObject *object, xmlNodePtr self);
 };
 
-GtkType		gst_xml_get_type	(void);
+GType		gst_xml_get_type	(void);
 
 
 /* create an XML document out of a pipeline */
diff --git a/gstplay/gstplay.c b/gstplay/gstplay.c
index 123143a..1bd39d7 100644
--- a/gstplay/gstplay.c
+++ b/gstplay/gstplay.c
@@ -215,7 +215,7 @@
 	if (!stolen) {
 		gtk_widget_realize (priv->video_widget);
 		gtk_socket_steal (GTK_SOCKET (priv->video_widget),
-				  gst_util_get_int_arg (GTK_OBJECT (priv->video_show), "xid"));
+				  gst_util_get_int_arg (G_OBJECT (priv->video_show), "xid"));
 		gtk_widget_show (priv->video_widget);
 		stolen = TRUE;
 	}
@@ -340,7 +340,7 @@
 
 	gst_bin_add (GST_BIN (priv->pipeline), new_element);
 
-	gtk_object_set (GTK_OBJECT (priv->cache), "reset", TRUE, NULL);
+	gtk_object_set (G_OBJECT (priv->cache), "reset", TRUE, NULL);
 
 	gst_element_connect (priv->cache, "src", new_element, "sink");
 
@@ -411,7 +411,7 @@
 	priv->offset_element = priv->src;
 	g_return_val_if_fail (priv->src != NULL, GST_PLAY_CANNOT_PLAY);
 
-	gtk_object_set (GTK_OBJECT (priv->src), "location", priv->uri, NULL);
+	gtk_object_set (G_OBJECT (priv->src), "location", priv->uri, NULL);
 
 
 	priv->cache = gst_elementfactory_make ("autoplugcache", "cache");
@@ -582,7 +582,7 @@
 
 	priv = (GstPlayPrivate *)play->priv;
 
-	return gst_util_get_long_arg (GTK_OBJECT (priv->src), "size");
+	return gst_util_get_long_arg (G_OBJECT (priv->src), "size");
 }
 
 gulong
@@ -596,7 +596,7 @@
 	priv = (GstPlayPrivate *)play->priv;
 
 	if (priv->offset_element)
-		return gst_util_get_long_arg (GTK_OBJECT (priv->offset_element), "offset");
+		return gst_util_get_long_arg (G_OBJECT (priv->offset_element), "offset");
 	else
 		return 0;
 }
@@ -613,12 +613,12 @@
 	priv = (GstPlayPrivate *)play->priv;
 
 	if (priv->media_time_element) {
-		return gst_util_get_long_arg (GTK_OBJECT (priv->media_time_element), "media_time");
+		return gst_util_get_long_arg (G_OBJECT (priv->media_time_element), "media_time");
 	}
 
 	if (priv->bit_rate_element == NULL) return 0;
 
-	bit_rate = gst_util_get_long_arg (GTK_OBJECT (priv->bit_rate_element), "bit_rate");
+	bit_rate = gst_util_get_long_arg (G_OBJECT (priv->bit_rate_element), "bit_rate");
 
 	if (bit_rate)
 		total_time = (gst_play_get_media_size (play) * 8) / bit_rate;
@@ -640,12 +640,12 @@
 	priv = (GstPlayPrivate *)play->priv;
 
 	if (priv->current_time_element) {
-		return gst_util_get_long_arg (GTK_OBJECT (priv->current_time_element), "current_time");
+		return gst_util_get_long_arg (G_OBJECT (priv->current_time_element), "current_time");
 	}
 
 	if (priv->bit_rate_element == NULL) return 0;
 
-	bit_rate = gst_util_get_long_arg (GTK_OBJECT (priv->bit_rate_element), "bit_rate");
+	bit_rate = gst_util_get_long_arg (G_OBJECT (priv->bit_rate_element), "bit_rate");
 
 	if (bit_rate)
 		current_time = (gst_play_get_media_offset (play) * 8) / bit_rate;
diff --git a/plugins/elements/Makefile.am b/plugins/elements/Makefile.am
index e29530e..156116a 100644
--- a/plugins/elements/Makefile.am
+++ b/plugins/elements/Makefile.am
@@ -39,6 +39,7 @@
 	gstsinesrc.h
 
 CFLAGS += -O2 -Wall
+LDFLAGS += -lm
 
 libgstelements_la_LIBADD = $(GHTTP_LIBS)
 libgstelements_la_LDFLAGS = -version-info $(GST_LIBVERSION)
diff --git a/plugins/elements/gstdisksink.c b/plugins/elements/gstdisksink.c
index efd626d..2922ccc 100644
--- a/plugins/elements/gstdisksink.c
+++ b/plugins/elements/gstdisksink.c
@@ -51,8 +51,8 @@
 static void	gst_disksink_class_init	(GstDiskSinkClass *klass);
 static void	gst_disksink_init	(GstDiskSink *disksink);
 
-static void	gst_disksink_set_arg	(GtkObject *object, GtkArg *arg, guint id);
-static void	gst_disksink_get_arg	(GtkObject *object, GtkArg *arg, guint id);
+static void	gst_disksink_set_property	(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void	gst_disksink_get_property	(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
 static gboolean gst_disksink_open_file 	(GstDiskSink *sink);
 static void 	gst_disksink_close_file (GstDiskSink *sink);
@@ -64,23 +64,23 @@
 static GstElementClass *parent_class = NULL;
 static guint gst_disksink_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_disksink_get_type (void) 
 {
-  static GtkType disksink_type = 0;
+  static GType disksink_type = 0;
 
   if (!disksink_type) {
-    static const GtkTypeInfo disksink_info = {
-      "GstDiskSink",
+    static const GTypeInfo disksink_info = {
+      sizeof(GstDiskSinkClass),      NULL,
+      NULL,
+      (GClassInitFunc)gst_disksink_class_init,
+      NULL,
+      NULL,
       sizeof(GstDiskSink),
-      sizeof(GstDiskSinkClass),
-      (GtkClassInitFunc)gst_disksink_class_init,
-      (GtkObjectInitFunc)gst_disksink_init,
-      (GtkArgSetFunc)gst_disksink_set_arg,
-      (GtkArgGetFunc)gst_disksink_get_arg,
-      (GtkClassInitFunc)NULL,	/* deprecated, do not use ! */
+      0,
+      (GInstanceInitFunc)gst_disksink_init,
     };
-    disksink_type = gtk_type_unique (GST_TYPE_ELEMENT, &disksink_info);
+    disksink_type = g_type_register_static (GST_TYPE_ELEMENT, "GstDiskSink", &disksink_info, 0);
   }
   return disksink_type;
 }
@@ -88,27 +88,25 @@
 static void
 gst_disksink_class_init (GstDiskSinkClass *klass) 
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
   GstElementClass *gstelement_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
   gstelement_class = (GstElementClass*)klass;
 
-  parent_class = gtk_type_class (GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
 
-  gtk_object_add_arg_type ("GstDiskSink::location", GST_TYPE_FILENAME,
-                           GTK_ARG_READWRITE, ARG_LOCATION);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_LOCATION,
+    g_param_spec_string("location","location","location",
+                        NULL,G_PARAM_READWRITE)); // CHECKME!
 
   gst_disksink_signals[SIGNAL_HANDOFF] =
-    gtk_signal_new ("handoff", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstDiskSinkClass, handoff),
-                    gtk_marshal_NONE__NONE, GTK_TYPE_NONE, 0);
+    g_signal_newc ("handoff", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GstDiskSinkClass, handoff), NULL, NULL,
+                    g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
 
-  gtk_object_class_add_signals (gtkobject_class, gst_disksink_signals,
-                                    LAST_SIGNAL);
-
-  gtkobject_class->set_arg = gst_disksink_set_arg;
-  gtkobject_class->get_arg = gst_disksink_get_arg;
+  gobject_class->set_property = gst_disksink_set_property;
+  gobject_class->get_property = gst_disksink_get_property;
 
   gstelement_class->change_state = gst_disksink_change_state;
 }
@@ -126,21 +124,21 @@
 }
 
 static void
-gst_disksink_set_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_disksink_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
   GstDiskSink *sink;
 
   /* it's not null if we got it, but it might not be ours */
   sink = GST_DISKSINK (object);
 
-  switch(id) {
+  switch (prop_id) {
     case ARG_LOCATION:
       /* the element must be stopped or paused in order to do this */
       g_return_if_fail ((GST_STATE (sink) < GST_STATE_PLAYING)
                       || (GST_STATE (sink) == GST_STATE_PAUSED));
       if (sink->filename)
 	g_free (sink->filename);
-      sink->filename = g_strdup (GTK_VALUE_STRING (*arg));
+      sink->filename = g_strdup (g_value_get_string (value));
       if ( (GST_STATE (sink) == GST_STATE_PAUSED) 
         && (sink->filename != NULL))
       {
@@ -155,7 +153,7 @@
 }
 
 static void   
-gst_disksink_get_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_disksink_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
   GstDiskSink *sink;
  
@@ -164,12 +162,12 @@
  
   sink = GST_DISKSINK (object);
   
-  switch (id) {
+  switch (prop_id) {
     case ARG_LOCATION:
-      GTK_VALUE_STRING (*arg) = sink->filename;
+      g_value_set_string (value, sink->filename);
       break;
     default:
-      arg->type = GTK_TYPE_INVALID;
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
@@ -237,7 +235,7 @@
   }
   gst_buffer_unref (buf);
 
-  gtk_signal_emit (GTK_OBJECT (disksink), gst_disksink_signals[SIGNAL_HANDOFF],
+  g_signal_emit (G_OBJECT (disksink), gst_disksink_signals[SIGNAL_HANDOFF], 0,
 	                      disksink);
 }
 
diff --git a/plugins/elements/gstdisksink.h b/plugins/elements/gstdisksink.h
index 15f3d32..1797135 100644
--- a/plugins/elements/gstdisksink.h
+++ b/plugins/elements/gstdisksink.h
@@ -40,13 +40,13 @@
 #define GST_TYPE_DISKSINK \
   (gst_disksink_get_type())
 #define GST_DISKSINK(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_DISKSINK,GstDiskSink))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISKSINK,GstDiskSink))
 #define GST_DISKSINK_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_DISKSINK,GstDiskSinkClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DISKSINK,GstDiskSinkClass))
 #define GST_IS_DISKSINK(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_DISKSINK))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISKSINK))
 #define GST_IS_DISKSINK_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_DISKSINK))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DISKSINK))
 
 typedef struct _GstDiskSink GstDiskSink;
 typedef struct _GstDiskSinkClass GstDiskSinkClass;
@@ -71,7 +71,7 @@
   void (*handoff) (GstElement *element,GstPad *pad);
 };
 
-GtkType gst_disksink_get_type(void);
+GType gst_disksink_get_type(void);
 
 
 #ifdef __cplusplus
diff --git a/plugins/elements/gstdisksrc.c b/plugins/elements/gstdisksrc.c
index 694d3e3..259473e 100644
--- a/plugins/elements/gstdisksrc.c
+++ b/plugins/elements/gstdisksrc.c
@@ -59,8 +59,8 @@
 static void		gst_disksrc_class_init	(GstDiskSrcClass *klass);
 static void		gst_disksrc_init		(GstDiskSrc *disksrc);
 
-static void		gst_disksrc_set_arg	(GtkObject *object, GtkArg *arg, guint id);
-static void		gst_disksrc_get_arg	(GtkObject *object, GtkArg *arg, guint id);
+static void		gst_disksrc_set_property	(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void		gst_disksrc_get_property	(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
 static GstBuffer *	gst_disksrc_get		(GstPad *pad);
 static GstBuffer *	gst_disksrc_get_region	(GstPad *pad,GstRegionType type,guint64 offset,guint64 len);
@@ -73,23 +73,23 @@
 static GstElementClass *parent_class = NULL;
 //static guint gst_disksrc_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_disksrc_get_type(void)
 {
-  static GtkType disksrc_type = 0;
+  static GType disksrc_type = 0;
 
   if (!disksrc_type) {
-    static const GtkTypeInfo disksrc_info = {
-      "GstDiskSrc",
+    static const GTypeInfo disksrc_info = {
+      sizeof(GstDiskSrcClass),      NULL,
+      NULL,
+      (GClassInitFunc)gst_disksrc_class_init,
+      NULL,
+      NULL,
       sizeof(GstDiskSrc),
-      sizeof(GstDiskSrcClass),
-      (GtkClassInitFunc)gst_disksrc_class_init,
-      (GtkObjectInitFunc)gst_disksrc_init,
-      (GtkArgSetFunc)gst_disksrc_set_arg,
-      (GtkArgGetFunc)gst_disksrc_get_arg,
-      (GtkClassInitFunc)NULL,
+      0,
+      (GInstanceInitFunc)gst_disksrc_init,
     };
-    disksrc_type = gtk_type_unique (GST_TYPE_ELEMENT, &disksrc_info);
+    disksrc_type = g_type_register_static (GST_TYPE_ELEMENT, "GstDiskSrc", &disksrc_info, 0);
   }
   return disksrc_type;
 }
@@ -97,25 +97,29 @@
 static void
 gst_disksrc_class_init (GstDiskSrcClass *klass)
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
   GstElementClass *gstelement_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
   gstelement_class = (GstElementClass*)klass;
 
-  parent_class = gtk_type_class (GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
 
-  gtk_object_add_arg_type ("GstDiskSrc::location", GST_TYPE_FILENAME,
-                           GTK_ARG_READWRITE, ARG_LOCATION);
-  gtk_object_add_arg_type ("GstDiskSrc::bytesperread", GTK_TYPE_INT,
-                           GTK_ARG_READWRITE, ARG_BYTESPERREAD);
-  gtk_object_add_arg_type ("GstDiskSrc::offset", GTK_TYPE_LONG,
-                           GTK_ARG_READWRITE, ARG_OFFSET);
-  gtk_object_add_arg_type ("GstDiskSrc::size", GTK_TYPE_LONG,
-                           GTK_ARG_READABLE, ARG_SIZE);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_LOCATION,
+    g_param_spec_string("location","location","location",
+                        NULL,G_PARAM_READWRITE)); // CHECKME!
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_BYTESPERREAD,
+    g_param_spec_int("bytesperread","bytesperread","bytesperread",
+                     G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_OFFSET,
+    g_param_spec_long("offset","offset","offset",
+                     G_MINLONG,G_MAXLONG,0,G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_SIZE,
+    g_param_spec_long("size","size","size",
+                     G_MINLONG,G_MAXLONG,0,G_PARAM_READABLE)); // CHECKME
 
-  gtkobject_class->set_arg = gst_disksrc_set_arg;
-  gtkobject_class->get_arg = gst_disksrc_get_arg;
+  gobject_class->set_property = gst_disksrc_set_property;
+  gobject_class->get_property = gst_disksrc_get_property;
 
   gstelement_class->change_state = gst_disksrc_change_state;
 }
@@ -142,7 +146,7 @@
 
 
 static void
-gst_disksrc_set_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_disksrc_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
   GstDiskSrc *src;
 
@@ -151,7 +155,7 @@
 
   src = GST_DISKSRC (object);
 
-  switch(id) {
+  switch (prop_id) {
     case ARG_LOCATION:
       /* the element must be stopped or paused in order to do this */
       g_return_if_fail ((GST_STATE (src) < GST_STATE_PLAYING)
@@ -159,12 +163,12 @@
 
       if (src->filename) g_free (src->filename);
       /* clear the filename if we get a NULL (is that possible?) */
-      if (GTK_VALUE_STRING (*arg) == NULL) {
+      if (g_value_get_string (value) == NULL) {
         gst_element_set_state (GST_ELEMENT (object), GST_STATE_NULL);
         src->filename = NULL;
       /* otherwise set the new filename */
       } else {
-        src->filename = g_strdup (GTK_VALUE_STRING (*arg));
+        src->filename = g_strdup (g_value_get_string (value));
       }
       if ((GST_STATE (src) == GST_STATE_PAUSED) && (src->filename != NULL))
       {
@@ -173,10 +177,10 @@
       }
       break;
     case ARG_BYTESPERREAD:
-      src->bytes_per_read = GTK_VALUE_INT (*arg);
+      src->bytes_per_read = g_value_get_int (value);
       break;
     case ARG_OFFSET:
-      src->curoffset = GTK_VALUE_LONG (*arg);
+      src->curoffset = g_value_get_long (value);
       src->new_seek = TRUE;
       break;
     default:
@@ -185,7 +189,7 @@
 }
 
 static void
-gst_disksrc_get_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_disksrc_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
   GstDiskSrc *src;
 
@@ -194,21 +198,21 @@
 
   src = GST_DISKSRC (object);
 
-  switch (id) {
+  switch (prop_id) {
     case ARG_LOCATION:
-      GTK_VALUE_STRING (*arg) = src->filename;
+      g_value_set_string (value, src->filename);
       break;
     case ARG_BYTESPERREAD:
-      GTK_VALUE_INT (*arg) = src->bytes_per_read;
+      g_value_set_int (value, src->bytes_per_read);
       break;
     case ARG_OFFSET:
-      GTK_VALUE_LONG (*arg) = src->curoffset;
+      g_value_set_long (value, src->curoffset);
       break;
     case ARG_SIZE:
-      GTK_VALUE_LONG (*arg) = src->size;
+      g_value_set_long (value, src->size);
       break;
     default:
-      arg->type = GTK_TYPE_INVALID;
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
diff --git a/plugins/elements/gstdisksrc.h b/plugins/elements/gstdisksrc.h
index e049a10..155a362 100644
--- a/plugins/elements/gstdisksrc.h
+++ b/plugins/elements/gstdisksrc.h
@@ -38,13 +38,13 @@
 #define GST_TYPE_DISKSRC \
   (gst_disksrc_get_type())
 #define GST_DISKSRC(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_DISKSRC,GstDiskSrc))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISKSRC,GstDiskSrc))
 #define GST_DISKSRC_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_DISKSRC,GstDiskSrcClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DISKSRC,GstDiskSrcClass))
 #define GST_IS_DISKSRC(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_DISKSRC))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISKSRC))
 #define GST_IS_DISKSRC_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_DISKSRC))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DISKSRC))
 
 typedef enum {
   GST_DISKSRC_OPEN		= GST_ELEMENT_FLAG_LAST,
@@ -81,7 +81,7 @@
   GstElementClass parent_class;
 };
 
-GtkType gst_disksrc_get_type(void);
+GType gst_disksrc_get_type(void);
 
 #ifdef __cplusplus
 }
diff --git a/plugins/elements/gstelements.c b/plugins/elements/gstelements.c
index 6a46c67..b1bf952 100644
--- a/plugins/elements/gstelements.c
+++ b/plugins/elements/gstelements.c
@@ -42,7 +42,7 @@
 
 struct _elements_entry {
   gchar *name;
-  GtkType (*type) (void);
+  GType (*type) (void);
   GstElementDetails *details;
   gboolean (*factoryinit) (GstElementFactory *factory);
 };
diff --git a/plugins/elements/gstfakesink.c b/plugins/elements/gstfakesink.c
index 1d22865..913c303 100644
--- a/plugins/elements/gstfakesink.c
+++ b/plugins/elements/gstfakesink.c
@@ -51,31 +51,31 @@
 static void	gst_fakesink_class_init	(GstFakeSinkClass *klass);
 static void	gst_fakesink_init	(GstFakeSink *fakesink);
 
-static void	gst_fakesink_set_arg	(GtkObject *object, GtkArg *arg, guint id);
-static void	gst_fakesink_get_arg	(GtkObject *object, GtkArg *arg, guint id);
+static void	gst_fakesink_set_property	(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void	gst_fakesink_get_property	(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
 static void	gst_fakesink_chain	(GstPad *pad,GstBuffer *buf);
 
 static GstElementClass *parent_class = NULL;
 static guint gst_fakesink_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_fakesink_get_type (void) 
 {
-  static GtkType fakesink_type = 0;
+  static GType fakesink_type = 0;
 
   if (!fakesink_type) {
-    static const GtkTypeInfo fakesink_info = {
-      "GstFakeSink",
+    static const GTypeInfo fakesink_info = {
+      sizeof(GstFakeSinkClass),      NULL,
+      NULL,
+      (GClassInitFunc)gst_fakesink_class_init,
+      NULL,
+      NULL,
       sizeof(GstFakeSink),
-      sizeof(GstFakeSinkClass),
-      (GtkClassInitFunc)gst_fakesink_class_init,
-      (GtkObjectInitFunc)gst_fakesink_init,
-      (GtkArgSetFunc)NULL,
-      (GtkArgGetFunc)NULL,
-      (GtkClassInitFunc)NULL,
+      0,
+      (GInstanceInitFunc)gst_fakesink_init,
     };
-    fakesink_type = gtk_type_unique (GST_TYPE_ELEMENT, &fakesink_info);
+    fakesink_type = g_type_register_static (GST_TYPE_ELEMENT, "GstFakeSink", &fakesink_info, 0);
   }
   return fakesink_type;
 }
@@ -83,28 +83,27 @@
 static void
 gst_fakesink_class_init (GstFakeSinkClass *klass) 
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
 
-  parent_class = gtk_type_class (GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
 
-  gtk_object_add_arg_type ("GstFakeSink::num_sources", GTK_TYPE_INT,
-                           GTK_ARG_READWRITE, ARG_NUM_SOURCES);
-  gtk_object_add_arg_type ("GstFakeSink::silent", GTK_TYPE_BOOL,
-                           GTK_ARG_READWRITE, ARG_SILENT);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_NUM_SOURCES,
+    g_param_spec_int("num_sources","num_sources","num_sources",
+                     G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_SILENT,
+    g_param_spec_boolean("silent","silent","silent",
+                         TRUE,G_PARAM_READWRITE)); // CHECKME
 
   gst_fakesink_signals[SIGNAL_HANDOFF] =
-    gtk_signal_new ("handoff", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstFakeSinkClass, handoff),
-                    gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
-                    GTK_TYPE_POINTER);
+    g_signal_newc ("handoff", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GstFakeSinkClass, handoff), NULL, NULL,
+                    g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
+                    G_TYPE_POINTER);
 
-  gtk_object_class_add_signals (gtkobject_class, gst_fakesink_signals,
-                                    LAST_SIGNAL);
-
-  gtkobject_class->set_arg = gst_fakesink_set_arg;
-  gtkobject_class->get_arg = gst_fakesink_get_arg;
+  gobject_class->set_property = gst_fakesink_set_property;
+  gobject_class->get_property = gst_fakesink_get_property;
 }
 
 static void 
@@ -123,7 +122,7 @@
 }
 
 static void
-gst_fakesink_set_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_fakesink_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
   GstFakeSink *sink;
   gint new_numsinks;
@@ -132,9 +131,9 @@
   /* it's not null if we got it, but it might not be ours */
   sink = GST_FAKESINK (object);
 
-  switch(id) {
+  switch (prop_id) {
     case ARG_NUM_SOURCES:
-      new_numsinks = GTK_VALUE_INT (*arg);
+      new_numsinks = g_value_get_int (value);
       while (sink->numsinkpads < new_numsinks) {
         pad = gst_pad_new (g_strdup_printf ("sink%d", sink->numsinkpads), GST_PAD_SINK);
         gst_pad_set_chain_function (pad, gst_fakesink_chain);
@@ -144,7 +143,7 @@
       }
       break;
     case ARG_SILENT:
-      sink->silent = GTK_VALUE_BOOL (*arg);
+      sink->silent = g_value_get_boolean (value);
       break;
     default:
       break;
@@ -152,7 +151,7 @@
 }
 
 static void   
-gst_fakesink_get_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_fakesink_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
   GstFakeSink *sink;
  
@@ -161,15 +160,15 @@
  
   sink = GST_FAKESINK (object);
   
-  switch (id) {
+  switch (prop_id) {
     case ARG_NUM_SOURCES:
-      GTK_VALUE_INT (*arg) = sink->numsinkpads;
+      g_value_set_int (value, sink->numsinkpads);
       break;
     case ARG_SILENT:
-      GTK_VALUE_BOOL (*arg) = sink->silent;
+      g_value_set_boolean (value, sink->silent);
       break;
     default:
-      arg->type = GTK_TYPE_INVALID;
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
@@ -195,7 +194,7 @@
   if (!fakesink->silent)
     g_print("fakesink: ******* (%s:%s)< (%d bytes) \n",GST_DEBUG_PAD_NAME(pad),GST_BUFFER_SIZE(buf));
   
-  gtk_signal_emit (GTK_OBJECT (fakesink), gst_fakesink_signals[SIGNAL_HANDOFF],
+  g_signal_emit (G_OBJECT (fakesink), gst_fakesink_signals[SIGNAL_HANDOFF], 0,
                    buf);
 
   gst_buffer_unref (buf);
diff --git a/plugins/elements/gstfakesink.h b/plugins/elements/gstfakesink.h
index 37fa1f2..483f948 100644
--- a/plugins/elements/gstfakesink.h
+++ b/plugins/elements/gstfakesink.h
@@ -40,13 +40,13 @@
 #define GST_TYPE_FAKESINK \
   (gst_fakesink_get_type())
 #define GST_FAKESINK(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_FAKESINK,GstFakeSink))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_FAKESINK,GstFakeSink))
 #define GST_FAKESINK_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_FAKESINK,GstFakeSinkClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_FAKESINK,GstFakeSinkClass))
 #define GST_IS_FAKESINK(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_FAKESINK))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_FAKESINK))
 #define GST_IS_FAKESINK_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_FAKESINK))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_FAKESINK))
 
 typedef struct _GstFakeSink GstFakeSink;
 typedef struct _GstFakeSinkClass GstFakeSinkClass;
@@ -66,7 +66,7 @@
   void (*handoff) (GstElement *element, GstBuffer *buf, GstPad *pad);
 };
 
-GtkType gst_fakesink_get_type(void);
+GType gst_fakesink_get_type(void);
 
 
 #ifdef __cplusplus
diff --git a/plugins/elements/gstfakesrc.c b/plugins/elements/gstfakesrc.c
index 97570bb..a8496a5 100644
--- a/plugins/elements/gstfakesrc.c
+++ b/plugins/elements/gstfakesrc.c
@@ -54,10 +54,10 @@
 };
 
 #define GST_TYPE_FAKESRC_OUTPUT (gst_fakesrc_output_get_type())
-static GtkType
+static GType
 gst_fakesrc_output_get_type(void) {
-  static GtkType fakesrc_output_type = 0;
-  static GtkEnumValue fakesrc_output[] = {
+  static GType fakesrc_output_type = 0;
+  static GEnumValue fakesrc_output[] = {
     { FAKESRC_FIRST_LAST_LOOP, 		"1", "First-Last loop"},
     { FAKESRC_LAST_FIRST_LOOP, 		"2", "Last-First loop"},
     { FAKESRC_PING_PONG, 		"3", "Ping-Pong"},
@@ -69,7 +69,7 @@
     {0, NULL, NULL},
   };
   if (!fakesrc_output_type) {
-    fakesrc_output_type = gtk_type_register_enum("GstFakeSrcOutput", fakesrc_output);
+    fakesrc_output_type = g_enum_register_static("GstFakeSrcOutput", fakesrc_output);
   }
   return fakesrc_output_type;
 }
@@ -77,8 +77,8 @@
 static void		gst_fakesrc_class_init	(GstFakeSrcClass *klass);
 static void		gst_fakesrc_init	(GstFakeSrc *fakesrc);
 
-static void		gst_fakesrc_set_arg	(GtkObject *object, GtkArg *arg, guint id);
-static void		gst_fakesrc_get_arg	(GtkObject *object, GtkArg *arg, guint id);
+static void		gst_fakesrc_set_property	(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void		gst_fakesrc_get_property	(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
 static GstBuffer*	gst_fakesrc_get		(GstPad *pad);
 static void 		gst_fakesrc_loop	(GstElement *element);
@@ -86,23 +86,24 @@
 static GstElementClass *parent_class = NULL;
 static guint gst_fakesrc_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_fakesrc_get_type (void) 
 {
-  static GtkType fakesrc_type = 0;
+  static GType fakesrc_type = 0;
 
   if (!fakesrc_type) {
-    static const GtkTypeInfo fakesrc_info = {
-      "GstFakeSrc",
-      sizeof(GstFakeSrc),
+    static const GTypeInfo fakesrc_info = {
       sizeof(GstFakeSrcClass),
-      (GtkClassInitFunc)gst_fakesrc_class_init,
-      (GtkObjectInitFunc)gst_fakesrc_init,
-      (GtkArgSetFunc)NULL,
-      (GtkArgGetFunc)NULL,
-      (GtkClassInitFunc)NULL,
+      NULL,
+      NULL,
+      (GClassInitFunc)gst_fakesrc_class_init,
+      NULL,
+      NULL,
+      sizeof(GstFakeSrc),
+      0,
+      (GInstanceInitFunc)gst_fakesrc_init,
     };
-    fakesrc_type = gtk_type_unique (GST_TYPE_ELEMENT, &fakesrc_info);
+    fakesrc_type = g_type_register_static (GST_TYPE_ELEMENT, "GstFakeSrc", &fakesrc_info, 0);
   }
   return fakesrc_type;
 }
@@ -110,38 +111,42 @@
 static void
 gst_fakesrc_class_init (GstFakeSrcClass *klass) 
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
 
-  parent_class = gtk_type_class (GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
 
-  gtk_object_add_arg_type ("GstFakeSrc::num_sources", GTK_TYPE_INT,
-                           GTK_ARG_READWRITE, ARG_NUM_SOURCES);
-  gtk_object_add_arg_type ("GstFakeSrc::loop_based", GTK_TYPE_BOOL,
-                           GTK_ARG_READWRITE, ARG_LOOP_BASED);
-  gtk_object_add_arg_type ("GstFakeSrc::output", GST_TYPE_FAKESRC_OUTPUT,
-                           GTK_ARG_READWRITE, ARG_OUTPUT);
-  gtk_object_add_arg_type ("GstFakeSrc::pattern", GTK_TYPE_STRING,
-                           GTK_ARG_READWRITE, ARG_PATTERN);
-  gtk_object_add_arg_type ("GstFakeSrc::num_buffers", GTK_TYPE_INT,
-                           GTK_ARG_READWRITE, ARG_NUM_BUFFERS);
-  gtk_object_add_arg_type ("GstFakeSrc::eos", GTK_TYPE_BOOL,
-                           GTK_ARG_READWRITE, ARG_EOS);
-  gtk_object_add_arg_type ("GstFakeSrc::silent", GTK_TYPE_BOOL,
-                           GTK_ARG_READWRITE, ARG_SILENT);
-
-  gtkobject_class->set_arg = gst_fakesrc_set_arg;
-  gtkobject_class->get_arg = gst_fakesrc_get_arg;
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_NUM_SOURCES,
+    g_param_spec_int("num_sources","num_sources","num_sources",
+                     G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_LOOP_BASED,
+    g_param_spec_boolean("loop_based","loop_based","loop_based",
+                         TRUE,G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_OUTPUT,
+    g_param_spec_enum("output","output","output",
+                      GST_TYPE_FAKESRC_OUTPUT,FAKESRC_FIRST_LAST_LOOP,G_PARAM_READWRITE)); // CHECKME!
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_PATTERN,
+    g_param_spec_string("pattern","pattern","pattern",
+                        NULL, G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_NUM_BUFFERS,
+    g_param_spec_int("num_buffers","num_buffers","num_buffers",
+                     G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_EOS,
+    g_param_spec_boolean("eos","eos","eos",
+                         TRUE,G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_SILENT,
+    g_param_spec_boolean("silent","silent","silent",
+                         TRUE,G_PARAM_READWRITE)); // CHECKME
 
   gst_fakesrc_signals[SIGNAL_HANDOFF] =
-    gtk_signal_new ("handoff", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstFakeSrcClass, handoff),
-                    gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
-                    GTK_TYPE_POINTER);
+    g_signal_newc ("handoff", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GstFakeSrcClass, handoff), NULL, NULL,
+                    g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
+                    G_TYPE_POINTER);
 
-  gtk_object_class_add_signals (gtkobject_class, gst_fakesrc_signals,
-                                LAST_SIGNAL);
+  gobject_class->set_property = gst_fakesrc_set_property;
+  gobject_class->get_property = gst_fakesrc_get_property;
 }
 
 static void 
@@ -192,7 +197,7 @@
 }
 
 static void
-gst_fakesrc_set_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_fakesrc_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
   GstFakeSrc *src;
   gint new_numsrcs;
@@ -201,9 +206,9 @@
   /* it's not null if we got it, but it might not be ours */
   src = GST_FAKESRC (object);
    
-  switch(id) {
+  switch (prop_id) {
     case ARG_NUM_SOURCES:
-      new_numsrcs = GTK_VALUE_INT (*arg);
+      new_numsrcs = g_value_get_int (value);
       if (new_numsrcs > src->numsrcpads) {
         while (src->numsrcpads != new_numsrcs) {
           pad = gst_pad_new(g_strdup_printf("src%d",src->numsrcpads),GST_PAD_SRC);
@@ -215,7 +220,7 @@
       }
       break;
     case ARG_LOOP_BASED:
-      src->loop_based = GTK_VALUE_BOOL (*arg);
+      src->loop_based = g_value_get_boolean (value);
       gst_fakesrc_update_functions (src);
       break;
     case ARG_OUTPUT:
@@ -223,14 +228,14 @@
     case ARG_PATTERN:
       break;
     case ARG_NUM_BUFFERS:
-      src->num_buffers = GTK_VALUE_INT (*arg);
+      src->num_buffers = g_value_get_int (value);
       break;
     case ARG_EOS:
-      src->eos = GTK_VALUE_BOOL (*arg);
+      src->eos = g_value_get_boolean (value);
 GST_INFO (0, "will EOS on next buffer");
       break;
     case ARG_SILENT:
-      src->silent = GTK_VALUE_BOOL (*arg);
+      src->silent = g_value_get_boolean (value);
       break;
     default:
       break;
@@ -238,7 +243,7 @@
 }
 
 static void 
-gst_fakesrc_get_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_fakesrc_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
   GstFakeSrc *src;
    
@@ -247,29 +252,30 @@
   
   src = GST_FAKESRC (object);
    
-  switch (id) {
+  switch (prop_id) {
     case ARG_NUM_SOURCES:
-      GTK_VALUE_INT (*arg) = src->numsrcpads;
+      g_value_set_int (value, src->numsrcpads);
       break;
     case ARG_LOOP_BASED:
-      GTK_VALUE_BOOL (*arg) = src->loop_based;
+      g_value_set_boolean (value, src->loop_based);
       break;
     case ARG_OUTPUT:
-      GTK_VALUE_INT (*arg) = src->output;
+      g_value_set_int (value, src->output);
       break;
     case ARG_PATTERN:
-      GTK_VALUE_STRING (*arg) = src->pattern;
+      g_value_set_string (value, src->pattern);
       break;
     case ARG_NUM_BUFFERS:
-      GTK_VALUE_INT (*arg) = src->num_buffers;
+      g_value_set_int (value, src->num_buffers);
       break;
     case ARG_EOS:
-      GTK_VALUE_BOOL (*arg) = src->eos;
+      g_value_set_boolean (value, src->eos);
+      break;
     case ARG_SILENT:
-      GTK_VALUE_BOOL (*arg) = src->silent;
+      g_value_set_boolean (value, src->silent);
       break;
     default:
-      arg->type = GTK_TYPE_INVALID;
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
@@ -314,7 +320,7 @@
     g_print("fakesrc: ******* (%s:%s)> \n",GST_DEBUG_PAD_NAME(pad));
   buf = gst_buffer_new();
 
-  gtk_signal_emit (GTK_OBJECT (src), gst_fakesrc_signals[SIGNAL_HANDOFF],
+  g_signal_emit (G_OBJECT (src), gst_fakesrc_signals[SIGNAL_HANDOFF], 0,
                    buf);
 
   return buf;
@@ -364,7 +370,7 @@
       if (!src->silent)
         g_print("fakesrc: ******* (%s:%s)> \n",GST_DEBUG_PAD_NAME(pad));
 
-      gtk_signal_emit (GTK_OBJECT (src), gst_fakesrc_signals[SIGNAL_HANDOFF],
+      g_signal_emit (G_OBJECT (src), gst_fakesrc_signals[SIGNAL_HANDOFF], 0,
                        buf);
       gst_pad_push (pad, buf);
 
diff --git a/plugins/elements/gstfakesrc.h b/plugins/elements/gstfakesrc.h
index ba92f63..dc327e2 100644
--- a/plugins/elements/gstfakesrc.h
+++ b/plugins/elements/gstfakesrc.h
@@ -50,13 +50,13 @@
 #define GST_TYPE_FAKESRC \
   (gst_fakesrc_get_type())
 #define GST_FAKESRC(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_FAKESRC,GstFakeSrc))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_FAKESRC,GstFakeSrc))
 #define GST_FAKESRC_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_FAKESRC,GstFakeSrcClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_FAKESRC,GstFakeSrcClass))
 #define GST_IS_FAKESRC(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_FAKESRC))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_FAKESRC))
 #define GST_IS_FAKESRC_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_FAKESRC))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_FAKESRC))
 
 typedef struct _GstFakeSrc GstFakeSrc;
 typedef struct _GstFakeSrcClass GstFakeSrcClass;
@@ -82,7 +82,7 @@
   void (*handoff) (GstElement *element, GstBuffer *buf, GstPad *pad);
 };
 
-GtkType gst_fakesrc_get_type(void);
+GType gst_fakesrc_get_type(void);
 
 #ifdef __cplusplus
 }
diff --git a/plugins/elements/gstfdsink.c b/plugins/elements/gstfdsink.c
index 1b6fed7..256e6a8 100644
--- a/plugins/elements/gstfdsink.c
+++ b/plugins/elements/gstfdsink.c
@@ -49,31 +49,31 @@
 static void gst_fdsink_class_init	(GstFdSinkClass *klass);
 static void gst_fdsink_init		(GstFdSink *fdsink);
 
-static void gst_fdsink_set_arg		(GtkObject *object, GtkArg *arg, guint id);
-static void gst_fdsink_get_arg		(GtkObject *object, GtkArg *arg, guint id);
+static void gst_fdsink_set_property		(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void gst_fdsink_get_property		(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
 static void gst_fdsink_chain		(GstPad *pad,GstBuffer *buf);
 
 static GstElementClass *parent_class = NULL;
 //static guint gst_fdsink_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_fdsink_get_type (void) 
 {
-  static GtkType fdsink_type = 0;
+  static GType fdsink_type = 0;
 
   if (!fdsink_type) {
-    static const GtkTypeInfo fdsink_info = {
-      "GstFdSink",
+    static const GTypeInfo fdsink_info = {
+      sizeof(GstFdSinkClass),      NULL,
+      NULL,
+      (GClassInitFunc)gst_fdsink_class_init,
+      NULL,
+      NULL,
       sizeof(GstFdSink),
-      sizeof(GstFdSinkClass),
-      (GtkClassInitFunc)gst_fdsink_class_init,
-      (GtkObjectInitFunc)gst_fdsink_init,
-      (GtkArgSetFunc)gst_fdsink_set_arg,
-      (GtkArgGetFunc)gst_fdsink_get_arg,
-      (GtkClassInitFunc)NULL,
+      0,
+      (GInstanceInitFunc)gst_fdsink_init,
     };
-    fdsink_type = gtk_type_unique (GST_TYPE_ELEMENT, &fdsink_info);
+    fdsink_type = g_type_register_static (GST_TYPE_ELEMENT, "GstFdSink", &fdsink_info, 0);
   }
   return fdsink_type;
 }
@@ -81,17 +81,18 @@
 static void
 gst_fdsink_class_init (GstFdSinkClass *klass) 
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
 
-  parent_class = gtk_type_class (GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
 
-  gtk_object_add_arg_type ("GstFdSink::fd", GTK_TYPE_INT,
-                           GTK_ARG_READWRITE, ARG_FD);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_FD,
+    g_param_spec_int("fd","fd","fd",
+                     G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
 
-  gtkobject_class->set_arg = gst_fdsink_set_arg;
-  gtkobject_class->get_arg = gst_fdsink_get_arg;
+  gobject_class->set_property = gst_fdsink_set_property;
+  gobject_class->get_property = gst_fdsink_get_property;
 }
 
 static void 
@@ -126,7 +127,7 @@
 }
 
 static void 
-gst_fdsink_set_arg (GtkObject *object, GtkArg *arg, guint id) 
+gst_fdsink_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) 
 {
   GstFdSink *fdsink;
    
@@ -135,9 +136,9 @@
   
   fdsink = GST_FDSINK (object);
 
-  switch(id) {
+  switch (prop_id) {
     case ARG_FD:
-      fdsink->fd = GTK_VALUE_INT (*arg);
+      fdsink->fd = g_value_get_int (value);
       break;
     default:
       break;
@@ -145,7 +146,7 @@
 }
 
 static void 
-gst_fdsink_get_arg (GtkObject *object, GtkArg *arg, guint id) 
+gst_fdsink_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) 
 {
   GstFdSink *fdsink;
    
@@ -154,9 +155,9 @@
   
   fdsink = GST_FDSINK (object);
 
-  switch(id) {
+  switch (prop_id) {
     case ARG_FD:
-      GTK_VALUE_INT (*arg) = fdsink->fd;
+      g_value_set_int (value, fdsink->fd);
       break;
     default:
       break;
diff --git a/plugins/elements/gstfdsink.h b/plugins/elements/gstfdsink.h
index 3a18efb..8cf98c2 100644
--- a/plugins/elements/gstfdsink.h
+++ b/plugins/elements/gstfdsink.h
@@ -40,13 +40,13 @@
 #define GST_TYPE_FDSINK \
   (gst_fdsink_get_type())
 #define GST_FDSINK(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_FDSINK,GstFdSink))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_FDSINK,GstFdSink))
 #define GST_FDSINK_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_FDSINK,GstFdSinkClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_FDSINK,GstFdSinkClass))
 #define GST_IS_FDSINK(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_FDSINK))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_FDSINK))
 #define GST_IS_FDSINK_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_FDSINK))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_FDSINK))
 
 typedef struct _GstFdSink GstFdSink;
 typedef struct _GstFdSinkClass GstFdSinkClass;
@@ -63,7 +63,7 @@
   GstElementClass parent_class;
 };
 
-GtkType gst_fdsink_get_type(void);
+GType gst_fdsink_get_type(void);
 
 
 #ifdef __cplusplus
diff --git a/plugins/elements/gstfdsrc.c b/plugins/elements/gstfdsrc.c
index b256890..658a894 100644
--- a/plugins/elements/gstfdsrc.c
+++ b/plugins/elements/gstfdsrc.c
@@ -57,8 +57,8 @@
 static void		gst_fdsrc_class_init	(GstFdSrcClass *klass);
 static void		gst_fdsrc_init		(GstFdSrc *fdsrc);
 
-static void		gst_fdsrc_set_arg	(GtkObject *object, GtkArg *arg, guint id);
-static void		gst_fdsrc_get_arg	(GtkObject *object, GtkArg *arg, guint id);
+static void		gst_fdsrc_set_property	(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void		gst_fdsrc_get_property	(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
 static GstBuffer *	gst_fdsrc_get		(GstPad *pad);
 
@@ -66,23 +66,23 @@
 static GstElementClass *parent_class = NULL;
 //static guint gst_fdsrc_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_fdsrc_get_type (void) 
 {
-  static GtkType fdsrc_type = 0;
+  static GType fdsrc_type = 0;
 
   if (!fdsrc_type) {
-    static const GtkTypeInfo fdsrc_info = {
-      "GstFdSrc",
+    static const GTypeInfo fdsrc_info = {
+      sizeof(GstFdSrcClass),      NULL,
+      NULL,
+      (GClassInitFunc)gst_fdsrc_class_init,
+      NULL,
+      NULL,
       sizeof(GstFdSrc),
-      sizeof(GstFdSrcClass),
-      (GtkClassInitFunc)gst_fdsrc_class_init,
-      (GtkObjectInitFunc)gst_fdsrc_init,
-      (GtkArgSetFunc)gst_fdsrc_set_arg,
-      (GtkArgGetFunc)gst_fdsrc_get_arg,
-      (GtkClassInitFunc)NULL,
+      0,
+      (GInstanceInitFunc)gst_fdsrc_init,
     };
-    fdsrc_type = gtk_type_unique (GST_TYPE_ELEMENT, &fdsrc_info);
+    fdsrc_type = g_type_register_static (GST_TYPE_ELEMENT, "GstFdSrc", &fdsrc_info, 0);
   }
   return fdsrc_type;
 }
@@ -90,21 +90,24 @@
 static void
 gst_fdsrc_class_init (GstFdSrcClass *klass) 
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
 
-  parent_class = gtk_type_class(GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref(GST_TYPE_ELEMENT);
 
-  gtk_object_add_arg_type ("GstFdSrc::location", GST_TYPE_FILENAME,
-                           GTK_ARG_WRITABLE, ARG_LOCATION);
-  gtk_object_add_arg_type ("GstFdSrc::bytesperread", GTK_TYPE_INT,
-                           GTK_ARG_READWRITE, ARG_BYTESPERREAD);
-  gtk_object_add_arg_type ("GstFdSrc::offset", GTK_TYPE_INT,
-                           GTK_ARG_READABLE, ARG_OFFSET);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_LOCATION,
+    g_param_spec_string("location","location","location",
+                        "",G_PARAM_WRITABLE)); // CHECKME!
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_BYTESPERREAD,
+    g_param_spec_int("bytesperread","bytesperread","bytesperread",
+                     G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_OFFSET,
+    g_param_spec_int("offset","offset","offset",
+                     G_MININT,G_MAXINT,0,G_PARAM_READABLE)); // CHECKME
 
-  gtkobject_class->set_arg = gst_fdsrc_set_arg;
-  gtkobject_class->get_arg = gst_fdsrc_get_arg;
+  gobject_class->set_property = gst_fdsrc_set_property;
+  gobject_class->get_property = gst_fdsrc_get_property;
 }
 
 static void gst_fdsrc_init(GstFdSrc *fdsrc) {
@@ -120,7 +123,7 @@
 
 
 static void 
-gst_fdsrc_set_arg (GtkObject *object, GtkArg *arg, guint id) 
+gst_fdsrc_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) 
 {
   GstFdSrc *src;
   int fd;
@@ -130,23 +133,23 @@
   
   src = GST_FDSRC (object);
 
-  switch(id) {
+  switch (prop_id) {
     case ARG_LOCATION:
       /* the element must not be playing in order to do this */
       g_return_if_fail (GST_STATE (src) < GST_STATE_PLAYING);
 
       /* if we get a NULL, consider it to be a fd of 0 */
-      if (GTK_VALUE_STRING (*arg) == NULL) {
+      if (g_value_get_string (value) == NULL) {
         gst_element_set_state (GST_ELEMENT (object), GST_STATE_NULL);
         src->fd = 0;
       /* otherwise set the new filename */
       } else {
-        if (sscanf (GTK_VALUE_STRING (*arg), "%d", &fd))
+        if (sscanf (g_value_get_string (value), "%d", &fd))
           src->fd = fd;
       }
       break;
     case ARG_BYTESPERREAD:
-      src->bytes_per_read = GTK_VALUE_INT (*arg);
+      src->bytes_per_read = g_value_get_int (value);
       break;
     default:
       break;
@@ -154,7 +157,7 @@
 }
 
 static void 
-gst_fdsrc_get_arg (GtkObject *object, GtkArg *arg, guint id) 
+gst_fdsrc_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) 
 {
   GstFdSrc *src;
 
@@ -163,15 +166,15 @@
   
   src = GST_FDSRC (object);
 
-  switch (id) {
+  switch (prop_id) {
     case ARG_BYTESPERREAD:
-      GTK_VALUE_INT (*arg) = src->bytes_per_read;
+      g_value_set_int (value, src->bytes_per_read);
       break;
     case ARG_OFFSET:
-      GTK_VALUE_INT (*arg) = src->curoffset;
+      g_value_set_int (value, src->curoffset);
       break;
     default:
-      arg->type = GTK_TYPE_INVALID;
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
diff --git a/plugins/elements/gstfdsrc.h b/plugins/elements/gstfdsrc.h
index 4c4c3cb..0fa2155 100644
--- a/plugins/elements/gstfdsrc.h
+++ b/plugins/elements/gstfdsrc.h
@@ -40,13 +40,13 @@
 #define GST_TYPE_FDSRC \
   (gst_fdsrc_get_type())
 #define GST_FDSRC(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_FDSRC,GstFdSrc))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_FDSRC,GstFdSrc))
 #define GST_FDSRC_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_FDSRC,GstFdSrcClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_FDSRC,GstFdSrcClass))
 #define GST_IS_FDSRC(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_FDSRC))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_FDSRC))
 #define GST_IS_FDSRC_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_FDSRC))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_FDSRC))
 
 
 typedef struct _GstFdSrc GstFdSrc;
@@ -70,7 +70,7 @@
   GstElementClass parent_class;
 };
 
-GtkType gst_fdsrc_get_type(void);
+GType gst_fdsrc_get_type(void);
 
 #ifdef __cplusplus
 }
diff --git a/plugins/elements/gsthttpsrc.c b/plugins/elements/gsthttpsrc.c
index 68c51b7..82be7b3 100644
--- a/plugins/elements/gsthttpsrc.c
+++ b/plugins/elements/gsthttpsrc.c
@@ -54,8 +54,8 @@
 static void 			gst_httpsrc_class_init	(GstHttpSrcClass *klass);
 static void 			gst_httpsrc_init	(GstHttpSrc *httpsrc);
 
-static void 			gst_httpsrc_set_arg	(GtkObject *object, GtkArg *arg, guint id);
-static void 			gst_httpsrc_get_arg	(GtkObject *object, GtkArg *arg, guint id);
+static void 			gst_httpsrc_set_property	(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void 			gst_httpsrc_get_property	(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 static GstElementStateReturn	gst_httpsrc_change_state	(GstElement *element);
 
 static GstBuffer *		gst_httpsrc_get		(GstPad *pad);
@@ -67,23 +67,23 @@
 static GstElementClass *parent_class = NULL;
 //static guint gst_httpsrc_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_httpsrc_get_type (void) 
 {
-  static GtkType httpsrc_type = 0;
+  static GType httpsrc_type = 0;
 
   if (!httpsrc_type) {
-    static const GtkTypeInfo httpsrc_info = {
-      "GstHttpSrc",
+    static const GTypeInfo httpsrc_info = {
+      sizeof(GstHttpSrcClass),      NULL,
+      NULL,
+      (GClassInitFunc)gst_httpsrc_class_init,
+      NULL,
+      NULL,
       sizeof(GstHttpSrc),
-      sizeof(GstHttpSrcClass),
-      (GtkClassInitFunc)gst_httpsrc_class_init,
-      (GtkObjectInitFunc)gst_httpsrc_init,
-      (GtkArgSetFunc)gst_httpsrc_set_arg,
-      (GtkArgGetFunc)gst_httpsrc_get_arg,
-      (GtkClassInitFunc)NULL,
+      0,
+      (GInstanceInitFunc)gst_httpsrc_init,
     };
-    httpsrc_type = gtk_type_unique (GST_TYPE_ELEMENT, &httpsrc_info);
+    httpsrc_type = g_type_register_static (GST_TYPE_ELEMENT, "GstHttpSrc", &httpsrc_info, 0);
   }
   return httpsrc_type;
 }
@@ -91,22 +91,24 @@
 static void
 gst_httpsrc_class_init (GstHttpSrcClass *klass) 
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
   GstElementClass *gstelement_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
   gstelement_class = (GstElementClass*)klass;
 
-  parent_class = gtk_type_class (GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
 
 
-  gtk_object_add_arg_type ("GstHttpSrc::location", GTK_TYPE_STRING,
-                           GTK_ARG_READWRITE, ARG_LOCATION);
-  gtk_object_add_arg_type ("GstHttpSrc::bytesperread", GTK_TYPE_INT,
-                           GTK_ARG_READWRITE, ARG_BYTESPERREAD);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_LOCATION,
+    g_param_spec_string("location","location","location",
+                        NULL, G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_BYTESPERREAD,
+    g_param_spec_int("bytesperread","bytesperread","bytesperread",
+                     G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
 
-  gtkobject_class->set_arg = gst_httpsrc_set_arg;
-  gtkobject_class->get_arg = gst_httpsrc_get_arg;
+  gobject_class->set_property = gst_httpsrc_set_property;
+  gobject_class->get_property = gst_httpsrc_get_property;
 
   gstelement_class->change_state = gst_httpsrc_change_state;
 }
@@ -197,7 +199,7 @@
 }
 
 static void 
-gst_httpsrc_set_arg (GtkObject *object, GtkArg *arg, guint id) 
+gst_httpsrc_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) 
 {
   GstHttpSrc *src;
 
@@ -206,23 +208,23 @@
   
   src = GST_HTTPSRC (object);
 
-  switch(id) {
+  switch (prop_id) {
     case ARG_LOCATION:
       /* the element must not be playing in order to do this */
       g_return_if_fail (GST_STATE (src) < GST_STATE_PLAYING);
 
       if (src->url) g_free (src->url);
       /* clear the url if we get a NULL (is that possible?) */
-      if (GTK_VALUE_STRING (*arg) == NULL) {
+      if (g_value_get_string (value) == NULL) {
         gst_element_set_state (GST_ELEMENT (object),GST_STATE_NULL);
         src->url = NULL;
       /* otherwise set the new url */
       } else {
-        src->url = g_strdup (GTK_VALUE_STRING (*arg));
+        src->url = g_strdup (g_value_get_string (value));
       }
       break;
     case ARG_BYTESPERREAD:
-      src->bytes_per_read = GTK_VALUE_INT (*arg);
+      src->bytes_per_read = g_value_get_int (value);
       break;
     default:
       break;
@@ -230,7 +232,7 @@
 }
 
 static void 
-gst_httpsrc_get_arg (GtkObject *object, GtkArg *arg, guint id) 
+gst_httpsrc_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) 
 {
   GstHttpSrc *httpsrc;
 
@@ -239,15 +241,15 @@
   
   httpsrc = GST_HTTPSRC (object);
                           
-  switch (id) {
+  switch (prop_id) {
     case ARG_LOCATION:
-      GTK_VALUE_STRING (*arg) = httpsrc->url;
+      g_value_set_string (value, httpsrc->url);
       break;
     case ARG_BYTESPERREAD:
-      GTK_VALUE_INT (*arg) = httpsrc->bytes_per_read;
+      g_value_set_int (value, httpsrc->bytes_per_read);
       break;
     default:
-      arg->type = GTK_TYPE_INVALID;
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
diff --git a/plugins/elements/gsthttpsrc.h b/plugins/elements/gsthttpsrc.h
index 8a3935e..c5056ec 100644
--- a/plugins/elements/gsthttpsrc.h
+++ b/plugins/elements/gsthttpsrc.h
@@ -42,13 +42,13 @@
 #define GST_TYPE_HTTPSRC \
   (gst_httpsrc_get_type())
 #define GST_HTTPSRC(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_HTTPSRC,GstHttpSrc))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_HTTPSRC,GstHttpSrc))
 #define GST_HTTPSRC_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_HTTPSRC,GstHttpSrcClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_HTTPSRC,GstHttpSrcClass))
 #define GST_IS_HTTPSRC(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_HTTPSRC))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_HTTPSRC))
 #define GST_IS_HTTPSRC_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_HTTPSRC))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_HTTPSRC))
 
 typedef enum {
   GST_HTTPSRC_OPEN		= GST_ELEMENT_FLAG_LAST,
@@ -76,7 +76,7 @@
   GstElementClass parent_class;
 };
 
-GtkType gst_httpsrc_get_type(void);
+GType gst_httpsrc_get_type(void);
 
 #ifdef __cplusplus
 }
diff --git a/plugins/elements/gstidentity.c b/plugins/elements/gstidentity.c
index 2787fc0..d125575 100644
--- a/plugins/elements/gstidentity.c
+++ b/plugins/elements/gstidentity.c
@@ -51,31 +51,31 @@
 static void gst_identity_class_init	(GstIdentityClass *klass);
 static void gst_identity_init		(GstIdentity *identity);
 
-static void gst_identity_set_arg	(GtkObject *object, GtkArg *arg, guint id);
-static void gst_identity_get_arg	(GtkObject *object, GtkArg *arg, guint id);
+static void gst_identity_set_property	(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void gst_identity_get_property	(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
 static void gst_identity_chain		(GstPad *pad, GstBuffer *buf);
 
 static GstElementClass *parent_class = NULL;
 //static guint gst_identity_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_identity_get_type (void) 
 {
-  static GtkType identity_type = 0;
+  static GType identity_type = 0;
 
   if (!identity_type) {
-    static const GtkTypeInfo identity_info = {
-      "GstIdentity",
+    static const GTypeInfo identity_info = {
+      sizeof(GstIdentityClass),      NULL,
+      NULL,
+      (GClassInitFunc)gst_identity_class_init,
+      NULL,
+      NULL,
       sizeof(GstIdentity),
-      sizeof(GstIdentityClass),
-      (GtkClassInitFunc)gst_identity_class_init,
-      (GtkObjectInitFunc)gst_identity_init,
-      (GtkArgSetFunc)gst_identity_set_arg,
-      (GtkArgGetFunc)gst_identity_get_arg,
-      (GtkClassInitFunc)NULL,
+      0,
+      (GInstanceInitFunc)gst_identity_init,
     };
-    identity_type = gtk_type_unique (GST_TYPE_ELEMENT, &identity_info);
+    identity_type = g_type_register_static (GST_TYPE_ELEMENT, "GstIdentity", &identity_info, 0);
   }
   return identity_type;
 }
@@ -83,21 +83,24 @@
 static void 
 gst_identity_class_init (GstIdentityClass *klass) 
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
 
-  parent_class = gtk_type_class (GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
 
-  gtk_object_add_arg_type ("GstIdentity::loop_based", GTK_TYPE_BOOL,
-                           GTK_ARG_READWRITE, ARG_LOOP_BASED);
-  gtk_object_add_arg_type ("GstIdentity::sleep_time", GTK_TYPE_UINT,
-                           GTK_ARG_READWRITE, ARG_SLEEP_TIME);
-  gtk_object_add_arg_type ("GstIdentity::silent", GTK_TYPE_BOOL,
-                           GTK_ARG_READWRITE, ARG_SILENT);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_LOOP_BASED,
+    g_param_spec_boolean("loop_based","loop_based","loop_based",
+                         TRUE,G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_SLEEP_TIME,
+    g_param_spec_uint("sleep_time","sleep_time","sleep_time",
+                     0,G_MAXUINT,0,G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_SILENT,
+    g_param_spec_boolean("silent","silent","silent",
+                         TRUE,G_PARAM_READWRITE)); // CHECKME
 
-  gtkobject_class->set_arg = gst_identity_set_arg;  
-  gtkobject_class->get_arg = gst_identity_get_arg;
+  gobject_class->set_property = gst_identity_set_property;  
+  gobject_class->get_property = gst_identity_get_property;
 }
 
 static GstBufferPool*
@@ -193,7 +196,7 @@
 }
 
 static void 
-gst_identity_set_arg (GtkObject *object, GtkArg *arg, guint id) 
+gst_identity_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) 
 {
   GstIdentity *identity;
 
@@ -202,9 +205,9 @@
   
   identity = GST_IDENTITY (object);
 
-  switch(id) {
+  switch (prop_id) {
     case ARG_LOOP_BASED:
-      identity->loop_based = GTK_VALUE_BOOL (*arg);
+      identity->loop_based = g_value_get_boolean (value);
       if (identity->loop_based) {
         gst_element_set_loop_function (GST_ELEMENT (identity), gst_identity_loop);
         gst_pad_set_chain_function (identity->sinkpad, NULL);
@@ -215,17 +218,17 @@
       }
       break;
     case ARG_SLEEP_TIME:
-      identity->sleep_time = GTK_VALUE_UINT (*arg);
+      identity->sleep_time = g_value_get_uint (value);
       break;
     case ARG_SILENT:
-      identity->silent = GTK_VALUE_BOOL (*arg);
+      identity->silent = g_value_get_boolean (value);
       break;
     default:
       break;
   }
 }
 
-static void gst_identity_get_arg(GtkObject *object,GtkArg *arg,guint id) {
+static void gst_identity_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) {
   GstIdentity *identity;
 
   /* it's not null if we got it, but it might not be ours */
@@ -233,18 +236,18 @@
   
   identity = GST_IDENTITY (object);
 
-  switch (id) {
+  switch (prop_id) {
     case ARG_LOOP_BASED:
-      GTK_VALUE_BOOL (*arg) = identity->loop_based;
+      g_value_set_boolean (value, identity->loop_based);
       break;
     case ARG_SLEEP_TIME:
-      GTK_VALUE_UINT (*arg) = identity->sleep_time;
+      g_value_set_uint (value, identity->sleep_time);
       break;
     case ARG_SILENT:
-      GTK_VALUE_BOOL (*arg) = identity->silent;
+      g_value_set_boolean (value, identity->silent);
       break;
     default:
-      arg->type = GTK_TYPE_INVALID;
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
diff --git a/plugins/elements/gstidentity.h b/plugins/elements/gstidentity.h
index 129c492..d6dd0bd 100644
--- a/plugins/elements/gstidentity.h
+++ b/plugins/elements/gstidentity.h
@@ -40,13 +40,13 @@
 #define GST_TYPE_IDENTITY \
   (gst_identity_get_type())
 #define GST_IDENTITY(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_IDENTITY,GstIdentity))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_IDENTITY,GstIdentity))
 #define GST_IDENTITY_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_IDENTITY,GstIdentityClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_IDENTITY,GstIdentityClass))
 #define GST_IS_IDENTITY(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_IDENTITY))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_IDENTITY))
 #define GST_IS_IDENTITY_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_IDENTITY))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_IDENTITY))
 
 typedef struct _GstIdentity GstIdentity;
 typedef struct _GstIdentityClass GstIdentityClass;
@@ -67,7 +67,7 @@
   GstElementClass parent_class;
 };
 
-GtkType gst_identity_get_type(void);
+GType gst_identity_get_type(void);
 
 
 #ifdef __cplusplus
diff --git a/plugins/elements/gstmultidisksrc.c b/plugins/elements/gstmultidisksrc.c
index 726aed9..7b0f683 100644
--- a/plugins/elements/gstmultidisksrc.c
+++ b/plugins/elements/gstmultidisksrc.c
@@ -54,8 +54,8 @@
 static void		gst_multidisksrc_class_init	(GstMultiDiskSrcClass *klass);
 static void		gst_multidisksrc_init		(GstMultiDiskSrc *disksrc);
 
-static void		gst_multidisksrc_set_arg	(GtkObject *object, GtkArg *arg, guint id);
-static void		gst_multidisksrc_get_arg	(GtkObject *object, GtkArg *arg, guint id);
+static void		gst_multidisksrc_set_property	(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void		gst_multidisksrc_get_property	(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
 static GstBuffer *	gst_multidisksrc_get		(GstPad *pad);
 //static GstBuffer *	gst_multidisksrc_get_region	(GstPad *pad,GstRegionType type,guint64 offset,guint64 len);
@@ -68,23 +68,23 @@
 static GstElementClass *parent_class = NULL;
 static guint gst_multidisksrc_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_multidisksrc_get_type(void)
 {
-  static GtkType multidisksrc_type = 0;
+  static GType multidisksrc_type = 0;
 
   if (!multidisksrc_type) {
-    static const GtkTypeInfo multidisksrc_info = {
-      "GstMultiDiskSrc",
+    static const GTypeInfo multidisksrc_info = {
+      sizeof(GstMultiDiskSrcClass),      NULL,
+      NULL,
+      (GClassInitFunc)gst_multidisksrc_class_init,
+      NULL,
+      NULL,
       sizeof(GstMultiDiskSrc),
-      sizeof(GstMultiDiskSrcClass),
-      (GtkClassInitFunc)gst_multidisksrc_class_init,
-      (GtkObjectInitFunc)gst_multidisksrc_init,
-      (GtkArgSetFunc)gst_multidisksrc_set_arg,
-      (GtkArgGetFunc)gst_multidisksrc_get_arg,
-      (GtkClassInitFunc)NULL,
+      0,
+      (GInstanceInitFunc)gst_multidisksrc_init,
     };
-    multidisksrc_type = gtk_type_unique (GST_TYPE_ELEMENT, &multidisksrc_info);
+    multidisksrc_type = g_type_register_static (GST_TYPE_ELEMENT, "GstMultiDiskSrc", &multidisksrc_info, 0);
   }
   return multidisksrc_type;
 }
@@ -92,26 +92,26 @@
 static void
 gst_multidisksrc_class_init (GstMultiDiskSrcClass *klass)
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
   GstElementClass *gstelement_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
   gstelement_class = (GstElementClass*)klass;
 
-  parent_class = gtk_type_class (GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
 
   gst_multidisksrc_signals[NEW_FILE] =
-    gtk_signal_new ("new_file", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstMultiDiskSrcClass, new_file),
-                    gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
-                    GTK_TYPE_POINTER);
-  gtk_object_class_add_signals (gtkobject_class, gst_multidisksrc_signals, LAST_SIGNAL);
+    g_signal_newc ("new_file", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GstMultiDiskSrcClass, new_file), NULL, NULL,
+                    g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
+                    G_TYPE_POINTER);
 
-  gtk_object_add_arg_type ("GstMultiDiskSrc::locations", GTK_TYPE_POINTER,
-                           GTK_ARG_READWRITE, ARG_LOCATIONS);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_LOCATIONS,
+    g_param_spec_string("locations","locations","locations",
+                        NULL, G_PARAM_READWRITE)); // CHECKME
 
-  gtkobject_class->set_arg = gst_multidisksrc_set_arg;
-  gtkobject_class->get_arg = gst_multidisksrc_get_arg;
+  gobject_class->set_property = gst_multidisksrc_set_property;
+  gobject_class->get_property = gst_multidisksrc_get_property;
 
   gstelement_class->change_state = gst_multidisksrc_change_state;
 }
@@ -135,7 +135,7 @@
 }
 
 static void
-gst_multidisksrc_set_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_multidisksrc_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
   GstMultiDiskSrc *src;
 
@@ -144,18 +144,18 @@
 
   src = GST_MULTIDISKSRC (object);
 
-  switch(id) {
+  switch (prop_id) {
     case ARG_LOCATIONS:
       /* the element must be stopped in order to do this */
       g_return_if_fail (GST_STATE (src) < GST_STATE_PLAYING);
 
       /* clear the filename if we get a NULL */
-      if (GTK_VALUE_POINTER (*arg) == NULL) {
+      if (g_value_get_pointer (value) == NULL) {
         gst_element_set_state (GST_ELEMENT (object), GST_STATE_NULL);
         src->listptr = NULL;
       /* otherwise set the new filenames */
       } else {
-        src->listptr = GTK_VALUE_POINTER(*arg);
+        src->listptr = g_value_get_pointer (value);
       }
       break;
     default:
@@ -164,7 +164,7 @@
 }
 
 static void
-gst_multidisksrc_get_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_multidisksrc_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
   GstMultiDiskSrc *src;
 
@@ -173,12 +173,12 @@
 
   src = GST_MULTIDISKSRC (object);
 
-  switch (id) {
+  switch (prop_id) {
     case ARG_LOCATIONS:
-      GTK_VALUE_POINTER (*arg) = src->listptr;
+      g_value_set_pointer (value, src->listptr);
       break;
     default:
-      arg->type = GTK_TYPE_INVALID;
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
@@ -215,7 +215,7 @@
       return NULL;
 
   // emitted after the open, as the user may free the list and string from here
-  gtk_signal_emit(GTK_OBJECT(src), gst_multidisksrc_signals[NEW_FILE], list);
+  g_signal_emit(G_OBJECT(src), gst_multidisksrc_signals[NEW_FILE], 0, list);
 
   /* create the buffer */
   // FIXME: should eventually use a bufferpool for this
diff --git a/plugins/elements/gstmultidisksrc.h b/plugins/elements/gstmultidisksrc.h
index ed4a94c..ba235e8 100644
--- a/plugins/elements/gstmultidisksrc.h
+++ b/plugins/elements/gstmultidisksrc.h
@@ -35,13 +35,13 @@
 #define GST_TYPE_MULTIDISKSRC \
   (gst_multidisksrc_get_type())
 #define GST_MULTIDISKSRC(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_MULTIDISKSRC,GstMultiDiskSrc))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_MULTIDISKSRC,GstMultiDiskSrc))
 #define GST_MULTIDISKSRC_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_MULTIDISKSRC,GstMultiDiskSrcClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_MULTIDISKSRC,GstMultiDiskSrcClass))
 #define GST_IS_MULTIDISKSRC(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_MULTIDISKSRC))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_MULTIDISKSRC))
 #define GST_IS_MULTIDISKSRC_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_MULTIDISKSRC))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_MULTIDISKSRC))
 
 typedef enum {
   GST_MULTIDISKSRC_OPEN		= GST_ELEMENT_FLAG_LAST,
@@ -75,7 +75,7 @@
   void (*new_file)  (GstMultiDiskSrc *multidisksrc, gchar *newfilename);
 };
 
-GtkType gst_multidisksrc_get_type(void);
+GType gst_multidisksrc_get_type(void);
 
 #ifdef __cplusplus
 }
diff --git a/plugins/elements/gstmultifilesrc.c b/plugins/elements/gstmultifilesrc.c
index 726aed9..7b0f683 100644
--- a/plugins/elements/gstmultifilesrc.c
+++ b/plugins/elements/gstmultifilesrc.c
@@ -54,8 +54,8 @@
 static void		gst_multidisksrc_class_init	(GstMultiDiskSrcClass *klass);
 static void		gst_multidisksrc_init		(GstMultiDiskSrc *disksrc);
 
-static void		gst_multidisksrc_set_arg	(GtkObject *object, GtkArg *arg, guint id);
-static void		gst_multidisksrc_get_arg	(GtkObject *object, GtkArg *arg, guint id);
+static void		gst_multidisksrc_set_property	(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void		gst_multidisksrc_get_property	(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
 static GstBuffer *	gst_multidisksrc_get		(GstPad *pad);
 //static GstBuffer *	gst_multidisksrc_get_region	(GstPad *pad,GstRegionType type,guint64 offset,guint64 len);
@@ -68,23 +68,23 @@
 static GstElementClass *parent_class = NULL;
 static guint gst_multidisksrc_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_multidisksrc_get_type(void)
 {
-  static GtkType multidisksrc_type = 0;
+  static GType multidisksrc_type = 0;
 
   if (!multidisksrc_type) {
-    static const GtkTypeInfo multidisksrc_info = {
-      "GstMultiDiskSrc",
+    static const GTypeInfo multidisksrc_info = {
+      sizeof(GstMultiDiskSrcClass),      NULL,
+      NULL,
+      (GClassInitFunc)gst_multidisksrc_class_init,
+      NULL,
+      NULL,
       sizeof(GstMultiDiskSrc),
-      sizeof(GstMultiDiskSrcClass),
-      (GtkClassInitFunc)gst_multidisksrc_class_init,
-      (GtkObjectInitFunc)gst_multidisksrc_init,
-      (GtkArgSetFunc)gst_multidisksrc_set_arg,
-      (GtkArgGetFunc)gst_multidisksrc_get_arg,
-      (GtkClassInitFunc)NULL,
+      0,
+      (GInstanceInitFunc)gst_multidisksrc_init,
     };
-    multidisksrc_type = gtk_type_unique (GST_TYPE_ELEMENT, &multidisksrc_info);
+    multidisksrc_type = g_type_register_static (GST_TYPE_ELEMENT, "GstMultiDiskSrc", &multidisksrc_info, 0);
   }
   return multidisksrc_type;
 }
@@ -92,26 +92,26 @@
 static void
 gst_multidisksrc_class_init (GstMultiDiskSrcClass *klass)
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
   GstElementClass *gstelement_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
   gstelement_class = (GstElementClass*)klass;
 
-  parent_class = gtk_type_class (GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
 
   gst_multidisksrc_signals[NEW_FILE] =
-    gtk_signal_new ("new_file", GTK_RUN_LAST, gtkobject_class->type,
-                    GTK_SIGNAL_OFFSET (GstMultiDiskSrcClass, new_file),
-                    gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
-                    GTK_TYPE_POINTER);
-  gtk_object_class_add_signals (gtkobject_class, gst_multidisksrc_signals, LAST_SIGNAL);
+    g_signal_newc ("new_file", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GstMultiDiskSrcClass, new_file), NULL, NULL,
+                    g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
+                    G_TYPE_POINTER);
 
-  gtk_object_add_arg_type ("GstMultiDiskSrc::locations", GTK_TYPE_POINTER,
-                           GTK_ARG_READWRITE, ARG_LOCATIONS);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_LOCATIONS,
+    g_param_spec_string("locations","locations","locations",
+                        NULL, G_PARAM_READWRITE)); // CHECKME
 
-  gtkobject_class->set_arg = gst_multidisksrc_set_arg;
-  gtkobject_class->get_arg = gst_multidisksrc_get_arg;
+  gobject_class->set_property = gst_multidisksrc_set_property;
+  gobject_class->get_property = gst_multidisksrc_get_property;
 
   gstelement_class->change_state = gst_multidisksrc_change_state;
 }
@@ -135,7 +135,7 @@
 }
 
 static void
-gst_multidisksrc_set_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_multidisksrc_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
   GstMultiDiskSrc *src;
 
@@ -144,18 +144,18 @@
 
   src = GST_MULTIDISKSRC (object);
 
-  switch(id) {
+  switch (prop_id) {
     case ARG_LOCATIONS:
       /* the element must be stopped in order to do this */
       g_return_if_fail (GST_STATE (src) < GST_STATE_PLAYING);
 
       /* clear the filename if we get a NULL */
-      if (GTK_VALUE_POINTER (*arg) == NULL) {
+      if (g_value_get_pointer (value) == NULL) {
         gst_element_set_state (GST_ELEMENT (object), GST_STATE_NULL);
         src->listptr = NULL;
       /* otherwise set the new filenames */
       } else {
-        src->listptr = GTK_VALUE_POINTER(*arg);
+        src->listptr = g_value_get_pointer (value);
       }
       break;
     default:
@@ -164,7 +164,7 @@
 }
 
 static void
-gst_multidisksrc_get_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_multidisksrc_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
   GstMultiDiskSrc *src;
 
@@ -173,12 +173,12 @@
 
   src = GST_MULTIDISKSRC (object);
 
-  switch (id) {
+  switch (prop_id) {
     case ARG_LOCATIONS:
-      GTK_VALUE_POINTER (*arg) = src->listptr;
+      g_value_set_pointer (value, src->listptr);
       break;
     default:
-      arg->type = GTK_TYPE_INVALID;
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
@@ -215,7 +215,7 @@
       return NULL;
 
   // emitted after the open, as the user may free the list and string from here
-  gtk_signal_emit(GTK_OBJECT(src), gst_multidisksrc_signals[NEW_FILE], list);
+  g_signal_emit(G_OBJECT(src), gst_multidisksrc_signals[NEW_FILE], 0, list);
 
   /* create the buffer */
   // FIXME: should eventually use a bufferpool for this
diff --git a/plugins/elements/gstmultifilesrc.h b/plugins/elements/gstmultifilesrc.h
index ed4a94c..ba235e8 100644
--- a/plugins/elements/gstmultifilesrc.h
+++ b/plugins/elements/gstmultifilesrc.h
@@ -35,13 +35,13 @@
 #define GST_TYPE_MULTIDISKSRC \
   (gst_multidisksrc_get_type())
 #define GST_MULTIDISKSRC(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_MULTIDISKSRC,GstMultiDiskSrc))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_MULTIDISKSRC,GstMultiDiskSrc))
 #define GST_MULTIDISKSRC_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_MULTIDISKSRC,GstMultiDiskSrcClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_MULTIDISKSRC,GstMultiDiskSrcClass))
 #define GST_IS_MULTIDISKSRC(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_MULTIDISKSRC))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_MULTIDISKSRC))
 #define GST_IS_MULTIDISKSRC_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_MULTIDISKSRC))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_MULTIDISKSRC))
 
 typedef enum {
   GST_MULTIDISKSRC_OPEN		= GST_ELEMENT_FLAG_LAST,
@@ -75,7 +75,7 @@
   void (*new_file)  (GstMultiDiskSrc *multidisksrc, gchar *newfilename);
 };
 
-GtkType gst_multidisksrc_get_type(void);
+GType gst_multidisksrc_get_type(void);
 
 #ifdef __cplusplus
 }
diff --git a/plugins/elements/gstpipefilter.c b/plugins/elements/gstpipefilter.c
index 8b20e8b..50d42a1 100644
--- a/plugins/elements/gstpipefilter.c
+++ b/plugins/elements/gstpipefilter.c
@@ -59,8 +59,8 @@
 static void 			gst_pipefilter_class_init	(GstPipefilterClass *klass);
 static void 			gst_pipefilter_init		(GstPipefilter *pipefilter);
 
-static void 			gst_pipefilter_set_arg		(GtkObject *object, GtkArg *arg, guint id);
-static void 			gst_pipefilter_get_arg		(GtkObject *object, GtkArg *arg, guint id);
+static void 			gst_pipefilter_set_property	(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void 			gst_pipefilter_get_property	(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
 static GstBuffer*		gst_pipefilter_get		(GstPad *pad);
 static void 			gst_pipefilter_chain		(GstPad *pad, GstBuffer *buf);
@@ -71,23 +71,23 @@
 static GstElementClass *parent_class = NULL;
 //static guint gst_pipefilter_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_pipefilter_get_type (void)
 {
-  static GtkType pipefilter_type = 0;
+  static GType pipefilter_type = 0;
 
   if (!pipefilter_type) {
-    static const GtkTypeInfo pipefilter_info = {
-      "GstPipefilter",
+    static const GTypeInfo pipefilter_info = {
+      sizeof(GstPipefilterClass),      NULL,
+      NULL,
+      (GClassInitFunc)gst_pipefilter_class_init,
+      NULL,
+      NULL,
       sizeof(GstPipefilter),
-      sizeof(GstPipefilterClass),
-      (GtkClassInitFunc)gst_pipefilter_class_init,
-      (GtkObjectInitFunc)gst_pipefilter_init,
-      (GtkArgSetFunc)gst_pipefilter_set_arg,
-      (GtkArgGetFunc)gst_pipefilter_get_arg,
-      (GtkClassInitFunc)NULL,
+      0,
+      (GInstanceInitFunc)gst_pipefilter_init,
     };
-    pipefilter_type = gtk_type_unique(GST_TYPE_ELEMENT,&pipefilter_info);
+    pipefilter_type = g_type_register_static(GST_TYPE_ELEMENT, "GstPipefilter", &pipefilter_info, 0);
   }
   return pipefilter_type;
 }
@@ -95,21 +95,22 @@
 static void 
 gst_pipefilter_class_init (GstPipefilterClass *klass)
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
   GstElementClass *gstelement_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
   gstelement_class = (GstElementClass*)klass;
 
-  parent_class = gtk_type_class(GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref(GST_TYPE_ELEMENT);
 
   gstelement_class->change_state = gst_pipefilter_change_state;
 
-  gtk_object_add_arg_type("GstPipefilter::command", GTK_TYPE_STRING,
-                          GTK_ARG_READWRITE, ARG_COMMAND);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_COMMAND,
+    g_param_spec_string("command","command","command",
+                        NULL, G_PARAM_READWRITE)); // CHECKME
 
-  gtkobject_class->set_arg = gst_pipefilter_set_arg;  
-  gtkobject_class->get_arg = gst_pipefilter_get_arg;
+  gobject_class->set_property = gst_pipefilter_set_property;  
+  gobject_class->get_property = gst_pipefilter_get_property;
 }
 
 static void
@@ -219,7 +220,7 @@
 }
 
 static void
-gst_pipefilter_set_arg (GtkObject *object,GtkArg *arg,guint id)
+gst_pipefilter_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
   GstPipefilter *pipefilter;
 
@@ -227,10 +228,10 @@
   g_return_if_fail(GST_IS_PIPEFILTER(object));
   pipefilter = GST_PIPEFILTER(object);
 
-  switch(id) {
+  switch (prop_id) {
     case ARG_COMMAND:
-      pipefilter->orig_command = g_strdup(GTK_VALUE_STRING(*arg));
-      pipefilter->command = g_strsplit(GTK_VALUE_STRING(*arg), " ", 0);
+      pipefilter->orig_command = g_strdup(g_value_get_string (value));
+      pipefilter->command = g_strsplit(g_value_get_string (value), " ", 0);
       break;
     default:
       break;
@@ -238,7 +239,7 @@
 }
 
 static void
-gst_pipefilter_get_arg (GtkObject *object,GtkArg *arg,guint id)
+gst_pipefilter_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
   GstPipefilter *pipefilter;
 
@@ -246,12 +247,12 @@
   g_return_if_fail(GST_IS_PIPEFILTER(object));
   pipefilter = GST_PIPEFILTER(object);
 
-  switch (id) {
+  switch (prop_id) {
     case ARG_COMMAND:
-      GTK_VALUE_STRING(*arg) = pipefilter->orig_command;
+      g_value_set_string (value, pipefilter->orig_command);
       break;
     default:
-      arg->type = GTK_TYPE_INVALID;
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
diff --git a/plugins/elements/gstpipefilter.h b/plugins/elements/gstpipefilter.h
index 6872dec..221a914 100644
--- a/plugins/elements/gstpipefilter.h
+++ b/plugins/elements/gstpipefilter.h
@@ -39,13 +39,13 @@
 #define GST_TYPE_PIPEFILTER \
   (gst_pipefilter_get_type())
 #define GST_PIPEFILTER(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_PIPEFILTER,GstPipefilter))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_PIPEFILTER,GstPipefilter))
 #define GST_PIPEFILTER_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_PIPEFILTER,GstPipefilterClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_PIPEFILTER,GstPipefilterClass))
 #define GST_IS_PIPEFILTER(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_PIPEFILTER))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_PIPEFILTER))
 #define GST_IS_PIPEFILTER_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_PIPEFILTER))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_PIPEFILTER))
 
 typedef enum {
   GST_PIPEFILTER_OPEN		= GST_ELEMENT_FLAG_LAST,
@@ -80,7 +80,7 @@
   GstElementClass parent_class;
 };
 
-GtkType gst_pipefilter_get_type(void);
+GType gst_pipefilter_get_type(void);
 
 
 #ifdef __cplusplus
diff --git a/plugins/elements/gstqueue.c b/plugins/elements/gstqueue.c
index 944b9de..22e6ce1 100644
--- a/plugins/elements/gstqueue.c
+++ b/plugins/elements/gstqueue.c
@@ -70,8 +70,8 @@
 static void			gst_queue_class_init	(GstQueueClass *klass);
 static void			gst_queue_init		(GstQueue *queue);
 
-static void			gst_queue_set_arg	(GtkObject *object, GtkArg *arg, guint id);
-static void			gst_queue_get_arg	(GtkObject *object, GtkArg *arg, guint id);
+static void			gst_queue_set_property	(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void			gst_queue_get_property	(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
 static gboolean			gst_queue_handle_eos	(GstPad *pad);
 static GstPadNegotiateReturn 	gst_queue_handle_negotiate_src (GstPad *pad, GstCaps **caps, gpointer *data);
@@ -85,17 +85,17 @@
 static GstElementStateReturn	gst_queue_change_state	(GstElement *element);
 
   
-static GtkType
+static GType
 queue_leaky_get_type(void) {
-  static GtkType queue_leaky_type = 0;
-  static GtkEnumValue queue_leaky[] = {
+  static GType queue_leaky_type = 0;
+  static GEnumValue queue_leaky[] = {
     { GST_QUEUE_NO_LEAK, "0", "Not Leaky" },
     { GST_QUEUE_LEAK_UPSTREAM, "1", "Leaky on Upstream" },
     { GST_QUEUE_LEAK_DOWNSTREAM, "2", "Leaky on Downstream" },
     { 0, NULL, NULL },
   };
   if (!queue_leaky_type) {
-    queue_leaky_type = gtk_type_register_enum("GstQueueLeaky", queue_leaky);
+    queue_leaky_type = g_enum_register_static("GstQueueLeaky", queue_leaky);
   }
   return queue_leaky_type;
 }
@@ -105,22 +105,23 @@
 static GstElementClass *parent_class = NULL;
 //static guint gst_queue_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_queue_get_type(void) {
-  static GtkType queue_type = 0;
+  static GType queue_type = 0;
 
   if (!queue_type) {
-    static const GtkTypeInfo queue_info = {
-      "GstQueue",
-      sizeof(GstQueue),
+    static const GTypeInfo queue_info = {
       sizeof(GstQueueClass),
-      (GtkClassInitFunc)gst_queue_class_init,
-      (GtkObjectInitFunc)gst_queue_init,
-      (GtkArgSetFunc)gst_queue_set_arg,
-      (GtkArgGetFunc)gst_queue_get_arg,
-      (GtkClassInitFunc)NULL,
+      NULL,
+      NULL,
+      (GClassInitFunc)gst_queue_class_init,
+      NULL,
+      NULL,
+      sizeof(GstQueue),
+      4,
+      (GInstanceInitFunc)gst_queue_init,
     };
-    queue_type = gtk_type_unique (GST_TYPE_ELEMENT, &queue_info);
+    queue_type = g_type_register_static (GST_TYPE_ELEMENT, "GstQueue", &queue_info, 0);
   }
   return queue_type;
 }
@@ -128,25 +129,28 @@
 static void
 gst_queue_class_init (GstQueueClass *klass)
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
   GstElementClass *gstelement_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
   gstelement_class = (GstElementClass*)klass;
 
-  parent_class = gtk_type_class (GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
 
-  gtk_object_add_arg_type ("GstQueue::leaky", GST_TYPE_QUEUE_LEAKY,
-                           GTK_ARG_READWRITE, ARG_LEAKY);
-  gtk_object_add_arg_type ("GstQueue::level", GTK_TYPE_INT,
-                           GTK_ARG_READABLE, ARG_LEVEL);
-  gtk_object_add_arg_type ("GstQueue::max_level", GTK_TYPE_INT,
-                           GTK_ARG_READWRITE, ARG_MAX_LEVEL);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_LEAKY,
+    g_param_spec_enum("leaky","Leaky","Where the queue leaks, if at all.",
+                      GST_TYPE_QUEUE_LEAKY,GST_QUEUE_NO_LEAK,G_PARAM_READWRITE));
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_LEVEL,
+    g_param_spec_int("level","Level","How many buffers are in the queue.",
+                     0,G_MAXINT,0,G_PARAM_READABLE));
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_MAX_LEVEL,
+    g_param_spec_int("max_level","Maximum Level","How many buffers the queue holds.",
+                     0,G_MAXINT,100,G_PARAM_READWRITE));
 
-  gtkobject_class->set_arg = gst_queue_set_arg;
-  gtkobject_class->get_arg = gst_queue_get_arg;
+  gobject_class->set_property = GST_DEBUG_FUNCPTR(gst_queue_set_property);
+  gobject_class->get_property = GST_DEBUG_FUNCPTR(gst_queue_get_property);
 
-  gstelement_class->change_state = gst_queue_change_state;
+  gstelement_class->change_state = GST_DEBUG_FUNCPTR(gst_queue_change_state);
 }
 
 static void
@@ -158,14 +162,14 @@
   queue->sinkpad = gst_pad_new ("sink", GST_PAD_SINK);
   gst_pad_set_chain_function (queue->sinkpad, GST_DEBUG_FUNCPTR(gst_queue_chain));
   gst_element_add_pad (GST_ELEMENT (queue), queue->sinkpad);
-  gst_pad_set_eos_function (queue->sinkpad, gst_queue_handle_eos);
-  gst_pad_set_negotiate_function (queue->sinkpad, gst_queue_handle_negotiate_sink);
-  gst_pad_set_bufferpool_function (queue->sinkpad, gst_queue_get_bufferpool);
+  gst_pad_set_eos_function (queue->sinkpad, GST_DEBUG_FUNCPTR(gst_queue_handle_eos));
+  gst_pad_set_negotiate_function (queue->sinkpad, GST_DEBUG_FUNCPTR(gst_queue_handle_negotiate_sink));
+  gst_pad_set_bufferpool_function (queue->sinkpad, GST_DEBUG_FUNCPTR(gst_queue_get_bufferpool));
 
   queue->srcpad = gst_pad_new ("src", GST_PAD_SRC);
   gst_pad_set_get_function (queue->srcpad, GST_DEBUG_FUNCPTR(gst_queue_get));
   gst_element_add_pad (GST_ELEMENT (queue), queue->srcpad);
-  gst_pad_set_negotiate_function (queue->srcpad, gst_queue_handle_negotiate_src);
+  gst_pad_set_negotiate_function (queue->srcpad, GST_DEBUG_FUNCPTR(gst_queue_handle_negotiate_src));
 
   queue->queue = NULL;
   queue->level_buffers = 0;
@@ -306,16 +310,16 @@
     while (queue->level_buffers >= queue->size_buffers) {
       // if there's a pending state change for this queue or its manager, switch
       // back to iterator so bottom half of state change executes
-      if (GST_STATE_PENDING(queue) != GST_STATE_NONE_PENDING ||
-//          GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_NONE_PENDING)
+      if (GST_STATE_PENDING(queue) != GST_STATE_VOID_PENDING ||
+//          GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_VOID_PENDING)
 GST_STATE_PENDING(GST_SCHED_PARENT(GST_ELEMENT_SCHED(GST_PAD_PARENT(GST_PAD_PEER(queue->sinkpad))))) != 
-GST_STATE_NONE_PENDING)
+GST_STATE_VOID_PENDING)
       {
         GST_DEBUG(GST_CAT_DATAFLOW,"interrupted!!\n");
-        if (GST_STATE_PENDING(queue) != GST_STATE_NONE_PENDING)
-          GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(queue) != GST_STATE_NONE_PENDING)\n");
-        if (GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_NONE_PENDING)
-          GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_NONE_PENDING\n");
+        if (GST_STATE_PENDING(queue) != GST_STATE_VOID_PENDING)
+          GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(queue) != GST_STATE_VOID_PENDING)\n");
+        if (GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_VOID_PENDING)
+          GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_VOID_PENDING\n");
         GST_UNLOCK(queue);
         cothread_switch(cothread_current_main());
       }
@@ -376,16 +380,16 @@
 
     // if there's a pending state change for this queue or its manager, switch
     // back to iterator so bottom half of state change executes
-    if (GST_STATE_PENDING(queue) != GST_STATE_NONE_PENDING ||
-//        GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_NONE_PENDING)
+    if (GST_STATE_PENDING(queue) != GST_STATE_VOID_PENDING ||
+//        GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_VOID_PENDING)
 GST_STATE_PENDING(GST_SCHED_PARENT(GST_ELEMENT_SCHED(GST_PAD_PARENT(GST_PAD_PEER(queue->srcpad))))) != 
-GST_STATE_NONE_PENDING)
+GST_STATE_VOID_PENDING)
     {
       GST_DEBUG(GST_CAT_DATAFLOW,"interrupted!!\n");
-      if (GST_STATE_PENDING(queue) != GST_STATE_NONE_PENDING)
-        GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(queue) != GST_STATE_NONE_PENDING)\n");
-      if (GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_NONE_PENDING)
-        GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_NONE_PENDING\n");
+      if (GST_STATE_PENDING(queue) != GST_STATE_VOID_PENDING)
+        GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(queue) != GST_STATE_VOID_PENDING)\n");
+      if (GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_VOID_PENDING)
+        GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_VOID_PENDING\n");
       GST_UNLOCK(queue);
       cothread_switch(cothread_current_main());
     }
@@ -435,11 +439,11 @@
     gst_queue_flush (queue);
   }
 
-  /* if we haven't failed already, give the parent class a chance to ;-) */
+  // if we haven't failed already, give the parent class a chance to ;-)
   if (GST_ELEMENT_CLASS (parent_class)->change_state)
   {
     gboolean valid_handler = FALSE;
-    guint state_change_id = gtk_signal_lookup("state_change", GTK_OBJECT_TYPE(element));
+    guint state_change_id = g_signal_lookup("state_change", G_OBJECT_TYPE(element));
 
     // determine whether we need to block the parent (element) class'
     // STATE_CHANGE signal so we can UNLOCK before returning.  we block
@@ -450,20 +454,20 @@
     // if element change_state() emits other signals, they need to be blocked
     // as well.
     if (state_change_id &&
-        gtk_signal_handler_pending(GTK_OBJECT(element), state_change_id, FALSE))
+        g_signal_has_handler_pending(G_OBJECT(element), state_change_id, 0, FALSE))
       valid_handler = TRUE;
     if (valid_handler)
-      gtk_signal_handler_block(GTK_OBJECT(element), state_change_id);
+      g_signal_handler_block(G_OBJECT(element), state_change_id);
 
     ret = GST_ELEMENT_CLASS (parent_class)->change_state (element);
 
     if (valid_handler)
-      gtk_signal_handler_unblock(GTK_OBJECT(element), state_change_id);
+      g_signal_handler_unblock(G_OBJECT(element), state_change_id);
 
     // UNLOCK, *then* emit signal (if there's one there)
     GST_UNLOCK(queue);
     if (valid_handler)
-      gtk_signal_emit(GTK_OBJECT (element), state_change_id, GST_STATE(element));
+      g_signal_emit(G_OBJECT (element), state_change_id, 0, GST_STATE(element));
   }
   else
   {
@@ -476,7 +480,7 @@
 
 
 static void
-gst_queue_set_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_queue_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
   GstQueue *queue;
 
@@ -485,20 +489,21 @@
 
   queue = GST_QUEUE (object);
 
-  switch(id) {
+  switch (prop_id) {
     case ARG_LEAKY:
-      queue->leaky = GTK_VALUE_INT (*arg);
+      queue->leaky = g_value_get_int(value);
       break;
     case ARG_MAX_LEVEL:
-      queue->size_buffers = GTK_VALUE_INT (*arg);
+      queue->size_buffers = g_value_get_int(value);
       break;
     default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
 
 static void
-gst_queue_get_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_queue_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
   GstQueue *queue;
 
@@ -507,18 +512,18 @@
 
   queue = GST_QUEUE (object);
 
-  switch (id) {
+  switch (prop_id) {
     case ARG_LEAKY:
-      GTK_VALUE_INT (*arg) = queue->leaky;
+      g_value_set_int(value, queue->leaky);
       break;
     case ARG_LEVEL:
-      GTK_VALUE_INT (*arg) = queue->level_buffers;
+      g_value_set_int(value, queue->level_buffers);
       break;
     case ARG_MAX_LEVEL:
-      GTK_VALUE_INT (*arg) = queue->size_buffers;
+      g_value_set_int(value, queue->size_buffers);
       break;
     default:
-      arg->type = GTK_TYPE_INVALID;
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
diff --git a/plugins/elements/gstqueue.h b/plugins/elements/gstqueue.h
index 085d5ac..02b73f2 100644
--- a/plugins/elements/gstqueue.h
+++ b/plugins/elements/gstqueue.h
@@ -39,13 +39,13 @@
 #define GST_TYPE_QUEUE \
   (gst_queue_get_type())
 #define GST_QUEUE(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_QUEUE,GstQueue))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_QUEUE,GstQueue))
 #define GST_QUEUE_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_QUEUE,GstQueueClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_QUEUE,GstQueueClass))
 #define GST_IS_QUEUE(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_QUEUE))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_QUEUE))
 #define GST_IS_QUEUE_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_QUEUE))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_QUEUE))
 
 enum {
   GST_QUEUE_NO_LEAK		= 0,
@@ -90,7 +90,7 @@
   void (*high_watermark)	(GstQueue *queue, gint level);
 };
 
-GtkType gst_queue_get_type (void);
+GType gst_queue_get_type (void);
 
 #ifdef __cplusplus
 }
diff --git a/plugins/elements/gstsinesrc.c b/plugins/elements/gstsinesrc.c
index 6a00e1e..ea66bd2 100644
--- a/plugins/elements/gstsinesrc.c
+++ b/plugins/elements/gstsinesrc.c
@@ -83,8 +83,8 @@
 static void gst_sinesrc_class_init(GstSineSrcClass *klass);
 static void gst_sinesrc_init(GstSineSrc *src);
 static GstPadNegotiateReturn gst_sinesrc_negotiate (GstPad *pad, GstCaps **caps, gpointer *data); 
-static void gst_sinesrc_set_arg(GtkObject *object,GtkArg *arg,guint id);
-static void gst_sinesrc_get_arg(GtkObject *object,GtkArg *arg,guint id);
+static void gst_sinesrc_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void gst_sinesrc_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 //static gboolean gst_sinesrc_change_state(GstElement *element,
 //                                          GstElementState state);
 //static void gst_sinesrc_close_audio(GstSineSrc *src);
@@ -92,58 +92,64 @@
 static void gst_sinesrc_populate_sinetable(GstSineSrc *src);
 static inline void gst_sinesrc_update_table_inc(GstSineSrc *src);
 static inline void gst_sinesrc_update_vol_scale(GstSineSrc *src);
-void gst_sinesrc_force_caps(GstSineSrc *src);
+static void gst_sinesrc_force_caps(GstSineSrc *src);
 
 static GstBuffer * gst_sinesrc_get(GstPad *pad);
 
 static GstElementClass *parent_class = NULL;
 //static guint gst_sinesrc_signals[LAST_SIGNAL] = { 0 };
 
-GtkType
+GType
 gst_sinesrc_get_type(void) {
-  static GtkType sinesrc_type = 0;
+  static GType sinesrc_type = 0;
 
   if (!sinesrc_type) {
-    static const GtkTypeInfo sinesrc_info = {
-      "GstSineSrc",
+    static const GTypeInfo sinesrc_info = {
+      sizeof(GstSineSrcClass),      NULL,
+      NULL,
+      (GClassInitFunc)gst_sinesrc_class_init,
+      NULL,
+      NULL,
       sizeof(GstSineSrc),
-      sizeof(GstSineSrcClass),
-      (GtkClassInitFunc)gst_sinesrc_class_init,
-      (GtkObjectInitFunc)gst_sinesrc_init,
-      (GtkArgSetFunc)gst_sinesrc_set_arg,
-      (GtkArgGetFunc)gst_sinesrc_get_arg,
-      (GtkClassInitFunc)NULL,
+      0,
+      (GInstanceInitFunc)gst_sinesrc_init,
     };
-    sinesrc_type = gtk_type_unique(GST_TYPE_ELEMENT,&sinesrc_info);
+    sinesrc_type = g_type_register_static(GST_TYPE_ELEMENT, "GstSineSrc", &sinesrc_info, 0);
   }
   return sinesrc_type;
 }
 
 static void
 gst_sinesrc_class_init(GstSineSrcClass *klass) {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
   GstElementClass *gstelement_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
   gstelement_class = (GstElementClass*)klass;
 
-  parent_class = gtk_type_class(GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref(GST_TYPE_ELEMENT);
 
-  gtk_object_add_arg_type("GstSineSrc::volume", GTK_TYPE_DOUBLE,
-                          GTK_ARG_READWRITE, ARG_VOLUME);
-  gtk_object_add_arg_type("GstSineSrc::format", GTK_TYPE_INT,
-                          GTK_ARG_READWRITE, ARG_FORMAT);
-  gtk_object_add_arg_type("GstSineSrc::samplerate", GTK_TYPE_INT,
-                          GTK_ARG_READWRITE, ARG_SAMPLERATE);
-  gtk_object_add_arg_type("GstSineSrc::tablesize", GTK_TYPE_INT,
-                          GTK_ARG_READWRITE, ARG_TABLESIZE);
-  gtk_object_add_arg_type("GstSineSrc::freq", GTK_TYPE_DOUBLE,
-                          GTK_ARG_READWRITE, ARG_FREQ);
-  gtk_object_add_arg_type("GstSineSrc::buffersize", GTK_TYPE_INT,
-                          GTK_ARG_READWRITE, ARG_BUFFER_SIZE);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_VOLUME,
+    g_param_spec_double("volume","volume","volume",
+                        0.0, 1.0, 0.0,G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_FORMAT,
+    g_param_spec_int("format","format","format",
+                     G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_SAMPLERATE,
+    g_param_spec_int("samplerate","samplerate","samplerate",
+                     G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_TABLESIZE,
+    g_param_spec_int("tablesize","tablesize","tablesize",
+                     G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_FREQ,
+    g_param_spec_double("freq","freq","freq",
+                        0.0,G_MAXDOUBLE, 440.0,G_PARAM_READWRITE)); // CHECKME
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_BUFFER_SIZE,
+    g_param_spec_int("buffersize","buffersize","buffersize",
+                     0, G_MAXINT, 1024, G_PARAM_READWRITE)); 
                           
-  gtkobject_class->set_arg = gst_sinesrc_set_arg;
-  gtkobject_class->get_arg = gst_sinesrc_get_arg;
+  gobject_class->set_property = gst_sinesrc_set_property;
+  gobject_class->get_property = gst_sinesrc_get_property;
 
 //  gstelement_class->change_state = gst_sinesrc_change_state;
 }
@@ -246,42 +252,40 @@
 }
 
 static void 
-gst_sinesrc_set_arg(GtkObject *object,GtkArg *arg,guint id) {
+gst_sinesrc_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) {
   GstSineSrc *src;
 
   /* it's not null if we got it, but it might not be ours */
   g_return_if_fail(GST_IS_SINESRC(object));
   src = GST_SINESRC(object);
 
-  switch (id) {
+  switch (prop_id) {
     case ARG_VOLUME:
-      if (GTK_VALUE_DOUBLE(*arg) < 0.0 || GTK_VALUE_DOUBLE(*arg) > 1.0)
-        break;
-      src->volume = GTK_VALUE_DOUBLE(*arg);
+      src->volume = g_value_get_double (value);
       gst_sinesrc_update_vol_scale(src);
       break;
     case ARG_FORMAT:
-      src->format = GTK_VALUE_INT(*arg);
+      src->format = g_value_get_int (value);
       src->newcaps=TRUE;
       break;
     case ARG_SAMPLERATE:
-      src->samplerate = GTK_VALUE_INT(*arg);
+      src->samplerate = g_value_get_int (value);
       src->newcaps=TRUE;
       gst_sinesrc_update_table_inc(src);
       break;
     case ARG_FREQ: {
-      if (GTK_VALUE_DOUBLE(*arg) <= 0.0 || GTK_VALUE_DOUBLE(*arg) > src->samplerate/2)
+      if (g_value_get_double (value) <= 0.0 || g_value_get_double (value) > src->samplerate/2)
         break;
-      src->freq = GTK_VALUE_DOUBLE(*arg);
+      src->freq = g_value_get_double (value);
       gst_sinesrc_update_table_inc(src);
       break;
     case ARG_TABLESIZE:
-      src->table_size = GTK_VALUE_INT(*arg);
+      src->table_size = g_value_get_int (value);
       gst_sinesrc_populate_sinetable(src);
       gst_sinesrc_update_table_inc(src);
       break;
     case ARG_BUFFER_SIZE:
-      src->buffer_size = GTK_VALUE_INT(*arg);
+      src->buffer_size = g_value_get_int (value);
       break;
     }
     default:
@@ -290,34 +294,34 @@
 }
 
 static void 
-gst_sinesrc_get_arg(GtkObject *object,GtkArg *arg,guint id) {
+gst_sinesrc_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) {
   GstSineSrc *src;
 
   /* it's not null if we got it, but it might not be ours */
   g_return_if_fail(GST_IS_SINESRC(object));
   src = GST_SINESRC(object);
 
-  switch (id) {
+  switch (prop_id) {
     case ARG_VOLUME:
-      GTK_VALUE_DOUBLE(*arg) = src->volume;
+      g_value_set_double (value, src->volume);
       break;
     case ARG_FORMAT:
-      GTK_VALUE_INT(*arg) = src->format;
+      g_value_set_int (value, src->format);
       break;
     case ARG_SAMPLERATE:
-      GTK_VALUE_INT(*arg) = src->samplerate;
+      g_value_set_int (value, src->samplerate);
       break;
     case ARG_FREQ:
-      GTK_VALUE_DOUBLE(*arg) = src->freq;
+      g_value_set_double (value, src->freq);
       break;
     case ARG_TABLESIZE:
-      GTK_VALUE_INT(*arg) = src->table_size;
+      g_value_set_int (value, src->table_size);
       break;
     case ARG_BUFFER_SIZE:
-      GTK_VALUE_INT(*arg) = src->buffer_size;
+      g_value_set_int (value, src->buffer_size);
       break;
     default:
-      arg->type = GTK_TYPE_INVALID;
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
@@ -372,7 +376,7 @@
   src->vol_scale = 32767 * src->volume;
 }
 
-void 
+static void 
 gst_sinesrc_force_caps(GstSineSrc *src) {
   GstCaps *caps;
 
diff --git a/plugins/elements/gstsinesrc.h b/plugins/elements/gstsinesrc.h
index ed38eeb..390d12b 100644
--- a/plugins/elements/gstsinesrc.h
+++ b/plugins/elements/gstsinesrc.h
@@ -39,13 +39,13 @@
 #define GST_TYPE_SINESRC \
   (gst_sinesrc_get_type())
 #define GST_SINESRC(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_SINESRC,GstSineSrc))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_SINESRC,GstSineSrc))
 #define GST_SINESRC_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_SINESRC,GstSineSrcClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_SINESRC,GstSineSrcClass))
 #define GST_IS_SINESRC(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_SINESRC))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_SINESRC))
 #define GST_IS_SINESRC_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_SINESRC))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_SINESRC))
 
 typedef struct _GstSineSrc GstSineSrc;
 typedef struct _GstSineSrcClass GstSineSrcClass;
@@ -85,7 +85,7 @@
   GstElementClass parent_class;
 };
 
-GtkType gst_sinesrc_get_type(void);
+GType gst_sinesrc_get_type(void);
 gboolean gst_sinesrc_factory_init (GstElementFactory *factory);
 
 #ifdef __cplusplus
diff --git a/plugins/elements/gsttee.c b/plugins/elements/gsttee.c
index 67ab4b1..0e1b418 100644
--- a/plugins/elements/gsttee.c
+++ b/plugins/elements/gsttee.c
@@ -63,7 +63,8 @@
 
 static GstPad* 	gst_tee_request_new_pad (GstElement *element, GstPadTemplate *temp);
 
-static void 	gst_tee_get_arg 	(GtkObject *object, GtkArg *arg, guint id);
+static void 	gst_tee_set_property 	(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void 	gst_tee_get_property 	(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
 static void  	gst_tee_chain 		(GstPad *pad, GstBuffer *buf);
 
@@ -71,22 +72,22 @@
 //static guint gst_tee_signals[LAST_SIGNAL] = { 0 };
 static GstPadTemplate *gst_tee_src_template;
 
-GtkType
+GType
 gst_tee_get_type(void) {
-  static GtkType tee_type = 0;
+  static GType tee_type = 0;
 
   if (!tee_type) {
-    static const GtkTypeInfo tee_info = {
-      "GstTee",
+    static const GTypeInfo tee_info = {
+      sizeof(GstTeeClass),      NULL,
+      NULL,
+      (GClassInitFunc)gst_tee_class_init,
+      NULL,
+      NULL,
       sizeof(GstTee),
-      sizeof(GstTeeClass),
-      (GtkClassInitFunc)gst_tee_class_init,
-      (GtkObjectInitFunc)gst_tee_init,
-      (GtkArgSetFunc)NULL,
-      (GtkArgGetFunc)NULL,
-      (GtkClassInitFunc)NULL,
+      0,
+      (GInstanceInitFunc)gst_tee_init,
     };
-    tee_type = gtk_type_unique (GST_TYPE_ELEMENT, &tee_info);
+    tee_type = g_type_register_static (GST_TYPE_ELEMENT, "GstTee", &tee_info, 0);
   }
   return tee_type;
 }
@@ -94,18 +95,20 @@
 static void
 gst_tee_class_init (GstTeeClass *klass) 
 {
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
   GstElementClass *gstelement_class;
 
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
   gstelement_class = (GstElementClass*)klass;
 
-  parent_class = gtk_type_class(GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref(GST_TYPE_ELEMENT);
 
-  gtk_object_add_arg_type ("GstTee::num_pads", GTK_TYPE_INT,
-                            GTK_ARG_READABLE, ARG_NUM_PADS);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_NUM_PADS,
+    g_param_spec_int("num_pads","num_pads","num_pads",
+                     G_MININT,G_MAXINT,0,G_PARAM_READABLE)); // CHECKME
 
-  gtkobject_class->get_arg = gst_tee_get_arg;
+  gobject_class->set_property = gst_tee_set_property;
+  gobject_class->get_property = gst_tee_get_property;
 
   gstelement_class->request_new_pad = gst_tee_request_new_pad;
 }
@@ -149,7 +152,7 @@
 }
 
 static void
-gst_tee_get_arg (GtkObject *object, GtkArg *arg, guint id)
+gst_tee_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
   GstTee *tee;
 
@@ -158,9 +161,28 @@
 
   tee = GST_TEE (object);
 
-  switch(id) {
+  switch (prop_id) {
+//    case ARG_NUM_PADS:
+//      g_value_set_int (value, tee->numsrcpads);
+//      break;
+    default:
+      break;
+  }
+}
+
+static void
+gst_tee_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
+{
+  GstTee *tee;
+
+  /* it's not null if we got it, but it might not be ours */
+  g_return_if_fail (GST_IS_TEE (object));
+
+  tee = GST_TEE (object);
+
+  switch (prop_id) {
     case ARG_NUM_PADS:
-      GTK_VALUE_INT (*arg) = tee->numsrcpads;
+      g_value_set_int (value, tee->numsrcpads);
       break;
     default:
       break;
diff --git a/plugins/elements/gsttee.h b/plugins/elements/gsttee.h
index f7f3979..7607629 100644
--- a/plugins/elements/gsttee.h
+++ b/plugins/elements/gsttee.h
@@ -36,13 +36,13 @@
 #define GST_TYPE_TEE \
   (gst_tee_get_type())
 #define GST_TEE(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_TEE,GstTee))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_TEE,GstTee))
 #define GST_TEE_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_TEE,GstTeeClass))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_TEE,GstTeeClass))
 #define GST_IS_TEE(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_TEE))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_TEE))
 #define GST_IS_TEE_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_TEE))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_TEE))
 
 typedef struct _GstTee 		GstTee;
 typedef struct _GstTeeClass 	GstTeeClass;
@@ -60,7 +60,7 @@
   GstElementClass parent_class;
 };
 
-GtkType 	gst_tee_get_type	(void);
+GType 	gst_tee_get_type	(void);
 
 gboolean 	gst_tee_factory_init 	(GstElementFactory *factory);
 
diff --git a/test/ac3parse.c b/test/ac3parse.c
index 48d148d..25431d7 100644
--- a/test/ac3parse.c
+++ b/test/ac3parse.c
@@ -30,7 +30,7 @@
 
   src = gst_elementfactory_create(srcfactory,"src");
   g_return_val_if_fail(src != NULL, -1);
-  gtk_object_set(GTK_OBJECT(src),"location",argv[1],"bytesperread",4096,NULL);
+  g_object_set(G_OBJECT(src),"location",argv[1],"bytesperread",4096,NULL);
   g_print("should be using file '%s'\n",argv[1]);
   parse = gst_elementfactory_create(parsefactory,"parse");
   g_return_val_if_fail(parse != NULL, -1);
diff --git a/test/ac3play.c b/test/ac3play.c
index ebd9547..292440e 100644
--- a/test/ac3play.c
+++ b/test/ac3play.c
@@ -23,7 +23,7 @@
 
   src = gst_elementfactory_make("disksrc","src");
   g_return_val_if_fail(src != NULL, -1);
-  gtk_object_set(GTK_OBJECT(src),"location",argv[1],NULL);
+  g_object_set(G_OBJECT(src),"location",argv[1],NULL);
 //  g_print("should be using file '%s'\n",argv[1]);
   parse = gst_elementfactory_make("ac3parse","parse");
   g_return_val_if_fail(parse != NULL, -1);
@@ -58,7 +58,7 @@
   xmlSaveFile("ac3play.gst", gst_xml_write(GST_ELEMENT(pipeline)));
 
   // set thread start state
-  gtk_object_set(GTK_OBJECT(decodethread),"create_thread",TRUE,NULL);
+  g_object_set(G_OBJECT(decodethread),"create_thread",TRUE,NULL);
 
   g_print("setting to READY state\n");
   gst_element_set_state(GST_ELEMENT(pipeline),GST_STATE_PLAYING);
diff --git a/test/avi2mpg.c b/test/avi2mpg.c
index 1d64a9a..91464b5 100644
--- a/test/avi2mpg.c
+++ b/test/avi2mpg.c
@@ -40,7 +40,7 @@
     g_return_if_fail(audio_thread != NULL);
     gst_bin_add(GST_BIN(audio_thread),GST_ELEMENT(audio_encode));
 
-    gtk_object_set(GTK_OBJECT(mux),"audio","00",NULL);
+    g_object_set(G_OBJECT(mux),"audio","00",NULL);
 
     // set up pad connections
     gst_element_add_ghost_pad(GST_ELEMENT(audio_thread),
@@ -50,7 +50,7 @@
 
     // construct queue and connect everything in the main pipelie
     audio_queue = gst_elementfactory_make("queue","audio_queue");
-    gtk_object_set(GTK_OBJECT(audio_queue),"max_level",BUFFER,NULL);
+    g_object_set(G_OBJECT(audio_queue),"max_level",BUFFER,NULL);
     gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(audio_queue));
     gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(audio_thread));
     gst_pad_connect(pad,
@@ -60,7 +60,7 @@
 
 
     // set up thread state and kick things off
-    gtk_object_set(GTK_OBJECT(audio_thread),"create_thread",TRUE,NULL);
+    g_object_set(G_OBJECT(audio_thread),"create_thread",TRUE,NULL);
     g_print("setting to READY state\n");
     gst_element_set_state(GST_ELEMENT(audio_thread),GST_STATE_READY);
   } else if (strncmp(gst_pad_get_name(pad), "video_", 6) == 0) {
@@ -74,17 +74,17 @@
     g_return_if_fail(smooth != NULL);
     median = gst_elementfactory_make("median","median");
     g_return_if_fail(median != NULL);
-    gtk_object_set(GTK_OBJECT(median),"filtersize",5,NULL);
-    gtk_object_set(GTK_OBJECT(median),"active",TRUE,NULL);
+    g_object_set(G_OBJECT(median),"filtersize",5,NULL);
+    g_object_set(G_OBJECT(median),"active",TRUE,NULL);
 
-    gtk_object_set(GTK_OBJECT(smooth),"filtersize",16,NULL);
-    gtk_object_set(GTK_OBJECT(smooth),"tolerance",16,NULL);
-    gtk_object_set(GTK_OBJECT(smooth),"active",FALSE,NULL);
+    g_object_set(G_OBJECT(smooth),"filtersize",16,NULL);
+    g_object_set(G_OBJECT(smooth),"tolerance",16,NULL);
+    g_object_set(G_OBJECT(smooth),"active",FALSE,NULL);
 
     encode = gst_elementfactory_make("mpeg2enc","encode");
     g_return_if_fail(encode != NULL);
     
-    gtk_object_set(GTK_OBJECT(mux),"video","00",NULL);
+    g_object_set(G_OBJECT(mux),"video","00",NULL);
 
     // create the thread and pack stuff into it
     video_thread = gst_thread_new("video_thread");
@@ -105,7 +105,7 @@
 
     // construct queue and connect everything in the main pipeline
     video_queue = gst_elementfactory_make("queue","video_queue");
-    gtk_object_set(GTK_OBJECT(video_queue),"max_level",BUFFER,NULL);
+    g_object_set(G_OBJECT(video_queue),"max_level",BUFFER,NULL);
     gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(video_queue));
     gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(video_thread));
     gst_pad_connect(pad,
@@ -114,7 +114,7 @@
                     gst_element_get_pad(video_thread,"sink"));
 
     // set up thread state and kick things off
-    gtk_object_set(GTK_OBJECT(video_thread),"create_thread",TRUE,NULL);
+    g_object_set(G_OBJECT(video_thread),"create_thread",TRUE,NULL);
     g_print("setting to READY state\n");
     gst_element_set_state(GST_ELEMENT(video_thread),GST_STATE_READY);
   }
@@ -139,7 +139,7 @@
 
   src = gst_elementfactory_make("disksrc","src");
   g_return_val_if_fail(src != NULL, -1);
-  gtk_object_set(GTK_OBJECT(src),"location",argv[1],NULL);
+  g_object_set(G_OBJECT(src),"location",argv[1],NULL);
   g_print("should be using file '%s'\n",argv[1]);
   parse = gst_elementfactory_make("avidecoder","parse");
   g_return_val_if_fail(parse != NULL, -1);
@@ -153,18 +153,18 @@
   g_return_val_if_fail(fdsinkfactory != NULL, -1);
   fdsink = gst_elementfactory_create(fdsinkfactory,"fdsink");
   g_return_val_if_fail(fdsink != NULL, -1);
-  gtk_object_set(GTK_OBJECT(fdsink),"fd",fd,NULL);
+  g_object_set(G_OBJECT(fdsink),"fd",fd,NULL);
 
   gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(src));
   gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(parse));
   gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(mux));
   gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(fdsink));
 
-  gtk_signal_connect(GTK_OBJECT(parse),"new_pad",
-                      GTK_SIGNAL_FUNC(new_pad_created),pipeline);
+  g_signal_connectc(G_OBJECT(parse),"new_pad",
+                      G_CALLBACK(new_pad_created),pipeline, FALSE);
 
-  gtk_signal_connect(GTK_OBJECT(src),"eos",
-                      GTK_SIGNAL_FUNC(eof),NULL);
+  g_signal_connectc(G_OBJECT(src),"eos",
+                      G_CALLBACK(eof),NULL, FALSE);
 
   gst_pad_connect(gst_element_get_pad(src,"src"),
                   gst_element_get_pad(parse,"sink"));
@@ -178,9 +178,7 @@
 
   g_idle_add(idle_func,pipeline);
 
-  gdk_threads_enter();
-  gtk_main();
-  gdk_threads_leave();
+  //gtk_main();
 
   return 0;
 }
diff --git a/test/aviparse.c b/test/aviparse.c
index 7e3882e..1cb4313 100644
--- a/test/aviparse.c
+++ b/test/aviparse.c
@@ -93,7 +93,7 @@
 
   appwindow = gnome_app_new("AVI player","AVI player");
   gnome_app_set_contents(GNOME_APP(appwindow),
-    gst_util_get_widget_arg(GTK_OBJECT(show),"widget"));
+    gst_util_get_pointer_arg(GTK_OBJECT(show),"widget"));
   gtk_widget_show_all(appwindow);
 
   // create the thread and pack stuff into it
diff --git a/test/dvdcat.c b/test/dvdcat.c
index 6d065a8..e8c5c6c 100644
--- a/test/dvdcat.c
+++ b/test/dvdcat.c
@@ -24,13 +24,13 @@
   src = gst_elementfactory_make("dvdsrc","src");
   g_return_val_if_fail(src != NULL, -1);
 
-  gtk_object_set(GTK_OBJECT(src),"location",argv[1],NULL);
+  g_object_set(G_OBJECT(src),"location",argv[1],NULL);
   if (argc >= 3)
-    gtk_object_set(GTK_OBJECT(src),"offset",atoi(argv[2]),NULL);
+    g_object_set(G_OBJECT(src),"offset",atoi(argv[2]),NULL);
 
   sink = gst_elementfactory_make("fdsink","sink");
   g_return_val_if_fail(sink != NULL, -1);
-  gtk_object_set(GTK_OBJECT(sink),"fd",fd,NULL);
+  g_object_set(G_OBJECT(sink),"fd",fd,NULL);
 
   // construct the outer pipeline
   gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(src));
diff --git a/test/lat.c b/test/lat.c
index c959406..12c5f94 100644
--- a/test/lat.c
+++ b/test/lat.c
@@ -41,7 +41,7 @@
     snprintf(buf, 20, "identity_%03d", i);
     ident = gst_elementfactory_make("identity",buf);
     g_return_val_if_fail(ident != NULL,NULL);
-    gtk_object_set(GTK_OBJECT(ident),"silent",TRUE,NULL);
+    g_object_set(G_OBJECT(ident),"silent",TRUE,NULL);
     gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(ident));
     gst_pad_connect(gst_element_get_pad(last,"src"),
                     gst_element_get_pad(ident,"sink"));
@@ -56,10 +56,10 @@
 
   src = gst_elementfactory_make("fakesrc","src");
   g_return_val_if_fail(src != NULL,NULL);
-  gtk_object_set(GTK_OBJECT(src),"silent",TRUE,NULL);
-  gtk_object_set(GTK_OBJECT(src),"num_buffers",iterations,NULL);
-  gtk_signal_connect(GTK_OBJECT(src),
-      "handoff",GTK_SIGNAL_FUNC(handoff_src),NULL);
+  g_object_set(G_OBJECT(src),"silent",TRUE,NULL);
+  g_object_set(G_OBJECT(src),"num_buffers",iterations,NULL);
+  g_signal_connectc(G_OBJECT(src),
+      "handoff",G_CALLBACK(handoff_src),NULL,FALSE);
 
   return src;
 }
@@ -69,9 +69,9 @@
 
   sink = gst_elementfactory_make("fakesink","fakesink");
   g_return_val_if_fail(sink != NULL,NULL);
-  gtk_object_set(GTK_OBJECT(sink),"silent",TRUE,NULL);
-  gtk_signal_connect(GTK_OBJECT(sink),
-      "handoff",GTK_SIGNAL_FUNC(handoff_sink),NULL);
+  g_object_set(G_OBJECT(sink),"silent",TRUE,NULL);
+  g_signal_connectc(G_OBJECT(sink),
+      "handoff",G_CALLBACK(handoff_sink),NULL,FALSE);
 
   return sink;
 }
diff --git a/test/mp1parse.c b/test/mp1parse.c
index 4db677d..445dab6 100644
--- a/test/mp1parse.c
+++ b/test/mp1parse.c
@@ -81,7 +81,7 @@
 
     appwindow = gnome_app_new("MPEG1 player","MPEG1 player");
     gnome_app_set_contents(GNOME_APP(appwindow),
-      	        gst_util_get_widget_arg(GTK_OBJECT(show),"widget"));
+      	        gst_util_get_pointer_arg(GTK_OBJECT(show),"widget"));
 		gtk_widget_show_all(appwindow);
 
     // create the thread and pack stuff into it
diff --git a/test/mp1tomp1.c b/test/mp1tomp1.c
index 3c7be88..e316e33 100644
--- a/test/mp1tomp1.c
+++ b/test/mp1tomp1.c
@@ -54,7 +54,7 @@
 
     // construct queue and connect everything in the main pipelie
     audio_queue = gst_elementfactory_make("queue","audio_queue");
-    gtk_object_set(GTK_OBJECT(audio_queue),"max_level",30,NULL);
+    g_object_set(G_OBJECT(audio_queue),"max_level",30,NULL);
     gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(audio_queue));
     gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(audio_thread));
     gst_pad_connect(pad,
@@ -63,7 +63,7 @@
                     gst_element_get_pad(audio_thread,"sink"));
 
     // set up thread state and kick things off
-    gtk_object_set(GTK_OBJECT(audio_thread),"create_thread",TRUE,NULL);
+    g_object_set(G_OBJECT(audio_thread),"create_thread",TRUE,NULL);
     g_print("setting to READY state\n");
     gst_element_set_state(GST_ELEMENT(audio_thread),GST_STATE_READY);
     g_print("setting to PLAYING state\n");
@@ -96,7 +96,7 @@
 
     // construct queue and connect everything in the main pipelie
     audio_queue = gst_elementfactory_make("queue","audio_queue");
-    gtk_object_set(GTK_OBJECT(audio_queue),"max_level",30,NULL);
+    g_object_set(G_OBJECT(audio_queue),"max_level",30,NULL);
     gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(audio_queue));
     gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(audio_thread));
     gst_pad_connect(pad,
@@ -105,7 +105,7 @@
                     gst_element_get_pad(audio_thread,"sink"));
 
     // set up thread state and kick things off
-    gtk_object_set(GTK_OBJECT(audio_thread),"create_thread",TRUE,NULL);
+    g_object_set(G_OBJECT(audio_thread),"create_thread",TRUE,NULL);
     g_print("setting to READY state\n");
     gst_element_set_state(GST_ELEMENT(audio_thread),GST_STATE_READY);
     g_print("setting to PLAYING state\n");
@@ -123,14 +123,14 @@
     g_return_if_fail(decode_video != NULL);
     encode = gst_elementfactory_make("mpeg2enc","encode");
     g_return_if_fail(encode != NULL);
-    //gtk_object_set(GTK_OBJECT(show),"width",640, "height", 480,NULL);
+    //g_object_set(G_OBJECT(show),"width",640, "height", 480,NULL);
     fd = open(outfile,O_CREAT|O_RDWR|O_TRUNC);
 
     fdsinkfactory = gst_elementfactory_find("fdsink");
     g_return_if_fail(fdsinkfactory != NULL);
     fdsink = gst_elementfactory_create(fdsinkfactory,"fdsink");
     g_return_if_fail(fdsink != NULL);
-    gtk_object_set(GTK_OBJECT(fdsink),"fd",fd,NULL);
+    g_object_set(G_OBJECT(fdsink),"fd",fd,NULL);
 
     // create the thread and pack stuff into it
     video_thread = gst_thread_new("video_thread");
@@ -152,7 +152,7 @@
 
     // construct queue and connect everything in the main pipeline
     video_queue = gst_elementfactory_make("queue","video_queue");
-    gtk_object_set(GTK_OBJECT(video_queue),"max_level",30,NULL);
+    g_object_set(G_OBJECT(video_queue),"max_level",30,NULL);
     gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(video_queue));
     gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(video_thread));
     gst_pad_connect(pad,
@@ -161,7 +161,7 @@
                     gst_element_get_pad(video_thread,"sink"));
 
     // set up thread state and kick things off
-    gtk_object_set(GTK_OBJECT(video_thread),"create_thread",TRUE,NULL);
+    g_object_set(G_OBJECT(video_thread),"create_thread",TRUE,NULL);
     g_print("setting to READY state\n");
     gst_element_set_state(GST_ELEMENT(video_thread),GST_STATE_READY);
     g_print("setting to PLAYING state\n");
@@ -188,7 +188,7 @@
     src = gst_elementfactory_make("disksrc","src");
 
   g_return_val_if_fail(src != NULL, -1);
-  gtk_object_set(GTK_OBJECT(src),"location",argv[1],NULL);
+  g_object_set(G_OBJECT(src),"location",argv[1],NULL);
   g_print("should be using file '%s'\n",argv[1]);
 
   g_print("should be using output file '%s'\n",argv[2]);
@@ -200,9 +200,9 @@
   gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(src));
   gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(parse));
 
-  gtk_signal_connect(GTK_OBJECT(parse),"new_pad",mp2tomp1, pipeline);
+  g_signal_connectc(G_OBJECT(parse),"new_pad",mp2tomp1, pipeline, FALSE);
 
-  gtk_signal_connect(GTK_OBJECT(src),"eos",GTK_SIGNAL_FUNC(eof),NULL);
+  g_signal_connectc(G_OBJECT(src),"eos",G_CALLBACK(eof),NULL, FALSE);
 
   gst_pad_connect(gst_element_get_pad(src,"src"),
                   gst_element_get_pad(parse,"sink"));
diff --git a/test/mp2toavi.c b/test/mp2toavi.c
index 99653b0..4bd1635 100644
--- a/test/mp2toavi.c
+++ b/test/mp2toavi.c
@@ -18,7 +18,7 @@
   gulong frame_size;
   static gulong total = 0;
 
-  frame_size = gst_util_get_long_arg(GTK_OBJECT(element),"last_frame_size");
+  frame_size = gst_util_get_long_arg(G_OBJECT(element),"last_frame_size");
 
   total+=frame_size;
 
@@ -45,17 +45,17 @@
     // construct internal pipeline elements
     parse_audio = gst_elementfactory_make("ac3parse","parse_audio");
     g_return_if_fail(parse_audio != NULL);
-    gtk_object_set(GTK_OBJECT(parse_audio),"skip", 15, NULL);
+    g_object_set(G_OBJECT(parse_audio),"skip", 15, NULL);
     decode = gst_elementfactory_make("ac3dec","decode_audio");
     g_return_if_fail(decode != NULL);
     audio_resample = gst_elementfactory_make("audioscale","audioscale");
     g_return_if_fail(audio_resample != NULL);
-    gtk_object_set(GTK_OBJECT(audio_resample),"frequency", 44100, NULL);
+    g_object_set(G_OBJECT(audio_resample),"frequency", 44100, NULL);
 
     audio_encode = gst_elementfactory_make("mpegaudio","audio_encode");
     //audio_encode = gst_elementfactory_make("pipefilter","audio_encode");
     g_return_if_fail(audio_encode != NULL);
-    //gtk_object_set(GTK_OBJECT(audio_encode),"command", "lame -x - -", NULL);
+    //g_object_set(G_OBJECT(audio_encode),"command", "lame -x - -", NULL);
 
     // create the thread and pack stuff into it
     audio_thread = gst_thread_new("audio_thread");
@@ -65,7 +65,7 @@
     gst_bin_add(GST_BIN(audio_thread),GST_ELEMENT(audio_resample));
     gst_bin_add(GST_BIN(audio_thread),GST_ELEMENT(audio_encode));
 
-    gtk_object_set(GTK_OBJECT(mux),"audio","00",NULL);
+    g_object_set(G_OBJECT(mux),"audio","00",NULL);
 
     // set up pad connections
     gst_element_add_ghost_pad(GST_ELEMENT(audio_thread),
@@ -81,7 +81,7 @@
 
     // construct queue and connect everything in the main pipelie
     audio_queue = gst_elementfactory_make("queue","audio_queue");
-    gtk_object_set(GTK_OBJECT(audio_queue),"max_level",1,NULL);
+    g_object_set(G_OBJECT(audio_queue),"max_level",1,NULL);
     gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(audio_queue));
     gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(audio_thread));
     gst_pad_connect(pad,
@@ -90,7 +90,7 @@
                     gst_element_get_pad(audio_thread,"sink"));
 
     // set up thread state and kick things off
-    gtk_object_set(GTK_OBJECT(audio_thread),"create_thread",TRUE,NULL);
+    g_object_set(G_OBJECT(audio_thread),"create_thread",TRUE,NULL);
     g_print("setting to READY state\n");
     gst_element_set_state(GST_ELEMENT(audio_thread),GST_STATE_READY);
   } else if (strncmp(gst_pad_get_name(pad), "subtitle_stream_4", 17) == 0) {
@@ -125,7 +125,7 @@
 
     // construct queue and connect everything in the main pipelie
     audio_queue = gst_elementfactory_make("queue","audio_queue");
-    gtk_object_set(GTK_OBJECT(audio_queue),"max_level",1,NULL);
+    g_object_set(G_OBJECT(audio_queue),"max_level",1,NULL);
     gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(audio_queue));
     gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(audio_thread));
     gst_pad_connect(pad,
@@ -134,7 +134,7 @@
                     gst_element_get_pad(audio_thread,"sink"));
 
     // set up thread state and kick things off
-    gtk_object_set(GTK_OBJECT(audio_thread),"create_thread",TRUE,NULL);
+    g_object_set(G_OBJECT(audio_thread),"create_thread",TRUE,NULL);
     g_print("setting to READY state\n");
     gst_element_set_state(GST_ELEMENT(audio_thread),GST_STATE_READY);
   } else if (strncmp(gst_pad_get_name(pad), "video_", 6) == 0) {
@@ -157,27 +157,27 @@
     g_return_if_fail(merge_subtitles != NULL);
     videoscale = gst_elementfactory_make("videoscale","videoscale");
     g_return_if_fail(videoscale != NULL);
-    //gtk_object_set(GTK_OBJECT(videoscale),"width",352, "height", 288,NULL);
-    gtk_object_set(GTK_OBJECT(videoscale),"width",640, "height", 480,NULL);
+    //g_object_set(G_OBJECT(videoscale),"width",352, "height", 288,NULL);
+    g_object_set(G_OBJECT(videoscale),"width",640, "height", 480,NULL);
     median = gst_elementfactory_make("median","median");
     g_return_if_fail(median != NULL);
-    gtk_object_set(GTK_OBJECT(median),"filtersize",9,NULL);
-    gtk_object_set(GTK_OBJECT(median),"active",TRUE,NULL);
+    g_object_set(G_OBJECT(median),"filtersize",9,NULL);
+    g_object_set(G_OBJECT(median),"active",TRUE,NULL);
     smooth = gst_elementfactory_make("smooth","smooth");
     g_return_if_fail(smooth != NULL);
-    gtk_object_set(GTK_OBJECT(smooth),"filtersize",5,NULL);
-    gtk_object_set(GTK_OBJECT(smooth),"tolerance",9,NULL);
-    gtk_object_set(GTK_OBJECT(smooth),"active",FALSE,NULL);
+    g_object_set(G_OBJECT(smooth),"filtersize",5,NULL);
+    g_object_set(G_OBJECT(smooth),"tolerance",9,NULL);
+    g_object_set(G_OBJECT(smooth),"active",FALSE,NULL);
     encode = gst_elementfactory_make("winenc","encode");
     g_return_if_fail(encode != NULL);
-    gtk_signal_connect(GTK_OBJECT(encode),"frame_encoded",GTK_SIGNAL_FUNC(frame_encoded),NULL);
-    gtk_object_set(GTK_OBJECT(encode),"bitrate",800*4,NULL);
-    gtk_object_set(GTK_OBJECT(encode),"quality",10000,NULL);
-    //gtk_object_set(GTK_OBJECT(encode),"compression",NULL,NULL);
+    g_signal_connectc(G_OBJECT(encode),"frame_encoded",G_CALLBACK(frame_encoded),NULL,FALSE);
+    g_object_set(G_OBJECT(encode),"bitrate",800*4,NULL);
+    g_object_set(G_OBJECT(encode),"quality",10000,NULL);
+    //g_object_set(G_OBJECT(encode),"compression",NULL,NULL);
     //encode = gst_elementfactory_make("mpeg1encoder","encode");
-    //gtk_object_set(GTK_OBJECT(show),"width",640, "height", 480,NULL);
+    //g_object_set(G_OBJECT(show),"width",640, "height", 480,NULL);
 
-    gtk_object_set(GTK_OBJECT(mux),"video","00:DIV3",NULL);
+    g_object_set(G_OBJECT(mux),"video","00:DIV3",NULL);
 
     // create the thread and pack stuff into it
     video_thread = gst_thread_new("video_thread");
@@ -210,7 +210,7 @@
 
     // construct queue and connect everything in the main pipeline
     video_queue = gst_elementfactory_make("queue","video_queue");
-    gtk_object_set(GTK_OBJECT(video_queue),"max_level",1,NULL);
+    g_object_set(G_OBJECT(video_queue),"max_level",1,NULL);
     gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(video_queue));
     gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(video_thread));
     gst_pad_connect(pad,
@@ -219,7 +219,7 @@
                     gst_element_get_pad(video_thread,"sink"));
 
     // set up thread state and kick things off
-    gtk_object_set(GTK_OBJECT(video_thread),"create_thread",TRUE,NULL);
+    g_object_set(G_OBJECT(video_thread),"create_thread",TRUE,NULL);
     g_print("setting to READY state\n");
     gst_element_set_state(GST_ELEMENT(video_thread),GST_STATE_READY);
   }
@@ -249,7 +249,7 @@
     src = gst_elementfactory_make("disksrc","src");
 
   g_return_val_if_fail(src != NULL, -1);
-  gtk_object_set(GTK_OBJECT(src),"location",argv[1],NULL);
+  g_object_set(G_OBJECT(src),"location",argv[1],NULL);
   g_print("should be using file '%s'\n",argv[1]);
 
   g_print("should be using output file '%s'\n",argv[2]);
@@ -264,16 +264,16 @@
   g_return_val_if_fail(fdsinkfactory != NULL, -1);
   fdsink = gst_elementfactory_create(fdsinkfactory,"fdsink");
   g_return_val_if_fail(fdsink != NULL, -1);
-  gtk_object_set(GTK_OBJECT(fdsink),"fd",fd,NULL);
+  g_object_set(G_OBJECT(fdsink),"fd",fd,NULL);
 
   gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(src));
   gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(parse));
   gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(mux));
   gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(fdsink));
 
-  gtk_signal_connect(GTK_OBJECT(parse),"new_pad",mp2tomp1, pipeline);
+  g_signal_connectc(G_OBJECT(parse),"new_pad",mp2tomp1, pipeline, FALSE);
 
-  gtk_signal_connect(GTK_OBJECT(src),"eos",GTK_SIGNAL_FUNC(eof),NULL);
+  g_signal_connectc(G_OBJECT(src),"eos",G_CALLBACK(eof),NULL, FALSE);
 
   gst_pad_connect(gst_element_get_pad(src,"src"),
                   gst_element_get_pad(parse,"sink"));
diff --git a/test/mp2tomp1.c b/test/mp2tomp1.c
index a5252a8..6b20f48 100644
--- a/test/mp2tomp1.c
+++ b/test/mp2tomp1.c
@@ -29,7 +29,7 @@
     gst_pad_connect(gst_element_get_pad(mux,"src"),
                     gst_element_get_pad(fdsink,"sink"));
   }
-  gtk_object_set(GTK_OBJECT(mux), type, number,NULL);
+  g_object_set(G_OBJECT(mux), type, number,NULL);
   
   return gst_element_get_pad(mux,g_strconcat (type, "_", number, NULL));
 }
@@ -55,12 +55,12 @@
     g_return_if_fail(decode != NULL);
     audio_resample = gst_elementfactory_make("audioscale","audioscale");
     g_return_if_fail(audio_resample != NULL);
-    gtk_object_set(GTK_OBJECT(audio_resample),"frequency", 44100, NULL);
+    g_object_set(G_OBJECT(audio_resample),"frequency", 44100, NULL);
 
     audio_encode = gst_elementfactory_make("mpegaudio","audio_encode");
     //audio_encode = gst_elementfactory_make("pipefilter","audio_encode");
     g_return_if_fail(audio_encode != NULL);
-    //gtk_object_set(GTK_OBJECT(audio_encode),"command", "lame -x - -", NULL);
+    //g_object_set(G_OBJECT(audio_encode),"command", "lame -x - -", NULL);
 
     // create the thread and pack stuff into it
     audio_thread = gst_thread_new("audio_thread");
@@ -83,7 +83,7 @@
 
     // construct queue and connect everything in the main pipelie
     audio_queue = gst_elementfactory_make("queue","audio_queue");
-    gtk_object_set(GTK_OBJECT(audio_queue),"max_level",1,NULL);
+    g_object_set(G_OBJECT(audio_queue),"max_level",1,NULL);
     gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(audio_queue));
     gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(audio_thread));
     gst_pad_connect(pad,
@@ -92,7 +92,7 @@
                     gst_element_get_pad(audio_thread,"sink"));
 
     // set up thread state and kick things off
-    gtk_object_set(GTK_OBJECT(audio_thread),"create_thread",TRUE,NULL);
+    g_object_set(G_OBJECT(audio_thread),"create_thread",TRUE,NULL);
     g_print("setting to READY state\n");
     gst_element_set_state(GST_ELEMENT(audio_thread),GST_STATE_READY);
   } else if (strncmp(gst_pad_get_name(pad), "subtitle_stream_4", 17) == 0) {
@@ -120,7 +120,7 @@
 
     // construct queue and connect everything in the main pipelie
     audio_queue = gst_elementfactory_make("queue","audio_queue");
-    gtk_object_set(GTK_OBJECT(audio_queue),"max_level",1,NULL);
+    g_object_set(G_OBJECT(audio_queue),"max_level",1,NULL);
     gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(audio_queue));
     gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(audio_thread));
     gst_pad_connect(pad,
@@ -129,7 +129,7 @@
                     gst_element_get_pad(audio_thread,"sink"));
 
     // set up thread state and kick things off
-    gtk_object_set(GTK_OBJECT(audio_thread),"create_thread",TRUE,NULL);
+    g_object_set(G_OBJECT(audio_thread),"create_thread",TRUE,NULL);
     g_print("setting to READY state\n");
     gst_element_set_state(GST_ELEMENT(audio_thread),GST_STATE_READY);
   } else if (strncmp(gst_pad_get_name(pad), "video_", 6) == 0) {
@@ -143,22 +143,22 @@
     //g_return_if_fail(merge_subtitles != NULL);
     videoscale = gst_elementfactory_make("videoscale","videoscale");
     g_return_if_fail(videoscale != NULL);
-    gtk_object_set(GTK_OBJECT(videoscale),"width",352, "height", 288,NULL);
+    g_object_set(G_OBJECT(videoscale),"width",352, "height", 288,NULL);
     median = gst_elementfactory_make("median","median");
     g_return_if_fail(median != NULL);
-    gtk_object_set(GTK_OBJECT(median),"filtersize",5,NULL);
-    gtk_object_set(GTK_OBJECT(median),"active",TRUE,NULL);
+    g_object_set(G_OBJECT(median),"filtersize",5,NULL);
+    g_object_set(G_OBJECT(median),"active",TRUE,NULL);
     smooth = gst_elementfactory_make("smooth","smooth");
     g_return_if_fail(smooth != NULL);
-    gtk_object_set(GTK_OBJECT(smooth),"filtersize",5,NULL);
-    gtk_object_set(GTK_OBJECT(smooth),"tolerance",9,NULL);
-    gtk_object_set(GTK_OBJECT(smooth),"active",FALSE,NULL);
+    g_object_set(G_OBJECT(smooth),"filtersize",5,NULL);
+    g_object_set(G_OBJECT(smooth),"tolerance",9,NULL);
+    g_object_set(G_OBJECT(smooth),"active",FALSE,NULL);
     encode = gst_elementfactory_make("mpeg2enc","encode");
     g_return_if_fail(encode != NULL);
-    gtk_object_set(GTK_OBJECT(encode),"frames_per_second",25.0,NULL);
-    //gtk_object_set(GTK_OBJECT(encode),"frames_per_second",29.97,NULL);
+    g_object_set(G_OBJECT(encode),"frames_per_second",25.0,NULL);
+    //g_object_set(G_OBJECT(encode),"frames_per_second",29.97,NULL);
     //encode = gst_elementfactory_make("mpeg1encoder","encode");
-    //gtk_object_set(GTK_OBJECT(show),"width",640, "height", 480,NULL);
+    //g_object_set(G_OBJECT(show),"width",640, "height", 480,NULL);
 
     muxerpad = create_muxer (pipeline, "video", "00");
     g_return_if_fail(muxerpad != NULL);
@@ -192,7 +192,7 @@
 
     // construct queue and connect everything in the main pipeline
     video_queue = gst_elementfactory_make("queue","video_queue");
-    gtk_object_set(GTK_OBJECT(video_queue),"max_level",1,NULL);
+    g_object_set(G_OBJECT(video_queue),"max_level",1,NULL);
     gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(video_queue));
     gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(video_thread));
     gst_pad_connect(pad,
@@ -201,7 +201,7 @@
                     gst_element_get_pad(video_thread,"sink"));
 
     // set up thread state and kick things off
-    gtk_object_set(GTK_OBJECT(video_thread),"create_thread",TRUE,NULL);
+    g_object_set(G_OBJECT(video_thread),"create_thread",TRUE,NULL);
     g_print("setting to READY state\n");
     gst_element_set_state(GST_ELEMENT(video_thread),GST_STATE_READY);
   }
@@ -228,7 +228,7 @@
     src = gst_elementfactory_make("disksrc","src");
 
   g_return_val_if_fail(src != NULL, -1);
-  gtk_object_set(GTK_OBJECT(src),"location",argv[1],NULL);
+  g_object_set(G_OBJECT(src),"location",argv[1],NULL);
   g_print("should be using file '%s'\n",argv[1]);
 
   g_print("should be using output file '%s'\n",argv[2]);
@@ -242,15 +242,15 @@
   g_return_val_if_fail(fdsinkfactory != NULL, -1);
   fdsink = gst_elementfactory_create(fdsinkfactory,"fdsink");
   g_return_val_if_fail(fdsink != NULL, -1);
-  gtk_object_set(GTK_OBJECT(fdsink),"fd",fd,NULL);
+  g_object_set(G_OBJECT(fdsink),"fd",fd,NULL);
 
   gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(src));
   gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(parse));
 
 
-  gtk_signal_connect(GTK_OBJECT(parse),"new_pad",mp2tomp1, pipeline);
+  g_signal_connectc(G_OBJECT(parse),"new_pad",mp2tomp1, pipeline, FALSE);
 
-  gtk_signal_connect(GTK_OBJECT(src),"eos",GTK_SIGNAL_FUNC(eof),NULL);
+  g_signal_connectc(G_OBJECT(src),"eos",G_CALLBACK(eof),NULL, FALSE);
 
   gst_pad_connect(gst_element_get_pad(src,"src"),
                   gst_element_get_pad(parse,"sink"));
diff --git a/test/mp3.c b/test/mp3.c
index a92064c..88ba955 100644
--- a/test/mp3.c
+++ b/test/mp3.c
@@ -34,7 +34,7 @@
 
   src = gst_elementfactory_create(srcfactory,"src");
   g_return_val_if_fail(src != NULL, -1);
-  gtk_object_set(GTK_OBJECT(src),"location",argv[1],NULL);
+  g_object_set(G_OBJECT(src),"location",argv[1]);
   mp3 = gst_elementfactory_create(mp3factory,"mp3");
   g_return_val_if_fail(mp3 != NULL, -1);
   sink = gst_elementfactory_create(sinkfactory,"sink");
@@ -49,8 +49,8 @@
   gst_pad_connect(gst_element_get_pad(mp3,"src"),
                   gst_element_get_pad(sink,"sink"));
 
-  gtk_signal_connect(GTK_OBJECT(src),"eof",
-                     GTK_SIGNAL_FUNC(eof),NULL);   
+  g_signal_connectc(G_OBJECT(src),"eof",
+                    G_CALLBACK(eof),NULL,FALSE);   
 
   gst_element_set_state(GST_ELEMENT(bin),GST_STATE_READY);
   gst_element_set_state(GST_ELEMENT(bin),GST_STATE_PLAYING);
diff --git a/test/mp3mad.c b/test/mp3mad.c
index 95e31ee..6391a22 100644
--- a/test/mp3mad.c
+++ b/test/mp3mad.c
@@ -21,7 +21,7 @@
 
   src = gst_elementfactory_create(srcfactory,"src");
   g_return_val_if_fail(src != NULL, -1);
-  gtk_object_set(GTK_OBJECT(src),"location",argv[1],NULL);
+  g_object_set(G_OBJECT(src),"location",argv[1],NULL);
   g_print("should be using file '%s'\n",argv[1]);
   decode = gst_elementfactory_create(decodefactory,"decode");
   g_return_val_if_fail(decode != NULL, -1);
diff --git a/test/mp3parse.c b/test/mp3parse.c
index 7d3b3f1..5dc12be 100644
--- a/test/mp3parse.c
+++ b/test/mp3parse.c
@@ -35,7 +35,7 @@
 
   src = gst_elementfactory_create(srcfactory,"src");
   g_return_val_if_fail(src != NULL, -1);
-  gtk_object_set(GTK_OBJECT(src),"location",argv[1],NULL);
+  g_object_set(G_OBJECT(src),"location",argv[1]);
   g_print("should be using file '%s'\n",argv[1]);
   parse = gst_elementfactory_create(parsefactory,"parse");
   g_return_val_if_fail(parse != NULL, -1);
@@ -46,8 +46,8 @@
   gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(src));
   gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(parse));
 
-  gtk_signal_connect(GTK_OBJECT(src),"eos",
-                      GTK_SIGNAL_FUNC(eof),NULL);
+  g_signal_connectc(G_OBJECT(src),"eos",
+                    G_CALLBACK(eof),NULL, FALSE);
 
   gst_pad_connect(gst_element_get_pad(src,"src"),
                   gst_element_get_pad(parse,"sink"));
diff --git a/test/mp3play.c b/test/mp3play.c
index 2d64298..564be5d 100644
--- a/test/mp3play.c
+++ b/test/mp3play.c
@@ -28,7 +28,7 @@
 
   src = gst_elementfactory_create(srcfactory,"src");
   g_return_val_if_fail(src != NULL, -1);
-  gtk_object_set(GTK_OBJECT(src),"location",argv[1],NULL);
+  g_object_set(G_OBJECT(src),"location",argv[1]);
   g_print("should be using file '%s'\n",argv[1]);
   parse = gst_elementfactory_create(parsefactory,"parse");
   g_return_val_if_fail(parse != NULL, -1);
@@ -37,8 +37,8 @@
   play = gst_elementfactory_create(playfactory,"play");
   g_return_val_if_fail(play != NULL, -1);
 
-  gtk_signal_connect(GTK_OBJECT(src),"eos",
-	                       GTK_SIGNAL_FUNC(eof),NULL);
+  g_signal_connectc(G_OBJECT(src),"eos",
+	            G_CALLBACK(eof),NULL, FALSE);
 
   gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(src));
   gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(parse));
diff --git a/test/mp3tovorbis.c b/test/mp3tovorbis.c
index f18f6b5..64c7e23 100644
--- a/test/mp3tovorbis.c
+++ b/test/mp3tovorbis.c
@@ -36,7 +36,7 @@
 
   src = gst_elementfactory_create(srcfactory,"src");
   g_return_val_if_fail(src != NULL, -1);
-  gtk_object_set(GTK_OBJECT(src),"location",argv[1],NULL);
+  g_object_set(G_OBJECT(src),"location",argv[1],NULL);
   g_print("should be using file '%s'\n",argv[1]);
   parse = gst_elementfactory_create(parsefactory,"parse");
   g_return_val_if_fail(parse != NULL, -1);
@@ -48,10 +48,10 @@
   g_return_val_if_fail(sink != NULL, -1);
   g_print("should be using output file '%s'\n",argv[2]);
   fd = open(argv[2], O_CREAT|O_RDWR|O_TRUNC);
-  gtk_object_set(GTK_OBJECT(sink),"fd",fd,NULL);
+  g_object_set(G_OBJECT(sink),"fd",fd,NULL);
 
-  gtk_signal_connect(GTK_OBJECT(src),"eos",
-	                       GTK_SIGNAL_FUNC(eof),NULL);
+  g_signal_connectc(G_OBJECT(src),"eos",
+	                       G_CALLBACK(eof),NULL,FALSE);
 
   gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(src));
   gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(parse));
diff --git a/test/mpeg2parse.c b/test/mpeg2parse.c
index f46a86a..e010e73 100644
--- a/test/mpeg2parse.c
+++ b/test/mpeg2parse.c
@@ -131,7 +131,7 @@
 
     appwindow = gnome_app_new("MPEG player","MPEG player");
     gnome_app_set_contents(GNOME_APP(appwindow),
-      	        gst_util_get_widget_arg(GTK_OBJECT(show),"widget"));
+      	        gst_util_get_pointer_arg(GTK_OBJECT(show),"widget"));
 		gtk_widget_show_all(appwindow);
 
     // create the thread and pack stuff into it
diff --git a/test/pipetest.c b/test/pipetest.c
index 5c77c04..b987b96 100644
--- a/test/pipetest.c
+++ b/test/pipetest.c
@@ -31,7 +31,7 @@
 
   src = gst_elementfactory_create(srcfactory,"src");
   g_return_val_if_fail(src != NULL, -1);
-  gtk_object_set(GTK_OBJECT(src),"location",argv[1],NULL);
+  g_object_set(G_OBJECT(src),"location",argv[1],NULL);
   g_print("should be using file '%s'\n",argv[1]);
   pipe = gst_elementfactory_create(pipefactory,"pipe");
   g_return_val_if_fail(pipe != NULL, -1);
@@ -39,10 +39,10 @@
   g_return_val_if_fail(sink != NULL, -1);
 
   fd = open(argv[2],O_CREAT|O_RDWR|O_TRUNC);
-  gtk_object_set(GTK_OBJECT(sink),"fd",fd,NULL);
+  g_object_set(G_OBJECT(sink),"fd",fd,NULL);
 
-  gtk_signal_connect(GTK_OBJECT(src),"eos",
-	                       GTK_SIGNAL_FUNC(eof),NULL);
+  g_signal_connectc(G_OBJECT(src),"eos",
+	                       G_CALLBACK(eof),NULL,FALSE);
 
   gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(src));
   gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(pipe));
diff --git a/test/qtest.c b/test/qtest.c
index 262f049..33b8eba 100644
--- a/test/qtest.c
+++ b/test/qtest.c
@@ -36,7 +36,7 @@
 
   srcfactory = gst_elementfactory_find("disksrc");
   src = gst_elementfactory_create(srcfactory,"src");
-  gtk_object_set(GTK_OBJECT(src),"location",argv[1],NULL);
+  g_object_set(G_OBJECT(src),"location",argv[1],NULL);
   gst_bin_add(GST_BIN(decodethread),GST_ELEMENT(src));
 
   _gst_plugin_spew = TRUE;
@@ -77,12 +77,12 @@
 //  gst_pad_connect(gst_element_get_pad(queue,"src"),
                   gst_element_get_pad(playthread,"sink"));
 
-  gtk_signal_connect(GTK_OBJECT(src),"eof",
-                     GTK_SIGNAL_FUNC(eof),NULL);
+  g_signal_connectc(G_OBJECT(src),"eof",
+                     G_CALLBACK(eof),NULL, FALSE);
 
   g_print("\nsetting up the decode thread to *NOT* thread\n");
 //  gtk_object_set(GTK_OBJECT(decodethread),"create_thread",TRUE,NULL);
-  gtk_object_set(GTK_OBJECT(playthread),"create_thread",FALSE,NULL);
+  g_object_set(G_OBJECT(playthread),"create_thread",FALSE,NULL);
 
   g_print("\neverything's built, setting it up to be runnable\n");
   gst_element_set_state(GST_ELEMENT(pipeline),GST_STATE_READY);
diff --git a/test/record.c b/test/record.c
index 5b559fd..ebd082a 100644
--- a/test/record.c
+++ b/test/record.c
@@ -20,7 +20,7 @@
 
   fdsinkfactory = gst_elementfactory_find("fdsink");
   fdsink = gst_elementfactory_create(fdsinkfactory,"fdsink");
-  gtk_object_set(GTK_OBJECT(fdsink),"fd",fd,NULL);
+  g_object_set(G_OBJECT(fdsink),"fd",fd);
 
   /* add objects to the main pipeline */
   gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(osssrc));
diff --git a/test/vidcapture.c b/test/vidcapture.c
index a6c130c..c30bee2 100644
--- a/test/vidcapture.c
+++ b/test/vidcapture.c
@@ -28,16 +28,16 @@
   compress = gst_elementfactory_create(compressfactory,"jpegenc");
   encoderfactory = gst_elementfactory_find("aviencoder");
   encoder = gst_elementfactory_create(encoderfactory,"aviencoder");
-  gtk_object_set(GTK_OBJECT(videosrc),"width",320,"height",240,NULL);
-  gtk_object_set(GTK_OBJECT(videosrc),"format",9,NULL);
+  g_object_set(G_OBJECT(videosrc),"width",320,"height",240,NULL);
+  g_object_set(G_OBJECT(videosrc),"format",9,NULL);
 
-  gtk_object_set(GTK_OBJECT(encoder),"video","00:I420",NULL);
+  g_object_set(G_OBJECT(encoder),"video","00:I420",NULL);
 
   fd = open(argv[1],O_CREAT|O_RDWR|O_TRUNC);
 
   fdsinkfactory = gst_elementfactory_find("fdsink");
   fdsink = gst_elementfactory_create(fdsinkfactory,"fdsink");
-  gtk_object_set(GTK_OBJECT(fdsink),"fd",fd,NULL);
+  g_object_set(G_OBJECT(fdsink),"fd",fd,NULL);
 
   gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(videosrc));
 
@@ -60,7 +60,7 @@
 
   // construct queue and connect everything in the main pipeline
   video_queue = gst_elementfactory_make("queue","video_queue");
-  gtk_object_set(GTK_OBJECT(video_queue),"max_level",30,NULL);
+  g_object_set(G_OBJECT(video_queue),"max_level",30,NULL);
   gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(video_queue));
   gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(video_thread));
   gst_pad_connect(gst_element_get_pad(videosrc, "src"),
@@ -68,7 +68,7 @@
   gst_pad_connect(gst_element_get_pad(video_queue,"src"),
                   gst_element_get_pad(video_thread,"video_00"));
 
-  gtk_object_set(GTK_OBJECT(video_thread),"create_thread",TRUE,NULL);
+  g_object_set(G_OBJECT(video_thread),"create_thread",TRUE,NULL);
   g_print("\neverything's built, setting it up to be runnable\n");
   gst_element_set_state(GST_ELEMENT(pipeline),GST_STATE_READY);
   g_print("\nok, runnable, hitting 'play'...\n");
diff --git a/test/vidcapture2.c b/test/vidcapture2.c
index 01f6bbb..5df76ad 100644
--- a/test/vidcapture2.c
+++ b/test/vidcapture2.c
@@ -29,16 +29,16 @@
   g_assert(compress != NULL);
   encoderfactory = gst_elementfactory_find("aviencoder");
   encoder = gst_elementfactory_create(encoderfactory,"aviencoder");
-  gtk_object_set(GTK_OBJECT(videosrc),"width",320,"height",240,NULL);
-  gtk_object_set(GTK_OBJECT(videosrc),"format",5,NULL);
+  g_object_set(G_OBJECT(videosrc),"width",320,"height",240,NULL);
+  g_object_set(G_OBJECT(videosrc),"format",5,NULL);
 
-  gtk_object_set(GTK_OBJECT(encoder),"video","00:DIV3",NULL);
+  g_object_set(G_OBJECT(encoder),"video","00:DIV3",NULL);
 
   fd = open(argv[1],O_CREAT|O_RDWR|O_TRUNC);
 
   fdsinkfactory = gst_elementfactory_find("fdsink");
   fdsink = gst_elementfactory_create(fdsinkfactory,"fdsink");
-  gtk_object_set(GTK_OBJECT(fdsink),"fd",fd,NULL);
+  g_object_set(G_OBJECT(fdsink),"fd",fd,NULL);
 
   gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(videosrc));
 
@@ -61,7 +61,7 @@
 
   // construct queue and connect everything in the main pipeline
   video_queue = gst_elementfactory_make("queue","video_queue");
-  gtk_object_set(GTK_OBJECT(video_queue),"max_level",30,NULL);
+  g_object_set(G_OBJECT(video_queue),"max_level",30,NULL);
   gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(video_queue));
   gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(video_thread));
   gst_pad_connect(gst_element_get_pad(videosrc, "src"),
@@ -69,7 +69,7 @@
   gst_pad_connect(gst_element_get_pad(video_queue,"src"),
                   gst_element_get_pad(video_thread,"sink"));
 
-  gtk_object_set(GTK_OBJECT(video_thread),"create_thread",TRUE,NULL);
+  g_object_set(G_OBJECT(video_thread),"create_thread",TRUE,NULL);
   g_print("\neverything's built, setting it up to be runnable\n");
   gst_element_set_state(GST_ELEMENT(pipeline),GST_STATE_READY);
   g_print("\nok, runnable, hitting 'play'...\n");
diff --git a/test/videotest.c b/test/videotest.c
index d380929..6a656b7 100644
--- a/test/videotest.c
+++ b/test/videotest.c
@@ -73,13 +73,13 @@
   //gtk_widget_set_usize (button, 50, 50);
   //gtk_widget_set_usize (button, 0, 0);
 
-  draw = gst_util_get_widget_arg(GTK_OBJECT(videosink),"widget"),
+  draw = gst_util_get_pointer_arg(GTK_OBJECT(videosink),"widget"),
   gtk_box_pack_start (GTK_BOX (vbox1), 
 				draw,
   				TRUE, TRUE, 0);
   gtk_widget_show (draw);
 
-  draw2 = gst_util_get_widget_arg(GTK_OBJECT(videosink2),"widget"),
+  draw2 = gst_util_get_pointer_arg(GTK_OBJECT(videosink2),"widget"),
   gtk_widget_show (draw2);
 	
   gnome_app_set_contents(GNOME_APP(appwindow), vbox1);
diff --git a/test/wave.c b/test/wave.c
index d27d9b7..6f5ee57 100644
--- a/test/wave.c
+++ b/test/wave.c
@@ -42,7 +42,7 @@
                   gst_element_get_pad(wave,"sink"));
 
   appwindow = gnome_app_new("wave","Wave");
-  gnome_app_set_contents(GNOME_APP(appwindow),gst_util_get_widget_arg(GTK_OBJECT(wave),"widget"));
+  gnome_app_set_contents(GNOME_APP(appwindow),gst_util_get_pointer_arg(GTK_OBJECT(wave),"widget"));
   gtk_widget_show_all(appwindow);
 
   gst_element_set_state(GST_ELEMENT(bin),GST_STATE_READY);
diff --git a/test/xmmstest.c b/test/xmmstest.c
index e88177b..91dd717 100644
--- a/test/xmmstest.c
+++ b/test/xmmstest.c
@@ -28,13 +28,13 @@
   //effect = gst_elementfactory_make("XMMS_EFFECT_echo_plugin_1.2.4", "xmms_effect");
   g_return_val_if_fail(effect != NULL, -1);
 
-  gtk_object_set (GTK_OBJECT (src), "location", argv[1], NULL);
-  //gtk_object_set (GTK_OBJECT (src), "filename", "tone://1000", NULL);
+  g_object_set (G_OBJECT (src), "location", argv[1], NULL);
+  //gtk_object_set (G_OBJECT (src), "filename", "tone://1000", NULL);
 
-  g_print ("Song Info (text:length): %s\n",gst_util_get_string_arg (GTK_OBJECT (src), "song_info"));
-  //gtk_object_set (GTK_OBJECT (src), "show_about", TRUE, NULL);
-  //gtk_object_set (GTK_OBJECT (src), "configure", TRUE, NULL);
-  //gtk_object_set (GTK_OBJECT (src), "show_file_info", TRUE, NULL);
+  g_print ("Song Info (text:length): %s\n",gst_util_get_string_arg (G_OBJECT (src), "song_info"));
+  //gtk_object_set (G_OBJECT (src), "show_about", TRUE, NULL);
+  //gtk_object_set (G_OBJECT (src), "configure", TRUE, NULL);
+  //gtk_object_set (G_OBJECT (src), "show_file_info", TRUE, NULL);
 
   osssink = gst_elementfactory_make("osssink", "osssink");
   g_return_val_if_fail(osssink != NULL, -1);
@@ -52,7 +52,7 @@
 
   g_idle_add(idle_func, bin);
 
-  gtk_main();
+  //gtk_main();
 
   return 0;
 }
diff --git a/tests/autoplug.c b/tests/autoplug.c
index ec9c943..259fc8f 100644
--- a/tests/autoplug.c
+++ b/tests/autoplug.c
@@ -30,7 +30,7 @@
 
   autoplugger = gst_autoplugfactory_make ("static");
 
-  gtk_signal_connect (GTK_OBJECT (autoplugger), "new_object", new_object_added, NULL);
+  g_signal_connectc (G_OBJECT (autoplugger), "new_object", new_object_added, NULL,FALSE);
 
   element = gst_autoplug_to_caps (autoplugger, testcaps,
 		  gst_pad_get_caps (gst_element_get_pad (osssink, "sink")),
diff --git a/tests/autoplug3.c b/tests/autoplug3.c
index 479c415..40c1cdc 100644
--- a/tests/autoplug3.c
+++ b/tests/autoplug3.c
@@ -38,7 +38,7 @@
 
   gst_element_connect (disksrc, "src", element, "sink");
 
-  gtk_object_set (GTK_OBJECT (disksrc), "location", argv[1], NULL);
+  g_object_set (G_OBJECT (disksrc), "location", argv[1], NULL);
 
   gst_element_set_state (pipeline, GST_STATE_PLAYING);
 
diff --git a/tests/case4.c b/tests/case4.c
index 8ec525f..29c4394 100644
--- a/tests/case4.c
+++ b/tests/case4.c
@@ -13,7 +13,7 @@
   src = gst_elementfactory_make("fakesrc","src");
   identity = gst_elementfactory_make("identity","identity");
   g_return_val_if_fail(identity != NULL,2);
-  gtk_object_set(GTK_OBJECT(identity),"loop_based",TRUE,NULL);
+  g_object_set(G_OBJECT(identity),"loop_based",TRUE,NULL);
   sink = gst_elementfactory_make("fakesink","sink");
   g_return_val_if_fail(sink != NULL,3);
 
diff --git a/tests/eos/case1.c b/tests/eos/case1.c
index 34a4fd9..07fccc6 100644
--- a/tests/eos/case1.c
+++ b/tests/eos/case1.c
@@ -28,7 +28,7 @@
   g_return_val_if_fail(pipeline != NULL, 1);
 
   src = gst_elementfactory_make("fakesrc","src");
-  gtk_object_set (GTK_OBJECT (src), "num_buffers", 1, NULL);
+  g_object_set (G_OBJECT (src), "num_buffers", 1, NULL);
   g_return_val_if_fail(src != NULL, 2);
 
   identity = gst_elementfactory_make("identity","identity");
@@ -43,8 +43,8 @@
   gst_element_connect(src,"src",identity,"sink");
   gst_element_connect(identity,"src",sink,"sink");
 
-  gtk_signal_connect (GTK_OBJECT (src), "eos", eos_signal_element, NULL);
-  gtk_signal_connect (GTK_OBJECT (pipeline), "eos", eos_signal, NULL);
+  g_signal_connectc (G_OBJECT (src), "eos", eos_signal_element, NULL, FALSE);
+  g_signal_connectc (G_OBJECT (pipeline), "eos", eos_signal, NULL, FALSE);
 
   gst_element_set_state(GST_ELEMENT(pipeline),GST_STATE_PLAYING);
 
diff --git a/tests/eos/case2.c b/tests/eos/case2.c
index 69adebf..c20d6f5 100644
--- a/tests/eos/case2.c
+++ b/tests/eos/case2.c
@@ -29,7 +29,7 @@
   g_return_val_if_fail(pipeline != NULL, 1);
 
   src = gst_elementfactory_make("fakesrc","src");
-  gtk_object_set (GTK_OBJECT (src), "num_buffers", 1, NULL);
+  g_object_set (G_OBJECT (src), "num_buffers", 1, NULL);
   g_return_val_if_fail(src != NULL, 2);
 
   identity = gst_elementfactory_make("identity","identity");
@@ -46,7 +46,7 @@
   gst_element_connect(identity,"src",sink,"sink");
 
   src2 = gst_elementfactory_make("fakesrc","src2");
-  gtk_object_set (GTK_OBJECT (src2), "num_buffers", 3, NULL);
+  g_object_set (G_OBJECT (src2), "num_buffers", 3, NULL);
   g_return_val_if_fail(src2 != NULL, 2);
 
   identity2 = gst_elementfactory_make("identity","identity2");
@@ -62,8 +62,8 @@
   gst_element_connect(src2,"src",identity2,"sink");
   gst_element_connect(identity2,"src",sink2,"sink");
 
-  gtk_signal_connect (GTK_OBJECT (src), "eos", eos_signal_element, NULL);
-  gtk_signal_connect (GTK_OBJECT (pipeline), "eos", eos_signal, NULL);
+  g_signal_connectc (G_OBJECT (src), "eos", eos_signal_element, NULL, FALSE);
+  g_signal_connectc (G_OBJECT (pipeline), "eos", eos_signal, NULL, FALSE);
 
   gst_element_set_state(GST_ELEMENT(pipeline),GST_STATE_PLAYING);
 
diff --git a/tests/eos/case3.c b/tests/eos/case3.c
index caf822a..48eb73d 100644
--- a/tests/eos/case3.c
+++ b/tests/eos/case3.c
@@ -29,8 +29,8 @@
   g_return_val_if_fail(pipeline != NULL, 1);
 
   src = gst_elementfactory_make("fakesrc","src");
-  gtk_object_set (GTK_OBJECT (src), "num_buffers", 2, NULL);
-  gtk_object_set (GTK_OBJECT (src), "num_sources", 2, NULL);
+  g_object_set (G_OBJECT (src), "num_buffers", 2, NULL);
+  g_object_set (G_OBJECT (src), "num_sources", 2, NULL);
   g_return_val_if_fail(src != NULL, 2);
 
   identity = gst_elementfactory_make("identity","identity");
@@ -58,8 +58,8 @@
   gst_element_connect(src,"src1",identity2,"sink");
   gst_element_connect(identity2,"src",sink2,"sink");
 
-  gtk_signal_connect (GTK_OBJECT (src), "eos", eos_signal_element, NULL);
-  gtk_signal_connect (GTK_OBJECT (pipeline), "eos", eos_signal, NULL);
+  g_signal_connectc (G_OBJECT (src), "eos", eos_signal_element, NULL, FALSE);
+  g_signal_connectc (G_OBJECT (pipeline), "eos", eos_signal, NULL, FALSE);
 
   gst_element_set_state(GST_ELEMENT(pipeline),GST_STATE_PLAYING);
 
diff --git a/tests/eos/case4.c b/tests/eos/case4.c
index 9b2472f..a198a40 100644
--- a/tests/eos/case4.c
+++ b/tests/eos/case4.c
@@ -29,7 +29,7 @@
   g_return_val_if_fail(pipeline != NULL, 1);
 
   src = gst_elementfactory_make("fakesrc","src");
-  gtk_object_set (GTK_OBJECT (src), "num_buffers", 1, NULL);
+  g_object_set (G_OBJECT (src), "num_buffers", 1, NULL);
   g_return_val_if_fail(src != NULL, 2);
 
   identity = gst_elementfactory_make("identity","identity");
@@ -51,7 +51,7 @@
   gst_element_connect(identity,"src",sink,"sink");
 
   src2 = gst_elementfactory_make("fakesrc","src2");
-  gtk_object_set (GTK_OBJECT (src2), "num_buffers", 3, NULL);
+  g_object_set (G_OBJECT (src2), "num_buffers", 3, NULL);
   g_return_val_if_fail(src2 != NULL, 2);
 
   identity2 = gst_elementfactory_make("identity","identity2");
@@ -67,8 +67,8 @@
   gst_element_connect(src2,"src",identity2,"sink");
   gst_element_connect(identity2,"src",sink2,"sink");
 
-  gtk_signal_connect (GTK_OBJECT (src), "eos", eos_signal_element, NULL);
-  gtk_signal_connect (GTK_OBJECT (pipeline), "eos", eos_signal, NULL);
+  g_signal_connectc (G_OBJECT (src), "eos", eos_signal_element, NULL, FALSE);
+  g_signal_connectc (G_OBJECT (pipeline), "eos", eos_signal, NULL, FALSE);
 
   gst_element_set_state(GST_ELEMENT(pipeline),GST_STATE_PLAYING);
 
diff --git a/tests/eos/case5.c b/tests/eos/case5.c
index f0bd8ca..68b3c54 100644
--- a/tests/eos/case5.c
+++ b/tests/eos/case5.c
@@ -29,11 +29,11 @@
   g_return_val_if_fail(pipeline != NULL, 1);
 
   src = gst_elementfactory_make("fakesrc","src");
-  gtk_object_set (GTK_OBJECT (src), "num_buffers", 4, NULL);
+  g_object_set (G_OBJECT (src), "num_buffers", 4, NULL);
   g_return_val_if_fail(src != NULL, 2);
 
   identity = gst_elementfactory_make("identity","identity");
-  gtk_object_set (GTK_OBJECT (identity), "sleep_time", 1000000, NULL);
+  g_object_set (G_OBJECT (identity), "sleep_time", 1000000, NULL);
   g_return_val_if_fail(identity != NULL, 3);
 
   sink = gst_elementfactory_make("fakesink","sink");
@@ -52,7 +52,7 @@
   gst_element_connect(identity,"src",sink,"sink");
 
   src2 = gst_elementfactory_make("fakesrc","src2");
-  gtk_object_set (GTK_OBJECT (src2), "num_buffers", 1, NULL);
+  g_object_set (G_OBJECT (src2), "num_buffers", 1, NULL);
   g_return_val_if_fail(src2 != NULL, 2);
 
   identity2 = gst_elementfactory_make("identity","identity2");
@@ -68,10 +68,10 @@
   gst_element_connect(src2,"src",identity2,"sink");
   gst_element_connect(identity2,"src",sink2,"sink");
 
-  gtk_signal_connect (GTK_OBJECT (src), "eos", eos_signal_element, NULL);
-  gtk_signal_connect (GTK_OBJECT (src2), "eos", eos_signal_element, NULL);
-  gtk_signal_connect (GTK_OBJECT (pipeline), "eos", eos_signal, NULL);
-  gtk_signal_connect (GTK_OBJECT (thread), "eos", eos_signal_element, NULL);
+  g_signal_connectc (G_OBJECT (src), "eos", eos_signal_element, NULL, FALSE);
+  g_signal_connectc (G_OBJECT (src2), "eos", eos_signal_element, NULL, FALSE);
+  g_signal_connectc (G_OBJECT (pipeline), "eos", eos_signal, NULL, FALSE);
+  g_signal_connectc (G_OBJECT (thread), "eos", eos_signal_element, NULL, FALSE);
 
   gst_element_set_state(GST_ELEMENT(pipeline),GST_STATE_PLAYING);
 
diff --git a/tests/eos/case6.c b/tests/eos/case6.c
index 06c9af5..54a0f0b 100644
--- a/tests/eos/case6.c
+++ b/tests/eos/case6.c
@@ -29,14 +29,14 @@
   g_return_val_if_fail(pipeline != NULL, 1);
 
   src2 = gst_elementfactory_make("fakesrc","src2");
-  gtk_object_set (GTK_OBJECT (src2), "num_buffers", 4, NULL);
+  g_object_set (G_OBJECT (src2), "num_buffers", 4, NULL);
   g_return_val_if_fail(src2 != NULL, 2);
 
   identity2 = gst_elementfactory_make("identity","identity2");
   g_return_val_if_fail(identity2 != NULL, 3);
 
   queue = gst_elementfactory_make("queue","queue");
-  gtk_object_set (GTK_OBJECT (queue), "max_level", 1, NULL);
+  g_object_set (G_OBJECT (queue), "max_level", 1, NULL);
   g_return_val_if_fail(queue != NULL, 4);
 
   gst_element_connect(src2,"src",identity2,"sink");
@@ -47,7 +47,7 @@
   gst_bin_add(pipeline,GST_ELEMENT(queue));
 
   identity = gst_elementfactory_make("identity","identity");
-  //gtk_object_set (GTK_OBJECT (identity), "sleep_time", 1000000, NULL);
+  //g_object_set (G_OBJECT (identity), "sleep_time", 1000000, NULL);
   g_return_val_if_fail(identity != NULL, 3);
 
   sink = gst_elementfactory_make("fakesink","sink");
@@ -64,10 +64,10 @@
   gst_element_connect(queue,"src",identity,"sink");
   gst_element_connect(identity,"src",sink,"sink");
 
-  gtk_signal_connect (GTK_OBJECT (src2), "eos", eos_signal_element, NULL);
-  gtk_signal_connect (GTK_OBJECT (queue), "eos", eos_signal_element, NULL);
-  gtk_signal_connect (GTK_OBJECT (pipeline), "eos", eos_signal, NULL);
-  gtk_signal_connect (GTK_OBJECT (thread), "eos", eos_signal_element, NULL);
+  g_signal_connectc (G_OBJECT (src2), "eos", eos_signal_element, NULL, FALSE);
+  g_signal_connectc (G_OBJECT (queue), "eos", eos_signal_element, NULL, FALSE);
+  g_signal_connectc (G_OBJECT (pipeline), "eos", eos_signal, NULL, FALSE);
+  g_signal_connectc (G_OBJECT (thread), "eos", eos_signal_element, NULL, FALSE);
 
   gst_element_set_state(GST_ELEMENT(pipeline),GST_STATE_PLAYING);
 
diff --git a/tests/eos/case7.c b/tests/eos/case7.c
index 69b0d37..0b65967 100644
--- a/tests/eos/case7.c
+++ b/tests/eos/case7.c
@@ -14,9 +14,9 @@
   gst_element_set_state (GST_ELEMENT (element), GST_STATE_NULL);
 
   g_print ("quiting main loop\n");
-  gdk_threads_enter ();
-  gtk_main_quit();
-  gdk_threads_leave ();
+  //gdk_threads_enter ();
+  //g_main_quit();
+  //gdk_threads_leave ();
   g_print ("quited main loop\n");
 }
 
@@ -35,7 +35,7 @@
   g_return_val_if_fail(bin != NULL, 1);
 
   src = gst_elementfactory_make ("fakesrc", "src");
-  gtk_object_set (GTK_OBJECT (src), "num_buffers", 1, NULL);
+  g_object_set (G_OBJECT (src), "num_buffers", 1, NULL);
   g_return_val_if_fail (src != NULL, 2);
 
   identity = gst_elementfactory_make ("identity", "identity");
@@ -52,15 +52,15 @@
   gst_element_connect(src, "src", identity, "sink");
   gst_element_connect(identity, "src", sink, "sink");
 
-  gtk_signal_connect (GTK_OBJECT (src), "eos", eos_signal_element, NULL);
-  gtk_signal_connect (GTK_OBJECT (bin), "eos", eos_signal_element, NULL);
-  gtk_signal_connect (GTK_OBJECT (thread), "eos", eos_signal, NULL);
+  g_signal_connectc (G_OBJECT (src), "eos", eos_signal_element, NULL, FALSE);
+  g_signal_connectc (G_OBJECT (bin), "eos", eos_signal_element, NULL, FALSE);
+  g_signal_connectc (G_OBJECT (thread), "eos", eos_signal, NULL, FALSE);
 
   gst_element_set_state (GST_ELEMENT (thread), GST_STATE_PLAYING);
 
-  gdk_threads_enter ();
-  gtk_main();
-  gdk_threads_leave ();
+  //gdk_threads_enter ();
+  //g_main();
+  //gdk_threads_leave ();
 
   g_print ("quiting\n");
 
diff --git a/tests/incsched.c b/tests/incsched.c
index 9f150e7..1e63534 100644
--- a/tests/incsched.c
+++ b/tests/incsched.c
@@ -127,7 +127,7 @@
 
 //return;
   g_print("\n\nSetting EOS on fakesrc and iterating again:\n");
-  gtk_object_set(GTK_OBJECT(src),"eos",TRUE,NULL);
+  g_object_set(G_OBJECT(src),"eos",TRUE,NULL);
   gst_bin_iterate(thread);
 
   g_print("\n\nIterating:\n");
diff --git a/tests/mp1vid.c b/tests/mp1vid.c
index 8353110..d2a1e8f 100644
--- a/tests/mp1vid.c
+++ b/tests/mp1vid.c
@@ -46,11 +46,11 @@
   pipeline = gst_pipeline_new("pipeline");
   sourcethread = gst_elementfactory_make("thread","sourcethread");
   src = gst_elementfactory_make("disksrc","src");
-  gtk_object_set(GTK_OBJECT(src),"location","/home/omega/media/AlienSong.mpg",NULL);
+  g_object_set(G_OBJECT(src),"location","/home/omega/media/AlienSong.mpg",NULL);
   parse = gst_elementfactory_make("mpeg1parse","parse");
 
-  gtk_signal_connect(GTK_OBJECT(parse),"new_pad",
-                      GTK_SIGNAL_FUNC(new_pad),pipeline);
+  g_signal_connectc(G_OBJECT(parse),"new_pad",
+                      G_CALLBACK(new_pad),pipeline,FALSE);
 
   gst_bin_add(GST_BIN(sourcethread),src);
   gst_bin_add(GST_BIN(sourcethread),parse);
diff --git a/tests/mp3encode.c b/tests/mp3encode.c
index f5bc74d..2a61fc0 100644
--- a/tests/mp3encode.c
+++ b/tests/mp3encode.c
@@ -56,15 +56,15 @@
 
   src = gst_elementfactory_make("fdsrc","src");
   g_return_val_if_fail(src != NULL,1);
-  gtk_object_set(GTK_OBJECT(src),"location",fdin,NULL);
+  g_object_set(G_OBJECT(src),"location",fdin,NULL);
 
   lame = gst_elementfactory_make("lame","encoder");
   g_return_val_if_fail(lame != NULL,2);
-  gtk_object_set(GTK_OBJECT(lame),"bitrate",bitrate,NULL);
+  g_object_set(G_OBJECT(lame),"bitrate",bitrate,NULL);
 
   sink = gst_elementfactory_make("fdsink","sink");
   g_return_val_if_fail(sink != NULL,3);
-  gtk_object_set(GTK_OBJECT(src),"fd",fdout,NULL);
+  g_object_set(G_OBJECT(src),"fd",fdout,NULL);
 
   gst_bin_add(GST_BIN(pipeline),src);
   gst_bin_add(GST_BIN(pipeline),lame);
diff --git a/tests/old/examples/Makefile.am b/tests/old/examples/Makefile.am
index cbe7fda..6fe9c9c 100644
--- a/tests/old/examples/Makefile.am
+++ b/tests/old/examples/Makefile.am
@@ -9,3 +9,9 @@
           helloworld helloworld2 \
           queue queue2 queue3 queue4 \
           launch thread xml plugins typefind mixer cutter
+
+DIST_SUBDIRS = autoplug \
+          helloworld helloworld2 \
+          queue queue2 queue3 queue4 \
+          launch thread xml plugins typefind mixer cutter
+
diff --git a/tests/old/examples/cutter/cutter.c b/tests/old/examples/cutter/cutter.c
index 7062722..5954eee 100644
--- a/tests/old/examples/cutter/cutter.c
+++ b/tests/old/examples/cutter/cutter.c
@@ -53,8 +53,8 @@
 	ct->tm_hour, ct->tm_min, ct->tm_sec);
   }
   g_print ("DEBUG: cut_start: setting new location to %s\n", buffer);
-  gtk_object_set (GTK_OBJECT (disksink), "location", buffer, NULL);
-  gtk_object_set (GTK_OBJECT (disksink), "type", 4, NULL);
+  g_object_set (G_OBJECT (disksink), "location", buffer, NULL);
+  g_object_set (G_OBJECT (disksink), "type", 4, NULL);
 
   gst_element_set_state (main_bin, GST_STATE_PLAYING);
   ++id;
@@ -78,7 +78,7 @@
   gst_element_set_state (main_bin, GST_STATE_PAUSED);
 
   g_print ("DEBUG: cut_stop: setting new location\n");
-  gtk_object_set (GTK_OBJECT (disksink), "location", "/dev/null", NULL);
+  g_object_set (G_OBJECT (disksink), "location", "/dev/null", NULL);
 
   gst_element_set_state (main_bin, GST_STATE_PLAYING);
   g_print ("stop_cut_signal done\n");
@@ -116,7 +116,7 @@
   /* create cutter */
   cutter = gst_elementfactory_make ("cutter", "cutter");
 
-  gtk_object_set (GTK_OBJECT (cutter), 
+  g_object_set (G_OBJECT (cutter), 
 	"threshold_dB", -40.0, 
 	"runlength", 0.5,
 	NULL);
@@ -126,14 +126,14 @@
 
   /* set params */
 
-  gtk_object_set (GTK_OBJECT (audiosrc), "frequency", 44100, 
+  g_object_set (G_OBJECT (audiosrc), "frequency", 44100, 
                                          "channels", 1,
   					 "format", 16, NULL);
 
   encoder = gst_elementfactory_make ("passthrough", "encoder");
   disksink = gst_elementfactory_make ("afsink", "disk_sink");
 
-  gtk_object_set (GTK_OBJECT (disksink), "location", "/dev/null", NULL);
+  g_object_set (G_OBJECT (disksink), "location", "/dev/null", NULL);
 
   thread = gst_thread_new ("thread");
   g_assert (thread != NULL);
@@ -168,10 +168,10 @@
 
   /* set signal handlers */
   g_print ("setting signal handlers\n");
-  gtk_signal_connect (GTK_OBJECT(cutter), "cut_start",
-                      GTK_SIGNAL_FUNC(cut_start_signal), NULL);
-  gtk_signal_connect (GTK_OBJECT(cutter), "cut_stop",
-                      GTK_SIGNAL_FUNC(cut_stop_signal), NULL);
+  g_signal_connectc (G_OBJECT(cutter), "cut_start",
+                     (GCallback)cut_start_signal, NULL, FALSE);
+  g_signal_connectc (G_OBJECT(cutter), "cut_stop",
+                     (GCallback)cut_stop_signal, NULL, FALSE);
 
   /* start playing */
   g_print ("setting to play\n");
diff --git a/tests/old/examples/helloworld/helloworld.c b/tests/old/examples/helloworld/helloworld.c
index 9e3f93e..74e2a4f 100644
--- a/tests/old/examples/helloworld/helloworld.c
+++ b/tests/old/examples/helloworld/helloworld.c
@@ -27,9 +27,9 @@
 
   /* create a disk reader */
   disksrc = gst_elementfactory_make("disksrc", "disk_source");
-  gtk_object_set(GTK_OBJECT(disksrc),"location", argv[1],NULL);
-  gtk_signal_connect(GTK_OBJECT(disksrc),"eos",
-                     GTK_SIGNAL_FUNC(eos),NULL);
+  g_object_set(G_OBJECT(disksrc),"location", argv[1],NULL);
+  g_signal_connectc(G_OBJECT(disksrc),"eos",
+                     G_CALLBACK(eos),NULL,FALSE);
 
   /* now it's time to get the parser */
   parse = gst_elementfactory_make("mp3parse","parse");
diff --git a/tests/old/examples/helloworld2/helloworld2.c b/tests/old/examples/helloworld2/helloworld2.c
index 19e0b1e..fc1dcd1 100644
--- a/tests/old/examples/helloworld2/helloworld2.c
+++ b/tests/old/examples/helloworld2/helloworld2.c
@@ -32,9 +32,9 @@
   /* create a disk reader */
   disksrc = gst_elementfactory_make("disksrc", "disk_source");
   g_assert(disksrc != NULL);
-  gtk_object_set(GTK_OBJECT(disksrc),"location", argv[1],NULL);
-  gtk_signal_connect(GTK_OBJECT(disksrc),"eos",
-                     GTK_SIGNAL_FUNC(eos),NULL);
+  g_object_set(G_OBJECT(disksrc),"location", argv[1],NULL);
+  g_signal_connectc(G_OBJECT(disksrc),"eos",
+                     G_CALLBACK(eos),NULL,FALSE);
 
   /* and an audio sink */
   osssink = gst_elementfactory_make("osssink", "play_audio");
diff --git a/tests/old/examples/mixer/mixer.c b/tests/old/examples/mixer/mixer.c
index 4461d47..998bafb 100644
--- a/tests/old/examples/mixer/mixer.c
+++ b/tests/old/examples/mixer/mixer.c
@@ -270,14 +270,14 @@
   g_assert(channel->disksrc != NULL);    
 
   GST_DEBUG(0, "c_i_p : setting location\n");
-  gtk_object_set(GTK_OBJECT(channel->disksrc),"location", location, NULL);
+  g_object_set(G_OBJECT(channel->disksrc),"location", location, NULL);
 
   /* add disksrc to the bin before autoplug */
   gst_bin_add(GST_BIN(channel->pipe), channel->disksrc);
 
   /* connect signal to eos of disksrc */
-  gtk_signal_connect(GTK_OBJECT(channel->disksrc),"eos",
-                     GTK_SIGNAL_FUNC(eos),NULL);
+  g_signal_connectc (G_OBJECT(channel->disksrc),"eos",
+                     G_CALLBACK(eos),NULL,FALSE);
 
 
 #ifdef DEBUG
@@ -395,7 +395,7 @@
   char buffer[30];
 
   sprintf (buffer, "%f:%f", cp_time, cp_level);
-  gtk_object_set(GTK_OBJECT(volenv), "controlpoint", buffer, NULL);
+  g_object_set(G_OBJECT(volenv), "controlpoint", buffer, NULL);
 
 }
 
diff --git a/tests/old/examples/plugins/example.c b/tests/old/examples/plugins/example.c
index 05db9b1..0b61fb1 100644
--- a/tests/old/examples/plugins/example.c
+++ b/tests/old/examples/plugins/example.c
@@ -100,8 +100,8 @@
 
 static void	gst_example_chain	(GstPad *pad, GstBuffer *buf);
 
-static void	gst_example_set_arg	(GtkObject *object,GtkArg *arg,guint id);
-static void	gst_example_get_arg	(GtkObject *object,GtkArg *arg,guint id);
+static void	gst_example_set_property	(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+static void	gst_example_get_property	(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
 /* These hold the constructed pad templates, which are created during
  * plugin load, and used during element instantiation.
@@ -123,29 +123,29 @@
  * register the type, providing the name of the class, struct sizes,
  * and pointers to the various functions that define the class.
  */
-GtkType
+GType
 gst_example_get_type(void)
 {
-  static GtkType example_type = 0;
+  static GType example_type = 0;
 
   if (!example_type) {
-    static const GtkTypeInfo example_info = {
-      "GstExample",
+    static const GTypeInfo example_info = {
+      sizeof(GstExampleClass),      NULL,
+      NULL,
+      (GClassInitFunc)gst_example_class_init,
+      NULL,
+      NULL,
       sizeof(GstExample),
-      sizeof(GstExampleClass),
-      (GtkClassInitFunc)gst_example_class_init,
-      (GtkObjectInitFunc)gst_example_init,
-      (GtkArgSetFunc)NULL,	/* These last three are depracated */
-      (GtkArgGetFunc)NULL,
-      (GtkClassInitFunc)NULL,
+      0,
+      (GInstanceInitFunc)gst_example_init,
     };
-    example_type = gtk_type_unique(GST_TYPE_ELEMENT,&example_info);
+    example_type = g_type_register_static(GST_TYPE_ELEMENT, "GstExample", &example_info, 0);
   }
   return example_type;
 }
 
 /* In order to create an instance of an object, the class must be
- * initialized by this function.  GtkObject will take care of running
+ * initialized by this function.  GObject will take care of running
  * it, based on the pointer to the function provided above.
  */
 static void
@@ -154,41 +154,40 @@
   /* Class pointers are needed to supply pointers to the private
    * implementations of parent class methods.
    */
-  GtkObjectClass *gtkobject_class;
+  GObjectClass *gobject_class;
   GstElementClass *gstelement_class;
 
   /* Since the example class contains the parent classes, you can simply
    * cast the pointer to get access to the parent classes.
    */
-  gtkobject_class = (GtkObjectClass*)klass;
+  gobject_class = (GObjectClass*)klass;
   gstelement_class = (GstElementClass*)klass;
 
   /* The parent class is needed for class method overrides. */
-  parent_class = gtk_type_class(GST_TYPE_ELEMENT);
+  parent_class = g_type_class_ref(GST_TYPE_ELEMENT);
 
   /* Here we add an argument to the object.  This argument is an integer,
    * and can be both read and written.
    */
-  gtk_object_add_arg_type("GstExample::active", GTK_TYPE_INT,
-                          GTK_ARG_READWRITE, ARG_ACTIVE);
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_ACTIVE,
+    g_param_spec_int("active","active","active",
+                     G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
 
   /* Here we add a signal to the object. This is avery useless signal
    * called asdf. The signal will also pass a pointer to the listeners
    * which happens to be the example element itself */
   gst_example_signals[ASDF] =
-    gtk_signal_new("asdf", GTK_RUN_LAST, gtkobject_class->type,
-                   GTK_SIGNAL_OFFSET (GstExampleClass, asdf),
-                   gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
+    g_signal_newc("asdf", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+                   G_STRUCT_OFFSET (GstExampleClass, asdf), NULL, NULL,
+                   g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
                    GST_TYPE_EXAMPLE);
 
-  gtk_object_class_add_signals (gtkobject_class, gst_example_signals,
-                                LAST_SIGNAL);
 
   /* The last thing is to provide the functions that implement get and set
    * of arguments.
    */
-  gtkobject_class->set_arg = gst_example_set_arg;
-  gtkobject_class->get_arg = gst_example_get_arg;
+  gobject_class->set_property = gst_example_set_property;
+  gobject_class->get_property = gst_example_get_property;
 }
 
 /* This function is responsible for initializing a specific instance of
@@ -277,8 +276,8 @@
     gst_pad_push(example->srcpad,outbuf);
 
     /* For fun we'll emit our useless signal here */
-    gtk_signal_emit (GTK_OBJECT (example), gst_example_signals[ASDF],
-                     example);
+    g_signal_emit(G_OBJECT (example), gst_example_signals[ASDF], 0,
+                  example);
 
   /* If we're not doing something, just send the original incoming buffer. */
   } else {
@@ -290,7 +289,7 @@
  * enable the element to respond to various arguments.
  */
 static void
-gst_example_set_arg (GtkObject *object,GtkArg *arg,guint id)
+gst_example_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
   GstExample *example;
 
@@ -301,14 +300,14 @@
   example = GST_EXAMPLE(object);
 
   /* Check the argument id to see which argument we're setting. */
-  switch (id) {
+  switch (prop_id) {
     case ARG_ACTIVE:
       /* Here we simply copy the value of the argument to our private
        * storage.  More complex operations can be done, but beware that
        * they may occur at any time, possibly even while your chain function
        * is running, if you are using threads.
        */
-      example->active = GTK_VALUE_INT(*arg);
+      example->active = g_value_get_int (value);
       g_print("example: set active to %d\n",example->active);
       break;
     default:
@@ -318,7 +317,7 @@
 
 /* The set function is simply the inverse of the get fuction. */
 static void
-gst_example_get_arg (GtkObject *object,GtkArg *arg,guint id)
+gst_example_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
   GstExample *example;
 
@@ -326,12 +325,12 @@
   g_return_if_fail(GST_IS_EXAMPLE(object));
   example = GST_EXAMPLE(object);
 
-  switch (id) {
+  switch (prop_id) {
     case ARG_ACTIVE:
-      GTK_VALUE_INT(*arg) = example->active;
+      g_value_set_int (value, example->active);
       break;
     default:
-      arg->type = GTK_TYPE_INVALID;
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
@@ -345,7 +344,7 @@
   GstElementFactory *factory;
 
   /* We need to create an ElementFactory for each element we provide.
-   * This consists of the name of the element, the GtkType identifier,
+   * This consists of the name of the element, the GType identifier,
    * and a pointer to the details structure at the top of the file.
    */
   factory = gst_elementfactory_new("example", GST_TYPE_EXAMPLE, &example_details);
diff --git a/tests/old/examples/plugins/example.h b/tests/old/examples/plugins/example.h
index 840b8a3..36ae999 100644
--- a/tests/old/examples/plugins/example.h
+++ b/tests/old/examples/plugins/example.h
@@ -60,7 +60,7 @@
 };
 
 /* Five standard preprocessing macros are used in the Gtk+ object system.
- * The first uses the object's _get_type function to return the GtkType
+ * The first uses the object's _get_type function to return the GType
  * of the object.
  */
 #define GST_TYPE_EXAMPLE \
@@ -69,21 +69,21 @@
  * is not the right type, a warning will be generated on stderr.
  */
 #define GST_EXAMPLE(obj) \
-  (GTK_CHECK_CAST((obj),GST_TYPE_EXAMPLE,GstExample))
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_EXAMPLE,GstExample))
 /* The third is a checking cast of the class instead of the object. */
 #define GST_EXAMPLE_CLASS(klass) \
-  (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_EXAMPLE,GstExample))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_EXAMPLE,GstExample))
 /* The last two simply check to see if the passed pointer is an object or
  * class of the correct type. */
 #define GST_IS_EXAMPLE(obj) \
-  (GTK_CHECK_TYPE((obj),GST_TYPE_EXAMPLE))
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_EXAMPLE))
 #define GST_IS_EXAMPLE_CLASS(obj) \
-  (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_EXAMPLE))
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_EXAMPLE))
 
 /* This is the only prototype needed, because it is used in the above
  * GST_TYPE_EXAMPLE macro.
  */
-GtkType gst_example_get_type(void);
+GType gst_example_get_type(void);
 
 
 #ifdef __cplusplus
diff --git a/tests/old/examples/queue/queue.c b/tests/old/examples/queue/queue.c
index 7137f11..763a035 100644
--- a/tests/old/examples/queue/queue.c
+++ b/tests/old/examples/queue/queue.c
@@ -25,7 +25,7 @@
   /* create a disk reader */
   disksrc = gst_elementfactory_make("disksrc", "disk_source");
   g_assert(disksrc != NULL);
-  gtk_object_set(GTK_OBJECT(disksrc),"location", argv[1],NULL);
+  g_object_set(G_OBJECT(disksrc),"location", argv[1],NULL);
 
   parse = gst_elementfactory_make("mp3parse", "parse");
   decode = gst_elementfactory_make("mpg123", "decode");
diff --git a/tests/old/examples/queue2/queue2.c b/tests/old/examples/queue2/queue2.c
index 837732e..19d4478 100644
--- a/tests/old/examples/queue2/queue2.c
+++ b/tests/old/examples/queue2/queue2.c
@@ -35,9 +35,9 @@
   /* create a disk reader */
   disksrc = gst_elementfactory_make("disksrc", "disk_source");
   g_assert(disksrc != NULL);
-  gtk_object_set(GTK_OBJECT(disksrc),"location", argv[1],NULL);
-  gtk_signal_connect(GTK_OBJECT(disksrc),"eos",
-                     GTK_SIGNAL_FUNC(eos), thread);
+  g_object_set(G_OBJECT(disksrc),"location", argv[1],NULL);
+  g_signal_connectc (G_OBJECT(disksrc),"eos",
+                     G_CALLBACK(eos), thread, FALSE);
 
   queue = gst_elementfactory_make("queue", "queue");
 
diff --git a/tests/old/examples/queue3/queue3.c b/tests/old/examples/queue3/queue3.c
index 152cd1e..fbc2dcd 100644
--- a/tests/old/examples/queue3/queue3.c
+++ b/tests/old/examples/queue3/queue3.c
@@ -35,9 +35,9 @@
   /* create a disk reader */
   disksrc = gst_elementfactory_make("disksrc", "disk_source");
   g_assert(disksrc != NULL);
-  gtk_object_set(GTK_OBJECT(disksrc),"location", argv[1],NULL);
-  gtk_signal_connect(GTK_OBJECT(disksrc),"eos",
-                     GTK_SIGNAL_FUNC(eos), thread);
+  g_object_set(G_OBJECT(disksrc),"location", argv[1],NULL);
+  g_signal_connectc(G_OBJECT(disksrc),"eos",
+                     G_CALLBACK(eos), thread, FALSE);
 
   queue = gst_elementfactory_make("queue", "queue");
 
diff --git a/tests/old/examples/queue4/queue4.c b/tests/old/examples/queue4/queue4.c
index cb984cc..896a54b 100644
--- a/tests/old/examples/queue4/queue4.c
+++ b/tests/old/examples/queue4/queue4.c
@@ -37,9 +37,9 @@
   /* create a disk reader */
   disksrc = gst_elementfactory_make("disksrc", "disk_source");
   g_assert(disksrc != NULL);
-  gtk_object_set(GTK_OBJECT(disksrc),"location", argv[1],NULL);
-  gtk_signal_connect(GTK_OBJECT(disksrc),"eos",
-                     GTK_SIGNAL_FUNC(eos), thread);
+  g_object_set(G_OBJECT(disksrc),"location", argv[1],NULL);
+  g_signal_connectc(G_OBJECT(disksrc),"eos",
+                     G_CALLBACK(eos), thread, FALSE);
 
   queue = gst_elementfactory_make("queue", "queue");
   queue2 = gst_elementfactory_make("queue", "queue2");
diff --git a/tests/old/examples/thread/thread.c b/tests/old/examples/thread/thread.c
index 5c691a0..afc3892 100644
--- a/tests/old/examples/thread/thread.c
+++ b/tests/old/examples/thread/thread.c
@@ -36,9 +36,9 @@
   /* create a disk reader */
   disksrc = gst_elementfactory_make("disksrc", "disk_source");
   g_assert(disksrc != NULL);
-  gtk_object_set(GTK_OBJECT(disksrc),"location", argv[1],NULL);
-  gtk_signal_connect(GTK_OBJECT(disksrc),"eos",
-                     GTK_SIGNAL_FUNC(eos), thread);
+  g_object_set(G_OBJECT(disksrc),"location", argv[1],NULL);
+  g_signal_connectc(G_OBJECT(disksrc),"eos",
+                     G_CALLBACK(eos), thread, FALSE);
 
   /* and an audio sink */
   osssink = gst_elementfactory_make("osssink", "play_audio");
diff --git a/tests/old/examples/typefind/typefind.c b/tests/old/examples/typefind/typefind.c
index 4e19f26..a69a296 100644
--- a/tests/old/examples/typefind/typefind.c
+++ b/tests/old/examples/typefind/typefind.c
@@ -34,7 +34,7 @@
   /* create a disk reader */
   disksrc = gst_elementfactory_make("disksrc", "disk_source");
   g_assert(disksrc != NULL);
-  gtk_object_set(GTK_OBJECT(disksrc),"location", argv[1],NULL);
+  g_object_set(G_OBJECT(disksrc),"location", argv[1],NULL);
 
   typefind = gst_elementfactory_make("typefind", "typefind");
   g_assert(typefind != NULL);
@@ -43,8 +43,8 @@
   gst_bin_add(GST_BIN(bin), disksrc);
   gst_bin_add(GST_BIN(bin), typefind);
 
-  gtk_signal_connect (GTK_OBJECT (typefind), "have_type", 
-		  type_found, NULL);
+  g_signal_connectc (G_OBJECT (typefind), "have_type", 
+		  type_found, NULL, FALSE);
 
   gst_pad_connect(gst_element_get_pad(disksrc,"src"),
                   gst_element_get_pad(typefind,"sink"));
diff --git a/tests/old/examples/xml/createxml.c b/tests/old/examples/xml/createxml.c
index ce8b395..e3cfa4e 100644
--- a/tests/old/examples/xml/createxml.c
+++ b/tests/old/examples/xml/createxml.c
@@ -32,12 +32,12 @@
   //thread = gst_thread_new("thread");
   thread = gst_elementfactory_make("thread", "thread");
   g_assert(thread != NULL);
-  gtk_signal_connect (GTK_OBJECT (thread), "object_saved", object_saved, g_strdup ("decoder thread"));
+  g_signal_connectc (G_OBJECT (thread), "object_saved", object_saved, g_strdup ("decoder thread"), FALSE);
 
   thread2 = gst_elementfactory_make("thread", "thread2");
   //thread2 = gst_thread_new("thread2");
   g_assert(thread2 != NULL);
-  gtk_signal_connect (GTK_OBJECT (thread2), "object_saved", object_saved, g_strdup ("render thread"));
+  g_signal_connectc (G_OBJECT (thread2), "object_saved", object_saved, g_strdup ("render thread"), FALSE);
 
   /* create a new bin to hold the elements */
   bin = gst_bin_new("bin");
@@ -46,7 +46,7 @@
   /* create a disk reader */
   disksrc = gst_elementfactory_make("disksrc", "disk_source");
   g_assert(disksrc != NULL);
-  gtk_object_set(GTK_OBJECT(disksrc),"location", argv[1],NULL);
+  g_object_set(G_OBJECT(disksrc),"location", argv[1],NULL);
 
   queue = gst_elementfactory_make("queue", "queue");
   queue2 = gst_elementfactory_make("queue", "queue2");
diff --git a/tests/old/examples/xml/runxml.c b/tests/old/examples/xml/runxml.c
index 400e825..4fbaf2a 100644
--- a/tests/old/examples/xml/runxml.c
+++ b/tests/old/examples/xml/runxml.c
@@ -35,7 +35,7 @@
 
   xml = gst_xml_new ();
 
-  gtk_signal_connect (GTK_OBJECT (xml), "object_loaded", xml_loaded, xml);
+  g_signal_connectc (G_OBJECT (xml), "object_loaded", xml_loaded, xml, FALSE);
 
   ret = gst_xml_parse_file(xml, "xmlTest.gst", NULL);
   g_assert (ret == TRUE);
diff --git a/tests/paranoia.c b/tests/paranoia.c
index 0325e79..b3642a1 100644
--- a/tests/paranoia.c
+++ b/tests/paranoia.c
@@ -21,11 +21,11 @@
 
   paranoia = gst_elementfactory_make("cdparanoia","paranoia");
   g_return_val_if_fail(paranoia != NULL,3);
-  gtk_object_set(GTK_OBJECT(paranoia),"paranoia_mode",0,NULL);
-//  gtk_object_set(GTK_OBJECT(paranoia),"start_sector",0,"end_sector",75,NULL);
+  g_object_set(G_OBJECT(paranoia),"paranoia_mode",0,NULL);
+//  g_object_set(G_OBJECT(paranoia),"start_sector",0,"end_sector",75,NULL);
 
   queue = gst_elementfactory_make("queue","queue");
-  gtk_object_set(GTK_OBJECT(queue),"max_level",750,NULL);
+  g_object_set(G_OBJECT(queue),"max_level",750,NULL);
   g_return_val_if_fail(queue != NULL,4);
 
   osssink = gst_elementfactory_make("fakesink","osssink");
@@ -40,8 +40,8 @@
   gst_element_connect(paranoia,"src",queue,"sink");
   gst_element_connect(queue,"src",audio_thread,"sink");
 
-  gtk_signal_connect(GTK_OBJECT(gst_element_get_pad(paranoia,"src")),"eos",
-    GTK_SIGNAL_FUNC(paranoia_eos),NULL);
+  g_signal_connectc(G_OBJECT(gst_element_get_pad(paranoia,"src")),"eos",
+    G_CALLBACK(paranoia_eos),NULL,FALSE);
 
   gst_element_set_state(GST_ELEMENT(pipeline),GST_STATE_PLAYING);
   if (GST_STATE(paranoia) != GST_STATE_PLAYING) fprintf(stderr,"error: state not set\n");
diff --git a/tests/queue.c b/tests/queue.c
index 901f66c..10d495a 100644
--- a/tests/queue.c
+++ b/tests/queue.c
@@ -21,7 +21,7 @@
 fprintf(stderr,"QUEUE: queue\n");
   queue = gst_elementfactory_make("queue","queue");
   g_return_val_if_fail(4,queue != NULL);
-  gtk_object_set(GTK_OBJECT(queue),"max_level",1,NULL);
+  g_object_set(G_OBJECT(queue),"max_level",1,NULL);
 fprintf(stderr,"QUEUE: fakesink\n");
   sink = gst_elementfactory_make("fakesink","sink");
   g_return_val_if_fail(5,sink != NULL);
diff --git a/tests/rip.c b/tests/rip.c
index 9909a2c..56ff7d0 100644
--- a/tests/rip.c
+++ b/tests/rip.c
@@ -29,15 +29,15 @@
 
   paranoia = gst_elementfactory_make("cdparanoia","paranoia");
   g_return_val_if_fail(paranoia != NULL,2);
-  gtk_object_set(GTK_OBJECT(paranoia),"paranoia_mode",0,NULL);
-//  gtk_object_set(GTK_OBJECT(paranoia),"start_sector",0,"end_sector",75,NULL);
+  g_object_set(G_OBJECT(paranoia),"paranoia_mode",0,NULL);
+//  g_object_set(G_OBJECT(paranoia),"start_sector",0,"end_sector",75,NULL);
 
   lame = gst_elementfactory_make("lame","lame");
   g_return_val_if_fail(lame != NULL,3);
-  gtk_object_set(GTK_OBJECT(lame),"bitrate",128,NULL);
+  g_object_set(G_OBJECT(lame),"bitrate",128,NULL);
   sink = gst_elementfactory_make("fdsink","fdsink");
   g_return_val_if_fail(sink != NULL,4);
-  gtk_object_set(GTK_OBJECT(sink),"fd",outfile,NULL);
+  g_object_set(G_OBJECT(sink),"fd",outfile,NULL);
 
   fprintf(stderr,"paranoia is %p, lame is %p, sink is %p\n",paranoia,lame,sink);
   gst_bin_add(GST_BIN(pipeline),paranoia);
diff --git a/tests/sched/runxml.c b/tests/sched/runxml.c
index 044b51d..284e316 100644
--- a/tests/sched/runxml.c
+++ b/tests/sched/runxml.c
@@ -54,8 +54,8 @@
 
     src = gst_bin_get_by_name (GST_BIN (bin), "fakesrc");
     if (src) {
-      gtk_signal_connect (GTK_OBJECT(src), "handoff",
-                   GTK_SIGNAL_FUNC(buffer_handoff_src), bin);
+      g_signal_connectc (G_OBJECT(src), "handoff",
+                   G_CALLBACK(buffer_handoff_src), bin,FALSE);
     }
     else {
       g_print ("could not find src element\n");
@@ -64,8 +64,8 @@
     
     sink = gst_bin_get_by_name (GST_BIN (bin), "fakesink");
     if (sink) {
-      gtk_signal_connect (GTK_OBJECT(sink), "handoff",
-                   GTK_SIGNAL_FUNC(buffer_handoff_sink), bin);
+      g_signal_connectc (G_OBJECT(sink), "handoff",
+                   G_CALLBACK(buffer_handoff_sink), bin,FALSE);
     }
     else {
       g_print ("could not find sink element\n");
diff --git a/tests/states.c b/tests/states.c
index 26dbc74..34a54dd 100644
--- a/tests/states.c
+++ b/tests/states.c
@@ -25,16 +25,16 @@
   bin = gst_bin_new("bin");
   g_return_val_if_fail(1,bin != NULL);
 
-  gtk_signal_connect(GTK_OBJECT(src),"state_change",
-                     GTK_SIGNAL_FUNC(state_change),NULL);
-  gtk_signal_connect(GTK_OBJECT(subbin),"state_change",
-                     GTK_SIGNAL_FUNC(state_change),NULL);
-  gtk_signal_connect(GTK_OBJECT(filter),"state_change",
-                     GTK_SIGNAL_FUNC(state_change),NULL);
-  gtk_signal_connect(GTK_OBJECT(sink),"state_change",
-                     GTK_SIGNAL_FUNC(state_change),NULL);
-  gtk_signal_connect(GTK_OBJECT(bin),"state_change",
-                     GTK_SIGNAL_FUNC(state_change),NULL);
+  g_signal_connectc (G_OBJECT(src),"state_change",
+                     G_CALLBACK(state_change),NULL,FALSE);
+  g_signal_connectc (G_OBJECT(subbin),"state_change",
+                     G_CALLBACK(state_change),NULL,FALSE);
+  g_signal_connectc (G_OBJECT(filter),"state_change",
+                     G_CALLBACK(state_change),NULL,FALSE);
+  g_signal_connectc (G_OBJECT(sink),"state_change",
+                     G_CALLBACK(state_change),NULL,FALSE);
+  g_signal_connectc (G_OBJECT(bin),"state_change",
+                     G_CALLBACK(state_change),NULL,FALSE);
 
   g_print("STATES: element '%s' starts at state %d(%s)\n",gst_element_get_name(src),
 	GST_STATE(src),gst_element_statename(GST_STATE(src)));
diff --git a/tests/threadlock.c b/tests/threadlock.c
index 52b3807..76643f5 100644
--- a/tests/threadlock.c
+++ b/tests/threadlock.c
@@ -12,9 +12,9 @@
   pipeline = GST_BIN (gst_pipeline_new("pipeline"));
   thread = GST_BIN (gst_thread_new("thread"));
   src = gst_elementfactory_make("fakesrc","src");
-  gtk_object_set(GTK_OBJECT(src),"silent",TRUE,NULL);
+  g_object_set(G_OBJECT(src),"silent",TRUE,NULL);
   sink = gst_elementfactory_make("fakesink","sink");
-  gtk_object_set(GTK_OBJECT(sink),"silent",TRUE,NULL);
+  g_object_set(G_OBJECT(sink),"silent",TRUE,NULL);
 
   fprintf(stderr,"ADDING src\n");
   gst_bin_add(thread,src);
diff --git a/tools/gstreamer-compprep.c b/tools/gstreamer-compprep.c
index c0c3e3a..40492ad 100644
--- a/tools/gstreamer-compprep.c
+++ b/tools/gstreamer-compprep.c
@@ -10,9 +10,8 @@
   GstElement *element;
   GstPad *pad;
   GstPadTemplate *padtemplate;
-  GtkArg *args;
-  guint32 *flags;
-  gint num_args,i;
+  GParamSpec **property_specs;
+  gint num_properties,i;
 
   gst_debug_set_categories(0);
   gst_info_set_categories(0);
@@ -64,16 +63,21 @@
       }
 
       // write out the args
-      args = gtk_object_query_args(GTK_OBJECT_TYPE(element), &flags, &num_args);
-      for (i=0;i<num_args;i++) {
-        argnode = xmlNewChild (factorynode, NULL, "argument", args[i].name);
-        if (args[i].type == GST_TYPE_FILENAME) {
+      property_specs = g_object_class_list_properties(G_OBJECT_GET_CLASS (element), &num_properties);
+      for (i=0;i<num_properties;i++) {
+        GParamSpec *param = property_specs[i];
+        argnode = xmlNewChild (factorynode, NULL, "argument", param->name);
+        if (param->value_type == GST_TYPE_FILENAME) {
           xmlNewChild (argnode, NULL, "filename", NULL);
-        } else if (GTK_FUNDAMENTAL_TYPE (args[i].type) == GTK_TYPE_ENUM) {
-          GtkEnumValue *values;
+        } else if (G_IS_PARAM_SPEC_ENUM (param) == G_TYPE_ENUM) {
+          GEnumValue *values;
           gint j;
 
-          values = gtk_type_enum_get_values (args[i].type);
+#ifdef USE_GLIB2
+          values = G_ENUM_CLASS (g_type_class_ref (param->value_type))->values;
+#else
+          values = gtk_type_enum_get_values (param->value_type);
+#endif
           for (j=0;values[j].value_name;j++) {
             gchar *value = g_strdup_printf("%d",values[j].value);
             optionnode = xmlNewChild (argnode, NULL, "option", value);
diff --git a/tools/gstreamer-inspect.c b/tools/gstreamer-inspect.c
index 3b4a82c..6dd5b32 100644
--- a/tools/gstreamer-inspect.c
+++ b/tools/gstreamer-inspect.c
@@ -80,9 +80,8 @@
   GstPad *pad;
   GstRealPad *realpad;
   GstPadTemplate *padtemplate;
-  GtkArg *args, *args2;
-  guint32 *flags;
-  gint num_args,i;
+  gint num_properties,i;
+  GParamSpec **property_specs;
   GList *children;
   GstElement *child;
   gboolean have_flags;
@@ -93,8 +92,8 @@
     return -1;
   }
 
-  gstobject_class = GST_OBJECT_CLASS (GTK_OBJECT (element)->klass);
-  gstelement_class = GST_ELEMENT_CLASS (GTK_OBJECT (element)->klass);
+  gstobject_class = GST_OBJECT_CLASS (G_OBJECT_GET_CLASS (element));
+  gstelement_class = GST_ELEMENT_CLASS (G_OBJECT_GET_CLASS (element));
 
   printf("Factory Details:\n");
   printf("  Long name:\t%s\n",factory->details->longname);
@@ -120,13 +119,13 @@
         printf("  UNKNOWN!!! template: '%s'\n",padtemplate->name_template);
 
       if (padtemplate->presence == GST_PAD_ALWAYS)
-        printf("    Exists: Always\n");
+        printf("    Availability: Always\n");
       else if (padtemplate->presence == GST_PAD_SOMETIMES)
-        printf("    Exists: Sometimes\n");
+        printf("    Availability: Sometimes\n");
       else if (padtemplate->presence == GST_PAD_REQUEST)
-        printf("    Exists: Request\n");
+        printf("    Availability: On request\n");
       else
-        printf("    Exists: UNKNOWN!!!\n");
+        printf("    Availability: UNKNOWN!!!\n");
 
       if (padtemplate->caps) {
         printf("    Capabilities:\n");
@@ -254,54 +253,59 @@
   } else
     printf("  none\n");
 
-
-
+  property_specs = g_object_class_list_properties(G_OBJECT_GET_CLASS (element), &num_properties);
   printf("\nElement Arguments:\n");
-  args = gtk_object_query_args(GTK_OBJECT_TYPE(element), &flags, &num_args);
-  args2 = gtk_object_query_args(GTK_OBJECT_TYPE(element), &flags, &num_args);
-  for (i=0;i<num_args;i++) {
 
-// FIXME should say whether it's read-only or not
-    gtk_object_getv (GTK_OBJECT (element), num_args, args2);
+  for (i=0;i<num_properties;i++) {
+    GValue value = { 0, };
+    GParamSpec *param = property_specs[i];
 
-    printf("  %-40.40s: ",args[i].name);
-    switch (args[i].type) {
-      case GTK_TYPE_STRING: printf("String (Default \"%s\")", GTK_VALUE_STRING (args2[i]));break;
-      case GTK_TYPE_BOOL: printf("Boolean (Default %s)", (GTK_VALUE_BOOL (args2[i])?"true":"false"));break;
-      case GTK_TYPE_ULONG: printf("Unsigned Long (Default %lu)", GTK_VALUE_ULONG (args2[i]));break;
-      case GTK_TYPE_LONG: printf("Long (Default %ld)", GTK_VALUE_LONG (args2[i]));break;
-      case GTK_TYPE_UINT: printf("Unsigned Integer (Default %u)", GTK_VALUE_UINT (args2[i]));break;
-      case GTK_TYPE_INT: printf("Integer (Default %d)", GTK_VALUE_INT (args2[i]));break;
-      case GTK_TYPE_FLOAT: printf("Float (Default %f)", GTK_VALUE_FLOAT (args2[i]));break;
-      case GTK_TYPE_DOUBLE: printf("Double (Default %lf)", GTK_VALUE_DOUBLE (args2[i]));break;
+    g_value_init (&value, param->value_type);
+    g_object_get_property (G_OBJECT (element), param->name, &value);
+
+    printf("  %-40.40s: ",param->name);
+    switch (G_VALUE_TYPE (&value)) {
+      case G_TYPE_STRING: printf("String (Default \"%s\")", g_value_get_string (&value));break;
+      case G_TYPE_BOOLEAN: printf("Boolean (Default %s)", (g_value_get_boolean (&value)?"true":"false"));break;
+      case G_TYPE_ULONG: printf("Unsigned Long (Default %lu)", g_value_get_ulong (&value));break;
+      case G_TYPE_LONG: printf("Long (Default %ld)", g_value_get_long (&value));break;
+      case G_TYPE_UINT: printf("Unsigned Integer (Default %u)", g_value_get_uint (&value));break;
+      case G_TYPE_INT: printf("Integer (Default %d)", g_value_get_int (&value));break;
+      case G_TYPE_FLOAT: printf("Float (Default %f)", g_value_get_float (&value));break;
+      case G_TYPE_DOUBLE: printf("Double (Default %f)", g_value_get_double (&value));break;
       default:
-        if (args[i].type == GST_TYPE_FILENAME)
+        if (param->value_type == GST_TYPE_FILENAME)
           printf("Filename");
-        else if (GTK_FUNDAMENTAL_TYPE (args[i].type) == GTK_TYPE_ENUM) {
-          GtkEnumValue *values;
+        else if (G_IS_PARAM_SPEC_ENUM (param)) {
+          GEnumValue *values;
 	  guint j = 0;
 
-          printf("Enum (default %d)", GTK_VALUE_ENUM (args[i]));
-	  values = gtk_type_enum_get_values (args[i].type);
+          printf("Enum \"%s\" (default %d)", g_type_name (G_VALUE_TYPE (&value)),
+				  g_value_get_enum (&value));
+#ifdef USE_GLIB2
+	  values = G_ENUM_CLASS (g_type_class_ref (param->value_type))->values;
+#else
+	  values = gtk_type_enum_get_values (param->value_type);
+#endif
 	  while (values[j].value_name) {
             printf("\n    (%d): \t%s", values[j].value, values[j].value_nick);
 	    j++; 
 	  }
+	  //g_type_class_unref (ec);
 	}
-        else if (args[i].type == GTK_TYPE_WIDGET)
-          printf("GtkWidget");
         else
-          printf("unknown %d", args[i].type);
+          printf("unknown %d", param->value_type);
         break;
     }
     printf("\n");
   }
+    /*
   g_free (args);
-  if (num_args == 0) g_print ("  none");
+  */
+  if (num_properties == 0) g_print ("  none");
   printf("\n");
 
 
-
   // for compound elements
   if (GST_IS_BIN(element)) {
     printf("\nChildren:\n");
diff --git a/tools/gstreamer-launch.c b/tools/gstreamer-launch.c
index fdc464a..42da4f5 100644
--- a/tools/gstreamer-launch.c
+++ b/tools/gstreamer-launch.c
@@ -7,8 +7,8 @@
 static int launch_argc;
 static char **launch_argv;
 
-GtkWidget *window;
-GtkWidget *gtk_socket;
+//GtkWidget *window;
+//GtkWidget *gtk_socket;
 
 typedef void (*found_handler) (GstElement *element, gint xid, void *priv);
 
@@ -22,6 +22,7 @@
 
   children = gst_bin_get_list(bin);
 
+#if 0
   while (children) {
     GstElement *child;
      
@@ -50,6 +51,7 @@
       }
     }
   }
+#endif
 
   g_free(ccargname);
 }
@@ -57,13 +59,14 @@
 void 
 handle_have_size (GstElement *element,int width,int height) 
 {
-  gtk_widget_set_usize(gtk_socket,width,height);
-  gtk_widget_show_all(window);
+  //gtk_widget_set_usize(gtk_socket,width,height);
+  //gtk_widget_show_all(window);
 }
 
 void 
 xid_handler (GstElement *element, gint xid, void *priv) 
 {
+#if 0
   window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 
   gtk_socket = gtk_socket_new ();
@@ -79,6 +82,7 @@
 
   gtk_signal_connect (GTK_OBJECT (element), "have_size",
                       GTK_SIGNAL_FUNC (handle_have_size), element);
+#endif
 }
 
 gboolean
@@ -149,8 +153,10 @@
     fprintf(stderr,"RUNNING pipeline\n");
     gst_element_set_state (pipeline, GST_STATE_PLAYING);
 
-    gtk_idle_add(idle_func,pipeline);
-    gtk_main();
+//    g_idle_add(idle_func,pipeline);
+//    g_main_loop_run (g_main_loop_new (NULL, FALSE));
+    while (1)
+      gst_bin_iterate (GST_BIN (pipeline));
 
     gst_element_set_state (pipeline, GST_STATE_NULL);
   }
