diff -u -u -r1.14 rb.defs
--- bindings/python/rb.defs	9 May 2006 10:11:00 -0000	1.14
+++ bindings/python/rb.defs	9 May 2006 12:50:17 -0000
@@ -1633,6 +1633,7 @@
   (parameters
     '("RhythmDBPropType" "type")
     '("GList*" "list")
+    '("gboolean" "restore")
   )
 )
 
diff -u -u -r1.13 rb.override
--- bindings/python/rb.override	9 May 2006 07:13:50 -0000	1.13
+++ bindings/python/rb.override	9 May 2006 12:50:18 -0000
@@ -806,19 +806,23 @@
 static PyObject *
 _wrap_rb_library_browser_set_selection(PyGObject *self, PyObject *args, PyObject *kwargs)
 {
-    static char *kwlist[] = { "type", "keys", NULL };
+    static char *kwlist[] = { "type", "keys", "restore", NULL };
     PyObject *py_keys = NULL;
     PyObject *py_propid = NULL;
+    PyObject *py_restore = NULL;
     RhythmDBPropType propid;
     GList *keys;
+    gboolean restore;
 
-    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO:RBLibraryBrowser.set_selection", kwlist, &py_propid, &py_keys))
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO:RBLibraryBrowser.set_selection", kwlist, &py_propid, &py_keys, &py_restore))
         return NULL;
+
     if (pyg_enum_get_value(RHYTHMDB_TYPE_PROP_TYPE, py_propid, (gint *)&propid))
         return NULL;
-
     keys = _helper_unwrap_string_pylist (py_keys);
-    rb_library_browser_set_selection (RB_LIBRARY_BROWSER(self->obj), propid, keys);
+    restore = (PyBool_Check (py_restore) != 0);
+
+    rb_library_browser_set_selection (RB_LIBRARY_BROWSER(self->obj), propid, keys, restore);
     rb_list_deep_free (keys);
 
     Py_INCREF(Py_None);
diff -u -u -r1.6 rb-browser-source.c
--- sources/rb-browser-source.c	26 Apr 2006 13:18:16 -0000	1.6
+++ sources/rb-browser-source.c	9 May 2006 12:50:18 -0000
@@ -524,7 +524,7 @@
 
 	g_object_get (G_OBJECT (shell), "selected-source", &source, NULL);
 	props = rb_source_gather_selected_properties (RB_SOURCE (source), RHYTHMDB_PROP_GENRE);
-	rb_library_browser_set_selection (source->priv->browser, RHYTHMDB_PROP_GENRE, props);
+	rb_library_browser_set_selection (source->priv->browser, RHYTHMDB_PROP_GENRE, props, TRUE);
 	rb_list_deep_free (props);
 	g_object_unref (source);
 }
@@ -540,7 +540,7 @@
 
 	g_object_get (G_OBJECT (shell), "selected-source", &source, NULL);
 	props = rb_source_gather_selected_properties (RB_SOURCE (source), RHYTHMDB_PROP_ARTIST);
-	rb_library_browser_set_selection (source->priv->browser, RHYTHMDB_PROP_ARTIST, props);
+	rb_library_browser_set_selection (source->priv->browser, RHYTHMDB_PROP_ARTIST, props, TRUE);
 	rb_list_deep_free (props);
 	g_object_unref (source);
 }
@@ -556,7 +556,7 @@
 
 	g_object_get (G_OBJECT (shell), "selected-source", &source, NULL);
 	props = rb_source_gather_selected_properties (RB_SOURCE (source), RHYTHMDB_PROP_ALBUM);
-	rb_library_browser_set_selection (source->priv->browser, RHYTHMDB_PROP_ALBUM, props);
+	rb_library_browser_set_selection (source->priv->browser, RHYTHMDB_PROP_ALBUM, props, TRUE);
 	rb_list_deep_free (props);
 	g_object_unref (source);
 }
diff -u -u -r1.10 rb-library-browser.c
--- widgets/rb-library-browser.c	22 Apr 2006 06:49:46 -0000	1.10
+++ widgets/rb-library-browser.c	9 May 2006 12:50:19 -0000
@@ -325,7 +325,7 @@
 	RhythmDBPropType prop;
 
 	g_object_get (G_OBJECT (view), "prop", &prop, NULL);
-	rb_library_browser_set_selection (widget, prop, selection);
+	rb_library_browser_set_selection (widget, prop, selection, FALSE);
 }
 static void
 view_selection_reset_cb (RBPropertyView *view, RBLibraryBrowser *widget)
@@ -333,7 +333,7 @@
 	RhythmDBPropType prop;
 
 	g_object_get (G_OBJECT (view), "prop", &prop, NULL);
-	rb_library_browser_set_selection (widget, prop, NULL);
+	rb_library_browser_set_selection (widget, prop, NULL, FALSE);
 }
 
 static void
@@ -586,7 +586,7 @@
 }
 
 void
-rb_library_browser_set_selection (RBLibraryBrowser *widget, RhythmDBPropType type, GList *selection)
+rb_library_browser_set_selection (RBLibraryBrowser *widget, RhythmDBPropType type, GList *selection, gboolean restore)
 {
 	RBLibraryBrowserPrivate *priv = RB_LIBRARY_BROWSER_GET_PRIVATE (widget);
 	GList *old_selection;
@@ -607,8 +607,10 @@
 		ignore_selection_changes (widget, view, TRUE);
 
 	rebuild_child_model (widget, prop_to_index (type), FALSE);
-	if (view)
+	if (view) 
 		ignore_selection_changes (widget, view, FALSE);
+	if (restore) 
+		restore_selection (widget, prop_to_index (type), FALSE);
 }
 
 GList*
diff -u -u -r1.4 rb-library-browser.h
--- widgets/rb-library-browser.h	22 Apr 2006 06:38:06 -0000	1.4
+++ widgets/rb-library-browser.h	9 May 2006 12:50:19 -0000
@@ -58,7 +58,7 @@
 GList* rb_library_browser_get_property_views (RBLibraryBrowser *widget);
 
 gboolean rb_library_browser_has_selection (RBLibraryBrowser *widget);
-void rb_library_browser_set_selection (RBLibraryBrowser *widget, RhythmDBPropType type, GList *list);
+void rb_library_browser_set_selection (RBLibraryBrowser *widget, RhythmDBPropType type, GList *list, gboolean restore);
 
 
 G_END_DECLS
