diff --git a/capplets/appearance/appearance-themes.c b/capplets/appearance/appearance-themes.c
index 09e4c37..913d69c 100644
--- a/capplets/appearance/appearance-themes.c
+++ b/capplets/appearance/appearance-themes.c
@@ -148,7 +148,9 @@ theme_get_thumbnail_from_cache (GnomeThemeMetaInfo *info, AppearanceData *data)
 static void
 theme_thumbnail_done_cb (GdkPixbuf *pixbuf, gchar *theme_name, AppearanceData *data)
 {
+  gdk_threads_enter ();
   theme_thumbnail_update (pixbuf, theme_name, data, TRUE);
+  gdk_threads_leave ();
 }
 
 static void
@@ -172,6 +174,8 @@ theme_changed_on_disk_cb (GnomeThemeCommonInfo *theme,
                           GnomeThemeElement     element_type,
 			  AppearanceData       *data)
 {
+  gdk_threads_enter ();
+
   if (theme->type == GNOME_THEME_TYPE_METATHEME) {
     GnomeThemeMetaInfo *meta = (GnomeThemeMetaInfo *) theme;
 
@@ -193,6 +197,8 @@ theme_changed_on_disk_cb (GnomeThemeCommonInfo *theme,
       theme_thumbnail_generate (meta, data);
     }
   }
+
+  gdk_threads_leave ();
 }
 
 static gchar *
@@ -921,7 +927,9 @@ theme_gconf_changed (GConfClient *client,
                      GConfEntry *entry,
                      AppearanceData *data)
 {
+  gdk_threads_enter ();
   theme_details_changed_cb (data);
+  gdk_threads_leave ();
 }
 
 static gint
@@ -1003,7 +1011,9 @@ background_or_font_changed (GConfEngine *conf,
                             GConfEntry *entry,
                             AppearanceData *data)
 {
+  gdk_threads_enter ();
   theme_message_area_update (data);
+  gdk_threads_leave ();
 }
 
 void
diff --git a/capplets/appearance/theme-installer.c b/capplets/appearance/theme-installer.c
index 5e36d9c..15735a1 100644
--- a/capplets/appearance/theme-installer.c
+++ b/capplets/appearance/theme-installer.c
@@ -164,7 +164,10 @@ transfer_cancel_cb (GtkWidget *dialog,
 
 	g_object_unref (todelete);
 	g_free (path);
+
+	gdk_threads_enter ();
 	gtk_widget_destroy (dialog);
+	gdk_threads_leave ();
 }
 
 static void
diff --git a/capplets/common/file-transfer-dialog.c b/capplets/common/file-transfer-dialog.c
index a698520..3382195 100644
--- a/capplets/common/file-transfer-dialog.c
+++ b/capplets/common/file-transfer-dialog.c
@@ -372,12 +372,14 @@ file_transfer_job_update (gpointer user_data)
 	fraction = ((gdouble) data->current_file - 1) / data->total_files +
 		   (1.0 / data->total_files) * current_fraction;
 
+	gdk_threads_enter ();
 	g_object_set (data->dialog,
 		      "from_uri", data->source,
 		      "to_uri", data->target,
 		      "nth_uri", data->current_file,
 		      "fraction_complete", fraction,
 		      NULL);
+	gdk_threads_leave ();
 	return FALSE;
 }
 
@@ -391,21 +393,23 @@ file_transfer_job_progress (goffset current_bytes,
 	data->current_bytes = current_bytes;
 	data->total_bytes = total_bytes;
 
-	gdk_threads_enter ();
 	file_transfer_job_update (data);
-	gdk_threads_leave ();
 }
 
 static void
 file_transfer_job_destroy (FileTransferJob *job)
 {
-	g_object_unref (job->dialog);
 	g_slist_foreach (job->source_files, (GFunc) g_object_unref, NULL);
 	g_slist_foreach (job->target_files, (GFunc) g_object_unref, NULL);
 	g_slist_free (job->source_files);
 	g_slist_free (job->target_files);
+
+	gdk_threads_enter ();
+	g_object_unref (job->dialog);
 	if (job->overwrite_dialog != NULL)
 		gtk_widget_destroy (GTK_WIDGET (job->overwrite_dialog));
+	gdk_threads_leave ();
+
 	g_free (job);
 }
 
@@ -433,6 +437,8 @@ file_transfer_dialog_overwrite (gpointer user_data)
 	FileTransferData *data = user_data;
 	GtkDialog *dialog;
 
+	gdk_threads_enter ();
+
 	dialog = data->overwrite_dialog;
 
 	if (dialog != NULL) {
@@ -461,6 +467,9 @@ file_transfer_dialog_overwrite (gpointer user_data)
 	data->response = gtk_dialog_run (dialog);
 
 	gtk_widget_hide (GTK_WIDGET (dialog));
+
+	gdk_threads_leave ();
+
 	return FALSE;
 }
 
