diff --git a/INSTALL.quick b/INSTALL.quick
index b7927cf..a69a7ed 100644
--- a/INSTALL.quick
+++ b/INSTALL.quick
@@ -4,7 +4,7 @@ Prerequisites
 Rhythmbox requires the following packages:
 
 - A working GNOME platform (more specifically, you need glib 2.16, gtk+ 2.12,
-  libgnome, gconf, libglade, gnome-media, and libsoup 2.4)
+  libgnome, gconf, gnome-media, and libsoup 2.4)
 - Totem-plparser 2.22 or newer
 - GStreamer 0.10.12 or newer and associated plugin packages.
 - D-BUS 0.35 or newer
diff --git a/configure.ac b/configure.ac
index e4bdeb5..d4c61d0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -75,7 +75,6 @@ PKG_CHECK_MODULES(RHYTHMBOX,				\
 		  glib-2.0 >= $GLIB_REQS		\
 		  gio-2.0 >= $GLIB_REQS			\
 		  gnome-media-profiles >= $GNOME_MEDIA_PROFILES_REQS \
-		  libglade-2.0				\
 		  libsoup-2.4				\
 		  $LIBGNOME_REQS)
 
@@ -768,7 +767,6 @@ shell/Makefile
 data/Makefile
 data/rhythmbox.desktop.in
 data/ui/Makefile
-data/glade/Makefile
 data/icons/Makefile
 data/icons/hicolor/Makefile
 data/icons/hicolor/16x16/Makefile
diff --git a/data/Makefile.am b/data/Makefile.am
index 22b0117..db4e236 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -1,6 +1,4 @@
-## arch-tag: Automake rules for various data files
-
-SUBDIRS = ui glade icons
+SUBDIRS = ui icons
 
 @INTLTOOL_XML_RULE@
 @INTLTOOL_DESKTOP_RULE@
diff --git a/data/glade/Makefile.am b/data/glade/Makefile.am
deleted file mode 100644
index 017f696..0000000
diff --git a/doc/reference/rhythmbox-docs.sgml b/doc/reference/rhythmbox-docs.sgml
index dd0ee8b..cc329ec 100644
--- a/doc/reference/rhythmbox-docs.sgml
+++ b/doc/reference/rhythmbox-docs.sgml
@@ -21,7 +21,7 @@
 		<xi:include href="xml/rb-async-queue-watch.xml"/>
 		<xi:include href="xml/rb-debug.xml"/>
 		<xi:include href="xml/rb-file-helpers.xml"/>
-		<xi:include href="xml/rb-glade-helpers.xml"/>
+		<xi:include href="xml/rb-builder-helpers.xml"/>
 		<xi:include href="xml/rb-proxy-config.xml"/>
 		<xi:include href="xml/rb-string-value-map.xml"/>
 		<xi:include href="xml/rb-tree-dnd.xml"/>
diff --git a/doc/reference/rhythmbox-sections.txt b/doc/reference/rhythmbox-sections.txt
index 94e5da8..97536a5 100644
--- a/doc/reference/rhythmbox-sections.txt
+++ b/doc/reference/rhythmbox-sections.txt
@@ -1026,9 +1026,9 @@ RB_HEADER_GET_CLASS
 </SECTION>
 
 <SECTION>
-<FILE>rb-glade-helpers</FILE>
-rb_glade_xml_new
-rb_glade_boldify_label
+<FILE>rb-builder-helpers</FILE>
+rb_builder_load
+rb_builder_boldify_label
 rb_combo_box_hyphen_separator_func
 </SECTION>
 
diff --git a/doc/reference/rhythmbox.types b/doc/reference/rhythmbox.types
index 58630df..fa4003f 100644
--- a/doc/reference/rhythmbox.types
+++ b/doc/reference/rhythmbox.types
@@ -12,7 +12,7 @@
 #include "rb-encoder.h"
 #include "rb-entry-view.h"
 #include "rb-file-helpers.h"
-#include "rb-glade-helpers.h"
+#include "rb-builder-helpers.h"
 #include "rb-header.h"
 #include "rb-history.h"
 #include "rb-import-errors-source.h"
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 803f816..be203ac 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -1,4 +1,3 @@
-## arch-tag: Automake rules for misc. utility functions
 
 noinst_LTLIBRARIES = librb.la
 
@@ -22,8 +21,8 @@ librb_la_SOURCES =					\
 	eggsmclient-xsmp.c				\
 	rb-file-helpers.c				\
 	rb-file-helpers.h				\
-	rb-glade-helpers.c				\
-	rb-glade-helpers.h				\
+	rb-builder-helpers.c				\
+	rb-builder-helpers.h				\
 	rb-stock-icons.c				\
 	rb-stock-icons.h				\
 	rb-cut-and-paste-code.c				\
diff --git a/lib/rb-builder-helpers.c b/lib/rb-builder-helpers.c
new file mode 100644
index 0000000..10cf3cd
--- /dev/null
+++ b/lib/rb-builder-helpers.c
@@ -0,0 +1,140 @@
+/*
+ *  Copyright (C) 2002 Jorn Baayen
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  The Rhythmbox authors hereby grant permission for non-GPL compatible
+ *  GStreamer plugins to be used and distributed together with GStreamer
+ *  and Rhythmbox. This permission is above and beyond the permissions granted
+ *  by the GPL license by which Rhythmbox is covered. If you modify this code
+ *  you may extend this exception to your version of the code, but you are not
+ *  obligated to do so. If you do not wish to do so, delete this exception
+ *  statement from your version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA.
+ *
+ */
+
+#include "config.h"
+
+#include <gtk/gtk.h>
+#include <string.h>
+
+#include "rb-builder-helpers.h"
+#include "rb-file-helpers.h"
+
+/**
+ * SECTION:rb-builder-helpers
+ * @short_description: helper functions for dealing with GtkBuilder files
+ *
+ * Some simple helper functions to make it a bit easier to deal with
+ * widgets built from GtkBuilder files.
+ */
+
+/**
+ * rb_builder_load:
+ * @file: filename, either absolute or relative to the data directory
+ * @user_data: user data to pass to autoconnected signal handlers
+ *
+ * Locates and reads a GtkBuilder file, automatically connecting
+ * signal handlers where possible.  The caller can specify a path
+ * relative to the shared data directory, or its 'ui' or 'art'
+ * subdirectories.
+ *
+ * Return value: #GtkBuilder object built from the file
+ */
+GtkBuilder *
+rb_builder_load (const char *file, gpointer user_data)
+{
+	GtkBuilder *builder;
+	const char *name;
+	GError *error = NULL;
+
+	g_return_val_if_fail (file != NULL, NULL);
+
+	/* if the first character is /, it's an absolute path, otherwise locate it */
+	if (file[0] == G_DIR_SEPARATOR)
+		name = file;
+	else
+		name = rb_file (file);
+
+	builder = gtk_builder_new ();
+	gtk_builder_set_translation_domain (builder, GETTEXT_PACKAGE);
+	if (gtk_builder_add_from_file (builder, name, &error) == 0) {
+		g_warning ("Error loading GtkBuilder file %s: %s", name, error->message);
+		g_error_free (error);
+	}
+
+	gtk_builder_connect_signals (builder, user_data);
+
+	return builder;
+}
+
+
+/**
+ * rb_builder_boldify_label:
+ * @builder: a #GtkBuilder instance
+ * @name: name of the label to boldify
+ *
+ * Makes a label built from a GtkBuilder file bold.
+ */
+void
+rb_builder_boldify_label (GtkBuilder *builder, const char *name)
+{
+	GObject *widget;
+	gchar *str_final;
+
+	/* once we require gtk+ 2.16 or newer, we can set the attributes on
+	 * the labels in the builder files, so we won't need this any more.
+	 */
+
+	widget = gtk_builder_get_object (builder, name);
+	if (widget == NULL) {
+		g_warning ("widget '%s' not found", name);
+		return;
+	}
+
+	str_final = g_strdup_printf ("<b>%s</b>", gtk_label_get_label (GTK_LABEL (widget)));
+	gtk_label_set_markup_with_mnemonic (GTK_LABEL (widget), str_final);
+	g_free (str_final);
+}
+
+/**
+ * rb_combo_box_hyphen_separator_func:
+ * @model: a #GtkTreeModel
+ * @iter: a #GtkTreeIter
+ * @data: nothing
+ *
+ * A row separator function to use for GtkComboBox widgets.
+ * It expects the model to contain a string in its first column,
+ * and interprets a string containing a single hyphen character
+ * as a separator.
+ *
+ * Return value: %TRUE if the row pointed to by @iter is a separator
+ */
+gboolean
+rb_combo_box_hyphen_separator_func (GtkTreeModel *model,
+				    GtkTreeIter *iter,
+				    gpointer data)
+{
+	const char *s;
+
+	gtk_tree_model_get (model, iter, 0, &s, -1);
+
+	if (s == NULL)
+		return FALSE;
+
+	return (strcmp (s, "-") == 0);
+}
+
+
diff --git a/lib/rb-builder-helpers.h b/lib/rb-builder-helpers.h
new file mode 100644
index 0000000..86efc21
--- /dev/null
+++ b/lib/rb-builder-helpers.h
@@ -0,0 +1,44 @@
+/*
+ *  Copyright (C) 2002 Jorn Baayen
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  The Rhythmbox authors hereby grant permission for non-GPL compatible
+ *  GStreamer plugins to be used and distributed together with GStreamer
+ *  and Rhythmbox. This permission is above and beyond the permissions granted
+ *  by the GPL license by which Rhythmbox is covered. If you modify this code
+ *  you may extend this exception to your version of the code, but you are not
+ *  obligated to do so. If you do not wish to do so, delete this exception
+ *  statement from your version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA.
+ *
+ */
+
+#include <gtk/gtk.h>
+
+#ifndef __RB_BUILDER_HELPERS_H
+#define __RB_BUILDER_HELPERS_H
+
+G_BEGIN_DECLS
+
+GtkBuilder *rb_builder_load (const char *file, gpointer user_data);
+
+void rb_builder_boldify_label (GtkBuilder *builder, const char *name);
+
+gboolean rb_combo_box_hyphen_separator_func (GtkTreeModel *model,
+					     GtkTreeIter *iter,
+					     gpointer data);
+G_END_DECLS
+
+#endif /* __RB_BUILDER_HELPERS_H */
diff --git a/lib/rb-debug.c b/lib/rb-debug.c
index d1c57f6..0c00fd6 100644
--- a/lib/rb-debug.c
+++ b/lib/rb-debug.c
@@ -195,12 +195,10 @@ rb_debug_init_match (const char *match)
 		"Gtk",
 		"Rhythmbox",
 		"RhythmDB",
-		"MonkeyMedia",
 		"ORBit",
 		"ZVT",
 		"libIDL",
 		"libgconf-scm",
-		"libglade",
 		"libgnomevfs",
 		"librsvg",
 		"GLib-GIO",
diff --git a/lib/rb-file-helpers.c b/lib/rb-file-helpers.c
index f92f11a..f321936 100644
--- a/lib/rb-file-helpers.c
+++ b/lib/rb-file-helpers.c
@@ -50,21 +50,17 @@ static char *user_cache_dir = NULL;
 static char *uninstalled_paths[] = {
 	SHARE_UNINSTALLED_DIR "/",
 	SHARE_UNINSTALLED_DIR "/ui/",
-	SHARE_UNINSTALLED_DIR "/glade/",
 	SHARE_UNINSTALLED_DIR "/art/",
 	SHARE_UNINSTALLED_BUILDDIR "/",
 	SHARE_UNINSTALLED_BUILDDIR "/ui/",
-	SHARE_UNINSTALLED_BUILDDIR "/glade/",
 	SHARE_UNINSTALLED_BUILDDIR "/art/",
 	SHARE_DIR "/",
-	SHARE_DIR "/glade/",
 	SHARE_DIR "/art/",
 	NULL
 };
 
 static char *installed_paths[] = {
 	SHARE_DIR "/",
-	SHARE_DIR "/glade/",
 	SHARE_DIR "/art/",
 	NULL
 };
diff --git a/lib/rb-glade-helpers.c b/lib/rb-glade-helpers.c
deleted file mode 100644
index 14f465e..0000000
--- a/lib/rb-glade-helpers.c
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- *  arch-tag: Implementation of Rhythmbox Glade XML utility functions
- *
- *  Copyright (C) 2002 Jorn Baayen
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  The Rhythmbox authors hereby grant permission for non-GPL compatible
- *  GStreamer plugins to be used and distributed together with GStreamer
- *  and Rhythmbox. This permission is above and beyond the permissions granted
- *  by the GPL license by which Rhythmbox is covered. If you modify this code
- *  you may extend this exception to your version of the code, but you are not
- *  obligated to do so. If you do not wish to do so, delete this exception
- *  statement from your version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA.
- *
- */
-
-#include "config.h"
-
-#include <gmodule.h>
-#include <gtk/gtk.h>
-#include <string.h>
-
-#include "rb-glade-helpers.h"
-#include "rb-file-helpers.h"
-
-/**
- * SECTION:rb-glade-helpers
- * @short_description: helper functions for dealing with glade XML files
- *
- * Some simple helper functions to make it a bit easier to deal with
- * widgets built from glade XML files.
- */
-
-static void glade_signal_connect_func (const gchar *cb_name, GObject *obj, 
-			               const gchar *signal_name, const gchar *signal_data,
-			               GObject *conn_obj, gboolean conn_after,
-			               gpointer user_data);
-
-/**
- * rb_glade_xml_new:
- * @file: filename, either absolute or relative to the data directory
- * @root: the widget node in the file to start building from (or NULL)
- * @user_data: user data to pass to autoconnected signal handlers
- *
- * Locates and reads a glade xml file, automatically connecting
- * signal handlers where possible.  The caller can specify a path
- * relative to the shared data directory, or its 'glade' or 'art'
- * subdirectories.
- *
- * Return value: #GladeXML object built from the file
- */
-GladeXML *
-rb_glade_xml_new (const char *file,
-	          const char *root,
-		  gpointer user_data)
-{
-	GladeXML *xml;
-	const char *name;
-
-	g_return_val_if_fail (file != NULL, NULL);
-
-	/* if the first character is /, it's an absolute path, otherwise locate it */
-	if (file[0] == G_DIR_SEPARATOR)
-		name = file;
-	else
-		name = rb_file (file);
-
-	xml = glade_xml_new (name, root, NULL);
-
-	glade_xml_signal_autoconnect_full (xml,
-					   (GladeXMLConnectFunc) glade_signal_connect_func,
-					   user_data);
-
-	return xml;
-}
-
-static void
-glade_signal_connect_func (const gchar *cb_name, GObject *obj, 
-			   const gchar *signal_name, const gchar *signal_data,
-			   GObject *conn_obj, gboolean conn_after,
-			   gpointer user_data)
-{
-	/** Module with all the symbols of the program */
-	static GModule *mod_self = NULL;
-	gpointer handler_func;
-
- 	/* initialize gmodule */
-	if (mod_self == NULL)
-	{
-		mod_self = g_module_open (NULL, 0);
-		g_assert (mod_self != NULL);
-	}
-
-	if (g_module_symbol (mod_self, cb_name, &handler_func))
-	{
-		/* found callback */
-		if (conn_obj)
-		{
-			if (conn_after)
-			{
-				g_signal_connect_object
-                                        (obj, signal_name, 
-                                         handler_func, conn_obj,
-                                         G_CONNECT_AFTER);
-			}
-			else
-			{
-				g_signal_connect_object
-                                        (obj, signal_name, 
-                                         handler_func, conn_obj,
-                                         G_CONNECT_SWAPPED);
-			}
-		}
-		else
-		{
-			/* no conn_obj; use standard connect */
-			gpointer data = NULL;
-			
-			data = user_data;
-			
-			if (conn_after)
-			{
-				g_signal_connect_after
-					(obj, signal_name, 
-					 handler_func, data);
-			}
-			else
-			{
-				g_signal_connect
-					(obj, signal_name, 
-					 handler_func, data);
-			}
-		}
-	}
-	else
-	{
-		g_warning("callback function not found: %s", cb_name);
-	}
-}
-
-/**
- * rb_glade_boldify_label:
- * @xml: GladeXML instance
- * @name: name of the label to boldify
- *
- * Makes a label built from a glade xml file bold.
- */
-void
-rb_glade_boldify_label (GladeXML *xml, const char *name)
-{
-	GtkWidget *widget;
-
-	widget = glade_xml_get_widget (xml, name);
-
-	if (widget == NULL) {
-		g_warning ("widget '%s' not found", name);
-		return;
-	}
-
-	/* this way is probably better, but for some reason doesn't work with
-	 * labels with mnemonics.
-
-	static PangoAttrList *pattrlist = NULL;
-
-	if (pattrlist == NULL) {
-		PangoAttribute *attr;
-
-		pattrlist = pango_attr_list_new ();
-		attr = pango_attr_weight_new (PANGO_WEIGHT_BOLD);
-		attr->start_index = 0;
-		attr->end_index = G_MAXINT;
-		pango_attr_list_insert (pattrlist, attr);
-	}
-	gtk_label_set_attributes (GTK_LABEL (widget), pattrlist);*/
-
-	gchar *str_final;
-	str_final = g_strdup_printf ("<b>%s</b>", gtk_label_get_label (GTK_LABEL (widget)));
-	gtk_label_set_markup_with_mnemonic (GTK_LABEL (widget), str_final);
-	g_free (str_final);
-}
-
-/**
- * rb_combo_box_hyphen_separator_func:
- * @model: a #GtkTreeModel
- * @iter: a #GtkTreeIter
- * @data: nothing
- *
- * A row separator function to use for GtkComboBox widgets.
- * It expects the model to contain a string in its first column,
- * and interprets a string containing a single hyphen character
- * as a separator.
- *
- * Return value: %TRUE if the row pointed to by @iter is a separator
- */
-gboolean
-rb_combo_box_hyphen_separator_func (GtkTreeModel *model,
-				    GtkTreeIter *iter,
-				    gpointer data)
-{
-	const char *s;
-
-	gtk_tree_model_get (model, iter, 0, &s, -1);
-
-	if (s == NULL)
-		return FALSE;
-
-	return (strcmp (s, "-") == 0);
-}
-
-
diff --git a/lib/rb-glade-helpers.h b/lib/rb-glade-helpers.h
deleted file mode 100644
index d59ecb1..0000000
--- a/lib/rb-glade-helpers.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- *  arch-tag: Header for Rhythmbox Glade XML utility functions
- *
- *  Copyright (C) 2002 Jorn Baayen
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  The Rhythmbox authors hereby grant permission for non-GPL compatible
- *  GStreamer plugins to be used and distributed together with GStreamer
- *  and Rhythmbox. This permission is above and beyond the permissions granted
- *  by the GPL license by which Rhythmbox is covered. If you modify this code
- *  you may extend this exception to your version of the code, but you are not
- *  obligated to do so. If you do not wish to do so, delete this exception
- *  statement from your version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA.
- *
- */
-
-#include <glade/glade.h>
-
-#ifndef __RB_GLADE_HELPERS_H
-#define __RB_GLADE_HELPERS_H
-
-G_BEGIN_DECLS
-
-GladeXML *rb_glade_xml_new (const char *file,
-			    const char *root,
-			    gpointer user_data);
-
-void rb_glade_boldify_label (GladeXML *xml,
-			     const char *name);
-
-gboolean rb_combo_box_hyphen_separator_func (GtkTreeModel *model,
-					     GtkTreeIter *iter,
-					     gpointer data);
-G_END_DECLS
-
-#endif /* __RB_GLADE_HELPERS_H */
diff --git a/plugins/audiocd/Makefile.am b/plugins/audiocd/Makefile.am
index 679550a..fe2299d 100644
--- a/plugins/audiocd/Makefile.am
+++ b/plugins/audiocd/Makefile.am
@@ -51,8 +51,8 @@ endif
 libaudiocd_la_LIBADD += $(NULL)
 
 
-gladedir = $(plugindir)
-glade_DATA =	multiple-album.glade
+gtkbuilderdir = $(plugindir)
+gtkbuilder_DATA = multiple-album.ui
 
 uixmldir = $(plugindir)
 uixml_DATA = audiocd-ui.xml
@@ -63,7 +63,7 @@ plugin_in_files = audiocd.rb-plugin.in
 
 plugin_DATA = $(plugin_in_files:.rb-plugin.in=.rb-plugin)
 
-EXTRA_DIST = $(glade_DATA) $(uixml_DATA) $(plugin_in_files) sj-metadata-marshal.list
+EXTRA_DIST = $(gtkbuilder_DATA) $(uixml_DATA) $(plugin_in_files) sj-metadata-marshal.list
 
 SJ_FILES =									\
 	sj-error.c sj-error.h							\
diff --git a/plugins/audiocd/rb-audiocd-source.c b/plugins/audiocd/rb-audiocd-source.c
index b0f214c..4e4ba5e 100644
--- a/plugins/audiocd/rb-audiocd-source.c
+++ b/plugins/audiocd/rb-audiocd-source.c
@@ -49,7 +49,7 @@
 #include "rb-util.h"
 #include "rb-debug.h"
 #include "rb-dialog.h"
-#include "rb-glade-helpers.h"
+#include "rb-builder-helpers.h"
 
 #ifdef HAVE_SJ_METADATA_GETTER
 #include "sj-metadata-getter.h"
@@ -402,11 +402,11 @@ multiple_album_dialog (GList *albums, RBAudioCdSource *source)
 	AlbumDetails *album;
 	GtkTreeIter iter;
 	int response;
-	GladeXML *xml;
+	GtkBuilder *builder;
 	GtkTreeViewColumn *column;
 	GtkCellRenderer *text_renderer;
 	RBPlugin *plugin;
-	char *glade_file;
+	char *builder_file;
 
 	gdk_threads_enter ();
 
@@ -414,22 +414,22 @@ multiple_album_dialog (GList *albums, RBAudioCdSource *source)
 	g_assert (plugin != NULL);
 
 	/* create dialog */
-	glade_file = rb_plugin_find_file (plugin, "multiple-album.glade");
+	builder_file = rb_plugin_find_file (plugin, "multiple-album.ui");
 	g_object_unref (plugin);
 
-	if (glade_file == NULL) {
-		g_warning ("couldn't find multiple-album.glade");
+	if (builder_file == NULL) {
+		g_warning ("couldn't find multiple-album.ui");
 		return NULL;
 	}
 
-	xml = glade_xml_new (glade_file, NULL, NULL);
-	g_free (glade_file);
+	builder = rb_builder_load (builder_file, NULL);
+	g_free (builder_file);
 
-	dialog = glade_xml_get_widget (xml, "multiple_dialog");
+	dialog = GTK_WIDGET (gtk_builder_get_object (builder, "multiple_dialog"));
 	g_assert (dialog != NULL);
 	gtk_window_set_transient_for (GTK_WINDOW (dialog),
 				      GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (source))));
-	albums_listview = glade_xml_get_widget (xml, "albums_listview");
+	albums_listview = GTK_WIDGET (gtk_builder_get_object (builder, "albums_listview"));
 
 	g_signal_connect (albums_listview, "row-activated", G_CALLBACK (album_row_activated), dialog);
 
@@ -484,6 +484,7 @@ multiple_album_dialog (GList *albums, RBAudioCdSource *source)
 	gtk_widget_destroy (GTK_WIDGET (dialog));
 
 	gdk_threads_leave ();
+	g_object_unref (builder);
 	return album;
 }
 
diff --git a/plugins/audioscrobbler/Makefile.am b/plugins/audioscrobbler/Makefile.am
index d7293ac..04cab67 100644
--- a/plugins/audioscrobbler/Makefile.am
+++ b/plugins/audioscrobbler/Makefile.am
@@ -40,8 +40,8 @@ INCLUDES = 						\
 	$(RHYTHMBOX_CFLAGS)				\
 	-D_XOPEN_SOURCE -D_BSD_SOURCE
 
-gladedir = $(plugindir)
-glade_DATA = audioscrobbler-prefs.glade
+gtkbuilderdir = $(plugindir)
+gtkbuilder_DATA = audioscrobbler-prefs.ui
 
 uixmldir = $(plugindir)
 uixml_DATA = audioscrobbler-ui.xml
@@ -62,7 +62,7 @@ plugin_DATA = 					\
 EXTRA_DIST = 					\
 	$(plugin_in_files)			\
 	$(uixml_DATA)				\
-	$(glade_DATA)				\
+	$(gtkbuilder_DATA)			\
 	$(top_srcdir)/plugins/audioscrobbler/as-icon.png		\
 	$(top_srcdir)/plugins/audioscrobbler/as-powered.png		\
 	$(NULL)
diff --git a/plugins/audioscrobbler/rb-audioscrobbler.c b/plugins/audioscrobbler/rb-audioscrobbler.c
index 1953793..1482014 100644
--- a/plugins/audioscrobbler/rb-audioscrobbler.c
+++ b/plugins/audioscrobbler/rb-audioscrobbler.c
@@ -51,7 +51,7 @@
 #include "rb-audioscrobbler.h"
 #include "rb-debug.h"
 #include "rb-file-helpers.h"
-#include "rb-glade-helpers.h"
+#include "rb-builder-helpers.h"
 #include "rb-preferences.h"
 #include "rb-shell.h"
 #include "rb-shell-player.h"
@@ -1169,32 +1169,33 @@ GtkWidget *
 rb_audioscrobbler_get_config_widget (RBAudioscrobbler *audioscrobbler,
 				     RBPlugin *plugin)
 {
-	GladeXML *xml;
-	char *gladefile;
+	GtkBuilder *builder;
+	char *builder_file;
 
 	if (audioscrobbler->priv->config_widget) {
 		return audioscrobbler->priv->config_widget;
 	}
 
-	gladefile = rb_plugin_find_file (plugin, "audioscrobbler-prefs.glade");
-	g_assert (gladefile != NULL);
-	xml = rb_glade_xml_new (gladefile, "audioscrobbler_vbox", audioscrobbler);
-	g_free (gladefile);
-
-	audioscrobbler->priv->config_widget = glade_xml_get_widget (xml, "audioscrobbler_vbox");
-	audioscrobbler->priv->username_entry = glade_xml_get_widget (xml, "username_entry");
-	audioscrobbler->priv->username_label = glade_xml_get_widget (xml, "username_label");
-	audioscrobbler->priv->password_entry = glade_xml_get_widget (xml, "password_entry");
-	audioscrobbler->priv->password_label = glade_xml_get_widget (xml, "password_label");
-	audioscrobbler->priv->status_label = glade_xml_get_widget (xml, "status_label");
-	audioscrobbler->priv->queue_count_label = glade_xml_get_widget (xml, "queue_count_label");
-	audioscrobbler->priv->submit_count_label = glade_xml_get_widget (xml, "submit_count_label");
-	audioscrobbler->priv->submit_time_label = glade_xml_get_widget (xml, "submit_time_label");
-
-	rb_glade_boldify_label (xml, "audioscrobbler_label");
-
-	g_object_unref (G_OBJECT (xml));
-
+	builder_file = rb_plugin_find_file (plugin, "audioscrobbler-prefs.ui");
+	g_assert (builder_file != NULL);
+	builder = rb_builder_load (builder_file, audioscrobbler);
+	g_free (builder_file);
+
+	audioscrobbler->priv->config_widget = GTK_WIDGET (gtk_builder_get_object (builder, "audioscrobbler_vbox"));
+	audioscrobbler->priv->username_entry = GTK_WIDGET (gtk_builder_get_object (builder, "username_entry"));
+	audioscrobbler->priv->username_label = GTK_WIDGET (gtk_builder_get_object (builder, "username_label"));
+	audioscrobbler->priv->password_entry = GTK_WIDGET (gtk_builder_get_object (builder, "password_entry"));
+	audioscrobbler->priv->password_label = GTK_WIDGET (gtk_builder_get_object (builder, "password_label"));
+	audioscrobbler->priv->status_label = GTK_WIDGET (gtk_builder_get_object (builder, "status_label"));
+	audioscrobbler->priv->queue_count_label = GTK_WIDGET (gtk_builder_get_object (builder, "queue_count_label"));
+	audioscrobbler->priv->submit_count_label = GTK_WIDGET (gtk_builder_get_object (builder, "submit_count_label"));
+	audioscrobbler->priv->submit_time_label = GTK_WIDGET (gtk_builder_get_object (builder, "submit_time_label"));
+
+	rb_builder_boldify_label (builder, "audioscrobbler_label");
+
+	g_object_ref (audioscrobbler->priv->config_widget);
+	g_object_unref (builder);
+	
 	rb_audioscrobbler_preferences_sync (audioscrobbler);
 
 	return audioscrobbler->priv->config_widget;
diff --git a/plugins/audioscrobbler/rb-lastfm-source.c b/plugins/audioscrobbler/rb-lastfm-source.c
index 4ca6511..7333a5b 100644
--- a/plugins/audioscrobbler/rb-lastfm-source.c
+++ b/plugins/audioscrobbler/rb-lastfm-source.c
@@ -49,7 +49,6 @@
 #include <glib/gi18n.h>
 #include <glib/gstdio.h>
 #include <gtk/gtk.h>
-#include <glade/glade.h>
 
 #include <gconf/gconf-value.h>
 
@@ -66,7 +65,6 @@
 #include "rb-lastfm-source.h"
 
 #include "rhythmdb-query-model.h"
-#include "rb-glade-helpers.h"
 #include "rb-stock-icons.h"
 #include "rb-entry-view.h"
 #include "rb-property-view.h"
diff --git a/plugins/cd-recorder/Makefile.am b/plugins/cd-recorder/Makefile.am
index ba8517b..e33922b 100644
--- a/plugins/cd-recorder/Makefile.am
+++ b/plugins/cd-recorder/Makefile.am
@@ -46,8 +46,8 @@ plugin_in_files = cd-recorder.rb-plugin.in
 
 %.rb-plugin: %.rb-plugin.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*po) ; $(INTLTOOL_MERGE) $(top_srcdir)/po $< $@ -d -u -c $(top_builddir)/po/.intltool-merge-cache
 
-gladedir = $(plugindir)
-glade_DATA = recorder.glade
+gtkbuilderdir = $(plugindir)
+gtkbuilder_DATA = recorder.ui
 
 BUILT_SOURCES =							\
 	$(plugin_in_files:.rb-plugin.in=.rb-plugin) 		\
@@ -59,7 +59,7 @@ plugin_DATA = 			\
 
 EXTRA_DIST = 			\
 	$(plugin_in_files)	\
-	$(glade_DATA)		\
+	$(gtkbuilder_DATA)	\
 	$(NULL)
 
 CLEANFILES = 			\
diff --git a/plugins/cd-recorder/rb-playlist-source-recorder.c b/plugins/cd-recorder/rb-playlist-source-recorder.c
index 3308ae3..751548d 100644
--- a/plugins/cd-recorder/rb-playlist-source-recorder.c
+++ b/plugins/cd-recorder/rb-playlist-source-recorder.c
@@ -41,13 +41,12 @@
 #include <glib/gprintf.h>
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
-#include <glade/glade.h>
 #include <gio/gio.h>
 
 #include <nautilus-burn.h>
 
 #include "rb-file-helpers.h"
-#include "rb-glade-helpers.h"
+#include "rb-builder-helpers.h"
 #include "rb-preferences.h"
 #include "rb-dialog.h"
 #include "rb-util.h"
@@ -91,8 +90,6 @@ void        rb_playlist_source_recorder_device_changed_cb  (NautilusBurnDriveSel
                                                             const char                 *device_path,
                                                             RBPlaylistSourceRecorder   *source);
 
-GtkWidget * rb_playlist_source_recorder_device_menu_create (void);
-
 typedef struct
 {
         char  *artist;
@@ -229,28 +226,6 @@ rb_playlist_source_recorder_class_init (RBPlaylistSourceRecorderClass *klass)
         g_type_class_add_private (klass, sizeof (RBPlaylistSourceRecorderPrivate));
 }
 
-GtkWidget *
-rb_playlist_source_recorder_device_menu_create (void)
-{
-        GtkWidget *widget;
-        char      *value;
-
-        widget = nautilus_burn_drive_selection_new ();
-        g_object_set (widget, "file-image", FALSE, NULL);
-        g_object_set (widget, "show-recorders-only", TRUE, NULL);
-
-	value = eel_gconf_get_string (CONF_STATE_BURN_DEVICE);
-        if (value) {
-                nautilus_burn_drive_selection_set_device (NAUTILUS_BURN_DRIVE_SELECTION (widget),
-                                                          value);
-                g_free (value);
-        }
-
-        gtk_widget_show (widget);
-
-        return widget;
-}
-
 static const NautilusBurnDrive *
 lookup_current_recorder (RBPlaylistSourceRecorder *source)
 {
@@ -553,12 +528,6 @@ burn_cd (RBPlaylistSourceRecorder *source,
 
                 finished_msg = _("Finished creating audio CD.");
 
-		if (source->priv->cd_icon == NULL) {
-			source->priv->cd_icon = gtk_widget_render_icon (GTK_WIDGET (source),
-									GTK_STOCK_CDROM,
-									GTK_ICON_SIZE_BUTTON,
-									NULL);
-		}
                 rb_shell_hidden_notify (source->priv->shell, 0, finished_msg, source->priv->cd_icon, "", FALSE);
 
                 /* save the write speed that was used */
@@ -1130,14 +1099,15 @@ rb_playlist_source_recorder_constructor (GType type,
 					 GObjectConstructParam *construct_properties)
 {
 	RBPlaylistSourceRecorder *source;
-	char           *gladefile;
-        GladeXML       *xml;
+	char           *builder_file;
+        GtkBuilder     *builder;
         GError         *error = NULL;
         GtkWidget      *widget;
         GtkWidget      *hbox;
         int             font_size;
         PangoAttrList  *pattrlist;
         PangoAttribute *attr;
+	char           *value;
 
 	source = RB_PLAYLIST_SOURCE_RECORDER (G_OBJECT_CLASS (rb_playlist_source_recorder_parent_class)
 			->constructor (type, n_construct_properties, construct_properties));
@@ -1164,6 +1134,11 @@ rb_playlist_source_recorder_constructor (GType type,
         gtk_container_add (GTK_CONTAINER (widget), hbox);
         gtk_widget_show (hbox);
 
+	source->priv->cd_icon = gtk_widget_render_icon (GTK_WIDGET (source),
+							GTK_STOCK_CDROM,
+							GTK_ICON_SIZE_BUTTON,
+							NULL);
+	widget = gtk_image_new_from_pixbuf (source->priv->cd_icon);
         gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
         gtk_widget_show (widget);
         widget = gtk_label_new_with_mnemonic (_("C_reate"));
@@ -1176,38 +1151,48 @@ rb_playlist_source_recorder_constructor (GType type,
 
         gtk_dialog_set_default_response (GTK_DIALOG (source), GTK_RESPONSE_ACCEPT);
 
-	gladefile = rb_plugin_find_file (source->priv->plugin, "recorder.glade");
-	g_assert (gladefile != NULL);
+	builder_file = rb_plugin_find_file (source->priv->plugin, "recorder.ui");
+	g_assert (builder_file != NULL);
 
-        xml = rb_glade_xml_new (gladefile,
-                                "recorder_vbox",
-                                source);
-	g_free (gladefile);
+	builder = rb_builder_load (builder_file, source);
+	g_free (builder_file);
 
-        source->priv->vbox = glade_xml_get_widget (xml, "recorder_vbox");
+        source->priv->vbox = GTK_WIDGET (gtk_builder_get_object (builder, "recorder_vbox"));
 
-        source->priv->message_label  = glade_xml_get_widget (xml, "message_label");
-        source->priv->progress_label  = glade_xml_get_widget (xml, "progress_label");
+        source->priv->message_label  = GTK_WIDGET (gtk_builder_get_object (builder, "message_label"));
+        source->priv->progress_label  = GTK_WIDGET (gtk_builder_get_object (builder, "progress_label"));
 
-        source->priv->progress = glade_xml_get_widget (xml, "progress");
+        source->priv->progress = GTK_WIDGET (gtk_builder_get_object (builder, "progress"));
         gtk_progress_bar_set_ellipsize (GTK_PROGRESS_BAR (source->priv->progress), PANGO_ELLIPSIZE_END);
         gtk_progress_bar_set_text (GTK_PROGRESS_BAR (source->priv->progress), " ");
         gtk_widget_set_size_request (source->priv->progress, 400, -1);
 
-        source->priv->progress_frame = glade_xml_get_widget (xml, "progress_frame");
+        source->priv->progress_frame = GTK_WIDGET (gtk_builder_get_object (builder, "progress_frame"));
 
-        source->priv->options_box    = glade_xml_get_widget (xml, "options_box");
-        source->priv->device_menu    = glade_xml_get_widget (xml, "device_menu");
-        source->priv->multiple_copies_checkbutton = glade_xml_get_widget (xml, "multiple_copies_checkbutton");
+        source->priv->options_box    = GTK_WIDGET (gtk_builder_get_object (builder, "options_box"));
+        source->priv->multiple_copies_checkbutton = GTK_WIDGET (gtk_builder_get_object (builder, "multiple_copies_checkbutton"));
 
-        source->priv->speed_combobox = glade_xml_get_widget (xml, "speed_combobox");
+        source->priv->speed_combobox = GTK_WIDGET (gtk_builder_get_object (builder, "speed_combobox"));
         setup_speed_combobox (source->priv->speed_combobox);
 
-        widget = glade_xml_get_widget (xml, "device_label");
+        source->priv->device_menu    = nautilus_burn_drive_selection_new ();
+        g_object_set (source->priv->device_menu, "file-image", FALSE, NULL);
+        g_object_set (source->priv->device_menu, "show-recorders-only", TRUE, NULL);
+
+	value = eel_gconf_get_string (CONF_STATE_BURN_DEVICE);
+        if (value) {
+                nautilus_burn_drive_selection_set_device (NAUTILUS_BURN_DRIVE_SELECTION (source->priv->device_menu),
+                                                          value);
+                g_free (value);
+        }
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "device_menu_container"));
+	gtk_box_pack_start (GTK_BOX (widget), source->priv->device_menu, TRUE, TRUE, 0);
+
+        widget = GTK_WIDGET (gtk_builder_get_object (builder, "device_label"));
         gtk_label_set_mnemonic_widget (GTK_LABEL (widget), source->priv->device_menu);
 
-	rb_glade_boldify_label (xml, "progress_frame_label");
-	rb_glade_boldify_label (xml, "options_expander_label");
+	rb_builder_boldify_label (builder, "progress_frame_label");
+	rb_builder_boldify_label (builder, "options_expander_label");
 
         pattrlist = pango_attr_list_new ();
         attr = pango_attr_weight_new (PANGO_WEIGHT_BOLD);
diff --git a/plugins/coherence/Makefile.am b/plugins/coherence/Makefile.am
index 67a9f43..798038f 100644
--- a/plugins/coherence/Makefile.am
+++ b/plugins/coherence/Makefile.am
@@ -10,10 +10,7 @@ plugin_DATA = $(plugin_in_files:.rb-plugin.in=.rb-plugin)
 
 plugin_in_files = coherence.rb-plugin.in
 
-glade_DATA = 
-
-gladedir = $(plugindir)
-EXTRA_DIST = $(plugin_in_files) $(glade_DATA)
+EXTRA_DIST = $(plugin_in_files)
 CLEANFILES = $(plugin_DATA)
 DISTCLEANFILES = $(plugin_DATA)
 
diff --git a/plugins/daap/Makefile.am b/plugins/daap/Makefile.am
index 67f91cb..02f4a31 100644
--- a/plugins/daap/Makefile.am
+++ b/plugins/daap/Makefile.am
@@ -66,8 +66,8 @@ libdaap_la_LIBADD += $(GNOME_KEYRING_LIBS)
 INCLUDES += $(GNOME_KEYRING_CFLAGS)
 endif
 
-gladedir = $(plugindir)
-glade_DATA = daap-prefs.glade
+gtkbuilderdir = $(plugindir)
+gtkbuilder_DATA = daap-prefs.ui
 
 uixmldir = $(plugindir)
 uixml_DATA = daap-ui.xml
@@ -85,7 +85,7 @@ plugin_DATA = 			\
 	$(NULL)
 
 EXTRA_DIST = 			\
-	$(glade_DATA)		\
+	$(gtkbuilder_DATA)		\
 	$(uixml_DATA)		\
 	$(plugin_in_files)	\
 	$(NULL)
diff --git a/plugins/daap/rb-daap-plugin.c b/plugins/daap/rb-daap-plugin.c
index dcbab5c..62f394c 100644
--- a/plugins/daap/rb-daap-plugin.c
+++ b/plugins/daap/rb-daap-plugin.c
@@ -46,7 +46,7 @@
 #include "rb-shell.h"
 #include "rb-dialog.h"
 #include "rb-file-helpers.h"
-#include "rb-glade-helpers.h"
+#include "rb-builder-helpers.h"
 #include "eel-gconf-extensions.h"
 #include "rb-daap-source.h"
 #include "rb-daap-sharing.h"
@@ -65,7 +65,7 @@ struct RBDaapPluginPrivate
 {
 	RBShell *shell;
 
-	GladeXML *config_xml;
+	GtkBuilder *builder;
 	GtkWidget *preferences;
 	gboolean sharing;
 	gboolean shutdown;
@@ -98,7 +98,7 @@ static void rb_daap_plugin_get_property (GObject *object,
 					 GParamSpec *pspec);
 
 static void rb_daap_plugin_init (RBDaapPlugin *plugin);
-static void rb_daap_plugin_finalize (GObject *object);
+static void rb_daap_plugin_dispose (GObject *object);
 static void impl_activate (RBPlugin *plugin, RBShell *shell);
 static void impl_deactivate (RBPlugin *plugin, RBShell *shell);
 
@@ -136,7 +136,7 @@ rb_daap_plugin_class_init (RBDaapPluginClass *klass)
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 	RBPluginClass *plugin_class = RB_PLUGIN_CLASS (klass);
 
-	object_class->finalize = rb_daap_plugin_finalize;
+	object_class->dispose = rb_daap_plugin_dispose;
 	object_class->get_property = rb_daap_plugin_get_property;
 
 	plugin_class->activate = impl_activate;
@@ -164,16 +164,23 @@ rb_daap_plugin_init (RBDaapPlugin *plugin)
 }
 
 static void
-rb_daap_plugin_finalize (GObject *object)
+rb_daap_plugin_dispose (GObject *object)
 {
 	RBDaapPlugin *plugin = RB_DAAP_PLUGIN (object);
 
-	rb_debug ("RBDaapPlugin finalising");
+	rb_debug ("RBDaapPlugin dispose");
 
-	if (plugin->priv->preferences)
+	if (plugin->priv->preferences) {
 		gtk_widget_destroy (plugin->priv->preferences);
+		plugin->priv->preferences = NULL;
+	}
+
+	if (plugin->priv->builder) {
+		g_object_unref (plugin->priv->builder);
+		plugin->priv->builder = NULL;
+	}
 
-	G_OBJECT_CLASS (rb_daap_plugin_parent_class)->finalize (object);
+	G_OBJECT_CLASS (rb_daap_plugin_parent_class)->dispose (object);
 }
 
 
@@ -245,10 +252,6 @@ impl_activate (RBPlugin *bplugin,
 
 	/* add UI */
 	uifile = rb_plugin_find_file (bplugin, "daap-ui.xml");
-	if (uifile == NULL) {
-		uifile = g_strdup (rb_file ("daap-ui.xml"));
-	}
-
 	if (uifile != NULL) {
 		plugin->priv->daap_ui_merge_id = gtk_ui_manager_add_ui_from_file (uimanager, uifile, NULL);
 		g_free (uifile);
@@ -856,11 +859,11 @@ update_config_widget (RBDaapPlugin *plugin)
 	char *name;
 	char *password;
 
-	check = glade_xml_get_widget (plugin->priv->config_xml, "daap_enable_check");
-	password_check = glade_xml_get_widget (plugin->priv->config_xml, "daap_password_check");
-	name_entry = glade_xml_get_widget (plugin->priv->config_xml, "daap_name_entry");
-	password_entry = glade_xml_get_widget (plugin->priv->config_xml, "daap_password_entry");
-	box = glade_xml_get_widget (plugin->priv->config_xml, "daap_box");
+	check = GTK_WIDGET (gtk_builder_get_object (plugin->priv->builder, "daap_enable_check"));
+	password_check = GTK_WIDGET (gtk_builder_get_object (plugin->priv->builder, "daap_password_check"));
+	name_entry = GTK_WIDGET (gtk_builder_get_object (plugin->priv->builder, "daap_name_entry"));
+	password_entry = GTK_WIDGET (gtk_builder_get_object (plugin->priv->builder, "daap_password_entry"));
+	box = GTK_WIDGET (gtk_builder_get_object (plugin->priv->builder, "daap_box"));
 
 	sharing_enabled = eel_gconf_get_boolean (CONF_DAAP_ENABLE_SHARING);
 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), sharing_enabled);
@@ -893,21 +896,18 @@ update_config_widget (RBDaapPlugin *plugin)
 static GtkWidget *
 make_config_widget (RBDaapPlugin *plugin)
 {
-	char *gladefile;
+	char *builder_file;
 
-	gladefile = rb_plugin_find_file (RB_PLUGIN (plugin), "daap-prefs.glade");
-	if (gladefile == NULL) {
-		gladefile = g_strdup (rb_file ("daap-prefs.glade"));
-		if (gladefile == NULL) {
-			return NULL;
-		}
+	builder_file = rb_plugin_find_file (RB_PLUGIN (plugin), "daap-prefs.ui");
+	if (builder_file == NULL) {
+		return NULL;
 	}
 
-	plugin->priv->config_xml = glade_xml_new (gladefile, "daap_vbox", NULL);
-	g_free (gladefile);
+	plugin->priv->builder = rb_builder_load (builder_file, NULL);
+	g_free (builder_file);
 
 	update_config_widget (plugin);
-	return glade_xml_get_widget (plugin->priv->config_xml, "daap_vbox");
+	return GTK_WIDGET (gtk_builder_get_object (plugin->priv->builder, "daap_vbox"));
 }
 
 
diff --git a/plugins/ipod/Makefile.am b/plugins/ipod/Makefile.am
index 2c18466..1196427 100644
--- a/plugins/ipod/Makefile.am
+++ b/plugins/ipod/Makefile.am
@@ -48,10 +48,12 @@ uixml_DATA = ipod-ui.xml
 
 plugin_DATA = $(plugin_in_files:.rb-plugin.in=.rb-plugin)
 
-gladedir = $(plugindir)
-glade_DATA = ipod-info.glade ipod-init.glade
+gtkbuilderdir = $(plugindir)
+gtkbuilder_DATA = 					\
+	ipod-info.ui	 				\
+	ipod-init.ui
 
-EXTRA_DIST = $(uixml_DATA) $(plugin_in_files) $(glade_DATA)
+EXTRA_DIST = $(uixml_DATA) $(plugin_in_files) $(gtkbuilder_DATA)
 
 CLEANFILES = $(plugin_DATA)
 DISTCLEANFILES = $(plugin_DATA)
diff --git a/plugins/ipod/rb-ipod-helpers.c b/plugins/ipod/rb-ipod-helpers.c
index d4faa3a..a4e0c2c 100644
--- a/plugins/ipod/rb-ipod-helpers.c
+++ b/plugins/ipod/rb-ipod-helpers.c
@@ -36,7 +36,6 @@
 
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
-#include <glade/glade.h>
 #include <gpod/itdb.h>
 #ifdef HAVE_HAL
 #include <libhal.h>
@@ -45,6 +44,7 @@
 
 #include "rb-ipod-helpers.h"
 #include "rb-util.h"
+#include "rb-builder-helpers.h"
 
 #include "rb-debug.h"
 #include "rb-dialog.h"
@@ -242,10 +242,10 @@ fill_model_combo (GtkWidget *combo, const char *mount_path)
 }
 
 gboolean
-rb_ipod_helpers_show_first_time_dialog (GMount *mount, const char *glade_file)
+rb_ipod_helpers_show_first_time_dialog (GMount *mount, const char *builder_file)
 {
 	/* could be an uninitialised iPod, ask the user */
-	GladeXML *xml;
+	GtkBuilder *builder;
 	GtkWidget *dialog;
 	GtkWidget *widget;
 	GtkTreeModel *tree_model;
@@ -271,10 +271,14 @@ rb_ipod_helpers_show_first_time_dialog (GMount *mount, const char *glade_file)
 	/* create message dialog with model-number combo box
 	 * and asking whether they want to initialise the iPod
 	 */
-	xml = glade_xml_new (glade_file, NULL, NULL);
-	dialog = glade_xml_get_widget (xml, "ipod_init");
-	widget = glade_xml_get_widget (xml, "model_combo");
+	builder = rb_builder_load (builder_file, NULL);
+	if (builder == NULL) {
+		return FALSE;
+	}
+	dialog = GTK_WIDGET (gtk_builder_get_object (builder, "ipod_init"));
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "model_combo"));
 	fill_model_combo (widget, mountpoint);
+	g_object_unref (builder);
 
 	rb_debug ("showing init dialog for ipod mount on '%s'", mountpoint);
 
@@ -289,7 +293,7 @@ rb_ipod_helpers_show_first_time_dialog (GMount *mount, const char *glade_file)
 	tree_model = gtk_combo_box_get_model (GTK_COMBO_BOX (widget));
 	gtk_combo_box_get_active_iter (GTK_COMBO_BOX (widget), &iter);
 	gtk_tree_model_get (tree_model, &iter, COL_INFO, &info, -1);
-	widget = glade_xml_get_widget (xml, "name_entry");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "name_entry"));
 	ipod_name = g_strdup (gtk_entry_get_text (GTK_ENTRY (widget)));
 
 	gtk_widget_destroy (dialog);
diff --git a/plugins/ipod/rb-ipod-helpers.h b/plugins/ipod/rb-ipod-helpers.h
index 2eef13c..f32c63b 100644
--- a/plugins/ipod/rb-ipod-helpers.h
+++ b/plugins/ipod/rb-ipod-helpers.h
@@ -33,7 +33,7 @@
 
 G_BEGIN_DECLS
 gboolean rb_ipod_helpers_show_first_time_dialog (GMount *mount,
-						 const char *glade_file);
+						 const char *builder_file);
 
 guint64 rb_ipod_helpers_get_capacity (const char *mountpoint);
 guint64 rb_ipod_helpers_get_free_space (const char *mountpoint);
diff --git a/plugins/ipod/rb-ipod-plugin.c b/plugins/ipod/rb-ipod-plugin.c
index d814e6e..113cdb5 100644
--- a/plugins/ipod/rb-ipod-plugin.c
+++ b/plugins/ipod/rb-ipod-plugin.c
@@ -238,12 +238,11 @@ create_source_cb (RBRemovableMediaManager *rmm, GMount *mount, RBIpodPlugin *plu
 
 	if (rb_ipod_helpers_needs_init (mount)) {
 		gboolean inited;
-		gchar *glade_file;
-		glade_file = rb_plugin_find_file (RB_PLUGIN (plugin),
-						  "ipod-init.glade");
+		gchar *builder_file;
+		builder_file = rb_plugin_find_file (RB_PLUGIN (plugin), "ipod-init.ui");
 		inited = rb_ipod_helpers_show_first_time_dialog (mount,
-								 glade_file);
-		g_free (glade_file);
+								 builder_file);
+		g_free (builder_file);
 		if (!inited) {
 			return NULL;
 		}
diff --git a/plugins/ipod/rb-ipod-source.c b/plugins/ipod/rb-ipod-source.c
index 1a2e874..8d2c574 100644
--- a/plugins/ipod/rb-ipod-source.c
+++ b/plugins/ipod/rb-ipod-source.c
@@ -43,7 +43,7 @@
 #include "rb-ipod-helpers.h"
 #include "rb-debug.h"
 #include "rb-file-helpers.h"
-#include "rb-glade-helpers.h"
+#include "rb-builder-helpers.h"
 #include "rb-plugin.h"
 #include "rb-removable-media-manager.h"
 #include "rb-ipod-static-playlist-source.h"
@@ -1595,14 +1595,14 @@ ipod_name_changed_cb (GtkWidget     *widget,
 void
 rb_ipod_source_show_properties (RBiPodSource *source)
 {
-	GladeXML *xml;
-	GtkWidget *dialog;
-	GtkWidget *label;
+	GtkBuilder *builder;
+	GObject *dialog;
+	GObject *label;
 	char *text;
 	const gchar *mp;
 	char *used;
 	char *capacity;
-	char *glade_file;
+	char *builder_file;
  	RBiPodSourcePrivate *priv = IPOD_SOURCE_GET_PRIVATE (source);
 	Itdb_Device *ipod_dev;
 	RBPlugin *plugin;
@@ -1615,48 +1615,48 @@ rb_ipod_source_show_properties (RBiPodSource *source)
 	ipod_dev = rb_ipod_db_get_device (priv->ipod_db);
 
 	g_object_get (source, "plugin", &plugin, NULL);
-	glade_file = rb_plugin_find_file (plugin, "ipod-info.glade");
+	builder_file = rb_plugin_find_file (plugin, "ipod-info.ui");
 	g_object_unref (plugin);
 
-	if (glade_file == NULL) {
-		g_warning ("Couldn't find ipod-info.glade");
+	if (builder_file == NULL) {
+		g_warning ("Couldn't find ipod-info.ui");
 		return;
 	}
 
-	xml = rb_glade_xml_new (glade_file, "ipod-information", NULL);
-	g_free (glade_file);
+	builder = rb_builder_load (builder_file, NULL);
+	g_free (builder_file);
 
- 	if (xml == NULL) {
- 		rb_debug ("Couldn't load ipod-info.glade");
+ 	if (builder == NULL) {
+ 		rb_debug ("Couldn't load ipod-info.ui");
  		return;
  	}
 	
- 	dialog = glade_xml_get_widget (xml, "ipod-information");
- 	g_signal_connect_object (G_OBJECT (dialog),
+ 	dialog = gtk_builder_get_object (builder, "ipod-information");
+ 	g_signal_connect_object (dialog,
  				 "response",
  				 G_CALLBACK (rb_ipod_info_response_cb),
  				 source, 0);
  
- 	label = glade_xml_get_widget (xml, "label-number-track-number");
+ 	label = gtk_builder_get_object (builder, "label-number-track-number");
  	text = g_strdup_printf ("%u", g_list_length (rb_ipod_db_get_tracks(priv->ipod_db) ));
  	gtk_label_set_text (GTK_LABEL (label), text);
  	g_free (text);
  
- 	label = glade_xml_get_widget (xml, "entry-ipod-name");
+ 	label = gtk_builder_get_object (builder, "entry-ipod-name");
  	gtk_entry_set_text (GTK_ENTRY (label), rb_ipod_db_get_ipod_name (priv->ipod_db));
- 	g_signal_connect (G_OBJECT (label), "focus-out-event", 
+ 	g_signal_connect (label, "focus-out-event",
  			  (GCallback)ipod_name_changed_cb, source);
  
- 	label = glade_xml_get_widget (xml, "label-number-playlist-number");
+ 	label = gtk_builder_get_object (builder, "label-number-playlist-number");
  	text = g_strdup_printf ("%u", g_list_length (rb_ipod_db_get_playlists (priv->ipod_db)));
  	gtk_label_set_text (GTK_LABEL (label), text);
  	g_free (text);
  
- 	label = glade_xml_get_widget (xml, "label-mount-point-value");
+ 	label = gtk_builder_get_object (builder, "label-mount-point-value");
 	mp = rb_ipod_db_get_mount_path (priv->ipod_db);
  	gtk_label_set_text (GTK_LABEL (label), mp);
 
-	label = glade_xml_get_widget (xml, "progressbar-ipod-usage");
+	label = gtk_builder_get_object (builder, "progressbar-ipod-usage");
 	used = g_format_size_for_display (rb_ipod_helpers_get_capacity (mp) - rb_ipod_helpers_get_free_space (mp));
 	capacity = g_format_size_for_display (rb_ipod_helpers_get_capacity(mp));
 	gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (label), 
@@ -1670,25 +1670,27 @@ rb_ipod_source_show_properties (RBiPodSource *source)
 	g_free (capacity);
 	g_free (used);
 
-	label = glade_xml_get_widget (xml, "label-device-node-value");
+	label = gtk_builder_get_object (builder, "label-device-node-value");
 	text = rb_ipod_helpers_get_device (RB_SOURCE(source));
 	gtk_label_set_text (GTK_LABEL (label), text);
 	g_free (text);
 
- 	label = glade_xml_get_widget (xml, "label-ipod-model-value");
+ 	label = gtk_builder_get_object (builder, "label-ipod-model-value");
  	gtk_label_set_text (GTK_LABEL (label), itdb_device_get_sysinfo (ipod_dev, "ModelNumStr"));
 
- 	label = glade_xml_get_widget (xml, "label-database-version-value");
+ 	label = gtk_builder_get_object (builder, "label-database-version-value");
 	text = g_strdup_printf ("%u", rb_ipod_db_get_database_version (priv->ipod_db));
  	gtk_label_set_text (GTK_LABEL (label), text);
 	g_free (text);
 
- 	label = glade_xml_get_widget (xml, "label-serial-number-value");
+ 	label = gtk_builder_get_object (builder, "label-serial-number-value");
 	gtk_label_set_text (GTK_LABEL (label), itdb_device_get_sysinfo (ipod_dev, "pszSerialNumber"));
 
- 	label = glade_xml_get_widget (xml, "label-firmware-version-value");
+ 	label = gtk_builder_get_object (builder, "label-firmware-version-value");
 	gtk_label_set_text (GTK_LABEL (label), itdb_device_get_sysinfo (ipod_dev, "VisibleBuildID"));
 
  	gtk_widget_show (GTK_WIDGET (dialog));
+
+	g_object_unref (builder);
 }
 
diff --git a/plugins/iradio/Makefile.am b/plugins/iradio/Makefile.am
index f2de0ab..f7540e7 100644
--- a/plugins/iradio/Makefile.am
+++ b/plugins/iradio/Makefile.am
@@ -35,9 +35,9 @@ INCLUDES = 						\
 	$(TOTEM_PLPARSER_CFLAGS)			\
 	-D_XOPEN_SOURCE -D_BSD_SOURCE
 
-gladedir = $(plugindir)
-glade_DATA = \
-	station-properties.glade
+gtkbuilderdir = $(plugindir)
+gtkbuilder_DATA = \
+	station-properties.ui
 
 uixmldir = $(plugindir)
 uixml_DATA = iradio-ui.xml
@@ -56,7 +56,7 @@ plugin_DATA = 			\
 	$(NULL)
 
 EXTRA_DIST = 			\
-	$(glade_DATA)		\
+	$(gtkbuilder_DATA)	\
 	$(uixml_DATA)		\
 	$(plugin_in_files)	\
 	iradio-initial.pls	\
diff --git a/plugins/iradio/rb-iradio-source.c b/plugins/iradio/rb-iradio-source.c
index c564d23..7473c6b 100644
--- a/plugins/iradio/rb-iradio-source.c
+++ b/plugins/iradio/rb-iradio-source.c
@@ -34,14 +34,12 @@
 
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
-#include <glade/glade.h>
 #include <libxml/tree.h>
 
 #include "rb-iradio-source.h"
 #include "rb-iradio-source-search.h"
 
 #include "rhythmdb-query-model.h"
-#include "rb-glade-helpers.h"
 #include "rb-stock-icons.h"
 #include "rb-entry-view.h"
 #include "rb-property-view.h"
diff --git a/plugins/iradio/rb-station-properties-dialog.c b/plugins/iradio/rb-station-properties-dialog.c
index 3a67c3c..ed99d49 100644
--- a/plugins/iradio/rb-station-properties-dialog.c
+++ b/plugins/iradio/rb-station-properties-dialog.c
@@ -35,11 +35,10 @@
 
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
-#include <glade/glade.h>
 
 #include "rb-station-properties-dialog.h"
 #include "rb-file-helpers.h"
-#include "rb-glade-helpers.h"
+#include "rb-builder-helpers.h"
 #include "rb-dialog.h"
 #include "rb-rating.h"
 #include "rb-plugin.h"
@@ -159,8 +158,8 @@ rb_station_properties_dialog_constructor (GType type,
 					  GObjectConstructParam *construct_properties)
 {
 	RBStationPropertiesDialog *dialog;
-	GladeXML *xml;
-	char *gladefile;
+	GtkBuilder *builder;
+	char *builder_file;
 	AtkObject *lobj, *robj;
 
 	dialog = RB_STATION_PROPERTIES_DIALOG (G_OBJECT_CLASS (rb_station_properties_dialog_parent_class)
@@ -175,40 +174,37 @@ rb_station_properties_dialog_constructor (GType type,
 	gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
 	gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 2);
 
-	gladefile = rb_plugin_find_file (dialog->priv->plugin, "station-properties.glade");
-	g_assert (gladefile != NULL);
-	xml = rb_glade_xml_new (gladefile,
-				"stationproperties",
-				dialog);
-	glade_xml_signal_autoconnect (xml);
-	g_free (gladefile);
+	builder_file = rb_plugin_find_file (dialog->priv->plugin, "station-properties.ui");
+	g_assert (builder_file != NULL);
+	builder = rb_builder_load (builder_file, dialog);
+	g_free (builder_file);
 
 	gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox),
-			   glade_xml_get_widget (xml, "stationproperties"));
+			   GTK_WIDGET (gtk_builder_get_object (builder, "stationproperties")));
 
 	dialog->priv->close_button = gtk_dialog_add_button (GTK_DIALOG (dialog),
 							    GTK_STOCK_CLOSE,
 							    GTK_RESPONSE_CLOSE);
 	gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_CLOSE);
 
-	/* get the widgets from the XML */
-	dialog->priv->title = glade_xml_get_widget (xml, "titleEntry");
-	dialog->priv->genre = glade_xml_get_widget (xml, "genreEntry");
-	dialog->priv->location = glade_xml_get_widget (xml, "locationEntry");
-
-	dialog->priv->lastplayed = glade_xml_get_widget (xml, "lastplayedLabel");
-	dialog->priv->playcount = glade_xml_get_widget (xml, "playcountLabel");
-	dialog->priv->bitrate = glade_xml_get_widget (xml, "bitrateLabel");
-	dialog->priv->playback_error = glade_xml_get_widget (xml, "errorLabel");
-	dialog->priv->playback_error_box = glade_xml_get_widget (xml, "errorBox");
-
-	rb_glade_boldify_label (xml, "titleLabel");
-	rb_glade_boldify_label (xml, "genreLabel");
-	rb_glade_boldify_label (xml, "locationLabel");
-	rb_glade_boldify_label (xml, "ratingLabel");
-	rb_glade_boldify_label (xml, "lastplayedDescLabel");
-	rb_glade_boldify_label (xml, "playcountDescLabel");
-	rb_glade_boldify_label (xml, "bitrateDescLabel");
+	/* get the widgets from the builder */
+	dialog->priv->title = GTK_WIDGET (gtk_builder_get_object (builder, "titleEntry"));
+	dialog->priv->genre = GTK_WIDGET (gtk_builder_get_object (builder, "genreEntry"));
+	dialog->priv->location = GTK_WIDGET (gtk_builder_get_object (builder, "locationEntry"));
+
+	dialog->priv->lastplayed = GTK_WIDGET (gtk_builder_get_object (builder, "lastplayedLabel"));
+	dialog->priv->playcount = GTK_WIDGET (gtk_builder_get_object (builder, "playcountLabel"));
+	dialog->priv->bitrate = GTK_WIDGET (gtk_builder_get_object (builder, "bitrateLabel"));
+	dialog->priv->playback_error = GTK_WIDGET (gtk_builder_get_object (builder, "errorLabel"));
+	dialog->priv->playback_error_box = GTK_WIDGET (gtk_builder_get_object (builder, "errorBox"));
+
+	rb_builder_boldify_label (builder, "titleLabel");
+	rb_builder_boldify_label (builder, "genreLabel");
+	rb_builder_boldify_label (builder, "locationLabel");
+	rb_builder_boldify_label (builder, "ratingLabel");
+	rb_builder_boldify_label (builder, "lastplayedDescLabel");
+	rb_builder_boldify_label (builder, "playcountDescLabel");
+	rb_builder_boldify_label (builder, "bitrateDescLabel");
 
 	g_signal_connect_object (G_OBJECT (dialog->priv->location),
 				 "changed",
@@ -220,17 +216,17 @@ rb_station_properties_dialog_constructor (GType type,
 				 "rated",
 				 G_CALLBACK (rb_station_properties_dialog_rated_cb),
 				 G_OBJECT (dialog), 0);
-	gtk_container_add (GTK_CONTAINER (glade_xml_get_widget (xml, "ratingVBox")),
+	gtk_container_add (GTK_CONTAINER (gtk_builder_get_object (builder, "ratingVBox")),
 			   dialog->priv->rating);
 
 	/* add relationship between the rating label and the rating widget */
-	lobj = gtk_widget_get_accessible (glade_xml_get_widget (xml, "ratingLabel"));
+	lobj = gtk_widget_get_accessible (GTK_WIDGET (gtk_builder_get_object (builder, "ratingLabel")));
 	robj = gtk_widget_get_accessible (dialog->priv->rating);
 
 	atk_object_add_relationship (lobj, ATK_RELATION_LABEL_FOR, robj);
 	atk_object_add_relationship (robj, ATK_RELATION_LABELLED_BY, lobj);
 
-	g_object_unref (xml);
+	g_object_unref (builder);
 
 	return G_OBJECT (dialog);
 }
diff --git a/plugins/jamendo/Makefile.am b/plugins/jamendo/Makefile.am
index 9c4e75e..5d5e9e2 100644
--- a/plugins/jamendo/Makefile.am
+++ b/plugins/jamendo/Makefile.am
@@ -10,10 +10,10 @@ plugin_DATA = $(plugin_in_files:.rb-plugin.in=.rb-plugin)
 
 plugin_in_files = jamendo.rb-plugin.in
 
-glade_DATA =	\
-		jamendo-loading.glade                 \
-		jamendo-prefs.glade		      \
-		jamendo_logo.png		      \
+gtkbuilder_DATA =	\
+		jamendo-loading.ui			\
+		jamendo-prefs.ui			\
+		jamendo_logo.png			\
 		jamendo_logo_medium.png
 
 themedir = $(pkgdatadir)/icons/hicolor
@@ -22,8 +22,8 @@ context = places
 icondir = $(themedir)/$(size)/$(context)
 icon_DATA = icons/hicolor/$(size)/$(context)/jamendo.png
 
-gladedir = $(plugindir)
-EXTRA_DIST = $(plugin_in_files) $(glade_DATA) $(icon_DATA)
+gtkbuilderdir = $(plugindir)
+EXTRA_DIST = $(plugin_in_files) $(gtkbuilder_DATA) $(icon_DATA)
 CLEANFILES = $(plugin_DATA)
 DISTCLEANFILES = $(plugin_DATA)
 
diff --git a/plugins/jamendo/jamendo/JamendoConfigureDialog.py b/plugins/jamendo/jamendo/JamendoConfigureDialog.py
index cdbf01f..b6d160e 100644
--- a/plugins/jamendo/jamendo/JamendoConfigureDialog.py
+++ b/plugins/jamendo/jamendo/JamendoConfigureDialog.py
@@ -19,7 +19,7 @@
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 import gobject
-import gtk, gtk.glade
+import gtk
 import gconf, gnome
 
 gconf_keys = {	'format' : '/apps/rhythmbox/plugins/jamendo/format',
@@ -28,12 +28,14 @@ gconf_keys = {	'format' : '/apps/rhythmbox/plugins/jamendo/format',
 format_list = ['ogg3', 'mp32']
 
 class JamendoConfigureDialog (object):
-	def __init__(self, glade_file):
+	def __init__(self, builder_file):
 		self.gconf = gconf.client_get_default()
-		gladexml = gtk.glade.XML(glade_file)
 
-		self.dialog = gladexml.get_widget('preferences_dialog')
-		self.audio_combobox = gladexml.get_widget("audio_combobox")
+		builder = gtk.Builder()
+		builder.add_from_file(builder_file)
+
+		self.dialog = builder.get_object('preferences_dialog')
+		self.audio_combobox = builder.get_object("audio_combobox")
 
 		format_text = self.gconf.get_string(gconf_keys['format'])
 		if not format_text:
diff --git a/plugins/jamendo/jamendo/JamendoSource.py b/plugins/jamendo/jamendo/JamendoSource.py
index cc7f511..198391e 100644
--- a/plugins/jamendo/jamendo/JamendoSource.py
+++ b/plugins/jamendo/jamendo/JamendoSource.py
@@ -27,7 +27,7 @@ import JamendoConfigureDialog
 
 import os
 import gobject
-import gtk.glade
+import gtk
 import gnome, gconf
 import xml
 import gzip
@@ -254,9 +254,11 @@ class JamendoSource(rb.BrowserSource):
 
 	def __show_loading_screen(self, show):
 		if self.__info_screen is None:
-			# load the glade stuff
-			gladexml = gtk.glade.XML(self.__plugin.find_file("jamendo-loading.glade"), root="jamendo_loading_scrolledwindow")
-			self.__info_screen = gladexml.get_widget("jamendo_loading_scrolledwindow")
+			# load the builder stuff
+			builder = gtk.Builder()
+			builder.add_from_file(self.__plugin.find_file("jamendo-loading.ui"))
+
+			self.__info_screen = builder.get_object("jamendo_loading_scrolledwindow")
 			self.pack_start(self.__info_screen)
 			self.get_entry_view().set_no_show_all (True)
 			self.__info_screen.set_no_show_all (True)
diff --git a/plugins/jamendo/jamendo/__init__.py b/plugins/jamendo/jamendo/__init__.py
index 05fb2e0..2dacf48 100644
--- a/plugins/jamendo/jamendo/__init__.py
+++ b/plugins/jamendo/jamendo/__init__.py
@@ -31,7 +31,7 @@
 
 import rhythmdb, rb
 import gobject
-import gtk, gtk.glade
+import gtk
 
 from JamendoSource import JamendoSource
 from JamendoConfigureDialog import JamendoConfigureDialog
@@ -130,8 +130,8 @@ class Jamendo(rb.Plugin):
 
 	def create_configure_dialog(self, dialog=None):
 		if not dialog:
-			glade_file = self.find_file("jamendo-prefs.glade")
-			dialog = JamendoConfigureDialog (glade_file).get_dialog()
+			builder_file = self.find_file("jamendo-prefs.ui")
+			dialog = JamendoConfigureDialog (builder_file).get_dialog()
 		dialog.present()
 		return dialog
 
diff --git a/plugins/lyrics/Makefile.am b/plugins/lyrics/Makefile.am
index 8977e1c..5a6f824 100644
--- a/plugins/lyrics/Makefile.am
+++ b/plugins/lyrics/Makefile.am
@@ -10,11 +10,11 @@ plugin_DATA = $(plugin_in_files:.rb-plugin.in=.rb-plugin)
 
 plugin_in_files = lyrics.rb-plugin.in
 
-glade_DATA =	\
-		lyrics-prefs.glade
+gtkbuilder_DATA =	\
+		lyrics-prefs.ui
 
-gladedir = $(plugindir)
-EXTRA_DIST = $(plugin_in_files) $(glade_DATA)
+gtkbuilderdir = $(plugindir)
+EXTRA_DIST = $(plugin_in_files) $(gtkbuilder_DATA)
 CLEANFILES = $(plugin_DATA)
 DISTCLEANFILES = $(plugin_DATA)
 
diff --git a/plugins/lyrics/lyrics/LyricsConfigureDialog.py b/plugins/lyrics/lyrics/LyricsConfigureDialog.py
index b897541..aab0a3e 100644
--- a/plugins/lyrics/lyrics/LyricsConfigureDialog.py
+++ b/plugins/lyrics/lyrics/LyricsConfigureDialog.py
@@ -27,25 +27,27 @@
 
 
 
-import gobject, gtk, gtk.glade
+import gobject, gtk
 import gconf
 from os import system, path
 
 class LyricsConfigureDialog (object):
-	def __init__(self, glade_file, gconf_keys):
+	def __init__(self, builder_file, gconf_keys):
 		self.gconf = gconf.client_get_default()
 		self.gconf_keys = gconf_keys
-		self.gladexml = gtk.glade.XML(glade_file)
+
+		builder = gtk.Builder()
+		builder.add_from_file(builder_file)
 			
-		self.dialog = self.gladexml.get_widget("preferences_dialog")
-
-		self.toggle1 = self.gladexml.get_widget("engine1")
-		self.toggle2 = self.gladexml.get_widget("engine2")
-		self.toggle3 = self.gladexml.get_widget("engine3")
-		self.toggle4 = self.gladexml.get_widget("engine4")
-		self.toggle5 = self.gladexml.get_widget("engine5")
-		self.choose_button = self.gladexml.get_widget("choose_button")
-		self.path_display = self.gladexml.get_widget("path_display")
+		self.dialog = builder.get_object("preferences_dialog")
+
+		self.toggle1 = builder.get_object("engine1")
+		self.toggle2 = builder.get_object("engine2")
+		self.toggle3 = builder.get_object("engine3")
+		self.toggle4 = builder.get_object("engine4")
+		self.toggle5 = builder.get_object("engine5")
+		self.choose_button = builder.get_object("choose_button")
+		self.path_display = builder.get_object("path_display")
 
 		self.choose_button.connect("clicked", self.choose_callback)
 		self.dialog.connect("response", self.dialog_response)
diff --git a/plugins/lyrics/lyrics/__init__.py b/plugins/lyrics/lyrics/__init__.py
index 7e115de..6cb43a1 100644
--- a/plugins/lyrics/lyrics/__init__.py
+++ b/plugins/lyrics/lyrics/__init__.py
@@ -30,7 +30,7 @@
 # - check that the lyrics returned even remotely match the request?
 
 import os, re
-import gtk, gtk.glade
+import gtk
 import gconf
 import rhythmdb, rb
 
@@ -330,8 +330,8 @@ class LyricsDisplayPlugin(rb.Plugin):
 
 	def create_configure_dialog(self, dialog=None):
 		if not dialog:
-			glade_file = self.find_file("lyrics-prefs.glade")
-			dialog = LyricsConfigureDialog (glade_file, gconf_keys).get_dialog()
+			builder_file = self.find_file("lyrics-prefs.ui")
+			dialog = LyricsConfigureDialog (builder_file, gconf_keys).get_dialog()
 		dialog.present()
 		return dialog
 	
diff --git a/plugins/magnatune/Makefile.am b/plugins/magnatune/Makefile.am
index 9da19a1..ad021f1 100644
--- a/plugins/magnatune/Makefile.am
+++ b/plugins/magnatune/Makefile.am
@@ -10,10 +10,10 @@ plugin_DATA = $(plugin_in_files:.rb-plugin.in=.rb-plugin)
 
 plugin_in_files = magnatune.rb-plugin.in
 
-glade_DATA =	\
-		magnatune-loading.glade			\
-		magnatune-purchase.glade		\
-		magnatune-prefs.glade			\
+gtkbuilder_DATA =	\
+		magnatune-loading.ui			\
+		magnatune-purchase.ui			\
+		magnatune-prefs.ui			\
 		magnatune_logo_color_small.png		\
 		magnatune_logo_color_tiny.png
 
@@ -23,8 +23,8 @@ context = places
 icondir = $(themedir)/$(size)/$(context)
 icon_DATA = icons/hicolor/$(size)/$(context)/magnatune.png
 
-gladedir = $(plugindir)
-EXTRA_DIST = $(plugin_in_files) $(glade_DATA) $(icon_DATA)
+gtkbuilderdir = $(plugindir)
+EXTRA_DIST = $(plugin_in_files) $(gtkbuilder_DATA) $(icon_DATA)
 CLEANFILES = $(plugin_DATA)
 DISTCLEANFILES = $(plugin_DATA)
 
diff --git a/plugins/magnatune/magnatune/MagnatuneSource.py b/plugins/magnatune/magnatune/MagnatuneSource.py
index 8087c2a..acc990e 100644
--- a/plugins/magnatune/magnatune/MagnatuneSource.py
+++ b/plugins/magnatune/magnatune/MagnatuneSource.py
@@ -31,7 +31,7 @@ from BuyAlbumHandler import BuyAlbumHandler, MagnatunePurchaseError
 
 import os
 import gobject
-import gtk.glade
+import gtk
 import gnome, gconf
 import xml
 import urllib
@@ -212,17 +212,17 @@ class MagnatuneSource(rb.BrowserSource):
 				rb.show_uri(url)
 				urls.add(url)
 
-	def radio_toggled(self, gladexml):
-		gc = gladexml.get_widget("radio_gc").get_active()
-		gladexml.get_widget("remember_cc_details").set_sensitive(not gc)
-		gladexml.get_widget("name_entry").set_sensitive(not gc)
-		gladexml.get_widget("cc_entry").set_sensitive(not gc)
-		gladexml.get_widget("mm_entry").set_sensitive(not gc)
-		gladexml.get_widget("yy_entry").set_sensitive(not gc)
+	def radio_toggled(self, builder):
+		gc = builder.get_object("radio_gc").get_active()
+		builder.get_object("remember_cc_details").set_sensitive(not gc)
+		builder.get_object("name_entry").set_sensitive(not gc)
+		builder.get_object("cc_entry").set_sensitive(not gc)
+		builder.get_object("mm_entry").set_sensitive(not gc)
+		builder.get_object("yy_entry").set_sensitive(not gc)
 		
-		gladexml.get_widget("gc_entry").set_sensitive(gc)
+		builder.get_object("gc_entry").set_sensitive(gc)
 		if not gc:
-			gladexml.get_widget("gc_entry").set_text("")
+			builder.get_object("gc_entry").set_text("")
 	
 	def purchase_album(self):
 		try:
@@ -235,6 +235,12 @@ class MagnatuneSource(rb.BrowserSource):
 		tracks = self.get_entry_view().get_selected_entries()
 		skus = []
 
+		builder = gtk.Builder()
+		builder.add_from_file(self.__plugin.find_file("magnatune-purchase.ui"))
+		# .. argh autoconnect ..
+		#cb_dict = {"rb_magnatune_on_radio_cc_toggled_cb":lambda w:self.radio_toggled(gladexml)}
+		#gladexml.signal_autoconnect(cb_dict)
+
 		for track in tracks:
 			sku = self.__sku_dict[self.__db.entry_get(track, rhythmdb.PROP_LOCATION)]
 			if sku in skus:
@@ -243,49 +249,45 @@ class MagnatuneSource(rb.BrowserSource):
 			artist = self.__db.entry_get(track, rhythmdb.PROP_ARTIST)
 			album = self.__db.entry_get(track, rhythmdb.PROP_ALBUM)
 
-			gladexml = gtk.glade.XML(self.__plugin.find_file("magnatune-purchase.glade"))
-			cb_dict = {"rb_magnatune_on_radio_cc_toggled_cb":lambda w:self.radio_toggled(gladexml)}
-			gladexml.signal_autoconnect(cb_dict)
-			
-			gladexml.get_widget("gc_entry").set_sensitive(False)
-			gladexml.get_widget("pay_combobox").set_active(self.__client.get_int(self.__plugin.gconf_keys['pay']) - 5)
-			gladexml.get_widget("audio_combobox").set_active(self.__plugin.format_list.index(self.__client.get_string(self.__plugin.gconf_keys['format'])))
-			gladexml.get_widget("info_label").set_markup(_("Would you like to purchase the album <i>%(album)s</i> by '%(artist)s'?") % {"album":album, "artist":artist})
-			gladexml.get_widget("remember_cc_details").props.visible = has_gnome_keyring
+			builder.get_object("gc_entry").set_sensitive(False)
+			builder.get_object("pay_combobox").set_active(self.__client.get_int(self.__plugin.gconf_keys['pay']) - 5)
+			builder.get_object("audio_combobox").set_active(self.__plugin.format_list.index(self.__client.get_string(self.__plugin.gconf_keys['format'])))
+			builder.get_object("info_label").set_markup(_("Would you like to purchase the album <i>%(album)s</i> by '%(artist)s'?") % {"album":album, "artist":artist})
+			builder.get_object("remember_cc_details").props.visible = has_gnome_keyring
 
 			try:
 				(ccnumber, ccyear, ccmonth, name, email) = self.__plugin.get_cc_details()
-				gladexml.get_widget("cc_entry").set_text(ccnumber)
-				gladexml.get_widget("yy_entry").set_text(ccyear)
-				gladexml.get_widget("mm_entry").set_active(ccmonth-1)
-				gladexml.get_widget("name_entry").set_text(name)
-				gladexml.get_widget("email_entry").set_text(email)
+				builder.get_object("cc_entry").set_text(ccnumber)
+				builder.get_object("yy_entry").set_text(ccyear)
+				builder.get_object("mm_entry").set_active(ccmonth-1)
+				builder.get_object("name_entry").set_text(name)
+				builder.get_object("email_entry").set_text(email)
 
-				gladexml.get_widget("remember_cc_details").set_active(True)
+				builder.get_object("remember_cc_details").set_active(True)
 			except Exception, e:
 				print e
 
-				gladexml.get_widget("cc_entry").set_text("")
-				gladexml.get_widget("yy_entry").set_text("")
-				gladexml.get_widget("mm_entry").set_active(0)
-				gladexml.get_widget("name_entry").set_text("")
-				gladexml.get_widget("email_entry").set_text("")
+				builder.get_object("cc_entry").set_text("")
+				builder.get_object("yy_entry").set_text("")
+				builder.get_object("mm_entry").set_active(0)
+				builder.get_object("name_entry").set_text("")
+				builder.get_object("email_entry").set_text("")
 
-				gladexml.get_widget("remember_cc_details").set_active(False)
+				builder.get_object("remember_cc_details").set_active(False)
 
-			window = gladexml.get_widget("purchase_dialog")
+			window = builder.get_object("purchase_dialog")
 			if window.run() == gtk.RESPONSE_ACCEPT:
-				amount = gladexml.get_widget("pay_combobox").get_active() + 5
-				format = self.__plugin.format_list[gladexml.get_widget("audio_combobox").get_active()]
-				ccnumber = gladexml.get_widget("cc_entry").get_text()
-				ccyear = gladexml.get_widget("yy_entry").get_text()
-				ccmonth = str(gladexml.get_widget("mm_entry").get_active() + 1).zfill(2)
-				name = gladexml.get_widget("name_entry").get_text()
-				email = gladexml.get_widget("email_entry").get_text()
-				gc = gladexml.get_widget("radio_gc").get_active()
-				gc_text = gladexml.get_widget("gc_entry").get_text()
-
-				if gladexml.get_widget("remember_cc_details").props.active:
+				amount = builder.get_object("pay_combobox").get_active() + 5
+				format = self.__plugin.format_list[builder.get_object("audio_combobox").get_active()]
+				ccnumber = builder.get_object("cc_entry").get_text()
+				ccyear = builder.get_object("yy_entry").get_text()
+				ccmonth = str(builder.get_object("mm_entry").get_active() + 1).zfill(2)
+				name = builder.get_object("name_entry").get_text()
+				email = builder.get_object("email_entry").get_text()
+				gc = builder.get_object("radio_gc").get_active()
+				gc_text = builder.get_object("gc_entry").get_text()
+
+				if builder.get_object("remember_cc_details").props.active:
 					self.__plugin.store_cc_details(ccnumber, ccyear, ccmonth, name, email)
 				else:
 					self.__plugin.clear_cc_details()
@@ -413,9 +415,10 @@ class MagnatuneSource(rb.BrowserSource):
 
 	def __show_loading_screen(self, show):
 		if self.__info_screen is None:
-			# load the glade stuff
-			gladexml = gtk.glade.XML(self.__plugin.find_file("magnatune-loading.glade"), root="magnatune_loading_scrolledwindow")
-			self.__info_screen = gladexml.get_widget("magnatune_loading_scrolledwindow")
+			# load the builder stuff
+			builder = gtk.Builder()
+			builder.add_from_file(self.__plugin.find_file("magnatune-loading.ui"))
+			self.__info_screen = builder.get_object("magnatune_loading_scrolledwindow")
 			self.pack_start(self.__info_screen)
 			self.get_entry_view().set_no_show_all (True)
 			self.__info_screen.set_no_show_all (True)
diff --git a/plugins/magnatune/magnatune/__init__.py b/plugins/magnatune/magnatune/__init__.py
index df60192..2b804cb 100644
--- a/plugins/magnatune/magnatune/__init__.py
+++ b/plugins/magnatune/magnatune/__init__.py
@@ -27,7 +27,7 @@
 
 import rhythmdb, rb
 import gobject
-import gtk, gtk.glade
+import gtk
 import gconf, gnome
 
 import urllib
@@ -209,46 +209,46 @@ class Magnatune(rb.Plugin):
 			def fill_cc_details():
 				try:
 					(ccnumber, ccyear, ccmonth, name, email) = self.get_cc_details()
-					gladexml.get_widget("cc_entry").set_text(ccnumber)
-					gladexml.get_widget("yy_entry").set_text(ccyear)
-					gladexml.get_widget("mm_entry").set_active(int(ccmonth)-1)
-					gladexml.get_widget("name_entry").set_text(name)
-					gladexml.get_widget("email_entry").set_text(email)
-					gladexml.get_widget("remember_cc_details").set_active(True)
+					builder.get_object("cc_entry").set_text(ccnumber)
+					builder.get_object("yy_entry").set_text(ccyear)
+					builder.get_object("mm_entry").set_active(int(ccmonth)-1)
+					builder.get_object("name_entry").set_text(name)
+					builder.get_object("email_entry").set_text(email)
+					builder.get_object("remember_cc_details").set_active(True)
 				except Exception, e:
 					print e
 
-					gladexml.get_widget("cc_entry").set_text("")
-					gladexml.get_widget("yy_entry").set_text("")
-					gladexml.get_widget("mm_entry").set_active(0)
-					gladexml.get_widget("name_entry").set_text("")
-					gladexml.get_widget("email_entry").set_text("")
-					gladexml.get_widget("remember_cc_details").set_active(False)
+					builder.get_object("cc_entry").set_text("")
+					builder.get_object("yy_entry").set_text("")
+					builder.get_object("mm_entry").set_active(0)
+					builder.get_object("name_entry").set_text("")
+					builder.get_object("email_entry").set_text("")
+					builder.get_object("remember_cc_details").set_active(False)
 
 			def update_expired():
-				mm = gladexml.get_widget("mm_entry").get_active() + 1
+				mm = builder.get_object("mm_entry").get_active() + 1
 				yy = 0
 				try:
-					yy = int(gladexml.get_widget("yy_entry").get_text())
+					yy = int(builder.get_object("yy_entry").get_text())
 				except Exception, e:
 					print e
-					gladexml.get_widget("cc_expired_label").hide()
+					builder.get_object("cc_expired_label").hide()
 					return
 
 				if yy < (datetime.date.today().year % 100):
-					gladexml.get_widget("cc_expired_label").show()
+					builder.get_object("cc_expired_label").show()
 				elif (yy == (datetime.date.today().year % 100) and mm < datetime.date.today().month):
-					gladexml.get_widget("cc_expired_label").show()
+					builder.get_object("cc_expired_label").show()
 				else:
-					gladexml.get_widget("cc_expired_label").hide()
+					builder.get_object("cc_expired_label").hide()
 			
 			def remember_checkbox_toggled (button):
 				print "remember CC details toggled " + str(button.get_active())
-				gladexml.get_widget("cc_entry").set_sensitive(button.get_active())
-				gladexml.get_widget("mm_entry").set_sensitive(button.get_active())
-				gladexml.get_widget("yy_entry").set_sensitive(button.get_active())
-				gladexml.get_widget("name_entry").set_sensitive(button.get_active())
-				gladexml.get_widget("email_entry").set_sensitive(button.get_active())
+				builder.get_object("cc_entry").set_sensitive(button.get_active())
+				builder.get_object("mm_entry").set_sensitive(button.get_active())
+				builder.get_object("yy_entry").set_sensitive(button.get_active())
+				builder.get_object("name_entry").set_sensitive(button.get_active())
+				builder.get_object("email_entry").set_sensitive(button.get_active())
 
 				if not button.get_active():
 					try:
@@ -258,6 +258,7 @@ class Magnatune(rb.Plugin):
 #				fill_cc_details()
 
 
+			# shit
 			self.configure_callback_dic = {
 #				"rb_magnatune_yy_entry_changed_cb" : lambda w: update_expired(),
 #				"rb_magnatune_mm_entry_changed_cb" : lambda w: update_expired(),
@@ -269,25 +270,26 @@ class Magnatune(rb.Plugin):
 				"rb_magnatune_remember_cc_details_toggled_cb" : remember_checkbox_toggled
 			}
 
-			gladexml = gtk.glade.XML(self.find_file("magnatune-prefs.glade"))
-			gladexml.signal_autoconnect(self.configure_callback_dic)
+			builder = gtk.Builder()
+			builder.add_from_file(self.find_file("magnatune-prefs.ui"))
+			# gladexml.signal_autoconnect(self.configure_callback_dic)
 
-			# FIXME this bit should be in glade too
-			dialog = gladexml.get_widget('preferences_dialog')
+			# FIXME this bit should be in builder too  (what?)
+			dialog = builder.get_object('preferences_dialog')
 			def dialog_response (dialog, response):
-				if gladexml.get_widget("remember_cc_details").get_active():
-					ccnumber = gladexml.get_widget("cc_entry").get_text()
-					ccyear = gladexml.get_widget("yy_entry").get_text()
-					ccmonth = str(gladexml.get_widget("mm_entry").get_active() + 1)
-					name = gladexml.get_widget("name_entry").get_text()
-					email = gladexml.get_widget("email_entry").get_text()
+				if builder.get_object("remember_cc_details").get_active():
+					ccnumber = builder.get_object("cc_entry").get_text()
+					ccyear = builder.get_object("yy_entry").get_text()
+					ccmonth = str(builder.get_object("mm_entry").get_active() + 1)
+					name = builder.get_object("name_entry").get_text()
+					email = builder.get_object("email_entry").get_text()
 					self.store_cc_details(ccnumber, ccyear, ccmonth, name, email)
 				dialog.hide()
 			dialog.connect("response", dialog_response)
 			
-			gladexml.get_widget("cc_details_box").props.visible = has_gnome_keyring
-			gladexml.get_widget("pay_combobox").set_active(self.client.get_int(self.gconf_keys['pay']) - 5)
-			gladexml.get_widget("audio_combobox").set_active(self.format_list.index(self.client.get_string(self.gconf_keys['format'])))
+			builder.get_object("cc_details_box").props.visible = has_gnome_keyring
+			builder.get_object("pay_combobox").set_active(self.client.get_int(self.gconf_keys['pay']) - 5)
+			builder.get_object("audio_combobox").set_active(self.format_list.index(self.client.get_string(self.gconf_keys['format'])))
 			fill_cc_details()
 
 		dialog.present()
diff --git a/plugins/mmkeys/Makefile.am b/plugins/mmkeys/Makefile.am
index ba50368..4acc9b2 100644
--- a/plugins/mmkeys/Makefile.am
+++ b/plugins/mmkeys/Makefile.am
@@ -34,16 +34,13 @@ INCLUDES = 						\
 	-D_XOPEN_SOURCE -D_BSD_SOURCE			\
 	$(NULL)
 
-gladedir = $(datadir)/rhythmbox/glade
-glade_DATA =
-
 plugin_in_files = mmkeys.rb-plugin.in
 
 %.rb-plugin: %.rb-plugin.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*po) ; $(INTLTOOL_MERGE) $(top_srcdir)/po $< $@ -d -u -c $(top_builddir)/po/.intltool-merge-cache
 
 plugin_DATA = $(plugin_in_files:.rb-plugin.in=.rb-plugin)
 
-EXTRA_DIST = $(glade_DATA) $(plugin_in_files)
+EXTRA_DIST = $(plugin_in_files)
 
 CLEANFILES = $(plugin_DATA)
 DISTCLEANFILES = $(plugin_DATA)
diff --git a/plugins/rb-plugin-manager.c b/plugins/rb-plugin-manager.c
index 07dee2d..676f37b 100644
--- a/plugins/rb-plugin-manager.c
+++ b/plugins/rb-plugin-manager.c
@@ -36,13 +36,12 @@
 #include <string.h>
 
 #include <glib/gi18n.h>
-#include <glade/glade-xml.h>
 
 #include "rb-plugin-manager.h"
 #include "rb-plugins-engine.h"
 #include "rb-plugin.h"
 #include "rb-debug.h"
-#include "rb-glade-helpers.h"
+#include "rb-builder-helpers.h"
 
 enum
 {
@@ -497,46 +496,44 @@ plugin_name_cmp (gconstpointer a, gconstpointer b)
 static void
 rb_plugin_manager_init (RBPluginManager *pm)
 {
-	GladeXML *xml;
+	GtkBuilder *builder;
 	GtkWidget *plugins_window;
 
 	pm->priv = RB_PLUGIN_MANAGER_GET_PRIVATE (pm);
 
-	xml = rb_glade_xml_new ("plugins.glade",
-				"plugins_vbox",
-				pm);
-	gtk_container_add (GTK_CONTAINER (pm), glade_xml_get_widget (xml, "plugins_vbox"));
+	builder = rb_builder_load ("plugins.ui", pm);
+	gtk_container_add (GTK_CONTAINER (pm), GTK_WIDGET (gtk_builder_get_object (builder, "edit_plugins")));
 
 	gtk_box_set_spacing (GTK_BOX (pm), 6);
 
 	pm->priv->tree = gtk_tree_view_new ();
-        plugins_window = glade_xml_get_widget (xml, "plugins_list_window");
+        plugins_window = GTK_WIDGET (gtk_builder_get_object (builder, "plugins_list_window"));
 	gtk_container_add (GTK_CONTAINER (plugins_window), pm->priv->tree);
 
-	pm->priv->configure_button = glade_xml_get_widget (xml, "configure_button");
+	pm->priv->configure_button = GTK_WIDGET (gtk_builder_get_object (builder, "configure_button"));
 	g_signal_connect (pm->priv->configure_button,
 			  "clicked",
 			  G_CALLBACK (configure_button_cb),
 			  pm);
 	
-        pm->priv->header_hbox = glade_xml_get_widget (xml, "header_hbox");
+        pm->priv->header_hbox = GTK_WIDGET (gtk_builder_get_object (builder, "header_hbox"));
 
-	pm->priv->plugin_title = glade_xml_get_widget (xml, "plugin_title");
+	pm->priv->plugin_title = GTK_WIDGET (gtk_builder_get_object (builder, "plugin_title"));
 
-	pm->priv->site_label = glade_xml_get_widget (xml, "site_label");
-	rb_glade_boldify_label (xml, "site_label");
-	pm->priv->copyright_label = glade_xml_get_widget (xml, "copyright_label");
-	rb_glade_boldify_label (xml, "copyright_label");
-	pm->priv->authors_label = glade_xml_get_widget (xml, "authors_label");
-	rb_glade_boldify_label (xml, "authors_label");
-	pm->priv->description_label = glade_xml_get_widget (xml, "description_label");
-	rb_glade_boldify_label (xml, "description_label");
+	pm->priv->site_label = GTK_WIDGET (gtk_builder_get_object (builder, "site_label"));
+	rb_builder_boldify_label (builder, "site_label");
+	pm->priv->copyright_label = GTK_WIDGET (gtk_builder_get_object (builder, "copyright_label"));
+	rb_builder_boldify_label (builder, "copyright_label");
+	pm->priv->authors_label = GTK_WIDGET (gtk_builder_get_object (builder, "authors_label"));
+	rb_builder_boldify_label (builder, "authors_label");
+	pm->priv->description_label = GTK_WIDGET (gtk_builder_get_object (builder, "description_label"));
+	rb_builder_boldify_label (builder, "description_label");
 
-	pm->priv->plugin_icon = glade_xml_get_widget (xml, "plugin_icon");
-	pm->priv->site_text = glade_xml_get_widget (xml, "site_text");
-	pm->priv->copyright_text = glade_xml_get_widget (xml, "copyright_text");
-	pm->priv->authors_text = glade_xml_get_widget (xml, "authors_text");
-	pm->priv->description_text = glade_xml_get_widget (xml, "description_text");
+	pm->priv->plugin_icon = GTK_WIDGET (gtk_builder_get_object (builder, "plugin_icon"));
+	pm->priv->site_text = GTK_WIDGET (gtk_builder_get_object (builder, "site_text"));
+	pm->priv->copyright_text = GTK_WIDGET (gtk_builder_get_object (builder, "copyright_text"));
+	pm->priv->authors_text = GTK_WIDGET (gtk_builder_get_object (builder, "authors_text"));
+	pm->priv->description_text = GTK_WIDGET (gtk_builder_get_object (builder, "description_text"));
 
 	plugin_manager_construct_tree (pm);
 
@@ -544,7 +541,7 @@ rb_plugin_manager_init (RBPluginManager *pm)
 	pm->priv->plugins = rb_plugins_engine_get_plugins_list ();
 	pm->priv->plugins = g_list_sort (pm->priv->plugins, plugin_name_cmp);
 	plugin_manager_populate_lists (pm);
-	g_object_unref (xml);
+	g_object_unref (builder);
 }
 
 GtkWidget *
diff --git a/plugins/rb-plugin.c b/plugins/rb-plugin.c
index 2076c13..3313756 100644
--- a/plugins/rb-plugin.c
+++ b/plugins/rb-plugin.c
@@ -266,7 +266,7 @@ rb_plugin_find_file (RBPlugin *plugin,
 	rb_debug ("found '%s' when searching for file '%s' for plugin '%s'",
 		  ret, file, priv->name);
 
-	/* ensure it's an absolute path, so doesn't confuse rb_glade_new et al */
+	/* ensure it's an absolute path, so doesn't confuse rb_builder_load et al */
 	if (ret != NULL && ret[0] != '/') {
 		char *pwd = g_get_current_dir ();
 		char *path = g_strconcat (pwd, G_DIR_SEPARATOR_S, ret, NULL);
diff --git a/plugins/sample-vala/Makefile.am b/plugins/sample-vala/Makefile.am
index 102c85c..261e6f4 100644
--- a/plugins/sample-vala/Makefile.am
+++ b/plugins/sample-vala/Makefile.am
@@ -34,9 +34,6 @@ INCLUDES = 						\
 	-D_XOPEN_SOURCE -D_BSD_SOURCE
 
 
-gladedir = $(datadir)/rhythmbox/glade
-glade_DATA =
-
 plugin_in_files = sample-vala.rb-plugin.in
 
 %.rb-plugin: %.rb-plugin.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*po); $(INTLTOOL_MERGE) $(top_srcdir)/po $< $@ -d -u -c $(top_builddir)/po/.intltool-merge-cache
@@ -46,7 +43,7 @@ plugin_in_files = sample-vala.rb-plugin.in
 	
 plugin_DATA = $(plugin_in_files:.rb-plugin.in=.rb-plugin)
 
-EXTRA_DIST = $(glade_DATA) $(plugin_in_files)
+EXTRA_DIST = $(plugin_in_files)
 
 CLEANFILES = $(plugin_DATA) $(libsample_vala_la_SOURCES:.vala=.h) $(libsample_vala_la_SOURCES:.vala=.c)
 DISTCLEANFILES = $(CLEANFILES)
diff --git a/plugins/sample/Makefile.am b/plugins/sample/Makefile.am
index 6176e18..c90cc4f 100644
--- a/plugins/sample/Makefile.am
+++ b/plugins/sample/Makefile.am
@@ -27,16 +27,13 @@ INCLUDES = 						\
 	$(RHYTHMBOX_CFLAGS)				\
 	-D_XOPEN_SOURCE -D_BSD_SOURCE
 
-gladedir = $(datadir)/rhythmbox/glade
-glade_DATA =
-
 plugin_in_files = sample.rb-plugin.in
 
 %.rb-plugin: %.rb-plugin.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*po) ; $(INTLTOOL_MERGE) $(top_srcdir)/po $< $@ -d -u -c $(top_builddir)/po/.intltool-merge-cache
 
 #plugin_DATA = $(plugin_in_files:.rb-plugin.in=.rb-plugin)
 
-EXTRA_DIST = $(glade_DATA) $(plugin_in_files)
+EXTRA_DIST = $(plugin_in_files)
 
 CLEANFILES = $(plugin_DATA)
 DISTCLEANFILES = $(plugin_DATA)
diff --git a/plugins/visualizer/Makefile.am b/plugins/visualizer/Makefile.am
index 33a1c90..eba7975 100644
--- a/plugins/visualizer/Makefile.am
+++ b/plugins/visualizer/Makefile.am
@@ -41,8 +41,8 @@ INCLUDES = 						\
 	$(DBUS_CFLAGS)					\
 	-D_XOPEN_SOURCE -D_BSD_SOURCE
 
-gladedir = $(plugindir)
-glade_DATA = visualizer-controls.glade
+gtkbuilderdir = $(plugindir)
+gtkbuilder_DATA = visualizer-controls.ui
 
 uixmldir = $(plugindir)
 uixml_DATA = visualizer-ui.xml
@@ -67,7 +67,7 @@ plugin_DATA = 			\
 	$(NULL)
 
 EXTRA_DIST = 			\
-	$(glade_DATA)		\
+	$(gtkbuilder_DATA)	\
 	$(uixml_DATA)		\
 	$(icon_DATA)		\
 	$(plugin_in_files)	\
diff --git a/plugins/visualizer/rb-visualizer-plugin.c b/plugins/visualizer/rb-visualizer-plugin.c
index 151a9c3..6eabe0f 100644
--- a/plugins/visualizer/rb-visualizer-plugin.c
+++ b/plugins/visualizer/rb-visualizer-plugin.c
@@ -58,7 +58,6 @@
 #include <gdk/gdkkeysyms.h>
 #include <glib.h>
 #include <glib-object.h>
-#include <glade/glade.h>
 
 #include <gst/gst.h>
 #include <gst/gstutils.h>
@@ -75,6 +74,7 @@
 #include "rb-file-helpers.h"
 #include "rb-preferences.h"
 #include "eel-gconf-extensions.h"
+#include "rb-builder-helpers.h"
 
 #define VISUALIZATION_ICON_NAME	"visualization"
 
@@ -2248,26 +2248,25 @@ static void
 create_controls (RBVisualizerPlugin *plugin)
 {
 	GtkWidget *widget;
-	GladeXML *xml;
-	char *gladefile;
+	GtkBuilder *builder;
+	char *builder_file;
 
-	/* load glade stuff */
-	gladefile = rb_plugin_find_file (RB_PLUGIN (plugin), "visualizer-controls.glade");
-	if (gladefile == NULL) {
+	/* load builder stuff */
+	builder_file = rb_plugin_find_file (RB_PLUGIN (plugin), "visualizer-controls.ui");
+	if (builder_file == NULL) {
 		return;
 	}
-	xml = glade_xml_new (gladefile,
-			     "visualizer_controls",
-			     NULL);
 
-	plugin->control_widget = glade_xml_get_widget (xml, "visualizer_controls");
-	plugin->element_combo = glade_xml_get_widget (xml, "element");
-	plugin->quality_combo = glade_xml_get_widget (xml, "quality");
-	plugin->mode_combo = glade_xml_get_widget (xml, "mode");
-	plugin->disable_button = glade_xml_get_widget (xml, "disable");
+	builder = rb_builder_load (builder_file, NULL);
 
-	plugin->screen_label = glade_xml_get_widget (xml, "screen_label");
-	plugin->screen_combo = glade_xml_get_widget (xml, "screen");
+	plugin->control_widget = GTK_WIDGET (gtk_builder_get_object (builder, "visualizer_controls"));
+	plugin->element_combo = GTK_WIDGET (gtk_builder_get_object (builder, "element"));
+	plugin->quality_combo = GTK_WIDGET (gtk_builder_get_object (builder, "quality"));
+	plugin->mode_combo = GTK_WIDGET (gtk_builder_get_object (builder, "mode"));
+	plugin->disable_button = GTK_WIDGET (gtk_builder_get_object (builder, "disable"));
+
+	plugin->screen_label = GTK_WIDGET (gtk_builder_get_object (builder, "screen_label"));
+	plugin->screen_combo = GTK_WIDGET (gtk_builder_get_object (builder, "screen"));
 
 	populate_combo_boxes (plugin);
 
@@ -2288,32 +2287,28 @@ create_controls (RBVisualizerPlugin *plugin)
 				 0);
 
 	g_object_ref (plugin->control_widget);
-	g_object_unref (xml);
 
-	xml = glade_xml_new (gladefile,
-			     "play_controls",
-			     NULL);
-	plugin->play_control_widget = glade_xml_get_widget (xml, "play_controls");
-	plugin->song_info_label = glade_xml_get_widget (xml, "song_info");
+	plugin->play_control_widget = GTK_WIDGET (gtk_builder_get_object (builder, "play_controls"));
+	plugin->song_info_label = GTK_WIDGET (gtk_builder_get_object (builder, "song_info"));
 
-	plugin->play_button = glade_xml_get_widget (xml, "play");
+	plugin->play_button = GTK_WIDGET (gtk_builder_get_object (builder, "play"));
 	g_signal_connect_object (plugin->play_button, "toggled",
 				 G_CALLBACK (play_toggled_cb), plugin,
 				 0);
 
-	widget = glade_xml_get_widget (xml, "previous");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "previous"));
 	g_signal_connect_object (widget, "clicked",
 				 G_CALLBACK (previous_clicked_cb), plugin,
 				 0);
-	widget = glade_xml_get_widget (xml, "next");
+	widget = GTK_WIDGET (gtk_builder_get_object (builder, "next"));
 	g_signal_connect_object (widget, "clicked",
 				 G_CALLBACK (next_clicked_cb), plugin,
 				 0);
 
 	g_object_ref (plugin->play_control_widget);
 
-	g_object_unref (xml);
-	g_free (gladefile);
+	g_object_unref (builder);
+	g_free (builder_file);
 }
 
 
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 468abf9..5c36456 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -3,18 +3,18 @@ backends/gstreamer/rb-encoder-gst.c
 backends/gstreamer/rb-player-gst.c
 backends/gstreamer/rb-player-gst-xfade.c
 backends/rb-player.c
-data/glade/create-playlist.glade
-data/glade/general-prefs.glade
-data/glade/library-prefs.glade
-data/glade/playback-prefs.glade
-data/glade/playlist-save.glade
-data/glade/plugins.glade
-data/glade/podcast-feed-properties.glade
-data/glade/podcast-prefs.glade
-data/glade/podcast-properties.glade
-data/glade/song-info-multiple.glade
-data/glade/song-info.glade
-data/glade/uri-new.glade
+data/ui/create-playlist.ui
+data/ui/general-prefs.ui
+data/ui/library-prefs.ui
+data/ui/playback-prefs.ui
+data/ui/playlist-save.ui
+data/ui/plugins.ui
+data/ui/podcast-feed-properties.ui
+data/ui/podcast-prefs.ui
+data/ui/podcast-properties.ui
+data/ui/song-info-multiple.ui
+data/ui/song-info.ui
+data/ui/uri-new.ui
 data/playlists.xml.in
 data/rhythmbox.desktop.in.in
 lib/eel-gconf-extensions.c
@@ -31,7 +31,7 @@ plugins/artdisplay/artdisplay/AmazonCoverArtSearch.py
 plugins/artdisplay/artdisplay/CoverArtDatabase.py
 plugins/artdisplay/artdisplay/__init__.py
 [type: gettext/ini]plugins/audiocd/audiocd.rb-plugin.in
-plugins/audiocd/multiple-album.glade
+plugins/audiocd/multiple-album.ui
 plugins/audiocd/rb-audiocd-plugin.c
 plugins/audiocd/rb-audiocd-source.c
 plugins/audiocd/sj-error.c
@@ -41,7 +41,7 @@ plugins/audiocd/sj-metadata-musicbrainz.c
 plugins/audiocd/sj-metadata.c
 plugins/audiocd/sj-structures.c
 [type: gettext/ini]plugins/audioscrobbler/audioscrobbler.rb-plugin.in
-plugins/audioscrobbler/audioscrobbler-prefs.glade
+plugins/audioscrobbler/audioscrobbler-prefs.ui
 plugins/audioscrobbler/rb-audioscrobbler-plugin.c
 plugins/audioscrobbler/rb-audioscrobbler-entry.c
 plugins/audioscrobbler/rb-audioscrobbler.c
@@ -52,10 +52,10 @@ plugins/brasero-disc-recorder/rb-disc-recorder-plugin.c
 plugins/cd-recorder/rb-cd-recorder-plugin.c
 plugins/cd-recorder/rb-recorder-gst.c
 plugins/cd-recorder/rb-playlist-source-recorder.c
-plugins/cd-recorder/recorder.glade
+plugins/cd-recorder/recorder.ui
 [type: gettext/ini]plugins/coherence/coherence.rb-plugin.in
 [type: gettext/ini]plugins/daap/daap.rb-plugin.in
-plugins/daap/daap-prefs.glade
+plugins/daap/daap-prefs.ui
 plugins/daap/rb-daap-connection.c
 plugins/daap/rb-daap-dialog.c
 plugins/daap/rb-daap-mdns-browser-avahi.c
@@ -73,14 +73,14 @@ plugins/generic-player/rb-generic-player-source.c
 plugins/generic-player/rb-nokia770-source.c
 plugins/generic-player/rb-psp-source.c
 [type: gettext/ini]plugins/ipod/ipod.rb-plugin.in
-plugins/ipod/ipod-info.glade
-plugins/ipod/ipod-init.glade
+plugins/ipod/ipod-info.ui
+plugins/ipod/ipod-init.ui
 plugins/ipod/rb-ipod-helpers.c
 plugins/ipod/rb-ipod-plugin.c
 plugins/ipod/rb-ipod-source.c
 [type: gettext/ini]plugins/iradio/iradio.rb-plugin.in
-plugins/jamendo/jamendo-prefs.glade
-plugins/jamendo/jamendo-loading.glade
+plugins/jamendo/jamendo-prefs.ui
+plugins/jamendo/jamendo-loading.ui
 [type: gettext/ini]plugins/jamendo/jamendo.rb-plugin.in
 plugins/jamendo/jamendo/__init__.py
 plugins/jamendo/jamendo/JamendoConfigureDialog.py
@@ -88,7 +88,7 @@ plugins/jamendo/jamendo/JamendoSaxHandler.py
 plugins/jamendo/jamendo/JamendoSource.py
 plugins/iradio/rb-iradio-source.c
 plugins/iradio/rb-station-properties-dialog.c
-plugins/iradio/station-properties.glade
+plugins/iradio/station-properties.ui
 [type: gettext/ini]plugins/lirc/lirc.rb-plugin.in
 plugins/lirc/rb-lirc-plugin.c
 plugins/lyrics/lyrics/__init__.py
@@ -98,10 +98,10 @@ plugins/lyrics/lyrics/LyrcParser.py
 plugins/lyrics/lyrics/LyricsConfigureDialog.py
 plugins/lyrics/lyrics/LyricsParse.py
 [type: gettext/ini]plugins/lyrics/lyrics.rb-plugin.in
-plugins/lyrics/lyrics-prefs.glade
-plugins/magnatune/magnatune-loading.glade
-plugins/magnatune/magnatune-prefs.glade
-plugins/magnatune/magnatune-purchase.glade
+plugins/lyrics/lyrics-prefs.ui
+plugins/magnatune/magnatune-loading.ui
+plugins/magnatune/magnatune-prefs.ui
+plugins/magnatune/magnatune-purchase.ui
 [type: gettext/ini]plugins/magnatune/magnatune.rb-plugin.in
 plugins/magnatune/magnatune/MagnatuneSource.py
 plugins/magnatune/magnatune/__init__.py
@@ -126,7 +126,7 @@ plugins/sample/rb-sample-plugin.c
 [type: gettext/ini]plugins/sample/sample.rb-plugin.in
 [type: gettext/ini]plugins/sample-vala/sample-vala.rb-plugin.in
 plugins/visualizer/rb-visualizer-plugin.c
-plugins/visualizer/visualizer-controls.glade
+plugins/visualizer/visualizer-controls.ui
 [type: gettext/ini]plugins/visualizer/visualizer.rb-plugin.in
 podcast/rb-feed-podcast-properties-dialog.c
 podcast/rb-podcast-manager.c
diff --git a/podcast/rb-feed-podcast-properties-dialog.c b/podcast/rb-feed-podcast-properties-dialog.c
index fd377bf..a4d6455 100644
--- a/podcast/rb-feed-podcast-properties-dialog.c
+++ b/podcast/rb-feed-podcast-properties-dialog.c
@@ -35,12 +35,11 @@
 
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
-#include <glade/glade.h>
 #include <glib.h>
 
 #include "rb-feed-podcast-properties-dialog.h"
 #include "rb-file-helpers.h"
-#include "rb-glade-helpers.h"
+#include "rb-builder-helpers.h"
 #include "rb-dialog.h"
 #include "rb-cut-and-paste-code.h"
 #include "rhythmdb.h"
@@ -104,7 +103,7 @@ rb_feed_podcast_properties_dialog_class_init (RBFeedPodcastPropertiesDialogClass
 static void
 rb_feed_podcast_properties_dialog_init (RBFeedPodcastPropertiesDialog *dialog)
 {
-	GladeXML *xml;
+	GtkBuilder *builder;
 
 	dialog->priv = RB_FEED_PODCAST_PROPERTIES_DIALOG_GET_PRIVATE (dialog);
 
@@ -119,13 +118,10 @@ rb_feed_podcast_properties_dialog_init (RBFeedPodcastPropertiesDialog *dialog)
 	gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
 	gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 2);
 
-	xml = rb_glade_xml_new ("podcast-feed-properties.glade",
-				"podcastproperties",
-				dialog);
-	glade_xml_signal_autoconnect (xml);
+	builder = rb_builder_load ("podcast-feed-properties.ui", dialog);
 
 	gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox),
-			   glade_xml_get_widget (xml, "podcastproperties"));
+			   GTK_WIDGET (gtk_builder_get_object (builder, "podcastproperties")));
 
 	dialog->priv->close_button = gtk_dialog_add_button (GTK_DIALOG (dialog),
 							    GTK_STOCK_CLOSE,
@@ -133,26 +129,26 @@ rb_feed_podcast_properties_dialog_init (RBFeedPodcastPropertiesDialog *dialog)
 	gtk_dialog_set_default_response (GTK_DIALOG (dialog),
 					 GTK_RESPONSE_CLOSE);
 
-	/* get the widgets from the XML */
-	dialog->priv->title = glade_xml_get_widget (xml, "titleLabel");
-	dialog->priv->author = glade_xml_get_widget (xml, "authorLabel");
-	dialog->priv->location = glade_xml_get_widget (xml, "locationLabel");
-	dialog->priv->language = glade_xml_get_widget (xml, "languageLabel");
-	dialog->priv->last_update = glade_xml_get_widget (xml, "lastupdateLabel");
-	dialog->priv->last_episode = glade_xml_get_widget (xml, "lastepisodeLabel");
-	dialog->priv->copyright = glade_xml_get_widget (xml, "copyrightLabel");
-	dialog->priv->summary = glade_xml_get_widget (xml, "summaryLabel");
-
-	rb_glade_boldify_label (xml, "titleDescLabel");
-	rb_glade_boldify_label (xml, "authorDescLabel");
-	rb_glade_boldify_label (xml, "locationDescLabel");
-	rb_glade_boldify_label (xml, "languageDescLabel");
-	rb_glade_boldify_label (xml, "lastupdateDescLabel");
-	rb_glade_boldify_label (xml, "lastepisodeDescLabel");
-	rb_glade_boldify_label (xml, "copyrightDescLabel");
-	rb_glade_boldify_label (xml, "summaryDescLabel");
-
-	g_object_unref (G_OBJECT (xml));
+	/* get the widgets from the builder */
+	dialog->priv->title = GTK_WIDGET (gtk_builder_get_object (builder, "titleLabel"));
+	dialog->priv->author = GTK_WIDGET (gtk_builder_get_object (builder, "authorLabel"));
+	dialog->priv->location = GTK_WIDGET (gtk_builder_get_object (builder, "locationLabel"));
+	dialog->priv->language = GTK_WIDGET (gtk_builder_get_object (builder, "languageLabel"));
+	dialog->priv->last_update = GTK_WIDGET (gtk_builder_get_object (builder, "lastupdateLabel"));
+	dialog->priv->last_episode = GTK_WIDGET (gtk_builder_get_object (builder, "lastepisodeLabel"));
+	dialog->priv->copyright = GTK_WIDGET (gtk_builder_get_object (builder, "copyrightLabel"));
+	dialog->priv->summary = GTK_WIDGET (gtk_builder_get_object (builder, "summaryLabel"));
+
+	rb_builder_boldify_label (builder, "titleDescLabel");
+	rb_builder_boldify_label (builder, "authorDescLabel");
+	rb_builder_boldify_label (builder, "locationDescLabel");
+	rb_builder_boldify_label (builder, "languageDescLabel");
+	rb_builder_boldify_label (builder, "lastupdateDescLabel");
+	rb_builder_boldify_label (builder, "lastepisodeDescLabel");
+	rb_builder_boldify_label (builder, "copyrightDescLabel");
+	rb_builder_boldify_label (builder, "summaryDescLabel");
+
+	g_object_unref (builder);
 }
 
 static void
diff --git a/podcast/rb-podcast-properties-dialog.c b/podcast/rb-podcast-properties-dialog.c
index 57667fb..7458acb 100644
--- a/podcast/rb-podcast-properties-dialog.c
+++ b/podcast/rb-podcast-properties-dialog.c
@@ -35,12 +35,11 @@
 
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
-#include <glade/glade.h>
 #include <glib.h>
 
 #include "rb-podcast-properties-dialog.h"
 #include "rb-file-helpers.h"
-#include "rb-glade-helpers.h"
+#include "rb-builder-helpers.h"
 #include "rb-dialog.h"
 #include "rb-rating.h"
 #include "rb-util.h"
@@ -136,7 +135,7 @@ rb_podcast_properties_dialog_class_init (RBPodcastPropertiesDialogClass *klass)
 static void
 rb_podcast_properties_dialog_init (RBPodcastPropertiesDialog *dialog)
 {
-	GladeXML *xml;
+	GtkBuilder *builder;
 	AtkObject *lobj, *robj;
 
 	dialog->priv = G_TYPE_INSTANCE_GET_PRIVATE (dialog,
@@ -155,58 +154,55 @@ rb_podcast_properties_dialog_init (RBPodcastPropertiesDialog *dialog)
 	gtk_dialog_set_default_response (GTK_DIALOG (dialog),
 					 GTK_RESPONSE_OK);
 
-	xml = rb_glade_xml_new ("podcast-properties.glade",
-				"podcastproperties",
-				dialog);
-	glade_xml_signal_autoconnect (xml);
+	builder = rb_builder_load ("podcast-properties.ui", dialog);
 
 	gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox),
-			   glade_xml_get_widget (xml, "podcastproperties"));
+			   GTK_WIDGET (gtk_builder_get_object (builder, "podcastproperties")));
 	dialog->priv->close_button = gtk_dialog_add_button (GTK_DIALOG (dialog),
 							    GTK_STOCK_CLOSE,
 							    GTK_RESPONSE_CLOSE);
 	gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_CLOSE);
 
-	/* get the widgets from the XML */
-	dialog->priv->title = glade_xml_get_widget (xml, "titleLabel");
-	dialog->priv->feed = glade_xml_get_widget (xml, "feedLabel");
-	dialog->priv->duration = glade_xml_get_widget (xml, "durationLabel");
-	dialog->priv->location = glade_xml_get_widget (xml, "locationLabel");
-	dialog->priv->download_location = glade_xml_get_widget (xml, "downloadLocationLabel");
-	dialog->priv->lastplayed = glade_xml_get_widget (xml, "lastplayedLabel");
-	dialog->priv->playcount = glade_xml_get_widget (xml, "playcountLabel");
-	dialog->priv->bitrate = glade_xml_get_widget (xml, "bitrateLabel");
-	dialog->priv->date = glade_xml_get_widget (xml, "dateLabel");
-	dialog->priv->description = glade_xml_get_widget (xml, "descriptionLabel");
-
-	rb_glade_boldify_label (xml, "titleDescLabel");
-	rb_glade_boldify_label (xml, "feedDescLabel");
-	rb_glade_boldify_label (xml, "locationDescLabel");
-	rb_glade_boldify_label (xml, "downloadLocationDescLabel");
-	rb_glade_boldify_label (xml, "durationDescLabel");
-	rb_glade_boldify_label (xml, "ratingDescLabel");
-	rb_glade_boldify_label (xml, "lastplayedDescLabel");
-	rb_glade_boldify_label (xml, "playcountDescLabel");
-	rb_glade_boldify_label (xml, "bitrateDescLabel");
-	rb_glade_boldify_label (xml, "dateDescLabel");
-	rb_glade_boldify_label (xml, "descriptionDescLabel");
+	/* get the widgets from the builder */
+	dialog->priv->title = GTK_WIDGET (gtk_builder_get_object (builder, "titleLabel"));
+	dialog->priv->feed = GTK_WIDGET (gtk_builder_get_object (builder, "feedLabel"));
+	dialog->priv->duration = GTK_WIDGET (gtk_builder_get_object (builder, "durationLabel"));
+	dialog->priv->location = GTK_WIDGET (gtk_builder_get_object (builder, "locationLabel"));
+	dialog->priv->download_location = GTK_WIDGET (gtk_builder_get_object (builder, "downloadLocationLabel"));
+	dialog->priv->lastplayed = GTK_WIDGET (gtk_builder_get_object (builder, "lastplayedLabel"));
+	dialog->priv->playcount = GTK_WIDGET (gtk_builder_get_object (builder, "playcountLabel"));
+	dialog->priv->bitrate = GTK_WIDGET (gtk_builder_get_object (builder, "bitrateLabel"));
+	dialog->priv->date = GTK_WIDGET (gtk_builder_get_object (builder, "dateLabel"));
+	dialog->priv->description = GTK_WIDGET (gtk_builder_get_object (builder, "descriptionLabel"));
+
+	rb_builder_boldify_label (builder, "titleDescLabel");
+	rb_builder_boldify_label (builder, "feedDescLabel");
+	rb_builder_boldify_label (builder, "locationDescLabel");
+	rb_builder_boldify_label (builder, "downloadLocationDescLabel");
+	rb_builder_boldify_label (builder, "durationDescLabel");
+	rb_builder_boldify_label (builder, "ratingDescLabel");
+	rb_builder_boldify_label (builder, "lastplayedDescLabel");
+	rb_builder_boldify_label (builder, "playcountDescLabel");
+	rb_builder_boldify_label (builder, "bitrateDescLabel");
+	rb_builder_boldify_label (builder, "dateDescLabel");
+	rb_builder_boldify_label (builder, "descriptionDescLabel");
 
 	dialog->priv->rating = GTK_WIDGET (rb_rating_new ());
 	g_signal_connect_object (dialog->priv->rating,
 				 "rated",
 				 G_CALLBACK (rb_podcast_properties_dialog_rated_cb),
 				 G_OBJECT (dialog), 0);
-	gtk_container_add (GTK_CONTAINER (glade_xml_get_widget (xml, "ratingVBox")),
+	gtk_container_add (GTK_CONTAINER (gtk_builder_get_object (builder, "ratingVBox")),
 			   dialog->priv->rating);
 
 	/* add relationship between the rating label and the rating widget */
-	lobj = gtk_widget_get_accessible (glade_xml_get_widget (xml, "ratingDescLabel"));
+	lobj = gtk_widget_get_accessible (GTK_WIDGET (gtk_builder_get_object (builder, "ratingDescLabel")));
 	robj = gtk_widget_get_accessible (dialog->priv->rating);
 	
 	atk_object_add_relationship (lobj, ATK_RELATION_LABEL_FOR, robj);
 	atk_object_add_relationship (robj, ATK_RELATION_LABELLED_BY, lobj);
 
-	g_object_unref (G_OBJECT (xml));
+	g_object_unref (builder);
 }
 
 static void
diff --git a/shell/main.c b/shell/main.c
index e9644bb..1287f2a 100644
--- a/shell/main.c
+++ b/shell/main.c
@@ -52,7 +52,6 @@
 #include <glib/gi18n.h>
 #include <gdk/gdkx.h> /* For _get_user_time... */
 #include <gtk/gtk.h>
-#include <glade/glade-init.h>
 
 #include <gst/gst.h>
 
diff --git a/shell/rb-playlist-manager.c b/shell/rb-playlist-manager.c
index 26981b4..af4acf5 100644
--- a/shell/rb-playlist-manager.c
+++ b/shell/rb-playlist-manager.c
@@ -63,7 +63,7 @@
 #include "rhythmdb.h"
 #include "rb-stock-icons.h"
 #include "eel-gconf-extensions.h"
-#include "rb-glade-helpers.h"
+#include "rb-builder-helpers.h"
 #include "rb-util.h"
 
 #define RB_PLAYLIST_MGR_VERSION (xmlChar *) "1.0"
@@ -1557,16 +1557,16 @@ setup_format_menu (GtkWidget* menu, GtkWidget *dialog)
 static void
 save_playlist (RBPlaylistManager *mgr, RBSource *source)
 {
-	GladeXML *xml;
-	GtkWidget *dialog, *menu;
-	char *name, *tmp;
+	GtkBuilder *builder;
+	GtkWidget *dialog;
+	GtkWidget *menu;
+	char *name;
+	char *tmp;
 
-	xml = rb_glade_xml_new ("playlist-save.glade",
-				"playlist_save_dialog",
-				mgr);
-	dialog = glade_xml_get_widget (xml, "playlist_save_dialog");
+	builder = rb_builder_load ("playlist-save.ui", mgr);
+	dialog = GTK_WIDGET (gtk_builder_get_object (builder, "playlist_save_dialog"));
 
-	menu = glade_xml_get_widget (xml, "playlist_format_menu");
+	menu = GTK_WIDGET (gtk_builder_get_object (builder, "playlist_format_menu"));
 	setup_format_menu (menu, dialog);
 	g_object_set_data (G_OBJECT (dialog), "export-menu", menu);
 
@@ -1582,7 +1582,7 @@ save_playlist (RBPlaylistManager *mgr, RBSource *source)
 				 G_CALLBACK (save_playlist_response_cb),
 				 source, 0);
 
-	g_object_unref (xml);
+	g_object_unref (builder);
 }
 
 static void
diff --git a/shell/rb-shell-player.c b/shell/rb-shell-player.c
index 2c6c1d8..08ca8dc 100644
--- a/shell/rb-shell-player.c
+++ b/shell/rb-shell-player.c
@@ -63,12 +63,11 @@
 #include <glib.h>
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
-#include <glade/glade.h>
 
 #include "rb-property-view.h"
 #include "rb-shell-player.h"
 #include "rb-stock-icons.h"
-#include "rb-glade-helpers.h"
+#include "rb-builder-helpers.h"
 #include "rb-file-helpers.h"
 #include "rb-cut-and-paste-code.h"
 #include "rb-dialog.h"
diff --git a/shell/rb-shell-preferences.c b/shell/rb-shell-preferences.c
index c2cea8c..e0302b4 100644
--- a/shell/rb-shell-preferences.c
+++ b/shell/rb-shell-preferences.c
@@ -54,7 +54,6 @@
 
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
-#include <glade/glade.h>
 
 #if !GTK_CHECK_VERSION(2,14,0)
 #include <libgnome/gnome-help.h>
@@ -63,7 +62,7 @@
 #include "rb-file-helpers.h"
 #include "rb-shell-preferences.h"
 #include "rb-source.h"
-#include "rb-glade-helpers.h"
+#include "rb-builder-helpers.h"
 #include "rb-dialog.h"
 #include "rb-debug.h"
 #include "eel-gconf-extensions.h"
@@ -179,7 +178,7 @@ static void
 rb_shell_preferences_init (RBShellPreferences *shell_preferences)
 {
 	GtkWidget *tmp;
-	GladeXML *xml;
+	GtkBuilder *builder;
 
 	shell_preferences->priv = RB_SHELL_PREFERENCES_GET_PRIVATE (shell_preferences);
 
@@ -216,54 +215,52 @@ rb_shell_preferences_init (RBShellPreferences *shell_preferences)
 	gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (shell_preferences)->vbox), 2);
 	gtk_dialog_set_has_separator (GTK_DIALOG (shell_preferences), FALSE);
 
-	xml = rb_glade_xml_new ("general-prefs.glade",
-				"general_vbox",
-				shell_preferences);
+	builder = rb_builder_load ("general-prefs.ui", shell_preferences);
 
-	rb_glade_boldify_label (xml, "visible_columns_label");
+	rb_builder_boldify_label (builder, "visible_columns_label");
 
 	/* Columns */
 	shell_preferences->priv->artist_check =
-		glade_xml_get_widget (xml, "artist_check");
+		GTK_WIDGET (gtk_builder_get_object (builder, "artist_check"));
 	shell_preferences->priv->album_check =
-		glade_xml_get_widget (xml, "album_check");
+		GTK_WIDGET (gtk_builder_get_object (builder, "album_check"));
 	shell_preferences->priv->genre_check =
-		glade_xml_get_widget (xml, "genre_check");
+		GTK_WIDGET (gtk_builder_get_object (builder, "genre_check"));
 	shell_preferences->priv->duration_check =
-		glade_xml_get_widget (xml, "duration_check");
+		GTK_WIDGET (gtk_builder_get_object (builder, "duration_check"));
 	shell_preferences->priv->track_check =
-		glade_xml_get_widget (xml, "track_check");
+		GTK_WIDGET (gtk_builder_get_object (builder, "track_check"));
 	shell_preferences->priv->rating_check =
-		glade_xml_get_widget (xml, "rating_check");
+		GTK_WIDGET (gtk_builder_get_object (builder, "rating_check"));
 	shell_preferences->priv->play_count_check =
-		glade_xml_get_widget (xml, "play_count_check");
+		GTK_WIDGET (gtk_builder_get_object (builder, "play_count_check"));
 	shell_preferences->priv->last_played_check =
-		glade_xml_get_widget (xml, "last_played_check");
+		GTK_WIDGET (gtk_builder_get_object (builder, "last_played_check"));
 	shell_preferences->priv->quality_check =
-		glade_xml_get_widget (xml, "quality_check");
+		GTK_WIDGET (gtk_builder_get_object (builder, "quality_check"));
 	shell_preferences->priv->year_check =
-		glade_xml_get_widget (xml, "year_check");
+		GTK_WIDGET (gtk_builder_get_object (builder, "year_check"));
 	shell_preferences->priv->first_seen_check =
-		glade_xml_get_widget (xml, "first_seen_check");
+		GTK_WIDGET (gtk_builder_get_object (builder, "first_seen_check"));
 	shell_preferences->priv->location_check =
-		glade_xml_get_widget (xml, "location_check");
+		GTK_WIDGET (gtk_builder_get_object (builder, "location_check"));
 
 	/* browser options */
-	rb_glade_boldify_label (xml, "browser_views_label");
+	rb_builder_boldify_label (builder, "browser_views_label");
 
-	tmp = glade_xml_get_widget (xml, "library_browser_views_radio");
+	tmp = GTK_WIDGET (gtk_builder_get_object (builder, "library_browser_views_radio"));
 	shell_preferences->priv->browser_views_group =
 		g_slist_reverse (g_slist_copy (gtk_radio_button_get_group
 					       (GTK_RADIO_BUTTON (tmp))));
 
 	gtk_notebook_append_page (GTK_NOTEBOOK (shell_preferences->priv->notebook),
-				  glade_xml_get_widget (xml, "general_vbox"),
+				  GTK_WIDGET (gtk_builder_get_object (builder, "general_vbox")),
 				  gtk_label_new (_("General")));
 
 	/* toolbar button style */
-	rb_glade_boldify_label (xml, "toolbar_style_label");
+	rb_builder_boldify_label (builder, "toolbar_style_label");
 	shell_preferences->priv->toolbar_style_menu =
-		glade_xml_get_widget (xml, "toolbar_style_menu");
+		GTK_WIDGET (gtk_builder_get_object (builder, "toolbar_style_menu"));
 	gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (shell_preferences->priv->toolbar_style_menu),
 					      rb_combo_box_hyphen_separator_func,
 					      NULL, NULL);
@@ -274,26 +271,24 @@ rb_shell_preferences_init (RBShellPreferences *shell_preferences)
 	eel_gconf_notification_add (CONF_UI_DIR,
 				    (GConfClientNotifyFunc) rb_shell_preferences_ui_pref_changed,
 				    shell_preferences);
-	g_object_unref (xml);
+	g_object_unref (builder);
 
 	/* playback preferences */
-	xml = rb_glade_xml_new ("playback-prefs.glade",
-				"playback_prefs_box",
-				shell_preferences);
+	builder = rb_builder_load ("playback-prefs.ui", shell_preferences);
 
-	rb_glade_boldify_label (xml, "backend_label");
-	rb_glade_boldify_label (xml, "crossfade_type_label");
-	rb_glade_boldify_label (xml, "duration_label");
-	rb_glade_boldify_label (xml, "buffer_size_label");
+	rb_builder_boldify_label (builder, "backend_label");
+	rb_builder_boldify_label (builder, "crossfade_type_label");
+	rb_builder_boldify_label (builder, "duration_label");
+	rb_builder_boldify_label (builder, "buffer_size_label");
 
 	shell_preferences->priv->xfade_backend_check =
-		glade_xml_get_widget (xml, "use_xfade_backend");
+		GTK_WIDGET (gtk_builder_get_object (builder, "use_xfade_backend"));
 	shell_preferences->priv->album_crossfade_check =
-		glade_xml_get_widget (xml, "album_check");
+		GTK_WIDGET (gtk_builder_get_object (builder, "album_check"));
 	shell_preferences->priv->transition_duration =
-		glade_xml_get_widget (xml, "duration");
+		GTK_WIDGET (gtk_builder_get_object (builder, "duration"));
 	shell_preferences->priv->network_buffer_size =
-		glade_xml_get_widget (xml, "network_buffer_size");
+		GTK_WIDGET (gtk_builder_get_object (builder, "network_buffer_size"));
 
 	g_signal_connect_object (shell_preferences->priv->xfade_backend_check,
 				 "toggled",
@@ -316,9 +311,9 @@ rb_shell_preferences_init (RBShellPreferences *shell_preferences)
 				 shell_preferences, 0);
 
 	gtk_notebook_append_page (GTK_NOTEBOOK (shell_preferences->priv->notebook),
-				  glade_xml_get_widget (xml, "playback_prefs_box"),
+				  GTK_WIDGET (gtk_builder_get_object (builder, "playback_prefs_box")),
 				  gtk_label_new (_("Playback")));
-	g_object_unref (xml);
+	g_object_unref (builder);
 
 	eel_gconf_notification_add (CONF_PLAYER_DIR,
 				    (GConfClientNotifyFunc) rb_shell_preferences_ui_pref_changed,
diff --git a/sources/rb-browser-source.c b/sources/rb-browser-source.c
index 52c8039..f9cafb4 100644
--- a/sources/rb-browser-source.c
+++ b/sources/rb-browser-source.c
@@ -47,7 +47,6 @@
 
 #include <gtk/gtk.h>
 #include <glib/gi18n.h>
-#include <glade/glade.h>
 
 #include "rb-source.h"
 #include "rb-library-source.h"
@@ -55,7 +54,6 @@
 
 #include "rhythmdb-query-model.h"
 #include "rb-property-view.h"
-#include "rb-glade-helpers.h"
 #include "rb-entry-view.h"
 #include "rb-library-browser.h"
 #include "rb-util.h"
diff --git a/sources/rb-library-source.c b/sources/rb-library-source.c
index 75b697b..32bf8ab 100644
--- a/sources/rb-library-source.c
+++ b/sources/rb-library-source.c
@@ -60,7 +60,7 @@
 #include "rhythmdb.h"
 #include "rb-debug.h"
 #include "rb-dialog.h"
-#include "rb-glade-helpers.h"
+#include "rb-builder-helpers.h"
 #include "rb-file-helpers.h"
 #include "rb-util.h"
 #include "eel-gconf-extensions.h"
@@ -448,9 +448,9 @@ static GtkWidget *
 impl_get_config_widget (RBSource *asource, RBShellPreferences *prefs)
 {
 	RBLibrarySource *source = RB_LIBRARY_SOURCE (asource);
-	GtkWidget *tmp;
-	GladeXML *xml;
-	GtkWidget *label;
+	GtkBuilder *builder;
+	GObject *tmp;
+	GObject *label;
 	int i;
 
 	if (source->priv->config_widget)
@@ -459,15 +459,15 @@ impl_get_config_widget (RBSource *asource, RBShellPreferences *prefs)
 	g_object_ref (G_OBJECT (prefs));
 	source->priv->shell_prefs = prefs;
 
-	xml = rb_glade_xml_new ("library-prefs.glade", "library_vbox", source);
+	builder = rb_builder_load ("library-prefs.ui", source);
 	source->priv->config_widget =
-		glade_xml_get_widget (xml, "library_vbox");
+		GTK_WIDGET (gtk_builder_get_object (builder, "library_vbox"));
 
-	rb_glade_boldify_label (xml, "library_location_label");
+	rb_builder_boldify_label (builder, "library_location_label");
 
-	source->priv->library_location_entry = glade_xml_get_widget (xml, "library_location_entry");
-	tmp = glade_xml_get_widget (xml, "library_location_button");
-	g_signal_connect (G_OBJECT (tmp),
+	source->priv->library_location_entry = GTK_WIDGET (gtk_builder_get_object (builder, "library_location_entry"));
+	tmp = gtk_builder_get_object (builder, "library_location_button");
+	g_signal_connect (tmp,
 			  "clicked",
 			  G_CALLBACK (rb_library_source_location_button_clicked_cb),
 			  asource);
@@ -476,16 +476,16 @@ impl_get_config_widget (RBSource *asource, RBShellPreferences *prefs)
 			  G_CALLBACK (rb_library_source_library_location_cb),
 			  asource);
 
-	source->priv->watch_library_check = glade_xml_get_widget (xml, "watch_library_check");
+	source->priv->watch_library_check = GTK_WIDGET (gtk_builder_get_object (builder, "watch_library_check"));
 	g_signal_connect (G_OBJECT (source->priv->watch_library_check),
 			  "toggled",
 			  G_CALLBACK (rb_library_source_watch_toggled_cb),
 			  asource);
 
-	rb_glade_boldify_label (xml, "library_structure_label");
+	rb_builder_boldify_label (builder, "library_structure_label");
 
-	tmp = glade_xml_get_widget (xml, "layout_path_menu_box");
-	label = glade_xml_get_widget (xml, "layout_path_menu_label");
+	tmp = gtk_builder_get_object (builder, "layout_path_menu_box");
+	label = gtk_builder_get_object (builder, "layout_path_menu_label");
 	source->priv->layout_path_menu = gtk_combo_box_new_text ();
 	gtk_box_pack_start (GTK_BOX (tmp), source->priv->layout_path_menu, TRUE, TRUE, 0);
 	gtk_label_set_mnemonic_widget (GTK_LABEL (label), source->priv->layout_path_menu);
@@ -498,8 +498,8 @@ impl_get_config_widget (RBSource *asource, RBShellPreferences *prefs)
 					   _(library_layout_paths[i].title));
 	}
 
-	tmp = glade_xml_get_widget (xml, "layout_filename_menu_box");
-	label = glade_xml_get_widget (xml, "layout_filename_menu_label");
+	tmp = gtk_builder_get_object (builder, "layout_filename_menu_box");
+	label = gtk_builder_get_object (builder, "layout_filename_menu_label");
 	source->priv->layout_filename_menu = gtk_combo_box_new_text ();
 	gtk_box_pack_start (GTK_BOX (tmp), source->priv->layout_filename_menu, TRUE, TRUE, 0);
 	gtk_label_set_mnemonic_widget (GTK_LABEL (label), source->priv->layout_filename_menu);
@@ -512,14 +512,14 @@ impl_get_config_widget (RBSource *asource, RBShellPreferences *prefs)
 					   _(library_layout_filenames[i].title));
 	}
 
-	tmp = glade_xml_get_widget (xml, "edit_profile_button");
-	g_signal_connect (G_OBJECT (tmp),
+	tmp = gtk_builder_get_object (builder, "edit_profile_button");
+	g_signal_connect (tmp,
 			  "clicked",
 			  G_CALLBACK (rb_library_source_edit_profile_clicked_cb),
 			  asource);
 
-	tmp = glade_xml_get_widget (xml, "preferred_format_menu_box");
-	label = glade_xml_get_widget (xml, "preferred_format_menu_label");
+	tmp = gtk_builder_get_object (builder, "preferred_format_menu_box");
+	label = gtk_builder_get_object (builder, "preferred_format_menu_label");
 	source->priv->preferred_format_menu = gm_audio_profile_choose_new ();
 	gtk_box_pack_start (GTK_BOX (tmp), source->priv->preferred_format_menu, TRUE, TRUE, 0);
 	gtk_label_set_mnemonic_widget (GTK_LABEL (label), source->priv->preferred_format_menu);
@@ -528,9 +528,7 @@ impl_get_config_widget (RBSource *asource, RBShellPreferences *prefs)
 			  G_CALLBACK (rb_library_source_format_changed_cb),
 			  asource);
 
-	source->priv->layout_example_label = glade_xml_get_widget (xml, "layout_example_label");
-
-	g_object_unref (G_OBJECT (xml));
+	source->priv->layout_example_label = GTK_WIDGET (gtk_builder_get_object (builder, "layout_example_label"));
 
 	rb_library_source_preferences_sync (source);
 
diff --git a/sources/rb-podcast-source.c b/sources/rb-podcast-source.c
index 97745ce..1fd7610 100644
--- a/sources/rb-podcast-source.c
+++ b/sources/rb-podcast-source.c
@@ -47,14 +47,13 @@
 #include <glib.h>
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
-#include <glade/glade.h>
 
 #include "rb-podcast-source.h"
 
 #include "rhythmdb.h"
 #include "rhythmdb-query-model.h"
 #include "rb-statusbar.h"
-#include "rb-glade-helpers.h"
+#include "rb-builder-helpers.h"
 #include "rb-stock-icons.h"
 #include "rb-entry-view.h"
 #include "rb-property-view.h"
@@ -280,7 +279,6 @@ struct RBPodcastSourcePrivate
 {
 	RhythmDB *db;
 
-	guint toolbar_ui_merge_id;
 	guint prefs_notify_id;
 
 	GtkWidget *vbox;
@@ -297,13 +295,9 @@ struct RBPodcastSourcePrivate
 	RhythmDBPropType search_prop;
 	RBSourceSearch *default_search;
 
-	gboolean initialized;
-
 	RBPodcastManager *podcast_mgr;
 
 	GdkPixbuf *error_pixbuf;
-
-	gboolean dispose_has_run;
 };
 
 #define RB_PODCAST_SOURCE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), RB_TYPE_PODCAST_SOURCE, RBPodcastSourcePrivate))
@@ -444,13 +438,6 @@ rb_podcast_source_dispose (GObject *object)
 	rb_debug ("dispose podcast_source");
 	source = RB_PODCAST_SOURCE (object);
 
-	if (source->priv->dispose_has_run) {
-		/* If dispose did already run, return. */
-		return;
-	}
-	/* Make sure dispose does not run twice. */
-	source->priv->dispose_has_run = TRUE;
-
 	if (source->priv->db != NULL) {
 		g_object_unref (source->priv->db);
 		source->priv->db = NULL;
@@ -476,7 +463,10 @@ rb_podcast_source_dispose (GObject *object)
 		source->priv->error_pixbuf = NULL;
 	}
 
-	eel_gconf_notification_remove (source->priv->prefs_notify_id);
+	if (source->priv->prefs_notify_id != 0) {
+		eel_gconf_notification_remove (source->priv->prefs_notify_id);
+		source->priv->prefs_notify_id = 0;
+	}
 
 	G_OBJECT_CLASS (rb_podcast_source_parent_class)->dispose (object);
 }
@@ -1220,18 +1210,18 @@ static GtkWidget *
 impl_get_config_widget (RBSource *asource, RBShellPreferences *prefs)
 {
 	RBPodcastSource *source = RB_PODCAST_SOURCE (asource);
+	GtkBuilder *builder;
 	GtkWidget *cb_update_interval;
 	GtkWidget *btn_file;
 	char *download_dir;
-	GladeXML *xml;
 
 	if (source->priv->config_widget)
 		return source->priv->config_widget;
 
-	xml = rb_glade_xml_new ("podcast-prefs.glade", "podcast_vbox", source);
-	source->priv->config_widget = glade_xml_get_widget (xml, "podcast_vbox");
+	builder = rb_builder_load ("podcast-prefs.ui", source);
+	source->priv->config_widget = GTK_WIDGET (gtk_builder_get_object (builder, "podcast_vbox"));
 
-	btn_file = glade_xml_get_widget (xml, "location_chooser");
+	btn_file = GTK_WIDGET (gtk_builder_get_object (builder, "location_chooser"));
 	gtk_file_chooser_add_shortcut_folder (GTK_FILE_CHOOSER (btn_file),
 					      rb_music_dir (),
 					      NULL);
@@ -1245,7 +1235,7 @@ impl_get_config_widget (RBSource *asource, RBShellPreferences *prefs)
 			  G_CALLBACK (rb_podcast_source_btn_file_change_cb),
 			  CONF_STATE_PODCAST_DOWNLOAD_DIR);
 
-	cb_update_interval = glade_xml_get_widget (xml, "cb_update_interval");
+	cb_update_interval = GTK_WIDGET (gtk_builder_get_object (builder, "cb_update_interval"));
 	gtk_combo_box_set_active (GTK_COMBO_BOX (cb_update_interval),
 				  eel_gconf_get_integer (CONF_STATE_PODCAST_DOWNLOAD_INTERVAL));
 	g_signal_connect (cb_update_interval,
diff --git a/widgets/rb-query-creator.c b/widgets/rb-query-creator.c
index 8635812..4865658 100644
--- a/widgets/rb-query-creator.c
+++ b/widgets/rb-query-creator.c
@@ -41,7 +41,7 @@
 #include "rb-dialog.h"
 #include "rb-debug.h"
 #include "rb-preferences.h"
-#include "rb-glade-helpers.h"
+#include "rb-builder-helpers.h"
 #include "rb-util.h"
 
 static void rb_query_creator_class_init (RBQueryCreatorClass *klass);
@@ -120,8 +120,8 @@ G_DEFINE_TYPE (RBQueryCreator, rb_query_creator, GTK_TYPE_DIALOG)
  * of entries, the total duration, or the total file size; and also the
  * order in which the results are to be sorted.
  *
- * The structure of the query creator is defined in the glade file 
- * create-playlist.xml.
+ * The structure of the query creator is defined in the builder file
+ * create-playlist.ui.
  */
 
 enum
@@ -183,8 +183,8 @@ rb_query_creator_constructor (GType type,
 {
 	RBQueryCreatorPrivate *priv;
 	RBQueryCreator *creator;
-	GladeXML *xml;
 	GtkWidget *mainbox;
+	GtkBuilder *builder;
 
 	creator = RB_QUERY_CREATOR (G_OBJECT_CLASS (rb_query_creator_parent_class)
 			->constructor (type, n_construct_properties, construct_properties));
@@ -219,18 +219,16 @@ rb_query_creator_constructor (GType type,
 	gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (creator)->vbox), 2);
 	gtk_dialog_set_has_separator (GTK_DIALOG (creator), FALSE);
 
-	xml = rb_glade_xml_new ("create-playlist.glade",
-				"main_vbox",
-				creator);
+	builder = rb_builder_load ("create-playlist.ui", creator);
 
-	priv->disjunction_check = GTK_WIDGET (glade_xml_get_widget (xml, "disjunctionCheck"));
-	priv->limit_check = GTK_WIDGET (glade_xml_get_widget (xml, "limitCheck"));
-	priv->limit_entry = GTK_WIDGET (glade_xml_get_widget (xml, "limitEntry"));
-	priv->limit_option = GTK_WIDGET (glade_xml_get_widget (xml, "limitOption"));
-	priv->addbutton = GTK_WIDGET (glade_xml_get_widget (xml, "addButton"));
-	priv->sort_label = GTK_WIDGET (glade_xml_get_widget (xml, "sortLabel"));
-	priv->sort_menu = GTK_WIDGET (glade_xml_get_widget (xml, "sortMenu"));
-	priv->sort_desc = GTK_WIDGET (glade_xml_get_widget (xml, "sortDesc"));
+	priv->disjunction_check = GTK_WIDGET (gtk_builder_get_object (builder, "disjunctionCheck"));
+	priv->limit_check = GTK_WIDGET (gtk_builder_get_object (builder, "limitCheck"));
+	priv->limit_entry = GTK_WIDGET (gtk_builder_get_object (builder, "limitEntry"));
+	priv->limit_option = GTK_WIDGET (gtk_builder_get_object (builder, "limitOption"));
+	priv->addbutton = GTK_WIDGET (gtk_builder_get_object (builder, "addButton"));
+	priv->sort_label = GTK_WIDGET (gtk_builder_get_object (builder, "sortLabel"));
+	priv->sort_menu = GTK_WIDGET (gtk_builder_get_object (builder, "sortMenu"));
+	priv->sort_desc = GTK_WIDGET (gtk_builder_get_object (builder, "sortDesc"));
 
 	gtk_combo_box_set_active (GTK_COMBO_BOX (priv->limit_option), 0);
 
@@ -244,15 +242,15 @@ rb_query_creator_constructor (GType type,
 
 	setup_sort_option_menu (creator, priv->sort_menu, sort_options, num_sort_options);
 
-	priv->vbox = GTK_BOX (glade_xml_get_widget (xml, "sub_vbox"));
+	priv->vbox = GTK_BOX (gtk_builder_get_object (builder, "sub_vbox"));
 	if (priv->creating)
 		append_row (creator);
 
-	mainbox = glade_xml_get_widget (xml, "main_vbox");
+	mainbox = GTK_WIDGET (gtk_builder_get_object (builder, "complex-playlist-creator"));
 	gtk_box_pack_start (GTK_BOX (GTK_DIALOG (creator)->vbox), mainbox, FALSE, FALSE, 0);
 	gtk_widget_show_all (GTK_WIDGET (creator));
 
-	g_object_unref (xml);
+	g_object_unref (builder);
 
 	return G_OBJECT (creator);
 }
@@ -267,22 +265,29 @@ rb_query_creator_dispose (GObject *object)
 	priv = QUERY_CREATOR_GET_PRIVATE (object);
 	g_return_if_fail (priv != NULL);
 
-	if (priv->property_size_group != NULL)
-		g_object_unref (G_OBJECT (priv->property_size_group));
-	priv->property_size_group = NULL;
-	if (priv->criteria_size_group != NULL)
-		g_object_unref (G_OBJECT (priv->criteria_size_group));
-	priv->criteria_size_group = NULL;
-	if (priv->entry_size_group != NULL)
-		g_object_unref (G_OBJECT (priv->entry_size_group));
-	priv->entry_size_group = NULL;
-	if (priv->button_size_group != NULL)
-		g_object_unref (G_OBJECT (priv->button_size_group));
-	priv->button_size_group = NULL;
-
-	if (priv->rows)
+	if (priv->property_size_group != NULL) {
+		g_object_unref (priv->property_size_group);
+		priv->property_size_group = NULL;
+	}
+
+	if (priv->criteria_size_group != NULL) {
+		g_object_unref (priv->criteria_size_group);
+		priv->criteria_size_group = NULL;
+	}
+	if (priv->entry_size_group != NULL) {
+		g_object_unref (priv->entry_size_group);
+		priv->entry_size_group = NULL;
+	}
+
+	if (priv->button_size_group != NULL) {
+		g_object_unref (priv->button_size_group);
+		priv->button_size_group = NULL;
+	}
+
+	if (priv->rows) {
 		g_list_free (priv->rows);
-	priv->rows = NULL;
+		priv->rows = NULL;
+	}
 
 	G_OBJECT_CLASS (rb_query_creator_parent_class)->dispose (object);
 }
diff --git a/widgets/rb-song-info.c b/widgets/rb-song-info.c
index 75698fa..cdc2148 100644
--- a/widgets/rb-song-info.c
+++ b/widgets/rb-song-info.c
@@ -44,12 +44,11 @@
 
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
-#include <glade/glade.h>
 
 #include "rhythmdb.h"
 #include "rhythmdb-property-model.h"
 #include "rb-song-info.h"
-#include "rb-glade-helpers.h"
+#include "rb-builder-helpers.h"
 #include "rb-dialog.h"
 #include "rb-rating.h"
 #include "rb-preferences.h"
@@ -347,8 +346,7 @@ rb_song_info_show (GtkWidget *widget)
 }
 
 static void
-rb_song_info_construct_single (RBSongInfo *song_info, GladeXML *xml,
-			       gboolean editable)
+rb_song_info_construct_single (RBSongInfo *song_info, GtkBuilder *builder, gboolean editable)
 {
 	song_info->priv->backward = gtk_dialog_add_button (GTK_DIALOG (song_info),
 							   GTK_STOCK_GO_BACK,
@@ -371,28 +369,28 @@ rb_song_info_construct_single (RBSongInfo *song_info, GladeXML *xml,
 	gtk_window_set_title (GTK_WINDOW (song_info), _("Song Properties"));
 
 	/* get the widgets from the XML */
-	song_info->priv->notebook      = glade_xml_get_widget (xml, "song_info_vbox");
-	song_info->priv->title         = glade_xml_get_widget (xml, "song_info_title");
-	song_info->priv->track_cur     = glade_xml_get_widget (xml, "song_info_track_cur");
-	song_info->priv->bitrate       = glade_xml_get_widget (xml, "song_info_bitrate");
-	song_info->priv->duration      = glade_xml_get_widget (xml, "song_info_duration");
-	song_info->priv->location = glade_xml_get_widget (xml, "song_info_location");
-	song_info->priv->filesize = glade_xml_get_widget (xml, "song_info_filesize");
-	song_info->priv->date_added    = glade_xml_get_widget (xml, "song_info_dateadded");
-	song_info->priv->play_count    = glade_xml_get_widget (xml, "song_info_playcount");
-	song_info->priv->last_played   = glade_xml_get_widget (xml, "song_info_lastplayed");
-	song_info->priv->name = glade_xml_get_widget (xml, "song_info_name");
-
-	rb_glade_boldify_label (xml, "title_label");
-	rb_glade_boldify_label (xml, "trackn_label");
-	rb_glade_boldify_label (xml, "name_label");
-	rb_glade_boldify_label (xml, "location_label");
-	rb_glade_boldify_label (xml, "filesize_label");
-	rb_glade_boldify_label (xml, "date_added_label");
-	rb_glade_boldify_label (xml, "last_played_label");
-	rb_glade_boldify_label (xml, "play_count_label");
-	rb_glade_boldify_label (xml, "duration_label");
-	rb_glade_boldify_label (xml, "bitrate_label");
+	song_info->priv->notebook      = GTK_WIDGET (gtk_builder_get_object (builder, "song_info_vbox"));
+	song_info->priv->title         = GTK_WIDGET (gtk_builder_get_object (builder, "song_info_title"));
+	song_info->priv->track_cur     = GTK_WIDGET (gtk_builder_get_object (builder, "song_info_track_cur"));
+	song_info->priv->bitrate       = GTK_WIDGET (gtk_builder_get_object (builder, "song_info_bitrate"));
+	song_info->priv->duration      = GTK_WIDGET (gtk_builder_get_object (builder, "song_info_duration"));
+	song_info->priv->location = GTK_WIDGET (gtk_builder_get_object (builder, "song_info_location"));
+	song_info->priv->filesize = GTK_WIDGET (gtk_builder_get_object (builder, "song_info_filesize"));
+	song_info->priv->date_added    = GTK_WIDGET (gtk_builder_get_object (builder, "song_info_dateadded"));
+	song_info->priv->play_count    = GTK_WIDGET (gtk_builder_get_object (builder, "song_info_playcount"));
+	song_info->priv->last_played   = GTK_WIDGET (gtk_builder_get_object (builder, "song_info_lastplayed"));
+	song_info->priv->name = GTK_WIDGET (gtk_builder_get_object (builder, "song_info_name"));
+
+	rb_builder_boldify_label (builder, "title_label");
+	rb_builder_boldify_label (builder, "trackn_label");
+	rb_builder_boldify_label (builder, "name_label");
+	rb_builder_boldify_label (builder, "location_label");
+	rb_builder_boldify_label (builder, "filesize_label");
+	rb_builder_boldify_label (builder, "date_added_label");
+	rb_builder_boldify_label (builder, "last_played_label");
+	rb_builder_boldify_label (builder, "play_count_label");
+	rb_builder_boldify_label (builder, "duration_label");
+	rb_builder_boldify_label (builder, "bitrate_label");
 
 	/* whenever you press a mnemonic, the associated GtkEntry's text gets highlighted */
 	g_signal_connect_object (G_OBJECT (song_info->priv->title),
@@ -413,14 +411,13 @@ rb_song_info_construct_single (RBSongInfo *song_info, GladeXML *xml,
 }
 
 static void
-rb_song_info_construct_multiple (RBSongInfo *song_info, GladeXML *xml,
-				 gboolean editable)
+rb_song_info_construct_multiple (RBSongInfo *song_info, GtkBuilder *builder, gboolean editable)
 {
 	gtk_window_set_title (GTK_WINDOW (song_info),
 			      _("Multiple Song Properties"));
 	gtk_widget_grab_focus (song_info->priv->artist);
 
-	song_info->priv->notebook = glade_xml_get_widget (xml, "song_info_notebook");
+	song_info->priv->notebook = GTK_WIDGET (gtk_builder_get_object (builder, "song_info_notebook"));
 }
 
 static void
@@ -441,12 +438,12 @@ rb_song_info_constructor (GType type, guint n_construct_properties,
 {
 	RBSongInfo *song_info;
 	RBSongInfoClass *klass;
-	GladeXML *xml;
 	GList *selected_entries;
 	GList *tem;
 	gboolean editable = TRUE;
 	RBShell *shell;
 	AtkObject *lobj, *robj;
+	GtkBuilder *builder;
 
 	klass = RB_SONG_INFO_CLASS (g_type_class_peek (RB_TYPE_SONG_INFO));
 
@@ -479,39 +476,33 @@ rb_song_info_constructor (GType type, guint n_construct_properties,
 	}
 
 	if (song_info->priv->current_entry) {
-		xml = rb_glade_xml_new ("song-info.glade",
-					"song_info_vbox",
-					song_info);
+		builder = rb_builder_load ("song-info.ui", song_info);
 		gtk_container_add (GTK_CONTAINER (GTK_DIALOG (song_info)->vbox),
-				   glade_xml_get_widget (xml, "song_info_vbox"));
+				   GTK_WIDGET (gtk_builder_get_object (builder, "song_info_vbox")));
 	} else {
-		xml = rb_glade_xml_new ("song-info-multiple.glade",
-					"song_info_notebook",
-					song_info);
+		builder = rb_builder_load ("song-info-multiple.ui", song_info);
 		gtk_container_add (GTK_CONTAINER (GTK_DIALOG (song_info)->vbox),
-				   glade_xml_get_widget (xml, "song_info_notebook"));
+				   GTK_WIDGET (gtk_builder_get_object (builder, "song_info_notebook")));
 	}
 
-	glade_xml_signal_autoconnect (xml);
-
-	song_info->priv->artist = glade_xml_get_widget (xml, "song_info_artist");
-	song_info->priv->album = glade_xml_get_widget (xml, "song_info_album");
-	song_info->priv->genre = glade_xml_get_widget (xml, "song_info_genre");
-	song_info->priv->year = glade_xml_get_widget (xml, "song_info_year");
-	song_info->priv->playback_error_box = glade_xml_get_widget (xml, "song_info_error_box");
-	song_info->priv->playback_error_label = glade_xml_get_widget (xml, "song_info_error_label");
-	song_info->priv->disc_cur = glade_xml_get_widget (xml, "song_info_disc_cur");
+	song_info->priv->artist = GTK_WIDGET (gtk_builder_get_object (builder, "song_info_artist"));
+	song_info->priv->album = GTK_WIDGET (gtk_builder_get_object (builder, "song_info_album"));
+	song_info->priv->genre = GTK_WIDGET (gtk_builder_get_object (builder, "song_info_genre"));
+	song_info->priv->year = GTK_WIDGET (gtk_builder_get_object (builder, "song_info_year"));
+	song_info->priv->playback_error_box = GTK_WIDGET (gtk_builder_get_object (builder, "song_info_error_box"));
+	song_info->priv->playback_error_label = GTK_WIDGET (gtk_builder_get_object (builder, "song_info_error_label"));
+	song_info->priv->disc_cur = GTK_WIDGET (gtk_builder_get_object (builder, "song_info_disc_cur"));
 
 	rb_song_info_add_completion (GTK_ENTRY (song_info->priv->genre), song_info->priv->genres);
 	rb_song_info_add_completion (GTK_ENTRY (song_info->priv->artist), song_info->priv->artists);
 	rb_song_info_add_completion (GTK_ENTRY (song_info->priv->album), song_info->priv->albums);
 
-	rb_glade_boldify_label (xml, "album_label");
-	rb_glade_boldify_label (xml, "artist_label");
-	rb_glade_boldify_label (xml, "genre_label");
-	rb_glade_boldify_label (xml, "year_label");
-	rb_glade_boldify_label (xml, "rating_label");
-	rb_glade_boldify_label (xml, "discn_label");
+	rb_builder_boldify_label (builder, "album_label");
+	rb_builder_boldify_label (builder, "artist_label");
+	rb_builder_boldify_label (builder, "genre_label");
+	rb_builder_boldify_label (builder, "year_label");
+	rb_builder_boldify_label (builder, "rating_label");
+	rb_builder_boldify_label (builder, "discn_label");
 
 	g_signal_connect_object (G_OBJECT (song_info->priv->artist),
 				 "mnemonic-activate",
@@ -539,12 +530,12 @@ rb_song_info_constructor (GType type, guint n_construct_properties,
 	g_signal_connect_object (song_info->priv->rating, "rated",
 				 G_CALLBACK (rb_song_info_rated_cb),
 				 G_OBJECT (song_info), 0);
-	gtk_container_add (GTK_CONTAINER (glade_xml_get_widget (xml, "song_info_rating_container")),
+	gtk_container_add (GTK_CONTAINER (gtk_builder_get_object (builder, "song_info_rating_container")),
 			   song_info->priv->rating);
-	g_object_set (glade_xml_get_widget (xml, "rating_label"), "mnemonic-widget", song_info->priv->rating, NULL);
+	g_object_set (gtk_builder_get_object (builder, "rating_label"), "mnemonic-widget", song_info->priv->rating, NULL);
 
 	/* add relationship between the rating label and the rating widget */
-	lobj = gtk_widget_get_accessible (glade_xml_get_widget (xml, "rating_label"));
+	lobj = gtk_widget_get_accessible (GTK_WIDGET (gtk_builder_get_object (builder, "rating_label")));
 	robj = gtk_widget_get_accessible (song_info->priv->rating);
 
 	atk_object_add_relationship (lobj, ATK_RELATION_LABEL_FOR, robj);
@@ -558,10 +549,10 @@ rb_song_info_constructor (GType type, guint n_construct_properties,
 
 	/* Finish construction */
 	if (song_info->priv->current_entry) {
-		rb_song_info_construct_single (song_info, xml, editable);
+		rb_song_info_construct_single (song_info, builder, editable);
 		rb_song_info_populate_dialog (song_info);
 	} else {
-		rb_song_info_construct_multiple (song_info, xml, editable);
+		rb_song_info_construct_multiple (song_info, builder, editable);
 		rb_song_info_populate_dialog_multiple (song_info);
 	}
 	g_object_get (G_OBJECT (song_info->priv->source), "shell", &shell, NULL);
@@ -575,7 +566,8 @@ rb_song_info_constructor (GType type, guint n_construct_properties,
 	gtk_dialog_set_default_response (GTK_DIALOG (song_info),
 					 GTK_RESPONSE_CLOSE);
 
-	g_object_unref (G_OBJECT (xml));
+	g_object_unref (builder);
+
 	return G_OBJECT (song_info);
 }
 
diff --git a/widgets/rb-uri-dialog.c b/widgets/rb-uri-dialog.c
index 6c0811e..c44ea19 100644
--- a/widgets/rb-uri-dialog.c
+++ b/widgets/rb-uri-dialog.c
@@ -35,10 +35,9 @@
 
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
-#include <glade/glade.h>
 
 #include "rb-uri-dialog.h"
-#include "rb-glade-helpers.h"
+#include "rb-builder-helpers.h"
 #include "rb-dialog.h"
 #include "rb-debug.h"
 
@@ -52,7 +51,6 @@
 
 static void rb_uri_dialog_class_init (RBURIDialogClass *klass);
 static void rb_uri_dialog_init (RBURIDialog *dialog);
-static void rb_uri_dialog_finalize (GObject *object);
 static void rb_uri_dialog_response_cb (GtkDialog *gtkdialog,
 				       int response_id,
 				       RBURIDialog *dialog);
@@ -98,7 +96,6 @@ rb_uri_dialog_class_init (RBURIDialogClass *klass)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 	
-	object_class->finalize = rb_uri_dialog_finalize;
 	object_class->set_property = rb_uri_dialog_set_property;
 	object_class->get_property = rb_uri_dialog_get_property;
 
@@ -139,7 +136,7 @@ rb_uri_dialog_class_init (RBURIDialogClass *klass)
 static void
 rb_uri_dialog_init (RBURIDialog *dialog)
 {
-	GladeXML *xml;
+	GtkBuilder *builder;
 
 	/* create the dialog and some buttons forward - close */
 	dialog->priv = RB_URI_DIALOG_GET_PRIVATE (dialog);
@@ -161,16 +158,14 @@ rb_uri_dialog_init (RBURIDialog *dialog)
 							GTK_RESPONSE_OK);
 	gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
 
-	xml = rb_glade_xml_new ("uri-new.glade",
-				"newuri",
-				dialog);
+	builder = rb_builder_load ("uri-new.ui", dialog);
 
 	gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox),
-			   glade_xml_get_widget (xml, "newuri"));
+			   GTK_WIDGET (gtk_builder_get_object (builder, "newuri")));
 
-	/* get the widgets from the XML */
-	dialog->priv->label = glade_xml_get_widget (xml, "label");
-	dialog->priv->url = glade_xml_get_widget (xml, "txt_url");
+	/* get the widgets from the GtkBuilder */
+	dialog->priv->label = GTK_WIDGET (gtk_builder_get_object (builder, "label"));
+	dialog->priv->url = GTK_WIDGET (gtk_builder_get_object (builder, "txt_url"));
 	gtk_entry_set_activates_default (GTK_ENTRY (dialog->priv->url), TRUE);
 
 	g_signal_connect_object (G_OBJECT (dialog->priv->url),
@@ -184,22 +179,7 @@ rb_uri_dialog_init (RBURIDialog *dialog)
 	/* FIXME */
 	gtk_widget_set_sensitive (dialog->priv->okbutton, FALSE);
 
-	g_object_unref (G_OBJECT (xml));
-}
-
-static void
-rb_uri_dialog_finalize (GObject *object)
-{
-	RBURIDialog *dialog;
-
-	g_return_if_fail (object != NULL);
-	g_return_if_fail (RB_IS_URI_DIALOG (object));
-
-	dialog = RB_URI_DIALOG (object);
-
-	g_return_if_fail (dialog->priv != NULL);
-
-	G_OBJECT_CLASS (rb_uri_dialog_parent_class)->finalize (object);
+	g_object_unref (builder);
 }
 
 static void
