diff --git a/widgets/misc/e-activity-proxy.c b/widgets/misc/e-activity-proxy.c
index 91dd576..a4caea0 100644
--- a/widgets/misc/e-activity-proxy.c
+++ b/widgets/misc/e-activity-proxy.c
@@ -144,6 +144,27 @@ activity_proxy_update (EActivityProxy *proxy)
 	g_free (description);
 }
 
+static gboolean
+activity_proxy_update_cb (gpointer data)
+{
+	EActivityProxy *proxy = data;
+
+	g_return_val_if_fail (proxy != NULL, FALSE);
+
+	activity_proxy_update (proxy);
+
+	return FALSE;
+}
+
+static void
+schedule_activity_proxy_update (EActivityProxy *proxy)
+{
+	g_return_if_fail (proxy != NULL);
+
+	/* make sure this will be done in the main thread */
+	g_timeout_add_full (G_PRIORITY_DEFAULT, 100, activity_proxy_update_cb, g_object_ref (proxy), g_object_unref);
+}
+
 static void
 activity_proxy_cancel (EActivityProxy *proxy)
 {
@@ -365,7 +386,7 @@ e_activity_proxy_set_activity (EActivityProxy *proxy,
 
 		g_signal_connect_swapped (
 			activity, "notify",
-			G_CALLBACK (activity_proxy_update), proxy);
+			G_CALLBACK (schedule_activity_proxy_update), proxy);
 	}
 
 	activity_proxy_update (proxy);
