diff -u -p -r1.34 rb-daap-connection.c
--- daapsharing/rb-daap-connection.c	17 Jul 2006 14:50:43 -0000	1.34
+++ daapsharing/rb-daap-connection.c	25 Jul 2006 15:18:39 -0000
@@ -286,9 +286,11 @@ connection_connected (RBDAAPConnection *
 
 	connection->priv->is_connected = TRUE;
 
+	GDK_THREADS_ENTER ();
 	g_signal_emit (connection,
 		       signals [CONNECTED],
 		       0);
+	GDK_THREADS_LEAVE ();
 }
 
 static void
@@ -298,9 +300,11 @@ connection_disconnected (RBDAAPConnectio
 
 	connection->priv->is_connected = FALSE;
 
+	GDK_THREADS_ENTER ();
 	g_signal_emit (connection,
 		       signals [DISCONNECTED],
 		       0);
+	GDK_THREADS_LEAVE ();
 }
 
 static void
@@ -308,9 +312,11 @@ connection_operation_done (RBDAAPConnect
 {
 	rb_debug ("Emitting operation done");
 
+	GDK_THREADS_ENTER ();
 	g_signal_emit (connection,
 		       signals [OPERATION_DONE],
 		       0);
+	GDK_THREADS_LEAVE ();
 }
 
 static SoupMessage *
diff -u -p -r1.27 rb-daap-share.c
--- daapsharing/rb-daap-share.c	23 Jul 2006 15:58:06 -0000	1.27
+++ daapsharing/rb-daap-share.c	25 Jul 2006 15:18:40 -0000
@@ -220,7 +220,9 @@ name_collision_cb (RBDaapMdnsPublisher *
 	if (strcmp (name, share->priv->name) == 0) {
 		rb_debug ("Duplicate share name on mDNS");
 
+		GDK_THREADS_ENTER ();
 		new_name = rb_daap_collision_dialog_new_run (NULL, share->priv->name);
+		GDK_THREADS_LEAVE ();
 
 		rb_daap_share_set_name (share, new_name);
 		g_free (new_name);
diff -u -p -r1.17 rb-generic-player-source.c
--- plugins/generic-player/rb-generic-player-source.c	17 Jul 2006 14:51:41 -0000	1.17
+++ plugins/generic-player/rb-generic-player-source.c	25 Jul 2006 15:18:41 -0000
@@ -449,8 +449,12 @@ rb_generic_player_source_load_playlists 
 {
 	RBGenericPlayerSourceClass *klass = RB_GENERIC_PLAYER_SOURCE_GET_CLASS (source);
 
+	GDK_THREADS_ENTER ();
+
 	if (klass->impl_load_playlists)
 		klass->impl_load_playlists (source);
+
+	GDK_THREADS_LEAVE ();
 
 	return FALSE;
 }
diff -u -p -r1.54 rb-podcast-manager.c
--- podcast/rb-podcast-manager.c	25 Jul 2006 12:05:27 -0000	1.54
+++ podcast/rb-podcast-manager.c	25 Jul 2006 15:18:42 -0000
@@ -419,7 +419,7 @@ rb_podcast_manager_download_entry (RBPod
         	g_mutex_lock (pd->priv->download_list_mutex);
 		pd->priv->download_list =  g_list_append (pd->priv->download_list, data);
 		g_mutex_unlock (pd->priv->download_list_mutex);
-		gtk_idle_add ((GtkFunction) rb_podcast_manager_next_file , pd);
+		g_idle_add ((GtkFunction) rb_podcast_manager_next_file , pd);
 	}
 }
 
@@ -472,10 +472,14 @@ static gboolean
 rb_podcast_manager_sync_head_cb (gpointer data)
 {
 	RBPodcastManager *pd = RB_PODCAST_MANAGER (data);
+
+	GDK_THREADS_ENTER ();
+
 	rb_podcast_manager_update_feeds (pd);
 	pd->priv->source_sync = 0;
 	pd->priv->next_time = 0;
 	rb_podcast_manager_update_synctime (RB_PODCAST_MANAGER (data));
+	GDK_THREADS_LEAVE ();
 	return FALSE;
 }
 
@@ -526,7 +530,8 @@ rb_podcast_manager_head_query_cb (GtkTre
 static gboolean
 rb_podcast_manager_next_file (RBPodcastManager * pd)
 {
-
+	GDK_THREADS_ENTER ();
+	
 	rb_debug ("try lock file_process mutex");
 	if (g_mutex_trylock (pd->priv->mutex_job) == TRUE) {
 		gint size;
@@ -543,6 +548,7 @@ rb_podcast_manager_next_file (RBPodcastM
 		rb_debug ("not start");
 	}
 
+	GDK_THREADS_LEAVE ();
 	return FALSE;
 }
 
@@ -685,7 +691,7 @@ next_step:
 	data = NULL;
 
 	g_mutex_unlock (pd->priv->mutex_job);
-	gtk_idle_add ((GtkFunction) rb_podcast_manager_next_file , pd);
+	g_idle_add ((GtkFunction) rb_podcast_manager_next_file , pd);
 }
 
 gboolean
@@ -1056,7 +1062,7 @@ end_job	(RBPodcastManagerInfo *data)
 	download_info_free (data);
 	g_mutex_unlock (pd->priv->mutex_job);
 
-	gtk_idle_add ((GtkFunction) rb_podcast_manager_next_file, pd);
+	g_idle_add ((GtkFunction) rb_podcast_manager_next_file, pd);
 }
 
 static void
@@ -1554,6 +1560,8 @@ rb_podcast_manager_event_loop (RBPodcast
 {
 	RBPodcastManagerEvent *event;
 
+	GDK_THREADS_ENTER ();
+
 	while ((event = g_async_queue_try_pop (pd->priv->event_queue))) {
 		switch (event->type)
 		{
@@ -1579,6 +1587,7 @@ rb_podcast_manager_event_loop (RBPodcast
 
 	g_async_queue_unref (pd->priv->event_queue);
 
+	GDK_THREADS_LEAVE ();
 	return FALSE;
 }
 
diff -u -p -r1.51 rhythmdb-property-model.c
--- rhythmdb/rhythmdb-property-model.c	25 Jul 2006 12:05:46 -0000	1.51
+++ rhythmdb/rhythmdb-property-model.c	25 Jul 2006 15:18:43 -0000
@@ -1126,6 +1126,8 @@ rhythmdb_property_model_perform_sync (Rh
 	GtkTreeIter iter;
 	GtkTreePath *path;
 
+	GDK_THREADS_ENTER ();
+	
 	iter.stamp = model->priv->stamp;
 	iter.user_data = model->priv->all;
 	path = rhythmdb_property_model_get_path (GTK_TREE_MODEL (model), &iter);
@@ -1133,6 +1135,7 @@ rhythmdb_property_model_perform_sync (Rh
 	gtk_tree_path_free (path);
 
 	model->priv->syncing_id = 0;
+	GDK_THREADS_LEAVE ();
 	return FALSE;
 }
 
diff -u -p -r1.142 rhythmdb-query-model.c
--- rhythmdb/rhythmdb-query-model.c	25 Jul 2006 12:13:28 -0000	1.142
+++ rhythmdb/rhythmdb-query-model.c	25 Jul 2006 15:18:44 -0000
@@ -182,7 +182,7 @@ struct RhythmDBQueryModelUpdate
 
 static void rhythmdb_query_model_process_update (struct RhythmDBQueryModelUpdate *update);
 
-static gboolean idle_process_update (struct RhythmDBQueryModelUpdate *update);
+static void idle_process_update (struct RhythmDBQueryModelUpdate *update);
 
 static const GtkTargetEntry rhythmdb_query_model_drag_types[] = { { "text/uri-list", 0, 0 },};
 
@@ -908,6 +908,15 @@ rhythmdb_query_model_entry_deleted_cb (R
 		rhythmdb_query_model_remove_entry (model, entry);
 }
 
+static gboolean
+idle_process_update_idle (struct RhythmDBQueryModelUpdate *update)
+{
+	GDK_THREADS_ENTER ();
+	idle_process_update (update);
+	GDK_THREADS_LEAVE ();
+	return FALSE;
+}
+
 static void
 rhythmdb_query_model_process_update (struct RhythmDBQueryModelUpdate *update)
 {
@@ -915,10 +924,10 @@ rhythmdb_query_model_process_update (str
 	if (rb_is_main_thread ())
 		idle_process_update (update);
 	else
-		g_idle_add ((GSourceFunc) idle_process_update, update);
+		g_idle_add ((GSourceFunc) idle_process_update_idle, update);
 }
 
-static gboolean
+static void
 idle_process_update (struct RhythmDBQueryModelUpdate *update)
 {
 	switch (update->type) {
@@ -962,7 +971,6 @@ idle_process_update (struct RhythmDBQuer
 	g_atomic_int_add (&update->model->priv->pending_update_count, -1);
 	g_object_unref (update->model);
 	g_free (update);
-	return FALSE;
 }
 
 void
@@ -2707,9 +2715,11 @@ rhythmdb_query_model_limit_type_get_type
 static gboolean
 rhythmdb_query_model_reapply_query_cb (RhythmDBQueryModel *model)
 {
+	GDK_THREADS_ENTER ();
 	rhythmdb_query_model_reapply_query (model, FALSE);
 	rhythmdb_do_full_query_async_parsed (model->priv->db,
 					     RHYTHMDB_QUERY_RESULTS (model),
 					     model->priv->original_query);
+	GDK_THREADS_LEAVE ();
 	return TRUE;
 }
diff -u -p -r1.25 rb-play-order.c
--- shell/rb-play-order.c	23 Jul 2006 16:04:11 -0000	1.25
+++ shell/rb-play-order.c	25 Jul 2006 15:18:44 -0000
@@ -677,7 +677,11 @@ default_has_previous (RBPlayOrder *porde
 static gboolean
 sync_playing_entry_cb (RBPlayOrder *porder)
 {
-	RBShellPlayer *player = rb_play_order_get_player (porder);
+	RBShellPlayer *player;
+
+	GDK_THREADS_ENTER ();
+	
+	player = rb_play_order_get_player (porder);
 
 	if (porder->priv->playing_entry) {
 		rb_shell_player_play_entry (player,
@@ -695,6 +699,8 @@ sync_playing_entry_cb (RBPlayOrder *pord
 		}
 	}
 	porder->priv->sync_playing_entry_id = 0;
+
+	GDK_THREADS_LEAVE ();
 	return FALSE;
 }
 
diff -u -p -r1.30 rb-removable-media-manager.c
--- shell/rb-removable-media-manager.c	17 Jul 2006 14:52:29 -0000	1.30
+++ shell/rb-removable-media-manager.c	25 Jul 2006 15:18:45 -0000
@@ -549,6 +549,8 @@ rb_removable_media_manager_load_media (R
 #endif
 	GObject *shell_player;
 
+	GDK_THREADS_ENTER ();
+	
 	/*
 	 * Monitor new (un)mounted file systems to look for new media
 	 *
@@ -586,6 +588,7 @@ rb_removable_media_manager_load_media (R
 			  G_CALLBACK (rb_removable_media_manager_playing_uri_changed_cb),
 			  manager);
 
+	GDK_THREADS_LEAVE ();
 	return FALSE;
 }
 
diff -u -p -r1.50 rb-shell-clipboard.c
--- shell/rb-shell-clipboard.c	23 Jul 2006 16:04:11 -0000	1.50
+++ shell/rb-shell-clipboard.c	25 Jul 2006 15:18:45 -0000
@@ -47,7 +47,7 @@ static void rb_shell_clipboard_get_prope
 				   	     guint prop_id,
 					     GValue *value,
 					     GParamSpec *pspec);
-static gboolean rb_shell_clipboard_sync (RBShellClipboard *clipboard);
+static void rb_shell_clipboard_sync (RBShellClipboard *clipboard);
 static void rb_shell_clipboard_cmd_select_all (GtkAction *action,
 					       RBShellClipboard *clipboard);
 static void rb_shell_clipboard_cmd_select_none (GtkAction *action,
@@ -86,7 +86,8 @@ static void rb_shell_clipboard_cmd_song_
 					      RBShellClipboard *clipboard);
 static void rb_shell_clipboard_cmd_queue_song_info (GtkAction *action,
 						    RBShellClipboard *clipboard);
-static gboolean rebuild_playlist_menu (RBShellClipboard *clipboard);
+static void rebuild_playlist_menu (RBShellClipboard *clipboard);
+static gboolean rebuild_playlist_menu_idle (RBShellClipboard *clipboard);
 
 struct RBShellClipboardPrivate
 {
@@ -481,6 +482,17 @@ rb_shell_clipboard_new (GtkActionGroup *
 }
 
 static gboolean
+rb_shell_clipboard_sync_idle (RBShellClipboard *clipboard)
+{
+	GDK_THREADS_ENTER ();
+	rb_shell_clipboard_sync (clipboard);
+	clipboard->priv->idle_sync_id = 0;
+	GDK_THREADS_LEAVE ();
+
+	return FALSE;
+}
+
+static void
 rb_shell_clipboard_sync (RBShellClipboard *clipboard)
 {
 	RBEntryView *view;
@@ -497,9 +509,7 @@ rb_shell_clipboard_sync (RBShellClipboar
 	RhythmDBEntryType entry_type;
 
 	if (!clipboard->priv->source)
-		return FALSE;
-
-	clipboard->priv->idle_sync_id = 0;
+		return;
 
 	view = rb_source_get_entry_view (clipboard->priv->source);
 	if (view) {
@@ -572,8 +582,6 @@ rb_shell_clipboard_sync (RBShellClipboar
 	g_object_get (clipboard->priv->source, "entry-type", &entry_type, NULL);
 	gtk_action_set_sensitive (action, (entry_type == RHYTHMDB_ENTRY_TYPE_SONG));
 	g_boxed_free (RHYTHMDB_TYPE_ENTRY_TYPE, entry_type);
-
-	return FALSE;
 }
 
 static void
@@ -730,7 +738,7 @@ rb_shell_clipboard_entryview_changed_cb 
 					 RBShellClipboard *clipboard)
 {
 	if (clipboard->priv->idle_sync_id == 0)
-		clipboard->priv->idle_sync_id = g_idle_add ((GSourceFunc) rb_shell_clipboard_sync,
+		clipboard->priv->idle_sync_id = g_idle_add ((GSourceFunc) rb_shell_clipboard_sync_idle,
 							    clipboard);
 	rb_debug ("entryview changed");
 }
@@ -742,7 +750,7 @@ rb_shell_clipboard_entries_changed_cb (R
 {
 	rb_debug ("entryview changed");
 	if (clipboard->priv->idle_sync_id == 0)
-		clipboard->priv->idle_sync_id = g_idle_add ((GSourceFunc) rb_shell_clipboard_sync,
+		clipboard->priv->idle_sync_id = g_idle_add ((GSourceFunc) rb_shell_clipboard_sync_idle,
 							    clipboard);
 }
 
@@ -831,7 +839,7 @@ rb_shell_clipboard_playlist_deleted_cb (
 	/* this will update the menu */
 	if (clipboard->priv->idle_playlist_id == 0) {
 		clipboard->priv->idle_playlist_id =
-			g_idle_add ((GSourceFunc)rebuild_playlist_menu, clipboard);
+			g_idle_add ((GSourceFunc)rebuild_playlist_menu_idle, clipboard);
 	}
 }
 
@@ -951,7 +959,7 @@ add_playlist_to_menu (GtkTreeModel *mode
 	return FALSE;
 }
 
-static gboolean
+static void
 rebuild_playlist_menu (RBShellClipboard *clipboard)
 {
 	GtkTreeModel *model = NULL;
@@ -980,8 +988,15 @@ rebuild_playlist_menu (RBShellClipboard 
 		gtk_tree_model_foreach (model, (GtkTreeModelForeachFunc)add_playlist_to_menu, clipboard);
 		g_object_unref (model);
 	}
+}
 
+static gboolean
+rebuild_playlist_menu_idle (RBShellClipboard *clipboard)
+{
+	GDK_THREADS_ENTER ();
+	rebuild_playlist_menu (clipboard);
 	clipboard->priv->idle_playlist_id = 0;
+	GDK_THREADS_LEAVE ();
 	return FALSE;
 }
 
@@ -995,6 +1010,6 @@ rb_shell_clipboard_playlist_added_cb (RB
 
 	if (clipboard->priv->idle_playlist_id == 0) {
 		clipboard->priv->idle_playlist_id =
-			g_idle_add ((GSourceFunc)rebuild_playlist_menu, clipboard);
+			g_idle_add ((GSourceFunc)rebuild_playlist_menu_idle, clipboard);
 	}
 }
diff -u -p -r1.254 rb-shell-player.c
--- shell/rb-shell-player.c	23 Jul 2006 16:04:11 -0000	1.254
+++ shell/rb-shell-player.c	25 Jul 2006 15:18:47 -0000
@@ -569,9 +569,12 @@ reemit_playing_signal (RBShellPlayer *pl
 static gboolean
 notify_playing_idle (RBShellPlayer *player)
 {
+	GDK_THREADS_ENTER ();
 	rb_debug ("emitting playing notification: %d", rb_player_playing (player->priv->mmplayer));
 	g_object_notify (G_OBJECT (player), "playing");
 	rb_shell_player_sync_buttons (player);
+
+	GDK_THREADS_LEAVE ();
 	return FALSE;
 }
 
@@ -1498,7 +1501,9 @@ rb_shell_player_play_order_update_cb (RB
 static gboolean
 rb_shell_player_jump_to_current_idle (RBShellPlayer *player)
 {
+	GDK_THREADS_ENTER ();
 	rb_shell_player_jump_to_current (player);
+	GDK_THREADS_LEAVE ();
 	return FALSE;
 }
 
@@ -3047,6 +3052,8 @@ _idle_unblock_signal_cb (gpointer data)
 	GtkAction *action;
 	gboolean playing;
 
+	GDK_THREADS_ENTER ();
+
 	action = gtk_action_group_get_action (player->priv->actiongroup,
 					      "ControlPlay");
 
@@ -3055,6 +3062,8 @@ _idle_unblock_signal_cb (gpointer data)
 	gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), playing);
 
 	g_signal_handlers_unblock_by_func (action, rb_shell_player_cmd_play, player);
+
+	GDK_THREADS_LEAVE ();
 	return FALSE;
 }
 
diff -u -p -r1.467 rb-shell.c
--- shell/rb-shell.c	23 Jul 2006 16:04:14 -0000	1.467
+++ shell/rb-shell.c	25 Jul 2006 15:18:49 -0000
@@ -845,8 +845,10 @@ idle_save_rhythmdb (RBShell *shell)
 static gboolean
 idle_save_playlist_manager (RBShell *shell) 
 {
+	GDK_THREADS_ENTER ();
 	rb_playlist_manager_save_playlists (shell->priv->playlist_manager, 
 					    FALSE);
+	GDK_THREADS_LEAVE ();
 
 	return TRUE;
 }
@@ -2417,6 +2419,15 @@ rb_shell_cmd_add_file_to_library (GtkAct
 				 shell, 0);
 }
 
+static gboolean
+quit_timeout (gpointer dummy)
+{
+	GDK_THREADS_ENTER ();
+	gtk_main_quit ();
+	GDK_THREADS_LEAVE ();
+	return FALSE;
+}
+
 gboolean
 rb_shell_quit (RBShell *shell,
 	       GError **error)
@@ -2439,7 +2450,7 @@ rb_shell_quit (RBShell *shell,
 	rb_shell_sync_state (shell);
 	g_object_unref (G_OBJECT (shell));
 
-	g_timeout_add (10000, (GSourceFunc)gtk_main_quit, NULL);
+	g_timeout_add (10000, quit_timeout, NULL);
 	return TRUE;
 }
 
diff -u -p -r1.61 rb-ipod-source.c
--- sources/rb-ipod-source.c	17 Jul 2006 14:52:43 -0000	1.61
+++ sources/rb-ipod-source.c	25 Jul 2006 15:18:50 -0000
@@ -516,6 +516,8 @@ load_ipod_db_idle_cb (RBiPodSource *sour
  	GList *it;
 	RBiPodSourcePrivate *priv = IPOD_SOURCE_GET_PRIVATE (source);
 
+	GDK_THREADS_ENTER ();
+
         db = get_db_for_source (source);
 
   	g_assert (db != NULL);
@@ -527,6 +529,7 @@ load_ipod_db_idle_cb (RBiPodSource *sour
 
 	g_object_unref (db);
 
+	GDK_THREADS_LEAVE ();
 	return FALSE;
 }
 
diff -u -p -r1.180 rb-library-source.c
--- sources/rb-library-source.c	23 Jul 2006 16:04:45 -0000	1.180
+++ sources/rb-library-source.c	25 Jul 2006 15:18:52 -0000
@@ -247,7 +247,9 @@ rb_library_source_finalize (GObject *obj
 static gboolean
 add_child_sources_idle (RBLibrarySource *source)
 {
+	GDK_THREADS_ENTER ();
 	rb_library_source_sync_child_sources (source);
+	GDK_THREADS_LEAVE ();
 
 	return FALSE;
 }
diff -u -p -r1.36 rb-playlist-source-recorder.c
--- sources/rb-playlist-source-recorder.c	25 Jul 2006 11:53:09 -0000	1.36
+++ sources/rb-playlist-source-recorder.c	25 Jul 2006 15:18:52 -0000
@@ -398,9 +398,10 @@ set_message_text (RBPlaylistSourceRecord
 static gboolean
 response_idle_cb (RBPlaylistSourceRecorder *source)
 {
-
+	GDK_THREADS_ENTER ();
         gtk_dialog_response (GTK_DIALOG (source),
                              GTK_RESPONSE_CANCEL);
+	GDK_THREADS_LEAVE ();
 
         return FALSE;
 }
@@ -719,6 +720,8 @@ burn_cd_idle (RBPlaylistSourceRecorder *
         GError *error = NULL;
         int     res;
 
+	GDK_THREADS_ENTER ();
+
         res = burn_cd (source, &error);
         if (error) {
                 error_dialog (source,
@@ -727,6 +730,7 @@ burn_cd_idle (RBPlaylistSourceRecorder *
                 g_error_free (error);
         }
 
+	GDK_THREADS_LEAVE ();
         return FALSE;
 }
 
diff -u -p -r1.77 rb-source.c
--- sources/rb-source.c	25 Jul 2006 12:06:11 -0000	1.77
+++ sources/rb-source.c	25 Jul 2006 15:18:53 -0000
@@ -325,9 +325,10 @@ static gboolean
 update_visibility_idle (RBSource *source)
 {
 	RBSourcePrivate *priv = RB_SOURCE_GET_PRIVATE (source);
-
 	gboolean visibility;
 
+	GDK_THREADS_ENTER ();
+	
 	gint count = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (priv->query_model), NULL);
 
 	visibility = (count > 0);
@@ -337,6 +338,7 @@ update_visibility_idle (RBSource *source
 	}
 
 	priv->update_visibility_id = 0;
+	GDK_THREADS_LEAVE ();
 	return FALSE;
 }
 
diff -u -p -r1.5 bacon-volume.c
--- widgets/bacon-volume.c	14 Jul 2006 12:53:46 -0000	1.5
+++ widgets/bacon-volume.c	25 Jul 2006 15:18:53 -0000
@@ -333,9 +333,8 @@ bacon_volume_button_press (GtkWidget    
  */
 
 static gboolean
-cb_button_timeout (gpointer data)
+button_timeout (BaconVolumeButton *button)
 {
-  BaconVolumeButton *button = BACON_VOLUME_BUTTON (data);
   GtkAdjustment *adj = gtk_range_get_adjustment (GTK_RANGE (button->scale));
   float val;
   gboolean res = TRUE;
@@ -363,6 +362,17 @@ cb_button_timeout (gpointer data)
 }
 
 static gboolean
+cb_button_timeout (gpointer data)
+{
+  BaconVolumeButton *button = BACON_VOLUME_BUTTON (data);
+
+  GDK_THREADS_ENTER ();
+  return button_timeout (button);
+  GDK_THREADS_LEAVE ();
+}
+
+
+static gboolean
 cb_button_press (GtkWidget      * widget,
 		 GdkEventButton * event,
 		 gpointer         data)
@@ -376,7 +386,7 @@ cb_button_press (GtkWidget      * widget
       fabs (adj->page_increment) : - fabs (adj->page_increment);
   button->click_id = g_timeout_add (CLICK_TIMEOUT,
 				    (GSourceFunc) cb_button_timeout, button);
-  cb_button_timeout (button);
+  button_timeout (button);
 
   return TRUE;
 }
diff -u -p -r1.18 rb-druid.c
--- widgets/rb-druid.c	17 Jul 2006 14:52:55 -0000	1.18
+++ widgets/rb-druid.c	25 Jul 2006 15:18:53 -0000
@@ -331,8 +331,11 @@ idle_set_sensitive (RBDruid *druid)
 {
 	g_return_val_if_fail (RB_IS_DRUID (druid), FALSE);
 
+	GDK_THREADS_ENTER ();
+
 	rb_druid_page2_sync_sensitive (druid);
 
+	GDK_THREADS_LEAVE ();
 	return FALSE;
 }
 
diff -u -p -r1.155 rb-entry-view.c
--- widgets/rb-entry-view.c	25 Jul 2006 12:06:59 -0000	1.155
+++ widgets/rb-entry-view.c	25 Jul 2006 15:18:54 -0000
@@ -1592,6 +1592,7 @@ rb_entry_view_emit_selection_changed (RB
 	gboolean available;
 	gint sel_count;
 
+	GDK_THREADS_ENTER ();
 	sel_count = gtk_tree_selection_count_selected_rows (view->priv->selection);
 	available = (sel_count > 0);
 
@@ -1608,6 +1609,8 @@ rb_entry_view_emit_selection_changed (RB
 
 	view->priv->selection_changed_id = 0;
 	g_signal_emit (G_OBJECT (view), rb_entry_view_signals[SELECTION_CHANGED], 0);
+
+	GDK_THREADS_LEAVE ();
 	return FALSE;
 }
 
