--- a/mail/em-utils.c	2010-07-14 16:40:52.000000000 +0200
+++ b/mail/em-utils.c	2011-01-02 00:57:46.574588743 +0100
@@ -1558,43 +1558,8 @@
 static gboolean
 try_open_e_book (EBook *book, gboolean only_if_exists, GError **error)
 {
-	struct TryOpenEBookStruct data;
-	gboolean canceled = FALSE;
-	EFlag *flag = e_flag_new ();
-
-	data.error = error;
-	data.flag = flag;
-	data.result = FALSE;
-
-	if (e_book_async_open (book, only_if_exists, try_open_e_book_cb, &data) != FALSE) {
-		e_flag_free (flag);
-		g_clear_error (error);
-		g_set_error (error, E_BOOK_ERROR, E_BOOK_ERROR_OTHER_ERROR, "Failed to call e_book_async_open.");
-		return FALSE;
-	}
-
-	while (canceled = camel_operation_cancel_check (NULL), !canceled && !e_flag_is_set (flag)) {
-		GTimeVal wait;
-
-		g_get_current_time (&wait);
-		g_time_val_add (&wait, 250000); /* waits 250ms */
-
-		e_flag_timed_wait (flag, &wait);
-	}
-
-	if (canceled) {
-		g_clear_error (error);
-		g_set_error (error, E_BOOK_ERROR, E_BOOK_ERROR_CANCELLED, "Operation has been canceled.");
-		/* if the operation is cancelled sucessfully set the flag else wait. file, groupwise,.. backend's operations
-		   are not cancellable */
-		if (e_book_cancel_async_op (book, NULL))
-			e_flag_set (flag);
-	}
-
-	e_flag_wait (flag);
-	e_flag_free (flag);
-
-	return data.result && (!error || !*error);
+    /* Hack: there is a bug somewhere along the DBUS message passing, so I'm making a really synchronous function here. */
+    return e_book_open(book, only_if_exists, error);
 }
 
 #define NOT_FOUND_BOOK (GINT_TO_POINTER (1))
