diff -rN -u -p old-mt/bindings/python/rb.defs new-mt/bindings/python/rb.defs
--- old-mt/bindings/python/rb.defs	2007-01-16 20:16:20.000000000 +1000
+++ new-mt/bindings/python/rb.defs	2007-01-16 20:16:20.000000000 +1000
@@ -680,7 +680,7 @@
 (define-method get_browser_key
   (of-object "RBSource")
   (c-name "rb_source_get_browser_key")
-  (return-type "const-char*")
+  (return-type "char*")
 )
 
 (define-method browser_toggled
@@ -1554,7 +1554,7 @@
 (define-method get_paned_key
   (of-object "RBBrowserSource")
   (c-name "rb_browser_source_get_paned_key")
-  (return-type "const-char*")
+  (return-type "char*")
 )
 
 (define-method has_drop_support
@@ -1565,7 +1565,7 @@
 
 (define-virtual impl_get_paned_key
   (of-object "RBBrowserSource")
-  (return-type "const-char*")
+  (return-type "char*")
 )
 
 (define-virtual impl_has_drop_support
@@ -1578,6 +1578,13 @@
   (return-type "none")
 )
 
+(define-virtual impl_pack_paned
+  (of-object "RBBrowserSource")
+  (return-type "none")
+  (parameters
+    '("GtkWidget*" "paned")
+  )
+)
 
 
 ;; From ../../sources/rb-removable-media-source.h
diff -rN -u -p old-mt/bindings/python/rb.override new-mt/bindings/python/rb.override
--- old-mt/bindings/python/rb.override	2007-01-16 20:16:20.000000000 +1000
+++ new-mt/bindings/python/rb.override	2007-01-16 20:16:20.000000000 +1000
@@ -961,3 +961,169 @@ _wrap_rb_debug_real(PyObject *self, PyOb
     Py_INCREF(Py_None);
     return Py_None;
 }
+%%
+override RBSource__proxy_do_impl_get_browser_key
+static char *
+_wrap_RBSource__proxy_do_impl_get_browser_key(RBSource *self)
+{
+    PyGILState_STATE __py_state;
+    PyObject *py_self;
+    PyObject *py_retval;
+    PyObject *py_method;
+    char *ret = NULL;
+
+    __py_state = pyg_gil_state_ensure();
+    py_self = pygobject_new((GObject *) self);
+    if (!py_self) {
+        if (PyErr_Occurred())
+            PyErr_Print();
+        pyg_gil_state_release(__py_state);
+        return NULL;
+    }
+
+    py_method = PyObject_GetAttrString(py_self, "do_impl_get_browser_key");
+    if (!py_method) {
+        if (PyErr_Occurred())
+            PyErr_Print();
+        Py_DECREF(py_self);
+        pyg_gil_state_release(__py_state);
+        return NULL;
+    }
+    py_retval = PyObject_CallObject(py_method, NULL);
+    if (!py_retval) {
+        if (PyErr_Occurred())
+            PyErr_Print();
+        Py_DECREF(py_method);
+        Py_DECREF(py_self);
+        pyg_gil_state_release(__py_state);
+        return NULL;
+    }
+    if (py_retval == Py_None) {
+        if (PyErr_Occurred())
+            PyErr_Print();
+        PyErr_SetString(PyExc_TypeError, "retval was None");
+    } else if (PyString_Check(py_retval) == FALSE) {
+        /* nothing */
+    } else {
+    	ret = g_strdup (PyString_AsString(py_retval));
+    }
+
+    Py_DECREF(py_retval);
+    Py_DECREF(py_method);
+    Py_DECREF(py_self);
+    pyg_gil_state_release(__py_state);
+
+    return ret;
+}
+
+%%
+override RBSource__do_impl_get_browser_key
+static PyObject *
+_wrap_RBSource__do_impl_get_browser_key(PyObject *cls, PyObject *args, PyObject *kwargs)
+{
+    gpointer klass;
+    static char *kwlist[] = { "self", NULL };
+    PyGObject *self;
+    PyObject *tuple;
+    char *key = NULL;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!:RBSource.impl_get_browser_key", kwlist, &PyRBSource_Type, &self))
+	return NULL;
+
+    klass = g_type_class_ref(pyg_type_from_object(cls));
+    if (RB_SOURCE_CLASS(klass)->impl_get_browser_key) {
+	key = RB_SOURCE_CLASS(klass)->impl_get_browser_key(RB_SOURCE(self->obj));
+    } else {
+	PyErr_SetString(PyExc_NotImplementedError, "virtual method RBSource.impl_get_browser_key not implemented");
+	g_type_class_unref(klass);
+	return NULL;
+    }
+    g_type_class_unref(klass);
+
+    tuple = Py_BuildValue ("(s)", key);
+    g_free (key);
+    return tuple;
+}
+%%
+override RBBrowserSource__proxy_do_impl_get_paned_key
+static char *
+_wrap_RBBrowserSource__proxy_do_impl_get_paned_key(RBBrowserSource *self)
+{
+    PyGILState_STATE __py_state;
+    PyObject *py_self;
+    PyObject *py_retval;
+    PyObject *py_method;
+    char *ret = NULL;
+
+    __py_state = pyg_gil_state_ensure();
+    py_self = pygobject_new((GObject *) self);
+    if (!py_self) {
+        if (PyErr_Occurred())
+            PyErr_Print();
+        pyg_gil_state_release(__py_state);
+        return NULL;
+    }
+
+    py_method = PyObject_GetAttrString(py_self, "do_impl_get_paned_key");
+    if (!py_method) {
+        if (PyErr_Occurred())
+            PyErr_Print();
+        Py_DECREF(py_self);
+        pyg_gil_state_release(__py_state);
+        return NULL;
+    }
+    py_retval = PyObject_CallObject(py_method, NULL);
+    if (!py_retval) {
+        if (PyErr_Occurred())
+            PyErr_Print();
+        Py_DECREF(py_method);
+        Py_DECREF(py_self);
+        pyg_gil_state_release(__py_state);
+        return NULL;
+    }
+    if (py_retval == Py_None) {
+        if (PyErr_Occurred())
+            PyErr_Print();
+        PyErr_SetString(PyExc_TypeError, "retval was None");
+    } else if (PyString_Check(py_retval) == FALSE) {
+        /* nothing */
+    } else {
+    	ret = g_strdup (PyString_AsString(py_retval));
+    }
+
+    Py_DECREF(py_retval);
+    Py_DECREF(py_method);
+    Py_DECREF(py_self);
+    pyg_gil_state_release(__py_state);
+
+    return ret;
+}
+
+%%
+override RBBrowserSource__do_impl_get_paned_key
+static PyObject *
+_wrap_RBBrowserSource__do_impl_get_paned_key(PyObject *cls, PyObject *args, PyObject *kwargs)
+{
+    gpointer klass;
+    static char *kwlist[] = { "self", NULL };
+    PyGObject *self;
+    PyObject *tuple;
+    char *key = NULL;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!:RBBrowserSource.impl_get_paned_key", kwlist, &PyRBBrowserSource_Type, &self))
+	return NULL;
+
+    klass = g_type_class_ref(pyg_type_from_object(cls));
+    if (RB_BROWSER_SOURCE_CLASS(klass)->impl_get_paned_key) {
+	key = RB_BROWSER_SOURCE_CLASS(klass)->impl_get_paned_key(RB_BROWSER_SOURCE(self->obj));
+    } else {
+	PyErr_SetString(PyExc_NotImplementedError, "virtual method RBBrowserSource.impl_get_paned_key not implemented");
+	g_type_class_unref(klass);
+	return NULL;
+    }
+    g_type_class_unref(klass);
+
+    tuple = Py_BuildValue ("(s)", key);
+    g_free (key);
+    return tuple;
+}
diff -rN -u -p old-mt/data/rhythmbox.schemas new-mt/data/rhythmbox.schemas
--- old-mt/data/rhythmbox.schemas	2007-01-16 20:16:20.000000000 +1000
+++ new-mt/data/rhythmbox.schemas	2007-01-16 20:16:20.000000000 +1000
@@ -939,7 +939,7 @@
         <applyto>/apps/rhythmbox/plugins/magnatune/show_browser</applyto>
         <owner>rhythmbox</owner>
         <type>bool</type>
-        <default>FALSE</default>
+        <default>TRUE</default>
         <locale name="C">
 	<short>Whether or not to show the browser.</short>
 	<long>Whether or not to show the browser.</long>
diff -rN -u -p old-mt/plugins/daap/rb-daap-source.c new-mt/plugins/daap/rb-daap-source.c
--- old-mt/plugins/daap/rb-daap-source.c	2007-01-16 20:16:20.000000000 +1000
+++ new-mt/plugins/daap/rb-daap-source.c	2007-01-16 20:16:21.000000000 +1000
@@ -66,7 +66,7 @@ static void rb_daap_source_activate (RBS
 
 static gboolean rb_daap_source_show_popup (RBSource *source);
 static char * rb_daap_source_get_browser_key (RBSource *source);
-static const char * rb_daap_source_get_paned_key (RBBrowserSource *source);
+static char * rb_daap_source_get_paned_key (RBBrowserSource *source);
 static void rb_daap_source_get_status (RBSource *source, char **text, char **progress_text, float *progress);
 
 #define CONF_STATE_SORTING CONF_PREFIX "/state/daap/sorting"
@@ -739,10 +739,10 @@ rb_daap_source_get_browser_key (RBSource
 	return g_strdup (CONF_STATE_SHOW_BROWSER);
 }
 
-static const char *
+static char *
 rb_daap_source_get_paned_key (RBBrowserSource *source)
 {
-	return CONF_STATE_PANED_POSITION;
+	return g_strdup (CONF_STATE_PANED_POSITION);
 }
 
 static void
diff -rN -u -p old-mt/plugins/magnatune/magnatune/MagnatuneSource.py new-mt/plugins/magnatune/magnatune/MagnatuneSource.py
--- old-mt/plugins/magnatune/magnatune/MagnatuneSource.py	2007-01-16 20:16:20.000000000 +1000
+++ new-mt/plugins/magnatune/magnatune/MagnatuneSource.py	2007-01-16 20:16:21.000000000 +1000
@@ -116,11 +116,17 @@ class MagnatuneSource(rb.BrowserSource):
 
 		rb.BrowserSource.do_impl_activate (self)
 
-#	def do_impl_get_browser_key (self):
-#		return "/apps/rhythmbox/plugins/magnatune/show_browser"
-#
-#	def do_impl_get_paned_key (self):
-#		return "/apps/rhythmbox/plugins/magnatune/paned_position"
+	def do_impl_get_browser_key (self):
+		return "/apps/rhythmbox/plugins/magnatune/show_browser"
+
+	def do_impl_get_paned_key (self):
+		return "/apps/rhythmbox/plugins/magnatune/paned_position"
+
+	def do_impl_pack_paned (self, paned):
+		self.__paned_box = gtk.VBox(False, 5)
+		self.pack_start(self.__paned_box)
+		self.__paned_box.pack_start(paned)
+
 
 	def do_impl_delete_thyself(self):
 		if self.__update_id != 0:
@@ -365,7 +371,7 @@ class MagnatuneSource(rb.BrowserSource):
 			self.__info_screen.set_no_show_all (True)
 
 		self.__info_screen.set_property("visible", show)
-		self.get_entry_view().set_property("visible", not show)
+		self.__paned_box.set_property("visible", not show)
 
 	def __notify_status_changed(self):
 		def change_idle_cb():
diff -rN -u -p old-mt/sources/rb-browser-source.c new-mt/sources/rb-browser-source.c
--- old-mt/sources/rb-browser-source.c	2007-01-16 20:16:20.000000000 +1000
+++ new-mt/sources/rb-browser-source.c	2007-01-16 20:16:21.000000000 +1000
@@ -94,6 +94,7 @@ static gboolean impl_show_popup (RBSourc
 static GList *impl_get_search_actions (RBSource *source);
 static void impl_browser_toggled (RBSource *asource, gboolean disclosed);
 static void default_show_entry_popup (RBBrowserSource *source);
+static void default_pack_paned (RBBrowserSource *source, GtkWidget *paned);
 
 void rb_browser_source_browser_views_activated_cb (GtkWidget *widget,
 						 RBBrowserSource *source);
@@ -111,7 +112,6 @@ struct RBBrowserSourcePrivate
 	RhythmDB *db;
 
 	RBLibraryBrowser *browser;
-	GtkWidget *vbox;
 
 	RBEntryView *songs;
 	GtkWidget *paned;
@@ -201,6 +201,7 @@ rb_browser_source_class_init (RBBrowserS
 	source_class->impl_get_search_actions = impl_get_search_actions;
 	source_class->impl_browser_toggled = impl_browser_toggled;
 
+	klass->impl_pack_paned = default_pack_paned;
 	klass->impl_get_paned_key = (RBBrowserSourceStringFunc)rb_null_function;
 	klass->impl_has_drop_support = (RBBrowserSourceFeatureFunc) rb_false_function;
 	klass->impl_show_entry_popup = default_show_entry_popup;
@@ -222,10 +223,6 @@ rb_browser_source_init (RBBrowserSource 
 	source->priv = RB_BROWSER_SOURCE_GET_PRIVATE (source);
 
 	source->priv->search_prop = RHYTHMDB_PROP_SEARCH_MATCH;
-
-	source->priv->vbox = gtk_vbox_new (FALSE, 5);
-
-	gtk_container_add (GTK_CONTAINER (source), source->priv->vbox);
 }
 
 static void
@@ -364,10 +361,9 @@ rb_browser_source_constructor (GType typ
 	RBShell *shell;
 	GObject *shell_player;
 	char *browser_key;
+	char *paned_key;
 	RhythmDBEntryType entry_type;
 
-	klass = RB_BROWSER_SOURCE_CLASS (g_type_class_peek (RB_TYPE_BROWSER_SOURCE));
-
 	source = RB_BROWSER_SOURCE (G_OBJECT_CLASS (rb_browser_source_parent_class)
 			->constructor (type, n_construct_properties, construct_properties));
 
@@ -436,11 +432,13 @@ rb_browser_source_constructor (GType typ
 					    (GConfClientNotifyFunc) rb_browser_source_state_pref_changed,
 					    source);
 	}
-	if (rb_browser_source_get_paned_key (source)) {
+	paned_key = rb_browser_source_get_paned_key (source);
+	if (paned_key) {
 		source->priv->state_paned_notify_id =
-			eel_gconf_notification_add (rb_browser_source_get_paned_key (source),
+			eel_gconf_notification_add (paned_key,
 					    (GConfClientNotifyFunc) rb_browser_source_state_pref_changed,
 					    source);
+		g_free (paned_key);
 	}
 	browser_key = rb_source_get_browser_key (RB_SOURCE (source));
 	if (browser_key) {
@@ -478,7 +476,9 @@ rb_browser_source_constructor (GType typ
 
 	gtk_paned_pack2 (GTK_PANED (source->priv->paned), GTK_WIDGET (source->priv->songs), TRUE, FALSE);
 
-	gtk_box_pack_start_defaults (GTK_BOX (source->priv->vbox), source->priv->paned);
+	klass = RB_BROWSER_SOURCE_GET_CLASS (source);
+	klass->impl_pack_paned (source, source->priv->paned);
+
 	gtk_widget_show_all (GTK_WIDGET (source));
 
 	source->priv->cached_all_query = rhythmdb_query_model_new_empty (source->priv->db);
@@ -714,12 +714,13 @@ paned_size_allocate_cb (GtkWidget *widge
 			GtkAllocation *allocation,
 		        RBBrowserSource *source)
 {
-	const char *key = rb_browser_source_get_paned_key (source);;
+	char *key = rb_browser_source_get_paned_key (source);;
 
 	/* save state */
 	rb_debug ("paned size allocate");
 	if (key)
 		eel_gconf_set_integer (key, gtk_paned_get_position (GTK_PANED (source->priv->paned)));
+	g_free (key);
 }
 
 static void
@@ -735,7 +736,7 @@ rb_browser_source_state_pref_changed (GC
 static void
 rb_browser_source_state_prefs_sync (RBBrowserSource *source)
 {
-	const char *paned_key;
+	char *paned_key;
 	char *browser_key;
 
 	rb_debug ("syncing state");
@@ -750,6 +751,8 @@ rb_browser_source_state_prefs_sync (RBBr
 	} else {
 		gtk_widget_hide (GTK_WIDGET (source->priv->browser));
 	}
+
+	g_free (paned_key);
 	g_free (browser_key);
 }
 
@@ -786,7 +789,7 @@ impl_show_popup (RBSource *source)
 	return TRUE;
 }
 
-const char *
+char *
 rb_browser_source_get_paned_key (RBBrowserSource *source)
 {
 	RBBrowserSourceClass *klass = RB_BROWSER_SOURCE_GET_CLASS (source);
@@ -904,3 +907,14 @@ rb_browser_source_do_query (RBBrowserSou
 
 	rhythmdb_query_free (query);
 }
+
+static void
+default_pack_paned (RBBrowserSource *source, GtkWidget *paned)
+{
+	GtkWidget *box;
+
+	box = gtk_vbox_new (FALSE, 5);
+	gtk_box_pack_start_defaults (GTK_BOX (box), paned);
+	gtk_container_add (GTK_CONTAINER (source), box);
+}
+
diff -rN -u -p old-mt/sources/rb-browser-source.h new-mt/sources/rb-browser-source.h
--- old-mt/sources/rb-browser-source.h	2007-01-16 20:16:20.000000000 +1000
+++ new-mt/sources/rb-browser-source.h	2007-01-16 20:16:21.000000000 +1000
@@ -51,17 +51,18 @@ typedef struct
 {
 	RBSourceClass parent;
 
-	const char *	(*impl_get_paned_key)		(RBBrowserSource *source);
+	void		(*impl_pack_paned)		(RBBrowserSource *source, GtkWidget *paned);
+	char *		(*impl_get_paned_key)		(RBBrowserSource *source);
 	gboolean	(*impl_has_drop_support)	(RBBrowserSource *source);
 	void		(*impl_show_entry_popup)	(RBBrowserSource *source);
 } RBBrowserSourceClass;
 
-typedef gboolean	(*RBBrowserSourceFeatureFunc) (RBBrowserSource *source);
-typedef const char*	(*RBBrowserSourceStringFunc) (RBBrowserSource *source);
+typedef gboolean	(*RBBrowserSourceFeatureFunc)	(RBBrowserSource *source);
+typedef char*		(*RBBrowserSourceStringFunc)	(RBBrowserSource *source);
 
 GType		rb_browser_source_get_type		(void);
 
-const char *	rb_browser_source_get_paned_key		(RBBrowserSource *source);
+char *		rb_browser_source_get_paned_key		(RBBrowserSource *source);
 gboolean	rb_browser_source_has_drop_support	(RBBrowserSource *source);
 
 G_END_DECLS
diff -rN -u -p old-mt/sources/rb-library-source.c new-mt/sources/rb-library-source.c
--- old-mt/sources/rb-library-source.c	2007-01-16 20:16:20.000000000 +1000
+++ new-mt/sources/rb-library-source.c	2007-01-16 20:16:21.000000000 +1000
@@ -57,7 +57,7 @@ static void rb_library_source_finalize (
 static gboolean impl_show_popup (RBSource *source);
 static GtkWidget *impl_get_config_widget (RBSource *source, RBShellPreferences *prefs);
 static char *impl_get_browser_key (RBSource *source);
-static const char *impl_get_paned_key (RBBrowserSource *source);
+static char *impl_get_paned_key (RBBrowserSource *source);
 static gboolean impl_receive_drag (RBSource *source, GtkSelectionData *data);
 static gboolean impl_can_paste (RBSource *asource);
 #ifdef ENABLE_TRACK_TRANSFER
@@ -630,10 +630,10 @@ impl_get_browser_key (RBSource *source)
 	return g_strdup (CONF_STATE_SHOW_BROWSER);
 }
 
-static const char *
+static char *
 impl_get_paned_key (RBBrowserSource *status)
 {
-	return CONF_STATE_PANED_POSITION;
+	return g_strdup (CONF_STATE_PANED_POSITION);
 }
 
 static void

