[evolution-data-server] Bug #622884 - Migrate from dbus-glib to glib's GDBus



commit 7924f705ec597b77963d2d225c0a30fbbd227fe6
Author: Milan Crha <mcrha redhat com>
Date:   Wed Jul 28 13:49:04 2010 +0200

    Bug #622884 - Migrate from dbus-glib to glib's GDBus

 addressbook/Makefile.am                            |    2 +-
 addressbook/libebook/Makefile.am                   |   11 +-
 addressbook/libebook/e-book-view-private.h         |    4 +-
 addressbook/libebook/e-book-view.c                 |  104 +-
 addressbook/libebook/e-book.c                      |  850 ++--
 addressbook/libedata-book/Makefile.am              |   20 +-
 addressbook/libedata-book/e-data-book-factory.c    |  331 +-
 addressbook/libedata-book/e-data-book-marshal.list |    1 -
 addressbook/libedata-book/e-data-book-view.c       |  235 +-
 addressbook/libedata-book/e-data-book-view.h       |    8 +-
 addressbook/libedata-book/e-data-book.c            |  556 +-
 addressbook/libedata-book/e-data-book.h            |   11 +-
 addressbook/libegdbus/Makefile.am                  |   38 +
 addressbook/libegdbus/e-gdbus-egdbusbook.c         | 4525 ++++++++++++
 addressbook/libegdbus/e-gdbus-egdbusbook.h         |  681 ++
 addressbook/libegdbus/e-gdbus-egdbusbookfactory.c  | 1120 +++
 addressbook/libegdbus/e-gdbus-egdbusbookfactory.h  |  209 +
 addressbook/libegdbus/e-gdbus-egdbusbookview.c     | 2043 ++++++
 addressbook/libegdbus/e-gdbus-egdbusbookview.h     |  302 +
 addressbook/libegdbus/e-gdbus-marshallers.c        |  345 +
 addressbook/libegdbus/e-gdbus-marshallers.h        |   77 +
 addressbook/libegdbus/e-gdbus-marshallers.list     |   10 +
 addressbook/libegdbus/e-gdbus-typemappers.h        |   12 +
 addressbook/tests/ebook/ebook-test-utils.c         |    6 +-
 calendar/Makefile.am                               |    2 +-
 calendar/libecal/Makefile.am                       |   49 +-
 calendar/libecal/e-cal-view-private.h              |    6 +-
 calendar/libecal/e-cal-view.c                      |  139 +-
 calendar/libecal/e-cal.c                           |  554 +-
 calendar/libedata-cal/Makefile.am                  |   52 +-
 calendar/libedata-cal/e-data-cal-factory.c         |  284 +-
 calendar/libedata-cal/e-data-cal-marshal.list      |    2 -
 calendar/libedata-cal/e-data-cal-view.c            |  177 +-
 calendar/libedata-cal/e-data-cal-view.h            |    6 +-
 calendar/libedata-cal/e-data-cal.c                 |  814 ++--
 calendar/libedata-cal/e-data-cal.h                 |    4 +-
 calendar/libegdbus/Makefile.am                     |   38 +
 calendar/libegdbus/e-gdbus-egdbuscal.c             | 7289 ++++++++++++++++++++
 calendar/libegdbus/e-gdbus-egdbuscal.h             | 1077 +++
 calendar/libegdbus/e-gdbus-egdbuscalfactory.c      | 1138 +++
 calendar/libegdbus/e-gdbus-egdbuscalfactory.h      |  212 +
 calendar/libegdbus/e-gdbus-egdbuscalview.c         | 1890 +++++
 calendar/libegdbus/e-gdbus-egdbuscalview.h         |  278 +
 calendar/libegdbus/e-gdbus-marshallers.c           |  476 ++
 calendar/libegdbus/e-gdbus-marshallers.h           |  104 +
 calendar/libegdbus/e-gdbus-marshallers.list        |   14 +
 calendar/libegdbus/e-gdbus-typemappers.h           |   12 +
 calendar/tests/ecal/ecal-test-utils.c              |    6 +-
 camel/Makefile.am                                  |    6 +-
 camel/camel-sasl-gssapi.c                          |   68 +-
 configure.ac                                       |   24 +-
 51 files changed, 23978 insertions(+), 2244 deletions(-)
---
diff --git a/addressbook/Makefile.am b/addressbook/Makefile.am
index 0c226fe..95a652b 100644
--- a/addressbook/Makefile.am
+++ b/addressbook/Makefile.am
@@ -1,3 +1,3 @@
-SUBDIRS = libebook libedata-book backends tests
+SUBDIRS = libegdbus libebook libedata-book backends tests
 
 -include $(top_srcdir)/git.mk
diff --git a/addressbook/libebook/Makefile.am b/addressbook/libebook/Makefile.am
index 0827043..07b3475 100644
--- a/addressbook/libebook/Makefile.am
+++ b/addressbook/libebook/Makefile.am
@@ -10,8 +10,9 @@ libebook_1_2_la_CPPFLAGS = \
 	-DLOCALEDIR=\""$(localedir)"\"			\
 	-DG_LOG_DOMAIN=\"libebook\"			\
 	-I$(top_srcdir)					\
-	-I$(top_builddir)				\
 	-I$(top_srcdir)/addressbook			\
+	-I$(top_srcdir)/addressbook/libegdbus		\
+	-I$(top_builddir)				\
 	-I$(top_builddir)/addressbook			\
 	-I$(top_builddir)/addressbook/libebook		\
 	$(EVOLUTION_ADDRESSBOOK_CFLAGS)			\
@@ -19,7 +20,6 @@ libebook_1_2_la_CPPFLAGS = \
 
 libebook_1_2_la_SOURCES =				\
 	$(MARSHAL_GENERATED)				\
-	$(DBUS_GENERATED_H)				\
 	e-address-western.c				\
 	e-book-query.c					\
 	e-book-view-private.h				\
@@ -33,6 +33,7 @@ libebook_1_2_la_SOURCES =				\
 	e-error.h
 
 libebook_1_2_la_LIBADD =					\
+	$(top_builddir)/addressbook/libegdbus/libegdbus-book.la	\
 	$(top_builddir)/camel/libcamel-1.2.la			\
 	$(top_builddir)/libedataserver/libedataserver-1.2.la	\
 	$(EVOLUTION_ADDRESSBOOK_LIBS)				\
@@ -63,11 +64,7 @@ e-name-western-tables.h: e-name-western-tables.h.in
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = libebook-$(API_VERSION).pc
 
-DBUS_GENERATED_H = e-data-book-factory-bindings.h e-data-book-bindings.h e-data-book-view-bindings.h
-%-bindings.h: $(top_srcdir)/addressbook/libedata-book/%.xml
-	@DBUS_BINDING_TOOL@ --mode=glib-client --output=$@ --prefix=$(subst -,_,$*) $^
-
-BUILT_SOURCES = $(DBUS_GENERATED_H) $(MARSHAL_GENERATED)
+BUILT_SOURCES = $(MARSHAL_GENERATED)
 CLEANFILES    = $(BUILT_SOURCES)
 DISTCLEANFILES = $(pkgconfig_DATA)
 
diff --git a/addressbook/libebook/e-book-view-private.h b/addressbook/libebook/e-book-view-private.h
index 776eb94..16a6461 100644
--- a/addressbook/libebook/e-book-view-private.h
+++ b/addressbook/libebook/e-book-view-private.h
@@ -25,7 +25,9 @@
 #include "e-book.h"
 #include "e-book-view.h"
 
-EBookView *_e_book_view_new (EBook *book, DBusGProxy *view_proxy, GStaticRecMutex *connection_lock);
+struct _EGdbusBookView;
+
+EBookView *_e_book_view_new (EBook *book, struct _EGdbusBookView *gdbus_bookview);
 
 G_END_DECLS
 
diff --git a/addressbook/libebook/e-book-view.c b/addressbook/libebook/e-book-view.c
index c628c55..d8ef2fb 100644
--- a/addressbook/libebook/e-book-view.c
+++ b/addressbook/libebook/e-book-view.c
@@ -21,13 +21,12 @@
  */
 
 #include <glib-object.h>
-#include <dbus/dbus-glib.h>
 #include "e-book.h"
 #include "e-book-view.h"
 #include "e-book-view-private.h"
-#include "e-data-book-view-bindings.h"
 #include "e-book-marshal.h"
 #include "libedata-book/e-data-book-types.h"
+#include "e-gdbus-egdbusbookview.h"
 
 G_DEFINE_TYPE(EBookView, e_book_view, G_TYPE_OBJECT);
 
@@ -35,9 +34,8 @@ G_DEFINE_TYPE(EBookView, e_book_view, G_TYPE_OBJECT);
 	(G_TYPE_INSTANCE_GET_PRIVATE ((o), E_TYPE_BOOK_VIEW, EBookViewPrivate))
 
 struct _EBookViewPrivate {
+	EGdbusBookView *gdbus_bookview;
 	EBook *book;
-	DBusGProxy *view_proxy;
-	GStaticRecMutex *view_proxy_lock;
 	gboolean running;
 };
 
@@ -56,18 +54,9 @@ enum {
 static guint signals [LAST_SIGNAL];
 
 static void
-status_message_cb (DBusGProxy *proxy, const gchar *message, EBookView *book_view)
+contacts_added_cb (EGdbusBookView *object, const gchar * const *vcards, EBookView *book_view)
 {
-	if (!book_view->priv->running)
-		return;
-
-	g_signal_emit (book_view, signals[STATUS_MESSAGE], 0, message);
-}
-
-static void
-contacts_added_cb (DBusGProxy *proxy, const gchar **vcards, EBookView *book_view)
-{
-	const gchar **p;
+	const gchar * const *p;
 	GList *contacts = NULL;
 
 	if (!book_view->priv->running)
@@ -76,6 +65,7 @@ contacts_added_cb (DBusGProxy *proxy, const gchar **vcards, EBookView *book_view
 	for (p = vcards; *p; p++) {
 		contacts = g_list_prepend (contacts, e_contact_new_from_vcard (*p));
 	}
+
 	contacts = g_list_reverse (contacts);
 
 	g_signal_emit (book_view, signals[CONTACTS_ADDED], 0, contacts);
@@ -85,9 +75,9 @@ contacts_added_cb (DBusGProxy *proxy, const gchar **vcards, EBookView *book_view
 }
 
 static void
-contacts_changed_cb (DBusGProxy *proxy, const gchar **vcards, EBookView *book_view)
+contacts_changed_cb (EGdbusBookView *object, const gchar * const *vcards, EBookView *book_view)
 {
-	const gchar **p;
+	const gchar * const *p;
 	GList *contacts = NULL;
 
 	if (!book_view->priv->running)
@@ -105,9 +95,9 @@ contacts_changed_cb (DBusGProxy *proxy, const gchar **vcards, EBookView *book_vi
 }
 
 static void
-contacts_removed_cb (DBusGProxy *proxy, const gchar **ids, EBookView *book_view)
+contacts_removed_cb (EGdbusBookView *object, const gchar * const *ids, EBookView *book_view)
 {
-	const gchar **p;
+	const gchar * const *p;
 	GList *list = NULL;
 
 	if (!book_view->priv->running)
@@ -125,7 +115,16 @@ contacts_removed_cb (DBusGProxy *proxy, const gchar **ids, EBookView *book_view)
 }
 
 static void
-complete_cb (DBusGProxy *proxy, EDataBookStatus status, const gchar *message, EBookView *book_view)
+status_message_cb (EGdbusBookView *object, const gchar *message, EBookView *book_view)
+{
+	if (!book_view->priv->running)
+		return;
+
+	g_signal_emit (book_view, signals[STATUS_MESSAGE], 0, message);
+}
+
+static void
+complete_cb (EGdbusBookView *object, /* EDataBookStatus */ guint status, const gchar *message, EBookView *book_view)
 {
 	EBookViewStatus bv_status = E_BOOK_VIEW_ERROR_OTHER_ERROR;
 
@@ -158,22 +157,19 @@ complete_cb (DBusGProxy *proxy, EDataBookStatus status, const gchar *message, EB
 	g_signal_emit (book_view, signals[VIEW_COMPLETE], 0, bv_status, message);
 }
 
-#define LOCK_CONN()   g_static_rec_mutex_lock (book_view->priv->view_proxy_lock)
-#define UNLOCK_CONN() g_static_rec_mutex_unlock (book_view->priv->view_proxy_lock)
-
 /*
  * e_book_view_new:
  * @book: an #EBook
- * @view_proxy: The #DBusGProxy to get signals from
+ * @gdbus_bookview: The #EGdbusBookView to get signals from
  *
- * Creates a new #EBookView based on #EBook and listening to @view_proxy.  This
+ * Creates a new #EBookView based on #EBook and listening to @gdbus_bookview.  This
  * is a private function, applications should call #e_book_get_book_view or
  * #e_book_async_get_book_view.
  *
  * Returns: A new #EBookView.
  **/
 EBookView *
-_e_book_view_new (EBook *book, DBusGProxy *view_proxy, GStaticRecMutex *view_proxy_lock)
+_e_book_view_new (EBook *book, EGdbusBookView *gdbus_bookview)
 {
 	EBookView *view;
 	EBookViewPrivate *priv;
@@ -183,23 +179,15 @@ _e_book_view_new (EBook *book, DBusGProxy *view_proxy, GStaticRecMutex *view_pro
 
 	priv->book = g_object_ref (book);
 
-	/* Take ownership of the view_proxy object */
-	priv->view_proxy = view_proxy;
-	priv->view_proxy_lock = view_proxy_lock;
-	g_object_add_weak_pointer (G_OBJECT (view_proxy), (gpointer)&priv->view_proxy);
+	/* Take ownership of the gdbus_bookview object */
+	priv->gdbus_bookview = gdbus_bookview;
 
-	dbus_g_object_register_marshaller (e_book_marshal_VOID__UINT_STRING, G_TYPE_NONE, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_INVALID);
-
-	dbus_g_proxy_add_signal (view_proxy, "StatusMessage", G_TYPE_STRING, G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal (view_proxy, "StatusMessage", G_CALLBACK (status_message_cb), view, NULL);
-	dbus_g_proxy_add_signal (view_proxy, "ContactsAdded", G_TYPE_STRV, G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal (view_proxy, "ContactsAdded", G_CALLBACK (contacts_added_cb), view, NULL);
-	dbus_g_proxy_add_signal (view_proxy, "ContactsChanged", G_TYPE_STRV, G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal (view_proxy, "ContactsChanged", G_CALLBACK (contacts_changed_cb), view, NULL);
-	dbus_g_proxy_add_signal (view_proxy, "ContactsRemoved", G_TYPE_STRV, G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal (view_proxy, "ContactsRemoved", G_CALLBACK (contacts_removed_cb), view, NULL);
-	dbus_g_proxy_add_signal (view_proxy, "Complete", G_TYPE_UINT, G_TYPE_STRING, G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal (view_proxy, "Complete", G_CALLBACK (complete_cb), view, NULL);
+	g_object_add_weak_pointer (G_OBJECT (gdbus_bookview), (gpointer) &priv->gdbus_bookview);
+	g_signal_connect (priv->gdbus_bookview, "contacts-added", G_CALLBACK (contacts_added_cb), view);
+	g_signal_connect (priv->gdbus_bookview, "contacts-changed", G_CALLBACK (contacts_changed_cb), view);
+	g_signal_connect (priv->gdbus_bookview, "contacts-removed", G_CALLBACK (contacts_removed_cb), view);
+	g_signal_connect (priv->gdbus_bookview, "status-message", G_CALLBACK (status_message_cb), view);
+	g_signal_connect (priv->gdbus_bookview, "complete", G_CALLBACK (complete_cb), view);
 
 	return view;
 }
@@ -237,10 +225,8 @@ e_book_view_start (EBookView *book_view)
 
 	book_view->priv->running = TRUE;
 
-	if (book_view->priv->view_proxy) {
-		LOCK_CONN ();
-		org_gnome_evolution_dataserver_addressbook_BookView_start (book_view->priv->view_proxy, &error);
-		UNLOCK_CONN ();
+	if (book_view->priv->gdbus_bookview) {
+		e_gdbus_book_view_call_start_sync (book_view->priv->gdbus_bookview, NULL, &error);
 		if (error) {
 			g_warning ("Cannot start book view: %s\n", error->message);
 
@@ -271,10 +257,8 @@ e_book_view_stop (EBookView *book_view)
 
 	book_view->priv->running = FALSE;
 
-	if (book_view->priv->view_proxy) {
-		LOCK_CONN ();
-		org_gnome_evolution_dataserver_addressbook_BookView_stop (book_view->priv->view_proxy, &error);
-		UNLOCK_CONN ();
+	if (book_view->priv->gdbus_bookview) {
+		e_gdbus_book_view_call_stop_sync (book_view->priv->gdbus_bookview, NULL, &error);
 		if (error) {
 			g_warning ("Cannot stop book view: %s\n", error->message);
 			g_error_free (error);
@@ -287,9 +271,8 @@ e_book_view_init (EBookView *book_view)
 {
 	EBookViewPrivate *priv = E_BOOK_VIEW_GET_PRIVATE (book_view);
 
+	priv->gdbus_bookview = NULL;
 	priv->book = NULL;
-	priv->view_proxy = NULL;
-	priv->view_proxy_lock = NULL;
 	priv->running = FALSE;
 
 	book_view->priv = priv;
@@ -300,12 +283,17 @@ e_book_view_dispose (GObject *object)
 {
 	EBookView *book_view = E_BOOK_VIEW (object);
 
-	if (book_view->priv->view_proxy) {
-		LOCK_CONN ();
-		org_gnome_evolution_dataserver_addressbook_BookView_dispose (book_view->priv->view_proxy, NULL);
-		g_object_unref (book_view->priv->view_proxy);
-		book_view->priv->view_proxy = NULL;
-		UNLOCK_CONN ();
+	if (book_view->priv->gdbus_bookview) {
+		GError *error = NULL;
+
+		e_gdbus_book_view_call_dispose_sync (book_view->priv->gdbus_bookview, NULL, &error);
+		g_object_unref (book_view->priv->gdbus_bookview);
+		book_view->priv->gdbus_bookview = NULL;
+
+		if (error) {
+			g_warning ("Failed to dispose book view: %s", error->message);
+			g_error_free (error);
+		}
 	}
 
 	if (book_view->priv->book) {
diff --git a/addressbook/libebook/e-book.c b/addressbook/libebook/e-book.c
index cbb0350..4c6ad56 100644
--- a/addressbook/libebook/e-book.c
+++ b/addressbook/libebook/e-book.c
@@ -35,24 +35,24 @@
 #include <string.h>
 #include <glib-object.h>
 #include <glib/gi18n-lib.h>
-#include <dbus/dbus-glib.h>
-#include <dbus/dbus-glib-lowlevel.h>
 #include <libedataserver/e-data-server-util.h>
 #include "e-book.h"
 #include "e-error.h"
 #include "e-contact.h"
 #include "e-name-western.h"
 #include "e-book-view-private.h"
-#include "e-data-book-factory-bindings.h"
-#include "e-data-book-bindings.h"
-#include "libedata-book/e-data-book-types.h"
 #include "e-book-marshal.h"
 
+#include "e-gdbus-egdbusbookfactory.h"
+#include "e-gdbus-egdbusbook.h"
+#include "e-gdbus-egdbusbookview.h"
+
 #define E_DATA_BOOK_FACTORY_SERVICE_NAME "org.gnome.evolution.dataserver.AddressBook"
 
 static gchar ** flatten_stringlist(GList *list);
 static GList *array_to_stringlist (gchar **list);
-static gboolean unwrap_gerror(GError *error, GError **client_error);
+static EList *array_to_elist (gchar **list);
+static gboolean unwrap_gerror (GError *error, GError **client_error);
 
 G_DEFINE_TYPE(EBook, e_book, G_TYPE_OBJECT)
 #define E_BOOK_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), E_TYPE_BOOK, EBookPrivate))
@@ -68,9 +68,10 @@ enum {
 static guint e_book_signals [LAST_SIGNAL];
 
 struct _EBookPrivate {
+	EGdbusBook *gdbus_book;
+
 	ESource *source;
 	gchar *uri;
-	DBusGProxy *proxy;
 	gboolean loaded;
 	gboolean writable;
 	gboolean connected;
@@ -78,13 +79,10 @@ struct _EBookPrivate {
 	gboolean cap_queried;
 };
 
-static DBusGConnection *connection = NULL;
-static DBusGProxy *factory_proxy = NULL;
-
-/* guards both connection and factory_proxy */
-static GStaticRecMutex connection_lock = G_STATIC_REC_MUTEX_INIT;
-#define LOCK_CONN()   g_static_rec_mutex_lock (&connection_lock)
-#define UNLOCK_CONN() g_static_rec_mutex_unlock (&connection_lock)
+static EGdbusBookFactory *book_factory_proxy = NULL;
+static GStaticRecMutex book_factory_proxy_lock = G_STATIC_REC_MUTEX_INIT;
+#define LOCK_FACTORY()   g_static_rec_mutex_lock (&book_factory_proxy_lock)
+#define UNLOCK_FACTORY() g_static_rec_mutex_unlock (&book_factory_proxy_lock)
 
 typedef struct {
 	EBook *book;
@@ -110,19 +108,29 @@ e_book_error_quark (void)
  * Called when the addressbook server dies.
  */
 static void
-proxy_destroyed (gpointer data, GObject *object)
+gdbus_book_closed_cb (GDBusConnection *connection, gboolean remote_peer_vanished, GError *error, EBook *book)
 {
-	EBook *book = data;
+	GError *err = NULL;
 
 	g_assert (E_IS_BOOK (book));
 
-	g_warning (G_STRLOC ": e-d-s proxy died");
+	if (error)
+		unwrap_gerror (g_error_copy (error), &err);
+
+	if (err) {
+		g_debug (G_STRLOC ": EBook GDBus connection is closed%s: %s", remote_peer_vanished ? ", remote peer vanished" : "", err->message);
+		g_error_free (err);
+	}
 
 	/* Ensure that everything relevant is NULL */
-	LOCK_CONN ();
-	factory_proxy = NULL;
-	book->priv->proxy = NULL;
-	UNLOCK_CONN ();
+	LOCK_FACTORY ();
+
+	if (book->priv->gdbus_book) {
+		g_object_unref (book->priv->gdbus_book);
+		book->priv->gdbus_book = NULL;
+	}
+
+	UNLOCK_FACTORY ();
 
 	g_signal_emit (G_OBJECT (book), e_book_signals [BACKEND_DIED], 0);
 }
@@ -134,14 +142,13 @@ e_book_dispose (GObject *object)
 
 	book->priv->loaded = FALSE;
 
-	if (book->priv->proxy) {
-		g_object_weak_unref (G_OBJECT (book->priv->proxy), proxy_destroyed, book);
-		LOCK_CONN ();
-		org_gnome_evolution_dataserver_addressbook_Book_close (book->priv->proxy, NULL);
-		g_object_unref (book->priv->proxy);
-		book->priv->proxy = NULL;
-		UNLOCK_CONN ();
+	if (book->priv->gdbus_book) {
+		g_signal_handlers_disconnect_by_func (g_dbus_proxy_get_connection (G_DBUS_PROXY (book->priv->gdbus_book)), gdbus_book_closed_cb, book);
+		e_gdbus_book_call_close_sync (book->priv->gdbus_book, NULL, NULL);
+		g_object_unref (book->priv->gdbus_book);
+		book->priv->gdbus_book = NULL;
 	}
+
 	if (book->priv->source) {
 		g_object_unref (book->priv->source);
 		book->priv->source = NULL;
@@ -219,9 +226,10 @@ static void
 e_book_init (EBook *book)
 {
 	EBookPrivate *priv = E_BOOK_GET_PRIVATE (book);
+
+	priv->gdbus_book = NULL;
 	priv->source = NULL;
 	priv->uri = NULL;
-	priv->proxy = NULL;
 	priv->loaded = FALSE;
 	priv->writable = FALSE;
 	priv->connected = FALSE;
@@ -230,83 +238,60 @@ e_book_init (EBook *book)
 	book->priv = priv;
 }
 
-static DBusHandlerResult
-filter_dbus_msgs_cb (DBusConnection *pconnection, DBusMessage *message, gpointer user_data)
+static void
+book_factory_proxy_closed_cb (GDBusConnection *connection, gboolean remote_peer_vanished, GError *error, gpointer user_data)
 {
-	if (dbus_message_is_signal (message, DBUS_INTERFACE_LOCAL, "Disconnected")) {
-		DBusGConnection *conn = connection;
+	GError *err = NULL;
 
-		LOCK_CONN ();
-		factory_proxy = NULL;
-		connection = NULL;
-		UNLOCK_CONN ();
-		dbus_g_connection_unref (conn);
-		return DBUS_HANDLER_RESULT_HANDLED;
+	LOCK_FACTORY ();
+	if (book_factory_proxy) {
+		g_object_unref (book_factory_proxy);
+		book_factory_proxy = NULL;
 	}
 
-	return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-}
+	if (error)
+		unwrap_gerror (g_error_copy (error), &err);
 
-static void
-factory_proxy_destroy_cb (DBusGProxy *proxy, gpointer user_data)
-{
-	LOCK_CONN ();
-	factory_proxy = NULL;
-	UNLOCK_CONN ();
+	if (err) {
+		g_debug ("GDBus connection is closed%s: %s", remote_peer_vanished ? ", remote peer vanished" : "", err->message);
+		g_error_free (err);
+	}
+
+	UNLOCK_FACTORY ();
 }
 
 static gboolean
-e_book_activate(GError **error)
+e_book_activate (GError **error)
 {
-	DBusError derror;
+	LOCK_FACTORY ();
 
-	LOCK_CONN ();
-
-	if (G_LIKELY (factory_proxy)) {
-		UNLOCK_CONN ();
+	if (G_LIKELY (book_factory_proxy)) {
+		UNLOCK_FACTORY ();
 		return TRUE;
 	}
 
-	if (!connection) {
-		connection = dbus_g_bus_get (DBUS_BUS_SESSION, error);
-		if (!connection) {
-			UNLOCK_CONN ();
-			return FALSE;
-		}
-
-		dbus_connection_add_filter (dbus_g_connection_get_connection (connection), filter_dbus_msgs_cb, NULL, NULL);
-	}
+	book_factory_proxy = e_gdbus_book_factory_proxy_new_for_bus_sync (
+		G_BUS_TYPE_SESSION,
+		G_DBUS_PROXY_FLAGS_NONE,
+		E_DATA_BOOK_FACTORY_SERVICE_NAME,
+		"/org/gnome/evolution/dataserver/addressbook/BookFactory",
+		NULL,
+		error);
 
-	dbus_error_init (&derror);
-	if (!dbus_bus_start_service_by_name (dbus_g_connection_get_connection (connection),
-					     E_DATA_BOOK_FACTORY_SERVICE_NAME,
-					     0, NULL, &derror)) {
-		dbus_set_g_error (error, &derror);
-		dbus_error_free (&derror);
-		UNLOCK_CONN ();
+	if (!book_factory_proxy) {
+		UNLOCK_FACTORY ();
 		return FALSE;
 	}
 
-	if (!factory_proxy) {
-		factory_proxy = dbus_g_proxy_new_for_name_owner (connection,
-								 E_DATA_BOOK_FACTORY_SERVICE_NAME,
-								 "/org/gnome/evolution/dataserver/addressbook/BookFactory",
-								 "org.gnome.evolution.dataserver.addressbook.BookFactory",
-								 error);
-		if (!factory_proxy) {
-			UNLOCK_CONN ();
-			return FALSE;
-		}
+	g_signal_connect (g_dbus_proxy_get_connection (G_DBUS_PROXY (book_factory_proxy)), "closed", G_CALLBACK (book_factory_proxy_closed_cb), NULL);
 
-		g_signal_connect (factory_proxy, "destroy", G_CALLBACK (factory_proxy_destroy_cb), NULL);
-	}
+	UNLOCK_FACTORY ();
 
-	UNLOCK_CONN ();
 	return TRUE;
 }
 
 static void
-writable_cb (DBusGProxy *proxy, gboolean writable, EBook *book)
+writable_cb (EGdbusBook *object, gboolean writable, EBook *book)
 {
 	g_return_if_fail (E_IS_BOOK (book));
 
@@ -316,7 +301,7 @@ writable_cb (DBusGProxy *proxy, gboolean writable, EBook *book)
 }
 
 static void
-connection_cb (DBusGProxy *proxy, gboolean connected, EBook *book)
+connection_cb (EGdbusBook *object, gboolean connected, EBook *book)
 {
 	g_return_if_fail (E_IS_BOOK (book));
 
@@ -326,7 +311,7 @@ connection_cb (DBusGProxy *proxy, gboolean connected, EBook *book)
 }
 
 static void
-auth_required_cb (DBusGProxy *proxy, EBook *book)
+auth_required_cb (EGdbusBook *object, EBook *book)
 {
 	g_return_if_fail (E_IS_BOOK (book));
 
@@ -352,31 +337,33 @@ e_book_add_contact (EBook           *book,
 	gchar *vcard, *uid = NULL;
 
 	e_return_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 	e_return_error_if_fail (E_IS_CONTACT (contact), E_BOOK_ERROR_INVALID_ARG);
 
 	vcard = e_vcard_to_string (E_VCARD (contact), EVC_FORMAT_VCARD_30);
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_add_contact (book->priv->proxy, vcard, &uid, &err);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_add_contact_sync (book->priv->gdbus_book, vcard, &uid, NULL, &err);
 	g_free (vcard);
 	if (uid) {
 		e_contact_set (contact, E_CONTACT_UID, uid);
 		g_free (uid);
 	}
+
 	return unwrap_gerror (err, error);
 }
 
 static void
-add_contact_reply (DBusGProxy *proxy, gchar *uid, GError *error, gpointer user_data)
+add_contact_reply (GObject *gdbus_book, GAsyncResult *res, gpointer user_data)
 {
-	GError *err = NULL;
+	GError *err = NULL, *error = NULL;
+	gchar *uid = NULL;
 	AsyncData *data = user_data;
 	EBookIdExCallback excb = data->excallback;
 	#ifndef E_BOOK_DISABLE_DEPRECATED
 	EBookIdCallback cb = data->callback;
 	#endif
 
+	e_gdbus_book_call_add_contact_finish (E_GDBUS_BOOK (gdbus_book), &uid, res, &error);
+
 	unwrap_gerror (error, &err);
 
 	/* If there is an error returned the GLib bindings currently return garbage
@@ -425,7 +412,7 @@ e_book_async_add_contact (EBook                 *book,
 	AsyncData *data;
 
 	e_return_async_error_val_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_async_error_val_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_async_error_val_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 	e_return_async_error_val_if_fail (E_IS_CONTACT (contact), E_BOOK_ERROR_INVALID_ARG);
 
 	vcard = e_vcard_to_string (E_VCARD (contact), EVC_FORMAT_VCARD_30);
@@ -435,10 +422,10 @@ e_book_async_add_contact (EBook                 *book,
 	data->callback = cb;
 	data->closure = closure;
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_add_contact_async (book->priv->proxy, vcard, add_contact_reply, data);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_add_contact (book->priv->gdbus_book, vcard, NULL, add_contact_reply, data);
+
 	g_free (vcard);
+
 	return 0;
 }
 #endif
@@ -466,7 +453,7 @@ e_book_async_add_contact_ex (EBook              *book,
 	AsyncData *data;
 
 	e_return_ex_async_error_val_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_ex_async_error_val_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_ex_async_error_val_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 	e_return_ex_async_error_val_if_fail (E_IS_CONTACT (contact), E_BOOK_ERROR_INVALID_ARG);
 
 	vcard = e_vcard_to_string (E_VCARD (contact), EVC_FORMAT_VCARD_30);
@@ -476,9 +463,8 @@ e_book_async_add_contact_ex (EBook              *book,
 	data->excallback = cb;
 	data->closure = closure;
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_add_contact_async (book->priv->proxy, vcard, add_contact_reply, data);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_add_contact (book->priv->gdbus_book, vcard, NULL, add_contact_reply, data);
+
 	g_free (vcard);
 
 	return TRUE;
@@ -504,27 +490,28 @@ e_book_commit_contact (EBook           *book,
 	gchar *vcard;
 
 	e_return_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 	e_return_error_if_fail (E_IS_CONTACT (contact), E_BOOK_ERROR_INVALID_ARG);
 
 	vcard = e_vcard_to_string (E_VCARD (contact), EVC_FORMAT_VCARD_30);
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_modify_contact (book->priv->proxy, vcard, &err);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_modify_contact_sync (book->priv->gdbus_book, vcard, NULL, &err);
 	g_free (vcard);
+
 	return unwrap_gerror (err, error);
 }
 
 static void
-modify_contact_reply (DBusGProxy *proxy, GError *error, gpointer user_data)
+modify_contact_reply (GObject *gdbus_book, GAsyncResult *res, gpointer user_data)
 {
-	GError *err = NULL;
+	GError *err = NULL, *error = NULL;
 	AsyncData *data = user_data;
 	EBookExCallback excb = data->excallback;
 	#ifndef E_BOOK_DISABLE_DEPRECATED
 	EBookCallback cb = data->callback;
 	#endif
 
+	e_gdbus_book_call_modify_contact_finish (E_GDBUS_BOOK (gdbus_book), res, &error);
+
 	unwrap_gerror (error, &err);
 
 	#ifndef E_BOOK_DISABLE_DEPRECATED
@@ -537,6 +524,7 @@ modify_contact_reply (DBusGProxy *proxy, GError *error, gpointer user_data)
 
 	if (err)
 		g_error_free (err);
+
 	g_object_unref (data->book);
 	g_slice_free (AsyncData, data);
 }
@@ -566,7 +554,7 @@ e_book_async_commit_contact (EBook                 *book,
 	AsyncData *data;
 
 	e_return_async_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_async_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_async_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 	e_return_async_error_if_fail (E_IS_CONTACT (contact), E_BOOK_ERROR_INVALID_ARG);
 
 	vcard = e_vcard_to_string (E_VCARD (contact), EVC_FORMAT_VCARD_30);
@@ -576,10 +564,10 @@ e_book_async_commit_contact (EBook                 *book,
 	data->callback = cb;
 	data->closure = closure;
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_modify_contact_async (book->priv->proxy, vcard, modify_contact_reply, data);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_modify_contact (book->priv->gdbus_book, vcard, NULL, modify_contact_reply, data);
+
 	g_free (vcard);
+
 	return 0;
 }
 #endif
@@ -608,7 +596,7 @@ e_book_async_commit_contact_ex (EBook                 *book,
 	AsyncData *data;
 
 	e_return_ex_async_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_ex_async_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_ex_async_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 	e_return_ex_async_error_if_fail (E_IS_CONTACT (contact), E_BOOK_ERROR_INVALID_ARG);
 
 	vcard = e_vcard_to_string (E_VCARD (contact), EVC_FORMAT_VCARD_30);
@@ -618,9 +606,8 @@ e_book_async_commit_contact_ex (EBook                 *book,
 	data->excallback = cb;
 	data->closure = closure;
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_modify_contact_async (book->priv->proxy, vcard, modify_contact_reply, data);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_modify_contact (book->priv->gdbus_book, vcard, NULL, modify_contact_reply, data);
+
 	g_free (vcard);
 
 	return TRUE;
@@ -648,13 +635,13 @@ e_book_get_required_fields  (EBook            *book,
 	gchar **list = NULL;
 
 	e_return_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+
+	e_gdbus_book_call_get_required_fields_sync (book->priv->gdbus_book, &list, NULL, &err);
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_get_required_fields (book->priv->proxy, &list, &err);
-	UNLOCK_CONN ();
 	if (list) {
 		*fields = array_to_stringlist (list);
+		g_strfreev (list);
 		return TRUE;
 	} else {
 		return unwrap_gerror (err, error);
@@ -662,22 +649,20 @@ e_book_get_required_fields  (EBook            *book,
 }
 
 static void
-get_required_fields_reply(DBusGProxy *proxy, gchar **fields, GError *error, gpointer user_data)
+get_required_fields_reply (GObject *gdbus_book, GAsyncResult *res, gpointer user_data)
 {
-	GError *err = NULL;
+	gchar **fields = NULL;
+	GError *err = NULL, *error = NULL;
 	AsyncData *data = user_data;
 	EBookEListExCallback excb = data->excallback;
 	#ifndef E_BOOK_DISABLE_DEPRECATED
 	EBookEListCallback cb = data->callback;
 	#endif
-	gchar **i = fields;
-	EList *efields = e_list_new (NULL,
-				     (EListFreeFunc) g_free,
-				     NULL);
+	EList *efields = NULL;
 
-	while (*i != NULL) {
-		e_list_append (efields, (*i++));
-	}
+	e_gdbus_book_call_get_required_fields_finish (E_GDBUS_BOOK (gdbus_book), &fields, res, &error);
+
+	efields = array_to_elist (fields);
 
 	unwrap_gerror (error, &err);
 
@@ -692,7 +677,7 @@ get_required_fields_reply(DBusGProxy *proxy, gchar **fields, GError *error, gpoi
 		g_error_free (err);
 
 	g_object_unref (efields);
-	g_free (fields);
+	g_strfreev (fields);
 	g_object_unref (data->book);
 	g_slice_free (AsyncData, data);
 }
@@ -719,16 +704,15 @@ e_book_async_get_required_fields (EBook              *book,
 	AsyncData *data;
 
 	e_return_async_error_val_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_async_error_val_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_async_error_val_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 
 	data = g_slice_new0 (AsyncData);
 	data->book = g_object_ref (book);
 	data->callback = cb;
 	data->closure = closure;
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_get_required_fields_async (book->priv->proxy, get_required_fields_reply, data);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_get_required_fields (book->priv->gdbus_book, NULL, get_required_fields_reply, data);
+
 	return 0;
 }
 #endif
@@ -754,16 +738,14 @@ e_book_async_get_required_fields_ex (EBook               *book,
 	AsyncData *data;
 
 	e_return_ex_async_error_val_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_ex_async_error_val_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_ex_async_error_val_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 
 	data = g_slice_new0 (AsyncData);
 	data->book = g_object_ref (book);
 	data->excallback = cb;
 	data->closure = closure;
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_get_required_fields_async (book->priv->proxy, get_required_fields_reply, data);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_get_required_fields (book->priv->gdbus_book, NULL, get_required_fields_reply, data);
 
 	return TRUE;
 }
@@ -790,13 +772,13 @@ e_book_get_supported_fields  (EBook            *book,
 	gchar **list = NULL;
 
 	e_return_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+
+	e_gdbus_book_call_get_supported_fields_sync (book->priv->gdbus_book, &list, NULL, &err);
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_get_supported_fields (book->priv->proxy, &list, &err);
-	UNLOCK_CONN ();
 	if (list) {
 		*fields = array_to_stringlist (list);
+		g_strfreev (list);
 		return TRUE;
 	} else {
 		return unwrap_gerror (err, error);
@@ -804,20 +786,20 @@ e_book_get_supported_fields  (EBook            *book,
 }
 
 static void
-get_supported_fields_reply(DBusGProxy *proxy, gchar **fields, GError *error, gpointer user_data)
+get_supported_fields_reply (GObject *gdbus_book, GAsyncResult *res, gpointer user_data)
 {
-	GError *err = NULL;
+	gchar **fields = NULL;
+	GError *err = NULL, *error = NULL;
 	AsyncData *data = user_data;
 	EBookEListExCallback excb = data->excallback;
 	#ifndef E_BOOK_DISABLE_DEPRECATED
 	EBookEListCallback cb = data->callback;
 	#endif
-	gchar **i = fields;
-	EList *efields = e_list_new (NULL,  (EListFreeFunc) g_free, NULL);
+	EList *efields;
 
-	while (*i != NULL) {
-		e_list_append (efields, (*i++));
-	}
+	e_gdbus_book_call_get_supported_fields_finish (E_GDBUS_BOOK (gdbus_book), &fields, res, &error);
+
+	efields = array_to_elist (fields);
 
 	unwrap_gerror (error, &err);
 
@@ -832,8 +814,7 @@ get_supported_fields_reply(DBusGProxy *proxy, gchar **fields, GError *error, gpo
 		g_error_free (err);
 
 	g_object_unref (efields);
-	g_free (fields);
-
+	g_strfreev (fields);
 	g_object_unref (data->book);
 	g_slice_free (AsyncData, data);
 }
@@ -861,16 +842,14 @@ e_book_async_get_supported_fields (EBook              *book,
 	AsyncData *data;
 
 	e_return_async_error_val_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_async_error_val_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_async_error_val_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 
 	data = g_slice_new0 (AsyncData);
 	data->book = g_object_ref (book);
 	data->callback = cb;
 	data->closure = closure;
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_get_supported_fields_async (book->priv->proxy, get_supported_fields_reply, data);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_get_supported_fields (book->priv->gdbus_book, NULL, get_supported_fields_reply, data);
 
 	return 0;
 }
@@ -898,16 +877,14 @@ e_book_async_get_supported_fields_ex (EBook               *book,
 	AsyncData *data;
 
 	e_return_ex_async_error_val_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_ex_async_error_val_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_ex_async_error_val_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 
 	data = g_slice_new0 (AsyncData);
 	data->book = g_object_ref (book);
 	data->excallback = cb;
 	data->closure = closure;
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_get_supported_fields_async (book->priv->proxy, get_supported_fields_reply, data);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_get_supported_fields (book->priv->gdbus_book, NULL, get_supported_fields_reply, data);
 
 	return TRUE;
 }
@@ -933,13 +910,13 @@ e_book_get_supported_auth_methods (EBook            *book,
 	gchar **list = NULL;
 
 	e_return_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+
+	e_gdbus_book_call_get_supported_auth_methods_sync (book->priv->gdbus_book, &list, NULL, &err);
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_get_supported_auth_methods (book->priv->proxy, &list, &err);
-	UNLOCK_CONN ();
 	if (list) {
 		*auth_methods = array_to_stringlist (list);
+		g_strfreev (list);
 		return TRUE;
 	} else {
 		return unwrap_gerror (err, error);
@@ -947,22 +924,20 @@ e_book_get_supported_auth_methods (EBook            *book,
 }
 
 static void
-get_supported_auth_methods_reply(DBusGProxy *proxy, gchar **methods, GError *error, gpointer user_data)
+get_supported_auth_methods_reply (GObject *gdbus_book, GAsyncResult *res, gpointer user_data)
 {
-	GError *err = NULL;
+	gchar **methods = NULL;
+	GError *err = NULL, *error = NULL;
 	AsyncData *data = user_data;
 	EBookEListExCallback excb = data->excallback;
 	#ifndef E_BOOK_DISABLE_DEPRECATED
 	EBookEListCallback cb = data->callback;
 	#endif
-	gchar **i = methods;
-	EList *emethods = e_list_new (NULL,
-				      (EListFreeFunc) g_free,
-				      NULL);
+	EList *emethods;
 
-	while (*i != NULL) {
-		e_list_append (emethods, (*i++));
-	}
+	e_gdbus_book_call_get_supported_auth_methods_finish (E_GDBUS_BOOK (gdbus_book), &methods, res, &error);
+
+	emethods = array_to_elist (methods);
 
 	unwrap_gerror (error, &err);
 
@@ -977,8 +952,7 @@ get_supported_auth_methods_reply(DBusGProxy *proxy, gchar **methods, GError *err
 		g_error_free (err);
 
 	g_object_unref (emethods);
-	g_free (methods);
-
+	g_strfreev (methods);
 	g_object_unref (data->book);
 	g_slice_free (AsyncData, data);
 }
@@ -1005,16 +979,14 @@ e_book_async_get_supported_auth_methods (EBook              *book,
 	AsyncData *data;
 
 	e_return_async_error_val_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_async_error_val_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_async_error_val_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 
 	data = g_slice_new0 (AsyncData);
 	data->book = g_object_ref (book);
 	data->callback = cb;
 	data->closure = closure;
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_get_supported_auth_methods_async (book->priv->proxy, get_supported_auth_methods_reply, data);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_get_supported_auth_methods (book->priv->gdbus_book, NULL, get_supported_auth_methods_reply, data);
 
 	return 0;
 }
@@ -1041,16 +1013,14 @@ e_book_async_get_supported_auth_methods_ex (EBook               *book,
 	AsyncData *data;
 
 	e_return_ex_async_error_val_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_ex_async_error_val_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_ex_async_error_val_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 
 	data = g_slice_new0 (AsyncData);
 	data->book = g_object_ref (book);
 	data->excallback = cb;
 	data->closure = closure;
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_get_supported_auth_methods_async (book->priv->proxy, get_supported_auth_methods_reply, data);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_get_supported_auth_methods (book->priv->gdbus_book, NULL, get_supported_auth_methods_reply, data);
 
 	return TRUE;
 }
@@ -1079,25 +1049,25 @@ e_book_authenticate_user (EBook         *book,
 	GError *err = NULL;
 
 	e_return_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_authenticate_user (book->priv->proxy, user, passwd, auth_method, &err);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_authenticate_user_sync (book->priv->gdbus_book, user, passwd, auth_method, NULL, &err);
 
 	return unwrap_gerror (err, error);
 }
 
 static void
-authenticate_user_reply(DBusGProxy *proxy, GError *error, gpointer user_data)
+authenticate_user_reply (GObject *gdbus_book, GAsyncResult *res, gpointer user_data)
 {
-	GError *err = NULL;
+	GError *err = NULL, *error = NULL;
 	AsyncData *data = user_data;
 	EBookExCallback excb = data->excallback;
 	#ifndef E_BOOK_DISABLE_DEPRECATED
 	EBookCallback cb = data->callback;
 	#endif
 
+	e_gdbus_book_call_authenticate_user_finish (E_GDBUS_BOOK (gdbus_book), res, &error);
+
 	unwrap_gerror (error, &err);
 
 	#ifndef E_BOOK_DISABLE_DEPRECATED
@@ -1144,7 +1114,7 @@ e_book_async_authenticate_user (EBook                 *book,
 	AsyncData *data;
 
 	e_return_async_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_async_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_async_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 	e_return_async_error_if_fail (user, E_BOOK_ERROR_INVALID_ARG);
 	e_return_async_error_if_fail (passwd, E_BOOK_ERROR_INVALID_ARG);
 	e_return_async_error_if_fail (auth_method, E_BOOK_ERROR_INVALID_ARG);
@@ -1154,9 +1124,7 @@ e_book_async_authenticate_user (EBook                 *book,
 	data->callback = cb;
 	data->closure = closure;
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_authenticate_user_async (book->priv->proxy, user, passwd, auth_method, authenticate_user_reply, data);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_authenticate_user (book->priv->gdbus_book, user, passwd, auth_method, NULL, authenticate_user_reply, data);
 
 	return 0;
 }
@@ -1191,7 +1159,7 @@ e_book_async_authenticate_user_ex (EBook                 *book,
 	AsyncData *data;
 
 	e_return_ex_async_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_ex_async_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_ex_async_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 	e_return_ex_async_error_if_fail (user, E_BOOK_ERROR_INVALID_ARG);
 	e_return_ex_async_error_if_fail (passwd, E_BOOK_ERROR_INVALID_ARG);
 	e_return_ex_async_error_if_fail (auth_method, E_BOOK_ERROR_INVALID_ARG);
@@ -1201,9 +1169,7 @@ e_book_async_authenticate_user_ex (EBook                 *book,
 	data->excallback = cb;
 	data->closure = closure;
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_authenticate_user_async (book->priv->proxy, user, passwd, auth_method, authenticate_user_reply, data);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_authenticate_user (book->priv->gdbus_book, user, passwd, auth_method, NULL, authenticate_user_reply, data);
 
 	return TRUE;
 }
@@ -1230,29 +1196,31 @@ e_book_get_contact (EBook       *book,
 	gchar *vcard = NULL;
 
 	e_return_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_get_contact (book->priv->proxy, id, &vcard, &err);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_get_contact_sync (book->priv->gdbus_book, id, &vcard, NULL, &err);
 
 	if (vcard) {
 		*contact = e_contact_new_from_vcard (vcard);
 		g_free (vcard);
 	}
+
 	return unwrap_gerror (err, error);
 }
 
 static void
-get_contact_reply(DBusGProxy *proxy, gchar *vcard, GError *error, gpointer user_data)
+get_contact_reply (GObject *gdbus_book, GAsyncResult *res, gpointer user_data)
 {
-	GError *err = NULL;
+	gchar *vcard = NULL;
+	GError *err = NULL, *error = NULL;
 	AsyncData *data = user_data;
 	EBookContactExCallback excb = data->excallback;
 	#ifndef E_BOOK_DISABLE_DEPRECATED
 	EBookContactCallback cb = data->callback;
 	#endif
 
+	e_gdbus_book_call_get_contact_finish (E_GDBUS_BOOK (gdbus_book), &vcard, res, &error);
+
 	unwrap_gerror (error, &err);
 
 	/* Protect against garbage return values on error */
@@ -1268,6 +1236,7 @@ get_contact_reply(DBusGProxy *proxy, gchar *vcard, GError *error, gpointer user_
 
 	if (err)
 		g_error_free (err);
+
 	g_free (vcard);
 	g_object_unref (data->book);
 	g_slice_free (AsyncData, data);
@@ -1296,7 +1265,7 @@ e_book_async_get_contact (EBook                 *book,
 	AsyncData *data;
 
 	e_return_async_error_val_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_async_error_val_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_async_error_val_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 	e_return_async_error_val_if_fail (id, E_BOOK_ERROR_INVALID_ARG);
 
 	data = g_slice_new0 (AsyncData);
@@ -1304,9 +1273,7 @@ e_book_async_get_contact (EBook                 *book,
 	data->callback = cb;
 	data->closure = closure;
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_get_contact_async (book->priv->proxy, id, get_contact_reply, data);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_get_contact (book->priv->gdbus_book, id, NULL, get_contact_reply, data);
 
 	return 0;
 }
@@ -1334,7 +1301,7 @@ e_book_async_get_contact_ex (EBook                 *book,
 	AsyncData *data;
 
 	e_return_ex_async_error_val_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_ex_async_error_val_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_ex_async_error_val_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 	e_return_ex_async_error_val_if_fail (id, E_BOOK_ERROR_INVALID_ARG);
 
 	data = g_slice_new0 (AsyncData);
@@ -1342,9 +1309,7 @@ e_book_async_get_contact_ex (EBook                 *book,
 	data->excallback = cb;
 	data->closure = closure;
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_get_contact_async (book->priv->proxy, id, get_contact_reply, data);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_get_contact (book->priv->gdbus_book, id, NULL, get_contact_reply, data);
 
 	return TRUE;
 }
@@ -1368,29 +1333,29 @@ e_book_remove_contact (EBook       *book,
 	const gchar *l[2];
 
 	e_return_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 	e_return_error_if_fail (id, E_BOOK_ERROR_INVALID_ARG);
 
 	l[0] = id;
 	l[1] = NULL;
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_remove_contacts (book->priv->proxy, l, &err);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_remove_contacts_sync (book->priv->gdbus_book, (const gchar * const *) l, NULL, &err);
 
 	return unwrap_gerror (err, error);
 }
 
 static void
-remove_contact_reply (DBusGProxy *proxy, GError *error, gpointer user_data)
+remove_contact_reply (GObject *gdbus_book, GAsyncResult *res, gpointer user_data)
 {
-	GError *err = NULL;
+	GError *err = NULL, *error = NULL;
 	AsyncData *data = user_data;
 	EBookExCallback excb = data->excallback;
 	#ifndef E_BOOK_DISABLE_DEPRECATED
 	EBookCallback cb = data->callback;
 	#endif
 
+	e_gdbus_book_call_remove_contacts_finish (E_GDBUS_BOOK (gdbus_book), res, &error);
+
 	unwrap_gerror (error, &err);
 
 	#ifndef E_BOOK_DISABLE_DEPRECATED
@@ -1429,14 +1394,12 @@ e_book_remove_contacts (EBook    *book,
 	gchar **l;
 
 	e_return_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 	e_return_error_if_fail (ids, E_BOOK_ERROR_INVALID_ARG);
 
 	l = flatten_stringlist (ids);
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_remove_contacts (book->priv->proxy, (const gchar **) l, &err);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_remove_contacts_sync (book->priv->gdbus_book, (const gchar * const *) l, NULL, &err);
 
 	g_free (l);
 
@@ -1467,7 +1430,7 @@ e_book_async_remove_contact (EBook                 *book,
 	const gchar *l[2];
 
 	e_return_async_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_async_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_async_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 	e_return_async_error_if_fail (E_IS_CONTACT (contact), E_BOOK_ERROR_INVALID_ARG);
 
 	l[0] = e_contact_get_const (contact, E_CONTACT_UID);
@@ -1478,9 +1441,7 @@ e_book_async_remove_contact (EBook                 *book,
 	data->callback = cb;
 	data->closure = closure;
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_remove_contacts_async (book->priv->proxy, l, remove_contact_reply, data);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_remove_contacts (book->priv->gdbus_book, (const gchar * const *) l, NULL, remove_contact_reply, data);
 
 	return 0;
 }
@@ -1509,7 +1470,7 @@ e_book_async_remove_contact_ex (EBook                 *book,
 	const gchar *l[2];
 
 	e_return_ex_async_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_ex_async_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_ex_async_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 	e_return_ex_async_error_if_fail (E_IS_CONTACT (contact), E_BOOK_ERROR_INVALID_ARG);
 
 	l[0] = e_contact_get_const (contact, E_CONTACT_UID);
@@ -1520,23 +1481,23 @@ e_book_async_remove_contact_ex (EBook                 *book,
 	data->excallback = cb;
 	data->closure = closure;
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_remove_contacts_async (book->priv->proxy, l, remove_contact_reply, data);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_remove_contacts (book->priv->gdbus_book, (const gchar * const *) l, NULL, remove_contact_reply, data);
 
 	return TRUE;
 }
 
 static void
-remove_contact_by_id_reply (DBusGProxy *proxy, GError *error, gpointer user_data)
+remove_contact_by_id_reply (GObject *gdbus_book, GAsyncResult *res, gpointer user_data)
 {
-	GError *err = NULL;
+	GError *err = NULL, *error = NULL;
 	AsyncData *data = user_data;
 	EBookExCallback excb = data->excallback;
 	#ifndef E_BOOK_DISABLE_DEPRECATED
 	EBookCallback cb = data->callback;
 	#endif
 
+	e_gdbus_book_call_remove_contacts_finish (E_GDBUS_BOOK (gdbus_book), res, &error);
+
 	unwrap_gerror (error, &err);
 
 	#ifndef E_BOOK_DISABLE_DEPRECATED
@@ -1577,7 +1538,7 @@ e_book_async_remove_contact_by_id (EBook                 *book,
 	const gchar *l[2];
 
 	e_return_async_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_async_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_async_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 	e_return_async_error_if_fail (id, E_BOOK_ERROR_INVALID_ARG);
 
 	l[0] = id;
@@ -1588,9 +1549,7 @@ e_book_async_remove_contact_by_id (EBook                 *book,
 	data->callback = cb;
 	data->closure = closure;
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_remove_contacts_async (book->priv->proxy, l, remove_contact_by_id_reply, data);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_remove_contacts (book->priv->gdbus_book, (const gchar * const *) l, NULL, remove_contact_by_id_reply, data);
 
 	return 0;
 }
@@ -1619,7 +1578,7 @@ e_book_async_remove_contact_by_id_ex (EBook                 *book,
 	const gchar *l[2];
 
 	e_return_ex_async_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_ex_async_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_ex_async_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 	e_return_ex_async_error_if_fail (id, E_BOOK_ERROR_INVALID_ARG);
 
 	l[0] = id;
@@ -1630,23 +1589,23 @@ e_book_async_remove_contact_by_id_ex (EBook                 *book,
 	data->excallback = cb;
 	data->closure = closure;
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_remove_contacts_async (book->priv->proxy, l, remove_contact_by_id_reply, data);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_remove_contacts (book->priv->gdbus_book, (const gchar * const *) l, NULL, remove_contact_by_id_reply, data);
 
 	return TRUE;
 }
 
 static void
-remove_contacts_reply (DBusGProxy *proxy, GError *error, gpointer user_data)
+remove_contacts_reply (GObject *gdbus_book, GAsyncResult *res, gpointer user_data)
 {
-	GError *err = NULL;
+	GError *err = NULL, *error = NULL;
 	AsyncData *data = user_data;
 	EBookExCallback excb = data->excallback;
 	#ifndef E_BOOK_DISABLE_DEPRECATED
 	EBookCallback cb = data->callback;
 	#endif
 
+	e_gdbus_book_call_remove_contacts_finish (E_GDBUS_BOOK (gdbus_book), res, &error);
+
 	unwrap_gerror (error, &err);
 
 	#ifndef E_BOOK_DISABLE_DEPRECATED
@@ -1690,7 +1649,7 @@ e_book_async_remove_contacts (EBook                 *book,
 	gchar **l;
 
 	e_return_async_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_async_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_async_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 
 	if (ids == NULL) {
 		if (cb)
@@ -1705,9 +1664,7 @@ e_book_async_remove_contacts (EBook                 *book,
 	data->callback = cb;
 	data->closure = closure;
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_remove_contacts_async (book->priv->proxy, (const gchar **) l, remove_contacts_reply, data);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_remove_contacts (book->priv->gdbus_book, (const gchar * const *) l, NULL, remove_contacts_reply, data);
 
 	g_free (l);
 
@@ -1741,7 +1698,7 @@ e_book_async_remove_contacts_ex (EBook                 *book,
 	gchar **l;
 
 	e_return_ex_async_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_ex_async_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_ex_async_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 
 	if (ids == NULL) {
 		if (cb)
@@ -1756,9 +1713,7 @@ e_book_async_remove_contacts_ex (EBook                 *book,
 	data->excallback = cb;
 	data->closure = closure;
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_remove_contacts_async (book->priv->proxy, (const gchar **) l, remove_contacts_reply, data);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_remove_contacts (book->priv->gdbus_book, (const gchar *const *) l, NULL, remove_contacts_reply, data);
 
 	g_free (l);
 
@@ -1789,29 +1744,31 @@ e_book_get_book_view (EBook       *book,
 		      GError     **error)
 {
 	GError *err = NULL;
-	DBusGProxy *view_proxy;
+	EGdbusBookView *gdbus_bookview;
 	gchar *sexp, *view_path;
 	gboolean ret = TRUE;
 
 	e_return_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 
 	sexp = e_book_query_to_string (query);
 
-	LOCK_CONN ();
-	if (!org_gnome_evolution_dataserver_addressbook_Book_get_book_view (book->priv->proxy, sexp, max_results, &view_path, &err)) {
-		UNLOCK_CONN ();
+	if (!e_gdbus_book_call_get_book_view_sync (book->priv->gdbus_book, sexp, max_results, &view_path, NULL, &err)) {
 		*book_view = NULL;
 		g_free (sexp);
+
 		return unwrap_gerror (err, error);
 	}
-	view_proxy = dbus_g_proxy_new_for_name_owner (connection,
-						      E_DATA_BOOK_FACTORY_SERVICE_NAME, view_path,
-						      "org.gnome.evolution.dataserver.addressbook.BookView", error);
-	UNLOCK_CONN ();
 
-	if (view_proxy) {
-		*book_view = _e_book_view_new (book, view_proxy, &connection_lock);
+	gdbus_bookview = e_gdbus_book_view_proxy_new_sync (g_dbus_proxy_get_connection (G_DBUS_PROXY (book_factory_proxy)),
+							G_DBUS_PROXY_FLAGS_NONE,
+							E_DATA_BOOK_FACTORY_SERVICE_NAME,
+							view_path,
+							NULL,
+							error);
+
+	if (gdbus_bookview) {
+		*book_view = _e_book_view_new (book, gdbus_bookview);
 	} else {
 		*book_view = NULL;
 		g_set_error (error, E_BOOK_ERROR, E_BOOK_ERROR_DBUS_EXCEPTION,
@@ -1826,34 +1783,34 @@ e_book_get_book_view (EBook       *book,
 }
 
 static void
-get_book_view_reply (DBusGProxy *proxy, gchar *view_path, GError *error, gpointer user_data)
+get_book_view_reply (GObject *gdbus_book, GAsyncResult *res, gpointer user_data)
 {
+	gchar *view_path = NULL;
+	GError *err = NULL, *error = NULL;
 	AsyncData *data = user_data;
-	GError *err = NULL;
 	EBookView *view = NULL;
 	EBookBookViewExCallback excb = data->excallback;
 	#ifndef E_BOOK_DISABLE_DEPRECATED
 	EBookBookViewCallback cb = data->callback;
 	#endif
-	DBusGProxy *view_proxy;
+	EGdbusBookView *gdbus_bookview;
+
+	e_gdbus_book_call_get_book_view_finish (E_GDBUS_BOOK (gdbus_book), &view_path, res, &error);
 
 	if (view_path) {
-		GError *dbus_error = NULL;
-
-		LOCK_CONN ();
-		view_proxy = dbus_g_proxy_new_for_name_owner (connection, E_DATA_BOOK_FACTORY_SERVICE_NAME, view_path,
-							      "org.gnome.evolution.dataserver.addressbook.BookView", &dbus_error);
-		UNLOCK_CONN ();
-		if (view_proxy) {
-			view = _e_book_view_new (data->book, view_proxy, &connection_lock);
-		} else {
-			unwrap_gerror (dbus_error, &err);
-			g_error_free (dbus_error);
+		gdbus_bookview = e_gdbus_book_view_proxy_new_sync (g_dbus_proxy_get_connection (G_DBUS_PROXY (book_factory_proxy)),
+							G_DBUS_PROXY_FLAGS_NONE,
+							E_DATA_BOOK_FACTORY_SERVICE_NAME,
+							view_path,
+							NULL,
+							&error);
+		if (gdbus_bookview) {
+			view = _e_book_view_new (data->book, gdbus_bookview);
 		}
-	} else {
-		unwrap_gerror (error, &err);
 	}
 
+	unwrap_gerror (error, &err);
+
 	#ifndef E_BOOK_DISABLE_DEPRECATED
 	if (cb)
 		cb (data->book, err ? err->code : E_BOOK_ERROR_OK, view, data->closure);
@@ -1863,6 +1820,7 @@ get_book_view_reply (DBusGProxy *proxy, gchar *view_path, GError *error, gpointe
 
 	if (err)
 		g_error_free (err);
+
 	g_object_unref (data->book);
 	g_slice_free (AsyncData, data);
 }
@@ -1896,7 +1854,7 @@ e_book_async_get_book_view (EBook                 *book,
 	gchar *sexp;
 
 	e_return_async_error_val_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_async_error_val_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_async_error_val_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 	e_return_async_error_val_if_fail (query, E_BOOK_ERROR_INVALID_ARG);
 
 	data = g_slice_new0 (AsyncData);
@@ -1906,9 +1864,7 @@ e_book_async_get_book_view (EBook                 *book,
 
 	sexp = e_book_query_to_string (query);
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_get_book_view_async (book->priv->proxy, sexp, max_results, get_book_view_reply, data);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_get_book_view (book->priv->gdbus_book, sexp, max_results, NULL, get_book_view_reply, data);
 
 	g_free (sexp);
 	return 0;
@@ -1943,7 +1899,7 @@ e_book_async_get_book_view_ex (EBook                  *book,
 	gchar *sexp;
 
 	e_return_ex_async_error_val_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_ex_async_error_val_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_ex_async_error_val_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 	e_return_ex_async_error_val_if_fail (query, E_BOOK_ERROR_INVALID_ARG);
 
 	data = g_slice_new0 (AsyncData);
@@ -1953,11 +1909,10 @@ e_book_async_get_book_view_ex (EBook                  *book,
 
 	sexp = e_book_query_to_string (query);
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_get_book_view_async (book->priv->proxy, sexp, max_results, get_book_view_reply, data);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_get_book_view (book->priv->gdbus_book, sexp, max_results, NULL, get_book_view_reply, data);
 
 	g_free (sexp);
+
 	return TRUE;
 }
 
@@ -1984,13 +1939,14 @@ e_book_get_contacts (EBook       *book,
 	gchar *sexp;
 
 	e_return_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 
 	sexp = e_book_query_to_string (query);
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_get_contact_list (book->priv->proxy, sexp, &list, &err);
-	UNLOCK_CONN ();
+
+	e_gdbus_book_call_get_contact_list_sync (book->priv->gdbus_book, sexp, &list, NULL, &err);
+
 	g_free (sexp);
+
 	if (!err) {
 		GList *l = NULL;
 		gchar **i = list;
@@ -2006,9 +1962,10 @@ e_book_get_contacts (EBook       *book,
 }
 
 static void
-get_contacts_reply(DBusGProxy *proxy, gchar **vcards, GError *error, gpointer user_data)
+get_contacts_reply (GObject *gdbus_book, GAsyncResult *res, gpointer user_data)
 {
-	GError *err = NULL;
+	gchar **vcards = NULL;
+	GError *err = NULL, *error = NULL;
 	AsyncData *data = user_data;
 	GList *list = NULL;
 	EBookListExCallback excb = data->excallback;
@@ -2016,6 +1973,8 @@ get_contacts_reply(DBusGProxy *proxy, gchar **vcards, GError *error, gpointer us
 	EBookListCallback cb = data->callback;
 	#endif
 
+	e_gdbus_book_call_get_contact_list_finish (E_GDBUS_BOOK (gdbus_book), &vcards, res, &error);
+
 	unwrap_gerror (error, &err);
 
 	if (!error && vcards) {
@@ -2069,7 +2028,7 @@ e_book_async_get_contacts (EBook             *book,
 	gchar *sexp;
 
 	e_return_async_error_val_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_async_error_val_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_async_error_val_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 	e_return_async_error_val_if_fail (query, E_BOOK_ERROR_INVALID_ARG);
 
 	sexp = e_book_query_to_string (query);
@@ -2079,10 +2038,10 @@ e_book_async_get_contacts (EBook             *book,
 	data->callback = cb;
 	data->closure = closure;
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_get_contact_list_async (book->priv->proxy, sexp, get_contacts_reply, data);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_get_contact_list (book->priv->gdbus_book, sexp, NULL, get_contacts_reply, data);
+
 	g_free (sexp);
+
 	return 0;
 }
 #endif
@@ -2110,7 +2069,7 @@ e_book_async_get_contacts_ex (EBook              *book,
 	gchar *sexp;
 
 	e_return_ex_async_error_val_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_ex_async_error_val_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_ex_async_error_val_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 	e_return_ex_async_error_val_if_fail (query, E_BOOK_ERROR_INVALID_ARG);
 
 	sexp = e_book_query_to_string (query);
@@ -2120,40 +2079,41 @@ e_book_async_get_contacts_ex (EBook              *book,
 	data->excallback = cb;
 	data->closure = closure;
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_get_contact_list_async (book->priv->proxy, sexp, get_contacts_reply, data);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_get_contact_list (book->priv->gdbus_book, sexp, NULL, get_contacts_reply, data);
+
 	g_free (sexp);
 
 	return TRUE;
 }
 
 static GList *
-parse_changes_array (GPtrArray *array)
+parse_changes_array (GVariant *var_changes)
 {
 	GList *l = NULL;
-	gint i;
+	GVariantIter iter;
+	guint32 val_uint;
+	gchar *val_str;
 
-	if (array == NULL)
+	if (var_changes == NULL)
 		return NULL;
 
-	for (i = 0; i < array->len; i++) {
+	g_variant_iter_init (&iter, var_changes);
+	while (g_variant_iter_next (&iter, "(us)", &val_uint, &val_str)) {
 		EBookChange *change;
-		GValueArray *vals;
 
-		vals = g_ptr_array_index (array, i);
+		if (val_uint ==  (guint32) -1 || !val_str || !*val_str) {
+			/* skip empty values */
+		} else {
+			change = g_slice_new (EBookChange);
+			change->change_type = val_uint;
+			change->contact = e_contact_new_from_vcard (val_str);
 
-		change = g_slice_new (EBookChange);
-		change->change_type = g_value_get_uint (g_value_array_get_nth (vals, 0));
-		change->contact = e_contact_new_from_vcard
-			(g_value_get_string (g_value_array_get_nth (vals, 1)));
+			l = g_list_prepend (l, change);
+		}
 
-		l = g_list_prepend (l, change);
+		g_free (val_str);
 	}
 
-	g_ptr_array_foreach (array, (GFunc)g_value_array_free, NULL);
-	g_ptr_array_free (array, TRUE);
-
 	return g_list_reverse (l);
 }
 
@@ -2176,16 +2136,18 @@ e_book_get_changes (EBook       *book,
 		    GError     **error)
 {
 	GError *err = NULL;
-	GPtrArray *array = NULL;
+	GVariant *var_changes = NULL;
 
 	e_return_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+
+	e_gdbus_book_call_get_changes_sync (book->priv->gdbus_book, changeid, &var_changes, NULL, &err);
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_get_changes (book->priv->proxy, changeid, &array, &err);
-	UNLOCK_CONN ();
 	if (!err) {
-		*changes = parse_changes_array (array);
+		*changes = parse_changes_array (var_changes);
+
+		g_variant_unref (var_changes);
+
 		return TRUE;
 	} else {
 		return unwrap_gerror (err, error);
@@ -2193,9 +2155,10 @@ e_book_get_changes (EBook       *book,
 }
 
 static void
-get_changes_reply (DBusGProxy *proxy, GPtrArray *changes, GError *error, gpointer user_data)
+get_changes_reply (GObject *gdbus_book, GAsyncResult *res, gpointer user_data)
 {
-	GError *err = NULL;
+	GVariant *var_changes = NULL;
+	GError *err = NULL, *error = NULL;
 	AsyncData *data = user_data;
 	EBookListExCallback excb = data->excallback;
 	#ifndef E_BOOK_DISABLE_DEPRECATED
@@ -2203,10 +2166,14 @@ get_changes_reply (DBusGProxy *proxy, GPtrArray *changes, GError *error, gpointe
 	#endif
 	GList *list = NULL;
 
+	e_gdbus_book_call_get_changes_finish (E_GDBUS_BOOK (gdbus_book), &var_changes, res, &error);
+
 	unwrap_gerror (error, &err);
 
-	if (changes)
-		list = parse_changes_array (changes);
+	if (var_changes) {
+		list = parse_changes_array (var_changes);
+		g_variant_unref (var_changes);
+	}
 
 	#ifndef E_BOOK_DISABLE_DEPRECATED
 	if (cb)
@@ -2247,16 +2214,14 @@ e_book_async_get_changes (EBook             *book,
 	AsyncData *data;
 
 	e_return_async_error_val_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_async_error_val_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_async_error_val_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 
 	data = g_slice_new0 (AsyncData);
 	data->book = g_object_ref (book);
 	data->callback = cb;
 	data->closure = closure;
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_get_changes_async (book->priv->proxy, changeid, get_changes_reply, data);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_get_changes (book->priv->gdbus_book, changeid, NULL, get_changes_reply, data);
 
 	return 0;
 }
@@ -2285,16 +2250,14 @@ e_book_async_get_changes_ex (EBook              *book,
 	AsyncData *data;
 
 	e_return_ex_async_error_val_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_ex_async_error_val_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_ex_async_error_val_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 
 	data = g_slice_new0 (AsyncData);
 	data->book = g_object_ref (book);
 	data->excallback = cb;
 	data->closure = closure;
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_get_changes_async (book->priv->proxy, changeid, get_changes_reply, data);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_get_changes (book->priv->gdbus_book, changeid, NULL, get_changes_reply, data);
 
 	return TRUE;
 }
@@ -2340,16 +2303,10 @@ gboolean
 e_book_cancel (EBook   *book,
 	       GError **error)
 {
-	gboolean res;
-
 	e_return_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 
-	LOCK_CONN ();
-	res = org_gnome_evolution_dataserver_addressbook_Book_cancel_operation (book->priv->proxy, error);
-	UNLOCK_CONN ();
-
-	return res;
+	return e_gdbus_book_call_cancel_operation_sync (book->priv->gdbus_book, NULL, error);
 }
 
 /**
@@ -2363,16 +2320,10 @@ e_book_cancel (EBook   *book,
 gboolean
 e_book_cancel_async_op (EBook *book, GError **error)
 {
-	gboolean res;
-
 	e_return_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
-
-	LOCK_CONN ();
-	res = org_gnome_evolution_dataserver_addressbook_Book_cancel_operation (book->priv->proxy, error);
-	UNLOCK_CONN ();
+	e_return_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 
-	return res;
+	return e_gdbus_book_call_cancel_operation_sync (book->priv->gdbus_book, NULL, error);
 }
 
 /**
@@ -2393,17 +2344,14 @@ e_book_open (EBook     *book,
 	GError *err = NULL;
 
 	e_return_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 
-	LOCK_CONN ();
-	if (!org_gnome_evolution_dataserver_addressbook_Book_open (book->priv->proxy, only_if_exists, &err)) {
-		UNLOCK_CONN ();
+	if (!e_gdbus_book_call_open_sync (book->priv->gdbus_book, only_if_exists, NULL, &err)) {
 
 		unwrap_gerror (err, error);
 
 		return FALSE;
 	}
-	UNLOCK_CONN ();
 
 	if (!err)
 		book->priv->loaded = TRUE;
@@ -2412,15 +2360,17 @@ e_book_open (EBook     *book,
 }
 
 static void
-open_reply(DBusGProxy *proxy, GError *error, gpointer user_data)
+open_reply (GObject *gdbus_book, GAsyncResult *res, gpointer user_data)
 {
-	GError *err = NULL;
+	GError *err = NULL, *error = NULL;
 	AsyncData *data = user_data;
 	EBookExCallback excb = data->excallback;
 	#ifndef E_BOOK_DISABLE_DEPRECATED
 	EBookCallback cb = data->callback;
 	#endif
 
+	e_gdbus_book_call_open_finish (E_GDBUS_BOOK (gdbus_book), res, &error);
+
 	unwrap_gerror (error, &err);
 
 	data->book->priv->loaded = !error;
@@ -2463,16 +2413,14 @@ e_book_async_open (EBook                 *book,
 	AsyncData *data;
 
 	e_return_async_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_async_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_async_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 
 	data = g_slice_new0 (AsyncData);
 	data->book = g_object_ref (book);
 	data->callback = cb;
 	data->closure = closure;
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_open_async (book->priv->proxy, only_if_exists, open_reply, data);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_open (book->priv->gdbus_book, only_if_exists, NULL, open_reply, data);
 
 	return 0;
 }
@@ -2501,16 +2449,14 @@ e_book_async_open_ex (EBook                 *book,
 	AsyncData *data;
 
 	e_return_ex_async_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_ex_async_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_ex_async_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 
 	data = g_slice_new0 (AsyncData);
 	data->book = g_object_ref (book);
 	data->excallback = cb;
 	data->closure = closure;
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_open_async (book->priv->proxy, only_if_exists, open_reply, data);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_open (book->priv->gdbus_book, only_if_exists, NULL, open_reply, data);
 
 	return TRUE;
 }
@@ -2532,25 +2478,25 @@ e_book_remove (EBook   *book,
 	GError *err = NULL;
 
 	e_return_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_remove (book->priv->proxy, &err);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_remove_sync (book->priv->gdbus_book, NULL, &err);
 
 	return unwrap_gerror (err, error);
 }
 
 static void
-remove_reply(DBusGProxy *proxy, GError *error, gpointer user_data)
+remove_reply (GObject *gdbus_book, GAsyncResult *res, gpointer user_data)
 {
-	GError *err = NULL;
+	GError *err = NULL, *error = NULL;
 	AsyncData *data = user_data;
 	EBookExCallback excb = data->excallback;
 	#ifndef E_BOOK_DISABLE_DEPRECATED
 	EBookCallback cb = data->callback;
 	#endif
 
+	e_gdbus_book_call_remove_finish (E_GDBUS_BOOK (gdbus_book), res, &error);
+
 	unwrap_gerror (error, &err);
 
 	#ifndef E_BOOK_DISABLE_DEPRECATED
@@ -2589,16 +2535,14 @@ e_book_async_remove (EBook   *book,
 	AsyncData *data;
 
 	e_return_async_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_async_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_async_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 
 	data = g_slice_new0 (AsyncData);
 	data->book = g_object_ref (book);
 	data->callback = cb;
 	data->closure = closure;
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_remove_async (book->priv->proxy, remove_reply, data);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_remove (book->priv->gdbus_book, NULL, remove_reply, data);
 
 	return 0;
 }
@@ -2625,16 +2569,14 @@ e_book_async_remove_ex (EBook   *book,
 	AsyncData *data;
 
 	e_return_ex_async_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_ex_async_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_ex_async_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 
 	data = g_slice_new0 (AsyncData);
 	data->book = g_object_ref (book);
 	data->excallback = cb;
 	data->closure = closure;
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_addressbook_Book_remove_async (book->priv->proxy, remove_reply, data);
-	UNLOCK_CONN ();
+	e_gdbus_book_call_remove (book->priv->gdbus_book, NULL, remove_reply, data);
 
 	return TRUE;
 }
@@ -2686,17 +2628,14 @@ e_book_get_static_capabilities (EBook   *book,
 				GError **error)
 {
 	e_return_error_if_fail (E_IS_BOOK (book), E_BOOK_ERROR_INVALID_ARG);
-	e_return_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (book->priv->gdbus_book, E_BOOK_ERROR_REPOSITORY_OFFLINE);
 
 	if (!book->priv->cap_queried) {
 		gchar *cap = NULL;
 
-		LOCK_CONN ();
-		if (!org_gnome_evolution_dataserver_addressbook_Book_get_static_capabilities (book->priv->proxy, &cap, error)) {
-			UNLOCK_CONN ();
+		if (!e_gdbus_book_call_get_static_capabilities_sync (book->priv->gdbus_book, &cap, NULL, error)) {
 			return NULL;
 		}
-		UNLOCK_CONN ();
 
 		book->priv->cap = cap;
 		book->priv->cap_queried = TRUE;
@@ -3075,8 +3014,10 @@ e_book_new (ESource *source, GError **error)
 	e_return_error_if_fail (E_IS_SOURCE (source), E_BOOK_ERROR_INVALID_ARG);
 
 	if (!e_book_activate (&err)) {
-		g_warning (G_STRLOC ": cannot activate book: %s\n", err->message);
+		unwrap_gerror (err, &err);
+		g_warning (G_STRLOC ": cannot activate book: %s", err->message);
 		g_propagate_error (error, err);
+
 		return NULL;
 	}
 
@@ -3087,40 +3028,41 @@ e_book_new (ESource *source, GError **error)
 
 	xml = e_source_to_standalone_xml (source);
 
-	LOCK_CONN ();
-	if (!org_gnome_evolution_dataserver_addressbook_BookFactory_get_book (factory_proxy, xml, &path, &err)) {
-		UNLOCK_CONN ();
+	if (!e_gdbus_book_factory_call_get_book_sync (book_factory_proxy, xml, &path, NULL, &err)) {
+		unwrap_gerror (err, &err);
 		g_free (xml);
 		g_warning (G_STRLOC ": cannot get book from factory: %s", err ? err->message : "[no error]");
-		g_propagate_error (error, err);
+		if (err)
+			g_propagate_error (error, err);
 		g_object_unref (book);
+
 		return NULL;
 	}
 	g_free (xml);
 
-	book->priv->proxy = dbus_g_proxy_new_for_name_owner (connection,
-							     E_DATA_BOOK_FACTORY_SERVICE_NAME, path,
-							     "org.gnome.evolution.dataserver.addressbook.Book",
-							     &err);
-	UNLOCK_CONN ();
+	book->priv->gdbus_book = e_gdbus_book_proxy_new_sync (g_dbus_proxy_get_connection (G_DBUS_PROXY (book_factory_proxy)),
+						      G_DBUS_PROXY_FLAGS_NONE,
+						      E_DATA_BOOK_FACTORY_SERVICE_NAME,
+						      path,
+						      NULL,
+						      &err);
 
-	if (!book->priv->proxy) {
-		g_warning (G_STRLOC ": cannot get proxy for book %s: %s", path, err->message);
-		g_propagate_error (error, err);
+	if (!book->priv->gdbus_book) {
 		g_free (path);
+		unwrap_gerror (err, &err);
+		g_warning ("Cannot create cal proxy: %s", err ? err->message : "Unknown error");
+		if (err)
+			g_error_free (err);
 		g_object_unref (book);
 		return NULL;
 	}
-	g_free (path);
 
-	g_object_weak_ref (G_OBJECT (book->priv->proxy), proxy_destroyed, book);
+	g_free (path);
 
-	dbus_g_proxy_add_signal (book->priv->proxy, "writable", G_TYPE_BOOLEAN, G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal (book->priv->proxy, "writable", G_CALLBACK (writable_cb), book, NULL);
-	dbus_g_proxy_add_signal (book->priv->proxy, "connection", G_TYPE_BOOLEAN, G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal (book->priv->proxy, "connection", G_CALLBACK (connection_cb), book, NULL);
-	dbus_g_proxy_add_signal (book->priv->proxy, "auth_required", G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal (book->priv->proxy, "auth_required", G_CALLBACK (auth_required_cb), book, NULL);
+	g_signal_connect (g_dbus_proxy_get_connection (G_DBUS_PROXY (book->priv->gdbus_book)), "closed", G_CALLBACK (gdbus_book_closed_cb), book);
+	g_signal_connect (book->priv->gdbus_book, "writable", G_CALLBACK (writable_cb), book);
+	g_signal_connect (book->priv->gdbus_book, "connection", G_CALLBACK (connection_cb), book);
+	g_signal_connect (book->priv->gdbus_book, "auth-required", G_CALLBACK (auth_required_cb), book);
 
 	return book;
 }
@@ -3347,27 +3289,6 @@ e_book_new_default_addressbook   (GError **error)
 	return book;
 }
 
-static gboolean
-strcaseequal_no_underscore (const gchar *str1, const gchar *str2)
-{
-	gint i, j;
-
-	if (!str1 || !str2)
-		return FALSE;
-
-	for (i = 0, j = 0; str1[i] && str2[j]; i++, j++) {
-		while (str1[i] == '_' && str1[i + 1])
-			i++;
-		while (str2[j] == '_' && str2[j + 1])
-			j++;
-
-		if (g_ascii_tolower (str1[i]) != g_ascii_tolower (str2[j]))
-			return FALSE;
-	}
-
-	return !str1[i] && !str2[j];
-}
-
 /**
  * If the GError is a remote error, extract the EBookStatus embedded inside.
  * Otherwise return DBUS_EXCEPTION (I know this is DBus...).
@@ -3380,49 +3301,54 @@ get_status_from_error (GError *error)
 		const gchar *name;
 		EBookStatus err_code;
 	} errors[] = {
-		{ err ("E_DATA_BOOK_STATUS_SUCCESS",				E_BOOK_ERROR_OK) },
-		{ err ("E_DATA_BOOK_STATUS_REPOSITORY_OFFLINE",			E_BOOK_ERROR_REPOSITORY_OFFLINE) },
-		{ err ("E_DATA_BOOK_STATUS_PERMISSION_DENIED",			E_BOOK_ERROR_PERMISSION_DENIED) },
-		{ err ("E_DATA_BOOK_STATUS_CONTACT_NOT_FOUND",			E_BOOK_ERROR_CONTACT_NOT_FOUND) },
-		{ err ("E_DATA_BOOK_STATUS_CONTACTID_ALREADY_EXISTS",		E_BOOK_ERROR_CONTACT_ID_ALREADY_EXISTS) },
-		{ err ("E_DATA_BOOK_STATUS_AUTHENTICATION_FAILED",		E_BOOK_ERROR_AUTHENTICATION_FAILED) },
-		{ err ("E_DATA_BOOK_STATUS_AUTHENTICATION_REQUIRED",		E_BOOK_ERROR_AUTHENTICATION_REQUIRED) },
-		{ err ("E_DATA_BOOK_STATUS_UNSUPPORTED_FIELD",			E_BOOK_ERROR_OTHER_ERROR) },
-		{ err ("E_DATA_BOOK_STATUS_UNSUPPORTED_AUTHENTICATION_METHOD",	E_BOOK_ERROR_UNSUPPORTED_AUTHENTICATION_METHOD) },
-		{ err ("E_DATA_BOOK_STATUS_TLS_NOT_AVAILABLE",			E_BOOK_ERROR_TLS_NOT_AVAILABLE) },
-		{ err ("E_DATA_BOOK_STATUS_NO_SUCH_BOOK",			E_BOOK_ERROR_NO_SUCH_BOOK) },
-		{ err ("E_DATA_BOOK_STATUS_BOOK_REMOVED",			E_BOOK_ERROR_NO_SUCH_SOURCE) },
-		{ err ("E_DATA_BOOK_STATUS_OFFLINE_UNAVAILABLE",		E_BOOK_ERROR_OFFLINE_UNAVAILABLE) },
-		{ err ("E_DATA_BOOK_STATUS_SEARCH_SIZE_LIMIT_EXCEEDED",		E_BOOK_ERROR_OTHER_ERROR) },
-		{ err ("E_DATA_BOOK_STATUS_SEARCH_TIME_LIMIT_EXCEEDED",		E_BOOK_ERROR_OTHER_ERROR) },
-		{ err ("E_DATA_BOOK_STATUS_INVALID_QUERY",			E_BOOK_ERROR_OTHER_ERROR) },
-		{ err ("E_DATA_BOOK_STATUS_QUERY_REFUSED",			E_BOOK_ERROR_OTHER_ERROR) },
-		{ err ("E_DATA_BOOK_STATUS_COULD_NOT_CANCEL",			E_BOOK_ERROR_COULD_NOT_CANCEL) },
-		{ err ("E_DATA_BOOK_STATUS_OTHER_ERROR",			E_BOOK_ERROR_OTHER_ERROR) },
-		{ err ("E_DATA_BOOK_STATUS_INVALID_SERVER_VERSION",		E_BOOK_ERROR_INVALID_SERVER_VERSION) },
-		{ err ("E_DATA_BOOK_STATUS_NO_SPACE",				E_BOOK_ERROR_NO_SPACE) },
-		{ err ("E_DATA_BOOK_STATUS_INVALID_ARG",			E_BOOK_ERROR_INVALID_ARG) },
-		{ err ("E_DATA_BOOK_STATUS_NOT_SUPPORTED",			E_BOOK_ERROR_NOT_SUPPORTED) }
+		{ err ("Success",				E_BOOK_ERROR_OK) },
+		{ err ("RepositoryOffline",			E_BOOK_ERROR_REPOSITORY_OFFLINE) },
+		{ err ("PermissionDenied",			E_BOOK_ERROR_PERMISSION_DENIED) },
+		{ err ("ContactNotFound",			E_BOOK_ERROR_CONTACT_NOT_FOUND) },
+		{ err ("ContactIDAlreadyExists",		E_BOOK_ERROR_CONTACT_ID_ALREADY_EXISTS) },
+		{ err ("AuthenticationFailed",			E_BOOK_ERROR_AUTHENTICATION_FAILED) },
+		{ err ("AuthenticationRequired",		E_BOOK_ERROR_AUTHENTICATION_REQUIRED) },
+		{ err ("UnsupportedField",			E_BOOK_ERROR_OTHER_ERROR) },
+		{ err ("UnsupportedAuthenticationMethod",	E_BOOK_ERROR_UNSUPPORTED_AUTHENTICATION_METHOD) },
+		{ err ("TLSNotAvailable",			E_BOOK_ERROR_TLS_NOT_AVAILABLE) },
+		{ err ("NoSuchBook",				E_BOOK_ERROR_NO_SUCH_BOOK) },
+		{ err ("BookRemoved",				E_BOOK_ERROR_NO_SUCH_SOURCE) },
+		{ err ("OfflineUnavailable",			E_BOOK_ERROR_OFFLINE_UNAVAILABLE) },
+		{ err ("SearchSizeLimitExceeded",		E_BOOK_ERROR_OTHER_ERROR) },
+		{ err ("SearchTimeLimitExceeded",		E_BOOK_ERROR_OTHER_ERROR) },
+		{ err ("InvalidQuery",				E_BOOK_ERROR_OTHER_ERROR) },
+		{ err ("QueryRefused",				E_BOOK_ERROR_OTHER_ERROR) },
+		{ err ("CouldNotCancel",			E_BOOK_ERROR_COULD_NOT_CANCEL) },
+		{ err ("OtherError",				E_BOOK_ERROR_OTHER_ERROR) },
+		{ err ("InvalidServerVersion",			E_BOOK_ERROR_INVALID_SERVER_VERSION) },
+		{ err ("NoSpace",				E_BOOK_ERROR_NO_SPACE) },
+		{ err ("InvalidArg",				E_BOOK_ERROR_INVALID_ARG) },
+		{ err ("NotSupported",				E_BOOK_ERROR_NOT_SUPPORTED) }
 	};
 	#undef err
 
 	if G_LIKELY (error == NULL)
 			    return E_BOOK_ERROR_OK;
 
-	if (error->domain == DBUS_GERROR && error->code == DBUS_GERROR_REMOTE_EXCEPTION) {
-		const gchar *name;
+	if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_DBUS_ERROR)) {
+		gchar *name;
 		gint i;
 
-		name = dbus_g_error_get_name (error);
+		name = g_dbus_error_get_remote_error (error);
 
 		for (i = 0; i < G_N_ELEMENTS (errors); i++) {
-			if (g_ascii_strcasecmp (errors[i].name, name) == 0 ||
-			    strcaseequal_no_underscore (errors[i].name, name))
+			if (g_ascii_strcasecmp (errors[i].name, name) == 0) {
+				g_free (name);
 				return errors[i].err_code;
+			}
 		}
 
 		g_warning (G_STRLOC ": unmatched error name %s", name);
+		g_free (name);
+
 		return E_BOOK_ERROR_OTHER_ERROR;
+	} else if (error->domain == E_BOOK_ERROR) {
+		return error->code;
 	} else {
 		/* In this case the error was caused by DBus. Dump the message to the
 		   console as otherwise we have no idea what the problem is. */
@@ -3442,19 +3368,22 @@ unwrap_gerror (GError *error, GError **client_error)
 	if (error == NULL)
 		return TRUE;
 
-	if (error->domain == DBUS_GERROR && error->code == DBUS_GERROR_REMOTE_EXCEPTION) {
-		GError *new;
-		gint code;
+	if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_DBUS_ERROR)) {
 		if (client_error) {
+			gint code;
+
 			code = get_status_from_error (error);
-			new = g_error_new_literal (E_BOOK_ERROR, code, error->message);
-			*client_error = new;
+			g_dbus_error_strip_remote_error (error);
+
+			*client_error = g_error_new_literal (E_BOOK_ERROR, code, error->message);
 		}
+
 		g_error_free (error);
 	} else {
 		if (client_error)
 			*client_error = error;
 	}
+
 	return FALSE;
 }
 
@@ -3483,8 +3412,25 @@ array_to_stringlist (gchar **list)
 	GList *l = NULL;
 	gchar **i = list;
 	while (*i != NULL) {
-		l = g_list_prepend (l, (*i++));
+		l = g_list_prepend (l, g_strdup (*i++));
 	}
 	g_free (list);
 	return g_list_reverse(l);
 }
+
+static EList *
+array_to_elist (gchar **list)
+{
+	EList *elst = NULL;
+	gchar **i = list;
+
+	elst = e_list_new (NULL, (EListFreeFunc) g_free, NULL);
+	if (!list)
+		return elst;
+
+	while (*i != NULL) {
+		e_list_append (elst, g_strdup (*i++));
+	}
+
+	return elst;
+}
diff --git a/addressbook/libedata-book/Makefile.am b/addressbook/libedata-book/Makefile.am
index 1e27886..12db8f8 100644
--- a/addressbook/libedata-book/Makefile.am
+++ b/addressbook/libedata-book/Makefile.am
@@ -1,11 +1,3 @@
-# The marshallers
-MARSHAL_GENERATED = e-data-book-marshal.c e-data-book-marshal.h
- EVO_MARSHAL_RULE@
-
-DBUS_GENERATED_H = e-data-book-glue.h e-data-book-factory-glue.h e-data-book-view-glue.h
-%-glue.h: %.xml
-	@DBUS_BINDING_TOOL@ --mode=glib-server --output=$@ --prefix=$(subst -,_,$*) $^
-
 include $(top_srcdir)/glib-gen.mak
 glib_enum_headers=e-data-book-types.h
 glib_enum_define=E_DATA_BOOK
@@ -21,15 +13,14 @@ libedata_book_1_2_la_CPPFLAGS =				\
 	-DG_LOG_DOMAIN=\"libedata-book\"		\
 	-DLIBEXECDIR=\"$(libexecdir)\"			\
 	-I$(top_srcdir)					\
-	-I$(top_builddir)				\
 	-I$(top_srcdir)/addressbook			\
+	-I$(top_srcdir)/addressbook/libegdbus		\
+	-I$(top_builddir)				\
 	-I$(top_builddir)/addressbook			\
 	$(DB_CFLAGS)					\
 	$(EVOLUTION_ADDRESSBOOK_CFLAGS)
 
 libedata_book_1_2_la_SOURCES =				\
-	$(MARSHAL_GENERATED)				\
-	$(DBUS_GENERATED_H)				\
 	e-book-backend-factory.c			\
 	e-book-backend-sexp.c				\
 	e-book-backend-summary.c			\
@@ -44,6 +35,7 @@ libedata_book_1_2_la_SOURCES =				\
 	$(ENUM_GENERATED)
 
 libedata_book_1_2_la_LIBADD =					\
+	$(top_builddir)/addressbook/libegdbus/libegdbus-book.la	\
 	$(top_builddir)/addressbook/libebook/libebook-1.2.la	\
 	$(top_builddir)/libedataserver/libedataserver-1.2.la	\
 	$(top_builddir)/libebackend/libebackend-1.2.la	\
@@ -78,8 +70,9 @@ e_addressbook_factory_CPPFLAGS = \
 	-DG_LOG_DOMAIN=\"libedata-book\"	\
 	-DE_PRGNAME=\"e-addressbook-factory\"	\
 	-I$(top_srcdir)				\
-	-I$(top_builddir)			\
 	-I$(top_srcdir)/addressbook		\
+	-I$(top_srcdir)/addressbook/libegdbus	\
+	-I$(top_builddir)			\
 	-I$(top_builddir)/addressbook
 
 e_addressbook_factory_SOURCES = \
@@ -103,12 +96,11 @@ servicedir = $(datadir)/dbus-1/services
 service_DATA = $(service_in_files:.service.in=.service)
 @EVO_SUBST_SERVICE_RULE@
 
-BUILT_SOURCES = $(DBUS_GENERATED_H) $(MARSHAL_GENERATED) $(ENUM_GENERATED)
+BUILT_SOURCES = $(ENUM_GENERATED)
 CLEANFILES = $(BUILT_SOURCES) $(service_DATA)
 DISTCLEANFILES = $(pkgconfig_DATA)
 
 EXTRA_DIST = 						\
-	e-data-book-marshal.list			\
 	e-data-book-factory.xml				\
 	e-data-book-view.xml				\
 	e-data-book.xml					\
diff --git a/addressbook/libedata-book/e-data-book-factory.c b/addressbook/libedata-book/e-data-book-factory.c
index fded31a..17d98a3 100644
--- a/addressbook/libedata-book/e-data-book-factory.c
+++ b/addressbook/libedata-book/e-data-book-factory.c
@@ -26,10 +26,6 @@
 #include <unistd.h>
 #include <glib-object.h>
 #include <glib/gi18n.h>
-#include <dbus/dbus-protocol.h>
-#include <dbus/dbus-glib.h>
-#include <dbus/dbus-glib-lowlevel.h>
-#include <dbus/dbus-glib-bindings.h>
 #include <libebackend/e-data-server-module.h>
 #include <libebackend/e-offline-listener.h>
 #include "e-book-backend-factory.h"
@@ -38,14 +34,11 @@
 #include "e-book-backend.h"
 #include "e-book-backend-factory.h"
 
-#define d(x)
+#include "e-gdbus-egdbusbookfactory.h"
 
-static void impl_BookFactory_getBook(EDataBookFactory *factory, const gchar *IN_uri, DBusGMethodInvocation *context);
-#include "e-data-book-factory-glue.h"
+#define d(x)
 
 static GMainLoop *loop;
-static EDataBookFactory *factory;
-extern DBusGConnection *connection;
 
 /* Convenience macro to test and set a GError/return on failure */
 #define g_set_error_val_if_fail(test, returnval, error, domain, code) G_STMT_START{ \
@@ -61,6 +54,8 @@ G_DEFINE_TYPE(EDataBookFactory, e_data_book_factory, G_TYPE_OBJECT);
 #define E_DATA_BOOK_FACTORY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), E_TYPE_DATA_BOOK_FACTORY, EDataBookFactoryPrivate))
 
 struct _EDataBookFactoryPrivate {
+	EGdbusBookFactory *gdbus_object;
+
 	/* 'protocol' -> EBookBackendFactory hash table */
 	GHashTable *factories;
 
@@ -180,42 +175,6 @@ e_data_book_factory_set_backend_mode (EDataBookFactory *factory,
 	g_mutex_unlock (factory->priv->backends_lock);
 }
 
-static void
-e_data_book_factory_class_init (EDataBookFactoryClass *class)
-{
-	g_type_class_add_private (class, sizeof (EDataBookFactoryPrivate));
-
-	dbus_g_object_type_install_info (
-		G_TYPE_FROM_CLASS (class),
-		&dbus_glib_e_data_book_factory_object_info);
-}
-
-static void
-e_data_book_factory_init (EDataBookFactory *factory)
-{
-	factory->priv = E_DATA_BOOK_FACTORY_GET_PRIVATE (factory);
-
-	factory->priv->factories = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
-
-	factory->priv->backends_lock = g_mutex_new ();
-	factory->priv->backends = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
-
-	factory->priv->books_lock = g_mutex_new ();
-	factory->priv->books = g_hash_table_new_full (
-		g_str_hash, g_str_equal,
-		(GDestroyNotify) g_free,
-		(GDestroyNotify) NULL);
-
-	factory->priv->connections_lock = g_mutex_new ();
-	factory->priv->connections = g_hash_table_new_full (
-		g_str_hash, g_str_equal,
-		(GDestroyNotify) g_free,
-		(GDestroyNotify) NULL);
-
-	e_data_server_module_init ();
-	e_data_book_factory_register_backends (factory);
-}
-
 /* TODO: write dispose to kill hash */
 static gchar *
 e_data_book_factory_extract_proto_from_uri (const gchar *uri)
@@ -262,16 +221,22 @@ construct_book_factory_path (void)
 		getpid (), g_atomic_int_exchange_and_add (&counter, 1));
 }
 
+static gboolean
+remove_dead_pointer_cb (gpointer path, gpointer live, gpointer dead)
+{
+	return live == dead;
+}
+
 static void
-my_remove (gchar *key, GObject *dead)
+book_freed_cb (EDataBookFactory *factory, GObject *dead)
 {
 	EDataBookFactoryPrivate *priv = factory->priv;
 	GHashTableIter iter;
 	gpointer hkey, hvalue;
 
-	d (g_debug ("%s (%p) is dead", key, dead));
+	d (g_debug ("in factory %p (%p) is dead", factory, dead));
 
-	g_hash_table_remove (priv->books, key);
+	g_hash_table_foreach_remove (priv->books, remove_dead_pointer_cb, dead);
 
 	g_hash_table_iter_init (&iter, priv->connections);
 	while (g_hash_table_iter_next (&iter, &hkey, &hvalue)) {
@@ -290,8 +255,6 @@ my_remove (gchar *key, GObject *dead)
 		}
 	}
 
-	g_free (key);
-
 	/* If there are no open books, start a timer to quit */
 	if (priv->exit_timeout == 0 && g_hash_table_size (priv->books) == 0)
 		priv->exit_timeout = g_timeout_add_seconds (
@@ -299,31 +262,33 @@ my_remove (gchar *key, GObject *dead)
 }
 
 static void
-backend_gone_cb (const gchar *uri, GObject *backend)
+backend_gone_cb (EDataBookFactory *factory, GObject *dead)
 {
 	EDataBookFactoryPrivate *priv = factory->priv;
 
 	g_mutex_lock (priv->backends_lock);
-	g_hash_table_remove (priv->backends, uri);
+	g_hash_table_foreach_remove (priv->backends, remove_dead_pointer_cb, dead);
 	g_mutex_unlock (priv->backends_lock);
 }
 
-static void
-impl_BookFactory_getBook(EDataBookFactory *factory, const gchar *IN_source, DBusGMethodInvocation *context)
+static gboolean
+impl_BookFactory_getBook (EGdbusBookFactory *object, GDBusMethodInvocation *invocation, const gchar *in_source, EDataBookFactory *factory)
 {
 	EDataBook *book;
 	EBookBackend *backend;
 	EDataBookFactoryPrivate *priv = factory->priv;
 	ESource *source;
-	gchar *uri, *path, *sender;
+	gchar *uri, *path;
+	const gchar *sender;
 	GList *list;
+	GError *error = NULL;
 
-	if (IN_source == NULL || IN_source[0] == '\0') {
-		dbus_g_method_return_error (
-			context, g_error_new (
-			E_DATA_BOOK_ERROR, E_DATA_BOOK_STATUS_NO_SUCH_BOOK,
-			_("Empty URI")));
-		return;
+	if (in_source == NULL || in_source[0] == '\0') {
+		error = g_error_new (E_DATA_BOOK_ERROR, E_DATA_BOOK_STATUS_NO_SUCH_BOOK, _("Empty URI"));
+		g_dbus_method_invocation_return_gerror (invocation, error);
+		g_error_free (error);
+
+		return TRUE;
 	}
 
 	/* Remove a pending exit */
@@ -334,14 +299,15 @@ impl_BookFactory_getBook(EDataBookFactory *factory, const gchar *IN_source, DBus
 
 	g_mutex_lock (priv->backends_lock);
 
-	source = e_source_new_from_standalone_xml (IN_source);
+	source = e_source_new_from_standalone_xml (in_source);
 	if (!source) {
 		g_mutex_unlock (priv->backends_lock);
-		dbus_g_method_return_error (
-			context, g_error_new (
-			E_DATA_BOOK_ERROR, E_DATA_BOOK_STATUS_NO_SUCH_BOOK,
-			_("Invalid source")));
-		return;
+
+		error = g_error_new (E_DATA_BOOK_ERROR, E_DATA_BOOK_STATUS_NO_SUCH_BOOK, _("Invalid source"));
+		g_dbus_method_invocation_return_gerror (invocation, error);
+		g_error_free (error);
+
+		return TRUE;
 	}
 
 	uri = e_source_get_uri (source);
@@ -362,7 +328,7 @@ impl_BookFactory_getBook(EDataBookFactory *factory, const gchar *IN_source, DBus
 
 			g_hash_table_insert (
 				priv->backends, uri_key, backend);
-			g_object_weak_ref (G_OBJECT (backend), (GWeakNotify) backend_gone_cb, uri_key);
+			g_object_weak_ref (G_OBJECT (backend), (GWeakNotify) backend_gone_cb, factory);
 			g_signal_connect (backend, "last-client-gone", G_CALLBACK (g_object_unref), NULL);
 			e_book_backend_set_mode (backend, priv->mode);
 		}
@@ -374,29 +340,29 @@ impl_BookFactory_getBook(EDataBookFactory *factory, const gchar *IN_source, DBus
 
 		g_mutex_unlock (priv->books_lock);
 		g_mutex_unlock (priv->backends_lock);
-		dbus_g_method_return_error (
-			context, g_error_new (
-			E_DATA_BOOK_ERROR, E_DATA_BOOK_STATUS_NO_SUCH_BOOK,
-			_("Invalid source")));
-		return;
+
+		error = g_error_new (E_DATA_BOOK_ERROR, E_DATA_BOOK_STATUS_NO_SUCH_BOOK, _("Invalid source"));
+		g_dbus_method_invocation_return_gerror (invocation, error);
+		g_error_free (error);
+
+		return TRUE;
 	}
 
 	path = construct_book_factory_path ();
 	book = e_data_book_new (backend, source);
 	g_hash_table_insert (priv->books, g_strdup (path), book);
 	e_book_backend_add_client (backend, book);
-	dbus_g_connection_register_g_object (
-		connection, path, G_OBJECT (book));
+	e_data_book_register_gdbus_object (book, g_dbus_method_invocation_get_connection (invocation), path, &error);
 	g_object_weak_ref (
 		G_OBJECT (book), (GWeakNotify)
-		my_remove, g_strdup (path));
+		book_freed_cb, factory);
 
 	/* Update the hash of open connections */
 	g_mutex_lock (priv->connections_lock);
-	sender = dbus_g_method_get_sender (context);
+	sender = g_dbus_method_invocation_get_sender (invocation);
 	list = g_hash_table_lookup (priv->connections, sender);
 	list = g_list_prepend (list, book);
-	g_hash_table_insert (priv->connections, sender, list);
+	g_hash_table_insert (priv->connections, g_strdup (sender), list);
 	g_mutex_unlock (priv->connections_lock);
 
 	g_mutex_unlock (priv->books_lock);
@@ -405,7 +371,15 @@ impl_BookFactory_getBook(EDataBookFactory *factory, const gchar *IN_source, DBus
 	g_object_unref (source);
 	g_free (uri);
 
-	dbus_g_method_return (context, path);
+	if (error) {
+		g_dbus_method_invocation_return_gerror (invocation, error);
+		g_error_free (error);
+	} else
+		e_gdbus_book_factory_complete_get_book (object, invocation, path);
+
+	g_free (path);
+
+	return TRUE;
 }
 
 static void
@@ -424,31 +398,76 @@ remove_data_book_cb (gpointer data_bk, gpointer user_data)
 }
 
 static void
-name_owner_changed (DBusGProxy *proxy,
-                    const gchar *name,
-                    const gchar *prev_owner,
-                    const gchar *new_owner,
-                    EDataBookFactory *factory)
+e_data_book_factory_init (EDataBookFactory *factory)
 {
-	if (strcmp (new_owner, "") == 0 && strcmp (name, prev_owner) == 0) {
-		gchar *key;
-		GList *list = NULL;
-		g_mutex_lock (factory->priv->connections_lock);
-		while (g_hash_table_lookup_extended (
-				factory->priv->connections, prev_owner,
-				(gpointer) &key, (gpointer) &list)) {
-			GList *copy = g_list_copy (list);
-
-			/* this should trigger the book's weak ref notify
-			 * function, which will remove it from the list before
-			 * it's freed, and will remove the connection from
-			 * priv->connections once they're all gone */
-			g_list_foreach (copy, remove_data_book_cb, NULL);
-			g_list_free (copy);
-		}
+	factory->priv = E_DATA_BOOK_FACTORY_GET_PRIVATE (factory);
 
-		g_mutex_unlock (factory->priv->connections_lock);
-	}
+	factory->priv->gdbus_object = e_gdbus_book_factory_stub_new ();
+	g_signal_connect (factory->priv->gdbus_object, "handle-get-book", G_CALLBACK (impl_BookFactory_getBook), factory);
+
+	factory->priv->factories = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+
+	factory->priv->backends_lock = g_mutex_new ();
+	factory->priv->backends = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+
+	factory->priv->books_lock = g_mutex_new ();
+	factory->priv->books = g_hash_table_new_full (
+		g_str_hash, g_str_equal,
+		(GDestroyNotify) g_free,
+		(GDestroyNotify) NULL);
+
+	factory->priv->connections_lock = g_mutex_new ();
+	factory->priv->connections = g_hash_table_new_full (
+		g_str_hash, g_str_equal,
+		(GDestroyNotify) g_free,
+		(GDestroyNotify) NULL);
+
+	e_data_server_module_init ();
+	e_data_book_factory_register_backends (factory);
+}
+
+static void
+e_data_book_factory_finalize (GObject *object)
+{
+	EDataBookFactory *factory = E_DATA_BOOK_FACTORY (object);
+
+	g_return_if_fail (factory != NULL);
+
+	g_object_unref (factory->priv->gdbus_object);
+
+	g_hash_table_destroy (factory->priv->factories);
+	g_hash_table_destroy (factory->priv->backends);
+	g_hash_table_destroy (factory->priv->books);
+	g_hash_table_destroy (factory->priv->connections);
+
+	g_mutex_free (factory->priv->backends_lock);
+	g_mutex_free (factory->priv->books_lock);
+	g_mutex_free (factory->priv->connections_lock);
+
+	if (G_OBJECT_CLASS (e_data_book_factory_parent_class)->finalize)
+		G_OBJECT_CLASS (e_data_book_factory_parent_class)->finalize (object);
+}
+
+static void
+e_data_book_factory_class_init (EDataBookFactoryClass *klass)
+{
+	GObjectClass *object_class;
+
+	g_type_class_add_private (klass, sizeof (EDataBookFactoryPrivate));
+
+	object_class = G_OBJECT_CLASS (klass);
+	object_class->finalize = e_data_book_factory_finalize;
+}
+
+static guint
+e_data_book_factory_register_gdbus_object (EDataBookFactory *factory, GDBusConnection *connection, const gchar *object_path, GError **error)
+{
+	g_return_val_if_fail (factory != NULL, 0);
+	g_return_val_if_fail (E_IS_DATA_BOOK_FACTORY (factory), 0);
+	g_return_val_if_fail (connection != NULL, 0);
+	g_return_val_if_fail (object_path != NULL, 0);
+
+	return e_gdbus_book_factory_register_object (factory->priv->gdbus_object, connection, object_path, error);
 }
 
 /* Convenience function to print an error and exit */
@@ -475,53 +494,74 @@ offline_state_changed_cb (EOfflineListener *eol, EDataBookFactory *factory)
 #define E_DATA_BOOK_FACTORY_SERVICE_NAME \
 	"org.gnome.evolution.dataserver.AddressBook"
 
-gint
-main (gint argc, gchar **argv)
+static void
+on_bus_acquired (GDBusConnection *connection,
+                 const gchar     *name,
+                 gpointer         user_data)
 {
+	EDataBookFactory *factory = user_data;
+	guint registration_id;
 	GError *error = NULL;
-	DBusGProxy *bus_proxy;
-	guint32 request_name_ret;
-	EOfflineListener *eol;
 
-	g_type_init ();
-	g_set_prgname (E_PRGNAME);
-	if (!g_thread_supported ()) g_thread_init (NULL);
-	dbus_g_thread_init ();
-
-	loop = g_main_loop_new (NULL, FALSE);
+	registration_id = e_data_book_factory_register_gdbus_object (
+		factory,
+		connection,
+		"/org/gnome/evolution/dataserver/addressbook/BookFactory",
+		&error);
 
-	/* Obtain a connection to the session bus */
-	connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
-	if (connection == NULL)
-		die ("Failed to open connection to bus", error);
+	if (error)
+		die ("Failed to register a BookFactory object", error);
 
-	bus_proxy = dbus_g_proxy_new_for_name (connection,
-					       DBUS_SERVICE_DBUS,
-					       DBUS_PATH_DBUS,
-					       DBUS_INTERFACE_DBUS);
+	g_assert (registration_id > 0);
+}
 
-	if (!org_freedesktop_DBus_request_name (
-		bus_proxy, E_DATA_BOOK_FACTORY_SERVICE_NAME,
-		0, &request_name_ret, &error))
-		die ("Failed to get name", error);
+static void
+on_name_acquired (GDBusConnection *connection,
+                  const gchar     *name,
+                  gpointer         user_data)
+{
+}
 
-	if (request_name_ret != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) {
-		g_error ("Got result code %u from requesting name", request_name_ret);
-		exit (1);
+static void
+on_name_lost (GDBusConnection *connection,
+              const gchar     *name,
+              gpointer         user_data)
+{
+	GList *list = NULL;
+	gchar *key;
+	EDataBookFactory *factory = user_data;
+
+	g_mutex_lock (factory->priv->connections_lock);
+	while (g_hash_table_lookup_extended (
+		factory->priv->connections, name,
+		(gpointer) &key, (gpointer) &list)) {
+		GList *copy = g_list_copy (list);
+
+		/* this should trigger the book's weak ref notify
+		 * function, which will remove it from the list before
+		 * it's freed, and will remove the connection from
+		 * priv->connections once they're all gone */
+		g_list_foreach (copy, remove_data_book_cb, NULL);
+		g_list_free (copy);
 	}
 
+	g_mutex_unlock (factory->priv->connections_lock);
+}
+
+gint
+main (gint argc, gchar **argv)
+{
+	EOfflineListener *eol;
+	EDataBookFactory *factory;
+	guint owner_id;
+
+	g_type_init ();
+	g_set_prgname (E_PRGNAME);
+	if (!g_thread_supported ()) g_thread_init (NULL);
+
 	factory = g_object_new (E_TYPE_DATA_BOOK_FACTORY, NULL);
-	dbus_g_connection_register_g_object (
-		connection,
-		"/org/gnome/evolution/dataserver/addressbook/BookFactory",
-		G_OBJECT (factory));
 
-	dbus_g_proxy_add_signal (
-		bus_proxy, "NameOwnerChanged",
-		G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal (
-		bus_proxy, "NameOwnerChanged",
-		G_CALLBACK (name_owner_changed), factory, NULL);
+	loop = g_main_loop_new (NULL, FALSE);
 
 	eol = e_offline_listener_new ();
 	offline_state_changed_cb (eol, factory);
@@ -529,16 +569,25 @@ main (gint argc, gchar **argv)
 		eol, "changed",
 		G_CALLBACK (offline_state_changed_cb), factory);
 
-	printf ("Server is up and running...\n");
+	owner_id = g_bus_own_name (G_BUS_TYPE_SESSION,
+		E_DATA_BOOK_FACTORY_SERVICE_NAME,
+		G_BUS_NAME_OWNER_FLAGS_NONE,
+		on_bus_acquired,
+		on_name_acquired,
+		on_name_lost,
+		factory,
+		NULL);
 
 	/* Migrate user data from ~/.evolution to XDG base directories. */
 	e_data_book_migrate ();
 
+	printf ("Server is up and running...\n");
+
 	g_main_loop_run (loop);
 
+	g_bus_unown_name (owner_id);
 	g_object_unref (eol);
-
-	dbus_g_connection_unref (connection);
+	g_object_unref (factory);
 
 	printf ("Bye.\n");
 
diff --git a/addressbook/libedata-book/e-data-book-view.c b/addressbook/libedata-book/e-data-book-view.c
index 055bcc8..974f940 100644
--- a/addressbook/libedata-book/e-data-book-view.c
+++ b/addressbook/libedata-book/e-data-book-view.c
@@ -25,18 +25,10 @@
 #endif
 
 #include <string.h>
-#include <dbus/dbus.h>
 #include <libebook/e-contact.h>
 #include "e-data-book-view.h"
-#include "e-data-book-marshal.h"
 
-extern DBusGConnection *connection;
-
-static gboolean impl_BookView_start (EDataBookView *view, GError **error);
-static gboolean impl_BookView_stop (EDataBookView *view, GError **error);
-static gboolean impl_BookView_dispose (EDataBookView *view, GError **eror);
-
-#include "e-data-book-view-glue.h"
+#include "e-gdbus-egdbusbookview.h"
 
 static void reset_array (GArray *array);
 
@@ -46,6 +38,8 @@ G_DEFINE_TYPE (EDataBookView, e_data_book_view, G_TYPE_OBJECT);
 #define THRESHOLD 32
 
 struct _EDataBookViewPrivate {
+	EGdbusBookView *gdbus_object;
+
 	EDataBook *book;
 	EBookBackend *backend;
 
@@ -64,17 +58,6 @@ struct _EDataBookViewPrivate {
 	guint idle_id;
 };
 
-enum {
-	CONTACTS_ADDED,
-	CONTACTS_CHANGED,
-	CONTACTS_REMOVED,
-	STATUS_MESSAGE,
-	COMPLETE,
-	LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
 static void e_data_book_view_dispose (GObject *object);
 static void e_data_book_view_finalize (GObject *object);
 
@@ -83,69 +66,21 @@ e_data_book_view_class_init (EDataBookViewClass *klass)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-	object_class->dispose = e_data_book_view_dispose;
-	object_class->finalize = e_data_book_view_finalize;
-
-	signals[CONTACTS_ADDED] =
-		g_signal_new ("contacts-added",
-			      G_OBJECT_CLASS_TYPE (klass),
-			      G_SIGNAL_RUN_LAST,
-			      0, NULL, NULL,
-			      g_cclosure_marshal_VOID__BOXED,
-			      G_TYPE_NONE, 1, G_TYPE_STRV);
-
-	signals[CONTACTS_CHANGED] =
-		g_signal_new ("contacts-changed",
-			      G_OBJECT_CLASS_TYPE (klass),
-			      G_SIGNAL_RUN_LAST,
-			      0, NULL, NULL,
-			      g_cclosure_marshal_VOID__BOXED,
-			      G_TYPE_NONE, 1, G_TYPE_STRV);
-
-	signals[CONTACTS_REMOVED] =
-		g_signal_new ("contacts-removed",
-			      G_OBJECT_CLASS_TYPE (klass),
-			      G_SIGNAL_RUN_LAST,
-			      0, NULL, NULL,
-			      g_cclosure_marshal_VOID__BOXED,
-			      G_TYPE_NONE, 1, G_TYPE_STRV);
-
-	signals[STATUS_MESSAGE] =
-		g_signal_new ("status-message",
-			      G_OBJECT_CLASS_TYPE (klass),
-			      G_SIGNAL_RUN_LAST,
-			      0, NULL, NULL,
-			      g_cclosure_marshal_VOID__STRING,
-			      G_TYPE_NONE, 1, G_TYPE_STRING);
-
-	signals[COMPLETE] =
-		g_signal_new ("complete",
-			      G_OBJECT_CLASS_TYPE (klass),
-			      G_SIGNAL_RUN_LAST,
-			      0, NULL, NULL,
-			      e_data_book_marshal_NONE__UINT_STRING,
-			      G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_STRING);
-
 	g_type_class_add_private (klass, sizeof (EDataBookViewPrivate));
 
-	dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (klass), &dbus_glib_e_data_book_view_object_info);
+	object_class->dispose = e_data_book_view_dispose;
+	object_class->finalize = e_data_book_view_finalize;
 }
 
-static void
-e_data_book_view_init (EDataBookView *book_view)
+guint
+e_data_book_view_register_gdbus_object (EDataBookView *query, GDBusConnection *connection, const gchar *object_path, GError **error)
 {
-	EDataBookViewPrivate *priv = E_DATA_BOOK_VIEW_GET_PRIVATE (book_view);
-	book_view->priv = priv;
-
-	priv->running = FALSE;
-	priv->pending_mutex = g_mutex_new ();
-
-	priv->adds = g_array_sized_new (TRUE, TRUE, sizeof (gchar *), THRESHOLD);
-	priv->changes = g_array_sized_new (TRUE, TRUE, sizeof (gchar *), THRESHOLD);
-	priv->removes = g_array_sized_new (TRUE, TRUE, sizeof (gchar *), THRESHOLD);
+	g_return_val_if_fail (query != NULL, 0);
+	g_return_val_if_fail (E_IS_DATA_BOOK_VIEW (query), 0);
+	g_return_val_if_fail (connection != NULL, 0);
+	g_return_val_if_fail (object_path != NULL, 0);
 
-	priv->ids = g_hash_table_new_full (g_str_hash, g_str_equal,
-					   g_free, NULL);
+	return e_gdbus_book_view_register_object (query->priv->gdbus_object, connection, object_path, error);
 }
 
 static void
@@ -173,7 +108,7 @@ send_pending_adds (EDataBookView *view)
 	if (priv->adds->len == 0)
 		return;
 
-	g_signal_emit (view, signals[CONTACTS_ADDED], 0, priv->adds->data);
+	e_gdbus_book_view_emit_contacts_added (view->priv->gdbus_object, (const gchar * const *) priv->adds->data);
 	reset_array (priv->adds);
 }
 
@@ -185,7 +120,7 @@ send_pending_changes (EDataBookView *view)
 	if (priv->changes->len == 0)
 		return;
 
-	g_signal_emit (view, signals[CONTACTS_CHANGED], 0, priv->changes->data);
+	e_gdbus_book_view_emit_contacts_changed (view->priv->gdbus_object, (const gchar * const *) priv->changes->data);
 	reset_array (priv->changes);
 }
 
@@ -197,7 +132,7 @@ send_pending_removes (EDataBookView *view)
 	if (priv->removes->len == 0)
 		return;
 
-	g_signal_emit (view, signals[CONTACTS_REMOVED], 0, priv->removes->data);
+	e_gdbus_book_view_emit_contacts_removed (view->priv->gdbus_object, (const gchar * const *) priv->removes->data);
 	reset_array (priv->removes);
 }
 
@@ -460,7 +395,7 @@ e_data_book_view_notify_complete (EDataBookView *book_view, const GError *error)
 	/* We're done now, so tell the backend to stop?  TODO: this is a bit different to
 	   how the CORBA backend works... */
 
-	g_signal_emit (book_view, signals[COMPLETE], 0, error ? error->code : 0, error ? error->message : NULL);
+	e_gdbus_book_view_emit_complete (priv->gdbus_object, error ? error->code : 0, error ? error->message : "");
 }
 
 /**
@@ -480,13 +415,12 @@ e_data_book_view_notify_status_message (EDataBookView *book_view, const gchar *m
 	if (!priv->running)
 		return;
 
-	g_signal_emit (book_view, signals[STATUS_MESSAGE], 0, message);
+	e_gdbus_book_view_emit_status_message (priv->gdbus_object, message ? message : "");
 }
 
 /**
  * e_data_book_view_new:
  * @book: The #EDataBook to search
- * @path: The object path that this book view should have
  * @card_query: The query as a string
  * @card_sexp: The query as an #EBookBackendSExp
  * @max_results: The maximum number of results to return
@@ -495,7 +429,7 @@ e_data_book_view_notify_status_message (EDataBookView *book_view, const gchar *m
  * and place it on DBus at the object path #path.
  */
 EDataBookView *
-e_data_book_view_new (EDataBook *book, const gchar *path, const gchar *card_query, EBookBackendSExp *card_sexp, gint max_results)
+e_data_book_view_new (EDataBook *book, const gchar *card_query, EBookBackendSExp *card_sexp, gint max_results)
 {
 	EDataBookView *view;
 	EDataBookViewPrivate *priv;
@@ -511,11 +445,90 @@ e_data_book_view_new (EDataBook *book, const gchar *path, const gchar *card_quer
 	priv->card_sexp = card_sexp;
 	priv->max_results = max_results;
 
-	dbus_g_connection_register_g_object (connection, path, G_OBJECT (view));
-
 	return view;
 }
 
+static gboolean
+bookview_idle_start (gpointer data)
+{
+	EDataBookView *book_view = data;
+
+	book_view->priv->running = TRUE;
+	book_view->priv->idle_id = 0;
+
+	e_book_backend_start_book_view (book_view->priv->backend, book_view);
+
+	return FALSE;
+}
+
+static gboolean
+impl_DataBookView_start (EGdbusBookView *object, GDBusMethodInvocation *invocation, EDataBookView *book_view)
+{
+	book_view->priv->idle_id = g_idle_add (bookview_idle_start, book_view);
+
+	e_gdbus_book_view_complete_start (object, invocation);
+
+	return TRUE;
+}
+
+static gboolean
+bookview_idle_stop (gpointer data)
+{
+	EDataBookView *book_view = data;
+
+	e_book_backend_stop_book_view (book_view->priv->backend, book_view);
+
+	book_view->priv->running = FALSE;
+	book_view->priv->idle_id = 0;
+
+	return FALSE;
+}
+
+static gboolean
+impl_DataBookView_stop (EGdbusBookView *object, GDBusMethodInvocation *invocation, EDataBookView *book_view)
+{
+	if (book_view->priv->idle_id)
+		g_source_remove (book_view->priv->idle_id);
+
+	book_view->priv->idle_id = g_idle_add (bookview_idle_stop, book_view);
+
+	e_gdbus_book_view_complete_stop (object, invocation);
+
+	return TRUE;
+}
+
+static gboolean
+impl_DataBookView_dispose (EGdbusBookView *object, GDBusMethodInvocation *invocation, EDataBookView *book_view)
+{
+	e_gdbus_book_view_complete_dispose (object, invocation);
+
+	g_object_unref (book_view);
+
+	return TRUE;
+}
+
+static void
+e_data_book_view_init (EDataBookView *book_view)
+{
+	EDataBookViewPrivate *priv = E_DATA_BOOK_VIEW_GET_PRIVATE (book_view);
+	book_view->priv = priv;
+
+	priv->gdbus_object = e_gdbus_book_view_stub_new ();
+	g_signal_connect (priv->gdbus_object, "handle-start", G_CALLBACK (impl_DataBookView_start), book_view);
+	g_signal_connect (priv->gdbus_object, "handle-stop", G_CALLBACK (impl_DataBookView_stop), book_view);
+	g_signal_connect (priv->gdbus_object, "handle-dispose", G_CALLBACK (impl_DataBookView_dispose), book_view);
+
+	priv->running = FALSE;
+	priv->pending_mutex = g_mutex_new ();
+
+	priv->adds = g_array_sized_new (TRUE, TRUE, sizeof (gchar *), THRESHOLD);
+	priv->changes = g_array_sized_new (TRUE, TRUE, sizeof (gchar *), THRESHOLD);
+	priv->removes = g_array_sized_new (TRUE, TRUE, sizeof (gchar *), THRESHOLD);
+
+	priv->ids = g_hash_table_new_full (g_str_hash, g_str_equal,
+					   g_free, NULL);
+}
+
 static void
 e_data_book_view_dispose (GObject *object)
 {
@@ -569,56 +582,6 @@ e_data_book_view_finalize (GObject *object)
 	G_OBJECT_CLASS (e_data_book_view_parent_class)->finalize (object);
 }
 
-static gboolean
-bookview_idle_start (gpointer data)
-{
-	EDataBookView *book_view = data;
-
-	book_view->priv->running = TRUE;
-	book_view->priv->idle_id = 0;
-
-	e_book_backend_start_book_view (book_view->priv->backend, book_view);
-	return FALSE;
-}
-
-static gboolean
-impl_BookView_start (EDataBookView *book_view, GError **error)
-{
-	book_view->priv->idle_id = g_idle_add (bookview_idle_start, book_view);
-	return TRUE;
-}
-
-static gboolean
-bookview_idle_stop (gpointer data)
-{
-	EDataBookView *book_view = data;
-
-	e_book_backend_stop_book_view (book_view->priv->backend, book_view);
-
-	book_view->priv->running = FALSE;
-	book_view->priv->idle_id = 0;
-
-	return FALSE;
-}
-
-static gboolean
-impl_BookView_stop (EDataBookView *book_view, GError **error)
-{
-	if (book_view->priv->idle_id)
-		g_source_remove (book_view->priv->idle_id);
-
-	book_view->priv->idle_id = g_idle_add (bookview_idle_stop, book_view);
-	return TRUE;
-}
-
-static gboolean
-impl_BookView_dispose (EDataBookView *book_view, GError **eror)
-{
-	g_object_unref (book_view);
-
-	return TRUE;
-}
-
 void
 e_data_book_view_set_thresholds (EDataBookView *book_view,
                                  gint minimum_grouping_threshold,
diff --git a/addressbook/libedata-book/e-data-book-view.h b/addressbook/libedata-book/e-data-book-view.h
index eacc142..1f856b9 100644
--- a/addressbook/libedata-book/e-data-book-view.h
+++ b/addressbook/libedata-book/e-data-book-view.h
@@ -26,6 +26,7 @@
 
 #include <glib.h>
 #include <glib-object.h>
+#include <gio/gio.h>
 #include <libebook/e-contact.h>
 #include <libedata-book/e-data-book-types.h>
 #include <libedata-book/e-book-backend.h>
@@ -52,10 +53,11 @@ struct _EDataBookViewClass {
 };
 
 EDataBookView *e_data_book_view_new                  (EDataBook        *book,
-						      const gchar       *path,
-						      const gchar       *card_query,
+						      const gchar      *card_query,
 						      EBookBackendSExp *card_sexp,
-						      gint               max_results);
+						      gint              max_results);
+
+guint e_data_book_view_register_gdbus_object (EDataBookView *query, GDBusConnection *connection, const gchar *object_path, GError **error);
 
 void              e_data_book_view_set_thresholds    (EDataBookView *book_view,
 						      gint minimum_grouping_threshold,
diff --git a/addressbook/libedata-book/e-data-book.c b/addressbook/libedata-book/e-data-book.c
index 9364a0f..163fbd0 100644
--- a/addressbook/libedata-book/e-data-book.c
+++ b/addressbook/libedata-book/e-data-book.c
@@ -22,11 +22,10 @@
 
 #include <unistd.h>
 #include <stdlib.h>
-#include <dbus/dbus.h>
-#include <dbus/dbus-glib.h>
-#include <dbus/dbus-glib-lowlevel.h>
 #include <glib/gi18n.h>
 #include <glib-object.h>
+#include <gio/gio.h>
+
 #include "e-data-book-enumtypes.h"
 #include "e-data-book-factory.h"
 #include "e-data-book.h"
@@ -34,40 +33,22 @@
 #include "e-book-backend-sexp.h"
 #include "opid.h"
 
-DBusGConnection *connection;
-
-/* DBus glue */
-static void impl_AddressBook_Book_open(EDataBook *book, gboolean only_if_exists, DBusGMethodInvocation *context);
-static void impl_AddressBook_Book_remove(EDataBook *book, DBusGMethodInvocation *context);
-static void impl_AddressBook_Book_getContact(EDataBook *book, const gchar *IN_uid, DBusGMethodInvocation *context);
-static void impl_AddressBook_Book_getContactList(EDataBook *book, const gchar *query, DBusGMethodInvocation *context);
-static void impl_AddressBook_Book_authenticateUser(EDataBook *book, const gchar *IN_user, const gchar *IN_passwd, const gchar *IN_auth_method, DBusGMethodInvocation *context);
-static void impl_AddressBook_Book_addContact(EDataBook *book, const gchar *IN_vcard, DBusGMethodInvocation *context);
-static void impl_AddressBook_Book_modifyContact(EDataBook *book, const gchar *IN_vcard, DBusGMethodInvocation *context);
-static void impl_AddressBook_Book_removeContacts(EDataBook *book, const gchar **IN_uids, DBusGMethodInvocation *context);
-static gboolean impl_AddressBook_Book_getStaticCapabilities(EDataBook *book, gchar **OUT_capabilities, GError **error);
-static void impl_AddressBook_Book_getSupportedFields(EDataBook *book, DBusGMethodInvocation *context);
-static void impl_AddressBook_Book_getRequiredFields(EDataBook *book, DBusGMethodInvocation *context);
-static void impl_AddressBook_Book_getSupportedAuthMethods(EDataBook *book, DBusGMethodInvocation *context);
-static void impl_AddressBook_Book_getBookView (EDataBook *book, const gchar *search, const guint max_results, DBusGMethodInvocation *context);
-static void impl_AddressBook_Book_getChanges(EDataBook *book, const gchar *IN_change_id, DBusGMethodInvocation *context);
-static gboolean impl_AddressBook_Book_cancelOperation(EDataBook *book, GError **error);
-static void impl_AddressBook_Book_close(EDataBook *book, DBusGMethodInvocation *context);
-#include "e-data-book-glue.h"
-
-static void return_error_and_list (guint32 opid, GError *error, const gchar *error_fmt, GList *list, gboolean free_data);
-static void data_book_return_error (DBusGMethodInvocation *context, const GError *error, const gchar *error_fmt);
-
-enum {
-	WRITABLE,
-	CONNECTION,
-	AUTH_REQUIRED,
-	LAST_SIGNAL
+#include "e-gdbus-egdbusbook.h"
+
+G_DEFINE_TYPE (EDataBook, e_data_book, G_TYPE_OBJECT)
+
+struct _EDataBookPrivate
+{
+	EGdbusBook *gdbus_object;
+
+	EBookBackend *backend;
+	ESource *source;
 };
 
-static guint signals[LAST_SIGNAL] = { 0 };
+static void return_error_and_list (EGdbusBook *gdbus_object, void (* complete_func) (EGdbusBook *object, GDBusMethodInvocation *invocation, const gchar* const *out_array), guint32 opid, GError *error, const gchar *error_fmt, GList *list, gboolean free_data);
+static void data_book_return_error (GDBusMethodInvocation *invocation, const GError *error, const gchar *error_fmt);
 
-static GThreadPool *op_pool;
+static GThreadPool *op_pool = NULL;
 
 typedef enum {
 	OP_OPEN,
@@ -162,14 +143,14 @@ operation_thread (gpointer data, gpointer user_data)
 }
 
 static OperationData *
-op_new (OperationID op, EDataBook *book, DBusGMethodInvocation *context)
+op_new (OperationID op, EDataBook *book, GDBusMethodInvocation *invocation)
 {
 	OperationData *data;
 
 	data = g_slice_new0 (OperationData);
 	data->op = op;
 	data->book = g_object_ref (book);
-	data->id = opid_store (context);
+	data->id = opid_store (invocation);
 
 	return data;
 }
@@ -205,7 +186,6 @@ e_data_book_status_to_string (EDataBookStatus status)
 		{ E_DATA_BOOK_STATUS_NO_SPACE,				N_("No space") },
 		{ E_DATA_BOOK_STATUS_INVALID_ARG,			N_("Invalid argument") },
 		{ E_DATA_BOOK_STATUS_NOT_SUPPORTED,			N_("Not supported") }
-
 	};
 
 	for (i = 0; i < G_N_ELEMENTS (statuses); i++) {
@@ -220,10 +200,41 @@ e_data_book_status_to_string (EDataBookStatus status)
 GQuark
 e_data_book_error_quark (void)
 {
-	static GQuark quark = 0;
-	if (G_UNLIKELY (quark == 0))
-		quark = g_quark_from_static_string ("e-data-book-error");
-	return quark;
+	#define ERR_PREFIX "org.gnome.evolution.dataserver.addressbook.Book."
+
+	static const GDBusErrorEntry entries[] = {
+		{ E_DATA_BOOK_STATUS_SUCCESS,				ERR_PREFIX "Success" },
+		{ E_DATA_BOOK_STATUS_REPOSITORY_OFFLINE,		ERR_PREFIX "RepositoryOffline" },
+		{ E_DATA_BOOK_STATUS_PERMISSION_DENIED,			ERR_PREFIX "PermissionDenied" },
+		{ E_DATA_BOOK_STATUS_CONTACT_NOT_FOUND,			ERR_PREFIX "ContactNotFound" },
+		{ E_DATA_BOOK_STATUS_CONTACTID_ALREADY_EXISTS,		ERR_PREFIX "ContactIDAlreadyExists" },
+		{ E_DATA_BOOK_STATUS_AUTHENTICATION_FAILED,		ERR_PREFIX "AuthenticationFailed" },
+		{ E_DATA_BOOK_STATUS_AUTHENTICATION_REQUIRED,		ERR_PREFIX "AuthenticationRequired" },
+		{ E_DATA_BOOK_STATUS_UNSUPPORTED_FIELD,			ERR_PREFIX "UnsupportedField" },
+		{ E_DATA_BOOK_STATUS_UNSUPPORTED_AUTHENTICATION_METHOD,	ERR_PREFIX "UnsupportedAuthenticationMethod" },
+		{ E_DATA_BOOK_STATUS_TLS_NOT_AVAILABLE,			ERR_PREFIX "TLSNotAvailable" },
+		{ E_DATA_BOOK_STATUS_NO_SUCH_BOOK,			ERR_PREFIX "NoSuchBook" },
+		{ E_DATA_BOOK_STATUS_BOOK_REMOVED,			ERR_PREFIX "BookRemoved" },
+		{ E_DATA_BOOK_STATUS_OFFLINE_UNAVAILABLE,		ERR_PREFIX "OfflineUnavailable" },
+		{ E_DATA_BOOK_STATUS_SEARCH_SIZE_LIMIT_EXCEEDED,	ERR_PREFIX "SearchSizeLimitExceeded" },
+		{ E_DATA_BOOK_STATUS_SEARCH_TIME_LIMIT_EXCEEDED,	ERR_PREFIX "SearchTimeLimitExceeded" },
+		{ E_DATA_BOOK_STATUS_INVALID_QUERY,			ERR_PREFIX "InvalidQuery" },
+		{ E_DATA_BOOK_STATUS_QUERY_REFUSED,			ERR_PREFIX "QueryRefused" },
+		{ E_DATA_BOOK_STATUS_COULD_NOT_CANCEL,			ERR_PREFIX "CouldNotCancel" },
+		{ E_DATA_BOOK_STATUS_OTHER_ERROR,			ERR_PREFIX "OtherError" },
+		{ E_DATA_BOOK_STATUS_INVALID_SERVER_VERSION,		ERR_PREFIX "InvalidServerVersion" },
+		{ E_DATA_BOOK_STATUS_NO_SPACE,				ERR_PREFIX "NoSpace" },
+		{ E_DATA_BOOK_STATUS_INVALID_ARG,			ERR_PREFIX "InvalidArg" },
+		{ E_DATA_BOOK_STATUS_NOT_SUPPORTED,			ERR_PREFIX "NotSupported" }
+	};
+
+	#undef ERR_PREFIX
+
+	static volatile gsize quark_volatile = 0;
+
+	g_dbus_error_register_error_domain ("e-data-book-error", &quark_volatile, entries, G_N_ELEMENTS (entries));
+
+	return (GQuark) quark_volatile;
 }
 
 GError *
@@ -256,150 +267,74 @@ e_data_book_create_error_fmt (EDataBookStatus status, const gchar *custom_msg_fm
 	return error;
 }
 
-/* Generate the GObject boilerplate */
-G_DEFINE_TYPE(EDataBook, e_data_book, G_TYPE_OBJECT)
-
-static void
-e_data_book_dispose (GObject *object)
-{
-	EDataBook *book = E_DATA_BOOK (object);
-
-	if (book->backend) {
-		g_object_unref (book->backend);
-		book->backend = NULL;
-	}
-
-	if (book->source) {
-		g_object_unref (book->source);
-		book->source = NULL;
-	}
-
-	G_OBJECT_CLASS (e_data_book_parent_class)->dispose (object);
-}
-
-static void
-e_data_book_class_init (EDataBookClass *e_data_book_class)
-{
-	GObjectClass *object_class = G_OBJECT_CLASS (e_data_book_class);
-
-	object_class->dispose = e_data_book_dispose;
-
-	signals[WRITABLE] =
-		g_signal_new ("writable",
-			      G_OBJECT_CLASS_TYPE (e_data_book_class),
-			      G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
-			      0,
-			      NULL, NULL,
-			      g_cclosure_marshal_VOID__BOOLEAN,
-			      G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
-
-	signals[CONNECTION] =
-		g_signal_new ("connection",
-			      G_OBJECT_CLASS_TYPE (e_data_book_class),
-			      G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
-			      0,
-			      NULL, NULL,
-			      g_cclosure_marshal_VOID__BOOLEAN,
-			      G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
-
-	signals[AUTH_REQUIRED] =
-		g_signal_new ("auth-required",
-			      G_OBJECT_CLASS_TYPE (e_data_book_class),
-			      G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
-			      0,
-			      NULL, NULL,
-			      g_cclosure_marshal_VOID__VOID,
-			      G_TYPE_NONE, 0);
-
-	dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (e_data_book_class), &dbus_glib_e_data_book_object_info);
-
-	dbus_g_error_domain_register (E_DATA_BOOK_ERROR, NULL, E_TYPE_DATA_BOOK_STATUS);
-
-	op_pool = g_thread_pool_new (operation_thread, NULL, 10, FALSE, NULL);
-	/* Kill threads which don't do anything for 10 seconds */
-	g_thread_pool_set_max_idle_time (10 * 1000);
-}
-
-/* Instance init */
-static void
-e_data_book_init (EDataBook *ebook)
-{
-}
-
-EDataBook *
-e_data_book_new (EBookBackend *backend, ESource *source)
-{
-	EDataBook *book;
-
-	book = g_object_new (E_TYPE_DATA_BOOK, NULL);
-	book->backend = g_object_ref (backend);
-	book->source = g_object_ref (source);
-
-	return book;
-}
-
 ESource*
 e_data_book_get_source (EDataBook *book)
 {
 	g_return_val_if_fail (book != NULL, NULL);
+	g_return_val_if_fail (E_IS_DATA_BOOK (book), NULL);
 
-	return book->source;
+	return book->priv->source;
 }
 
 EBookBackend*
 e_data_book_get_backend (EDataBook *book)
 {
 	g_return_val_if_fail (book != NULL, NULL);
+	g_return_val_if_fail (E_IS_DATA_BOOK (book), NULL);
 
-	return book->backend;
+	return book->priv->backend;
 }
 
-static void
-impl_AddressBook_Book_open(EDataBook *book, gboolean only_if_exists, DBusGMethodInvocation *context)
+static gboolean
+impl_Book_open (EGdbusBook *object, GDBusMethodInvocation *invocation, gboolean only_if_exists, EDataBook *book)
 {
 	OperationData *op;
 
-	op = op_new (OP_OPEN, book, context);
+	op = op_new (OP_OPEN, book, invocation);
 	op->d.only_if_exists = only_if_exists;
 	g_thread_pool_push (op_pool, op, NULL);
+
+	return TRUE;
 }
 
 void
 e_data_book_respond_open (EDataBook *book, guint opid, GError *error)
 {
-	DBusGMethodInvocation *context = opid_fetch (opid);
+	GDBusMethodInvocation *invocation = opid_fetch (opid);
 
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_book_return_error (context, error, _("Cannot open book: %s"));
+		data_book_return_error (invocation, error, _("Cannot open book: %s"));
 		g_error_free (error);
 	} else {
-		dbus_g_method_return (context);
+		e_gdbus_book_complete_open (book->priv->gdbus_object, invocation);
 	}
 }
 
-static void
-impl_AddressBook_Book_remove(EDataBook *book, DBusGMethodInvocation *context)
+static gboolean
+impl_Book_remove (EGdbusBook *object, GDBusMethodInvocation *invocation, EDataBook *book)
 {
-	e_book_backend_remove (book->backend, book, opid_store (context));
+	e_book_backend_remove (book->priv->backend, book, opid_store (invocation));
+
+	return TRUE;
 }
 
 void
 e_data_book_respond_remove (EDataBook *book, guint opid, GError *error)
 {
-	DBusGMethodInvocation *context = opid_fetch (opid);
+	GDBusMethodInvocation *invocation = opid_fetch (opid);
 
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_book_return_error (context, error, _("Cannot remove book: %s"));
+		data_book_return_error (invocation, error, _("Cannot remove book: %s"));
 		g_error_free (error);
 	} else {
-		dbus_g_method_return (context);
+		e_gdbus_book_complete_remove (book->priv->gdbus_object, invocation);
 	}
 }
 
-static void
-impl_AddressBook_Book_getContact (EDataBook *book, const gchar *IN_uid, DBusGMethodInvocation *context)
+static gboolean
+impl_Book_getContact (EGdbusBook *object, GDBusMethodInvocation *invocation, const gchar *IN_uid, EDataBook *book)
 {
 	OperationData *op;
 
@@ -408,76 +343,82 @@ impl_AddressBook_Book_getContact (EDataBook *book, const gchar *IN_uid, DBusGMet
 
 		error = e_data_book_create_error (E_DATA_BOOK_STATUS_CONTACT_NOT_FOUND, NULL);
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_book_return_error (context, error, _("Cannot get contact: %s"));
+		data_book_return_error (invocation, error, _("Cannot get contact: %s"));
 		g_error_free (error);
-		return;
+		return TRUE;
 	}
 
-	op = op_new (OP_GET_CONTACT, book, context);
+	op = op_new (OP_GET_CONTACT, book, invocation);
 	op->d.uid = g_strdup (IN_uid);
 	g_thread_pool_push (op_pool, op, NULL);
+
+	return TRUE;
 }
 
 void
 e_data_book_respond_get_contact (EDataBook *book, guint32 opid, GError *error, const gchar *vcard)
 {
-	DBusGMethodInvocation *context = opid_fetch (opid);
+	GDBusMethodInvocation *invocation = opid_fetch (opid);
 
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_book_return_error  (context, error, _("Cannot get contact: %s"));
+		data_book_return_error  (invocation, error, _("Cannot get contact: %s"));
 		g_error_free (error);
 	} else {
-		dbus_g_method_return (context, vcard);
+		e_gdbus_book_complete_get_contact (book->priv->gdbus_object, invocation, vcard);
 	}
 }
 
-static void
-impl_AddressBook_Book_getContactList (EDataBook *book, const gchar *query, DBusGMethodInvocation *context)
+static gboolean
+impl_Book_getContactList (EGdbusBook *object, GDBusMethodInvocation *invocation, const gchar *query, EDataBook *book)
 {
 	OperationData *op;
 
 	if (query == NULL || query[0] == '\0') {
 		GError *error = e_data_book_create_error (E_DATA_BOOK_STATUS_INVALID_QUERY, NULL);
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_book_return_error (context, error, _("Empty query: %s"));
+		data_book_return_error (invocation, error, _("Empty query: %s"));
 		g_error_free (error);
-		return;
+		return TRUE;
 	}
 
-	op = op_new (OP_GET_CONTACTS, book, context);
+	op = op_new (OP_GET_CONTACTS, book, invocation);
 	op->d.query = g_strdup (query);
 	g_thread_pool_push (op_pool, op, NULL);
+
+	return TRUE;
 }
 
 void
 e_data_book_respond_get_contact_list (EDataBook *book, guint32 opid, GError *error, GList *cards)
 {
 	/* Translators: The '%s' is replaced with a detailed error message */
-	return_error_and_list (opid, error, _("Cannot get contact list: %s"), cards, TRUE);
+	return_error_and_list (book->priv->gdbus_object, e_gdbus_book_complete_get_contact_list, opid, error, _("Cannot get contact list: %s"), cards, TRUE);
 }
 
-static void
-impl_AddressBook_Book_authenticateUser(EDataBook *book, const gchar *IN_user, const gchar *IN_passwd, const gchar *IN_auth_method, DBusGMethodInvocation *context)
+static gboolean
+impl_Book_authenticateUser (EGdbusBook *object, GDBusMethodInvocation *invocation, const gchar *IN_user, const gchar *IN_passwd, const gchar *IN_auth_method, EDataBook *book)
 {
 	OperationData *op;
 
-	op = op_new (OP_AUTHENTICATE, book, context);
+	op = op_new (OP_AUTHENTICATE, book, invocation);
 	op->d.auth.username = g_strdup (IN_user);
 	op->d.auth.password = g_strdup (IN_passwd);
 	op->d.auth.method = g_strdup (IN_auth_method);
 	g_thread_pool_push (op_pool, op, NULL);
+
+	return TRUE;
 }
 
 static void
-data_book_return_error (DBusGMethodInvocation *context, const GError *perror, const gchar *error_fmt)
+data_book_return_error (GDBusMethodInvocation *invocation, const GError *perror, const gchar *error_fmt)
 {
 	GError *error;
 
 	g_return_if_fail (perror != NULL);
 
 	error = g_error_new (E_DATA_BOOK_ERROR, perror->code, error_fmt, perror->message);
-	dbus_g_method_return_error (context, error);
+	g_dbus_method_invocation_return_gerror (invocation, error);
 
 	g_error_free (error);
 }
@@ -485,115 +426,121 @@ data_book_return_error (DBusGMethodInvocation *context, const GError *perror, co
 void
 e_data_book_respond_authenticate_user (EDataBook *book, guint32 opid, GError *error)
 {
-	DBusGMethodInvocation *context = opid_fetch (opid);
+	GDBusMethodInvocation *invocation = opid_fetch (opid);
 
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_book_return_error (context, error, _("Cannot authenticate user: %s"));
+		data_book_return_error (invocation, error, _("Cannot authenticate user: %s"));
 		g_error_free (error);
 	} else {
-		dbus_g_method_return (context);
+		e_gdbus_book_complete_authenticate_user (book->priv->gdbus_object, invocation);
 	}
 }
 
-static void
-impl_AddressBook_Book_addContact (EDataBook *book, const gchar *IN_vcard, DBusGMethodInvocation *context)
+static gboolean
+impl_Book_addContact (EGdbusBook *object, GDBusMethodInvocation *invocation, const gchar *IN_vcard, EDataBook *book)
 {
 	OperationData *op;
 
 	if (IN_vcard == NULL || IN_vcard[0] == '\0') {
 		GError *error = e_data_book_create_error (E_DATA_BOOK_STATUS_INVALID_QUERY, NULL);
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_book_return_error (context, error, _("Cannot add contact: %s"));
+		data_book_return_error (invocation, error, _("Cannot add contact: %s"));
 		g_error_free (error);
-		return;
+		return TRUE;
 	}
 
-	op = op_new (OP_ADD_CONTACT, book, context);
+	op = op_new (OP_ADD_CONTACT, book, invocation);
 	op->d.vcard = g_strdup (IN_vcard);
 	g_thread_pool_push (op_pool, op, NULL);
+
+	return TRUE;
 }
 
 void
 e_data_book_respond_create (EDataBook *book, guint32 opid, GError *error, EContact *contact)
 {
-	DBusGMethodInvocation *context = opid_fetch (opid);
+	GDBusMethodInvocation *invocation = opid_fetch (opid);
 
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_book_return_error (context, error, _("Cannot add contact: %s"));
+		data_book_return_error (invocation, error, _("Cannot add contact: %s"));
 		g_error_free (error);
 	} else {
 		e_book_backend_notify_update (e_data_book_get_backend (book), contact);
 		e_book_backend_notify_complete (e_data_book_get_backend (book));
 
-		dbus_g_method_return (context, e_contact_get_const (contact, E_CONTACT_UID));
+		e_gdbus_book_complete_add_contact (book->priv->gdbus_object, invocation, e_contact_get_const (contact, E_CONTACT_UID));
 	}
 }
 
-static void
-impl_AddressBook_Book_modifyContact (EDataBook *book, const gchar *IN_vcard, DBusGMethodInvocation *context)
+static gboolean
+impl_Book_modifyContact (EGdbusBook *object, GDBusMethodInvocation *invocation, const gchar *IN_vcard, EDataBook *book)
 {
 	OperationData *op;
 
 	if (IN_vcard == NULL) {
 		GError *error = e_data_book_create_error (E_DATA_BOOK_STATUS_INVALID_QUERY, NULL);
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_book_return_error (context, error, _("Cannot modify contact: %s"));
+		data_book_return_error (invocation, error, _("Cannot modify contact: %s"));
 		g_error_free (error);
-		return;
+		return TRUE;
 	}
 
-	op = op_new (OP_MODIFY_CONTACT, book, context);
+	op = op_new (OP_MODIFY_CONTACT, book, invocation);
 	op->d.vcard = g_strdup (IN_vcard);
 	g_thread_pool_push (op_pool, op, NULL);
+
+	return TRUE;
 }
 
 void
 e_data_book_respond_modify (EDataBook *book, guint32 opid, GError *error, EContact *contact)
 {
-	DBusGMethodInvocation *context = opid_fetch (opid);
+	GDBusMethodInvocation *invocation = opid_fetch (opid);
 
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_book_return_error (context, error, _("Cannot modify contact: %s"));
+		data_book_return_error (invocation, error, _("Cannot modify contact: %s"));
 		g_error_free (error);
 	} else {
 		e_book_backend_notify_update (e_data_book_get_backend (book), contact);
 		e_book_backend_notify_complete (e_data_book_get_backend (book));
 
-		dbus_g_method_return (context);
+		e_gdbus_book_complete_modify_contact (book->priv->gdbus_object, invocation);
 	}
 }
 
-static void
-impl_AddressBook_Book_removeContacts(EDataBook *book, const gchar **IN_uids, DBusGMethodInvocation *context)
+static gboolean
+impl_Book_removeContacts (EGdbusBook *object, GDBusMethodInvocation *invocation, const gchar * const *IN_uids, EDataBook *book)
 {
 	OperationData *op;
 
 	/* Allow an empty array to be removed */
 	if (IN_uids == NULL) {
-		dbus_g_method_return (context);
-		return;
+		e_gdbus_book_complete_remove_contacts (object, invocation);
+		return TRUE;
 	}
 
-	op = op_new (OP_REMOVE_CONTACTS, book, context);
+	op = op_new (OP_REMOVE_CONTACTS, book, invocation);
 
 	for (; *IN_uids; IN_uids++) {
 		op->d.ids = g_list_prepend (op->d.ids, g_strdup (*IN_uids));
 	}
 
 	g_thread_pool_push (op_pool, op, NULL);
+
+	return TRUE;
 }
 
 void
 e_data_book_respond_remove_contacts (EDataBook *book, guint32 opid, GError *error, GList *ids)
 {
-	DBusGMethodInvocation *context = opid_fetch (opid);
+	GDBusMethodInvocation *invocation = opid_fetch (opid);
 
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_book_return_error (context, error, _("Cannot remove contacts: %s"));
+		data_book_return_error (invocation, error, _("Cannot remove contacts: %s"));
 		g_error_free (error);
 	} else {
 		GList *i;
@@ -602,54 +549,65 @@ e_data_book_respond_remove_contacts (EDataBook *book, guint32 opid, GError *erro
 			e_book_backend_notify_remove (e_data_book_get_backend (book), i->data);
 		e_book_backend_notify_complete (e_data_book_get_backend (book));
 
-		dbus_g_method_return (context);
+		e_gdbus_book_complete_remove_contacts (book->priv->gdbus_object, invocation);
 	}
 }
 
 static gboolean
-impl_AddressBook_Book_getStaticCapabilities(EDataBook *book, gchar **OUT_capabilities, GError **error)
+impl_Book_getStaticCapabilities (EGdbusBook *object, GDBusMethodInvocation *invocation, EDataBook *book)
 {
-	*OUT_capabilities = e_book_backend_get_static_capabilities (e_data_book_get_backend (book));
+	gchar *capabilities = e_book_backend_get_static_capabilities (e_data_book_get_backend (book));
+
+	e_gdbus_book_complete_get_static_capabilities (object, invocation, capabilities ? capabilities : "");
+
+	g_free (capabilities);
+
 	return TRUE;
 }
 
-static void
-impl_AddressBook_Book_getSupportedFields(EDataBook *book, DBusGMethodInvocation *context)
+static gboolean
+impl_Book_getSupportedFields (EGdbusBook *object, GDBusMethodInvocation *invocation, EDataBook *book)
 {
-	e_book_backend_get_supported_fields (e_data_book_get_backend (book), book, opid_store (context));
+	e_book_backend_get_supported_fields (e_data_book_get_backend (book), book, opid_store (invocation));
+
+	return TRUE;
 }
 
 void
 e_data_book_respond_get_supported_fields (EDataBook *book, guint32 opid, GError *error, GList *fields)
 {
 	/* Translators: The '%s' is replaced with a detailed error message */
-	return_error_and_list (opid, error, _("Cannot get supported fields: %s"), fields, FALSE);
+	return_error_and_list (book->priv->gdbus_object, e_gdbus_book_complete_get_supported_fields, opid, error, _("Cannot get supported fields: %s"), fields, FALSE);
 }
 
-static void
-impl_AddressBook_Book_getRequiredFields(EDataBook *book, DBusGMethodInvocation *context)
+static gboolean
+impl_Book_getRequiredFields (EGdbusBook *object, GDBusMethodInvocation *invocation, EDataBook *book)
 {
-	e_book_backend_get_required_fields (e_data_book_get_backend (book), book, opid_store (context));
+	e_book_backend_get_required_fields (e_data_book_get_backend (book), book, opid_store (invocation));
+
+	return TRUE;
 }
 
 void
 e_data_book_respond_get_required_fields (EDataBook *book, guint32 opid, GError *error, GList *fields)
 {
 	/* Translators: The '%s' is replaced with a detailed error message */
-	return_error_and_list (opid, error, _("Cannot get required fields: %s"), fields, FALSE);
+	return_error_and_list (book->priv->gdbus_object, e_gdbus_book_complete_get_required_fields, opid, error, _("Cannot get required fields: %s"), fields, FALSE);
 }
 
-static void
-impl_AddressBook_Book_getSupportedAuthMethods(EDataBook *book, DBusGMethodInvocation *context)
+static gboolean
+impl_Book_getSupportedAuthMethods (EGdbusBook *object, GDBusMethodInvocation *invocation, EDataBook *book)
 {
-	e_book_backend_get_supported_auth_methods (e_data_book_get_backend (book), book, opid_store (context));
+	e_book_backend_get_supported_auth_methods (e_data_book_get_backend (book), book, opid_store (invocation));
+
+	return TRUE;
 }
 
 void
 e_data_book_respond_get_supported_auth_methods (EDataBook *book, guint32 opid, GError *error, GList *auth_methods)
 {
 	/* Translators: The '%s' is replaced with a detailed error message */
-	return_error_and_list (opid, error, _("Cannot get supported auth methods: %s"), auth_methods, FALSE);
+	return_error_and_list (book->priv->gdbus_object, e_gdbus_book_complete_get_supported_auth_methods, opid, error, _("Cannot get supported auth methods: %s"), auth_methods, FALSE);
 }
 
 static gchar *
@@ -662,106 +620,123 @@ construct_bookview_path (void)
 				g_atomic_int_exchange_and_add ((int*)&counter, 1));
 }
 
-static void
-impl_AddressBook_Book_getBookView (EDataBook *book, const gchar *search, const guint max_results, DBusGMethodInvocation *context)
+static gboolean
+impl_Book_getBookView (EGdbusBook *object, GDBusMethodInvocation *invocation, const gchar *search, const guint max_results, EDataBook *book)
 {
 	EBookBackend *backend = e_data_book_get_backend (book);
 	EBookBackendSExp *card_sexp;
 	EDataBookView *book_view;
 	gchar *path;
+	GError *error = NULL;
 
 	card_sexp = e_book_backend_sexp_new (search);
 	if (!card_sexp) {
-		GError *error = e_data_book_create_error (E_DATA_BOOK_STATUS_INVALID_QUERY, NULL);
+		error = e_data_book_create_error (E_DATA_BOOK_STATUS_INVALID_QUERY, NULL);
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_book_return_error (context, error, _("Invalid query: %s"));
+		data_book_return_error (invocation, error, _("Invalid query: %s"));
 		g_error_free (error);
-		return;
+		return TRUE;
 	}
 
 	path = construct_bookview_path ();
-	book_view = e_data_book_view_new (book, path, search, card_sexp, max_results);
+	book_view = e_data_book_view_new (book, search, card_sexp, max_results);
+	e_data_book_view_register_gdbus_object (book_view, g_dbus_method_invocation_get_connection (invocation), path, &error);
+
+	if (error) {
+		/* Translators: The '%s' is replaced with a detailed error message */
+		data_book_return_error (invocation, error, _("Invalid query: %s"));
+		g_error_free (error);
+		g_object_unref (book_view);
+		g_free (path);
+
+		return TRUE;
+	}
 
 	e_book_backend_add_book_view (backend, book_view);
 
-	dbus_g_method_return (context, path);
+	e_gdbus_book_complete_get_book_view (object, invocation, path);
+
 	g_free (path);
+
+	return TRUE;
 }
 
-static void
-impl_AddressBook_Book_getChanges(EDataBook *book, const gchar *IN_change_id, DBusGMethodInvocation *context)
+static gboolean
+impl_Book_getChanges (EGdbusBook *object, GDBusMethodInvocation *invocation, const gchar *IN_change_id, EDataBook *book)
 {
 	OperationData *op;
 
-	op = op_new (OP_GET_CHANGES, book, context);
+	op = op_new (OP_GET_CHANGES, book, invocation);
 	op->d.change_id = g_strdup (IN_change_id);
 	g_thread_pool_push (op_pool, op, NULL);
+
+	return TRUE;
 }
 
 void
 e_data_book_respond_get_changes (EDataBook *book, guint32 opid, GError *error, GList *changes)
 {
-	DBusGMethodInvocation *context = opid_fetch (opid);
+	GDBusMethodInvocation *invocation = opid_fetch (opid);
 
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_book_return_error (context, error, _("Cannot get changes: %s"));
+		data_book_return_error (invocation, error, _("Cannot get changes: %s"));
 		g_error_free (error);
 	} else {
-		/* The DBus interface to this is a(us), an array of structs of unsigned ints
-		   and strings.  In dbus-glib this is a GPtrArray of GValueArray of unsigned
-		   gint and strings. */
-		GPtrArray *array;
+		GVariantBuilder *builder;
+		GVariant *variant;
 
-		array = g_ptr_array_new ();
+		builder = g_variant_builder_new (G_VARIANT_TYPE_ARRAY);
 
 		while (changes != NULL) {
 			EDataBookChange *change = (EDataBookChange *) changes->data;
-			GValueArray *vals;
 
-			vals = g_value_array_new (2);
-
-			g_value_array_append (vals, NULL);
-			g_value_init (g_value_array_get_nth (vals, 0), G_TYPE_UINT);
-			g_value_set_uint (g_value_array_get_nth (vals, 0), change->change_type);
-
-			g_value_array_append (vals, NULL);
-			g_value_init (g_value_array_get_nth (vals, 1), G_TYPE_STRING);
-			g_value_take_string (g_value_array_get_nth (vals, 1), change->vcard);
-			/* Now change->vcard is owned by the GValue */
+			g_variant_builder_add (builder, "(us)", change->change_type, change->vcard ? change->vcard : "");
 
+			g_free (change->vcard);
 			g_free (change);
+
 			changes = g_list_remove (changes, change);
 		}
 
-		dbus_g_method_return (context, array);
-		g_ptr_array_foreach (array, (GFunc)g_value_array_free, NULL);
-		g_ptr_array_free (array, TRUE);
+		/* always add one empty value */
+		g_variant_builder_add (builder, "(us)", -1, "");
+
+		variant = g_variant_builder_end (builder);
+
+		e_gdbus_book_complete_get_changes (book->priv->gdbus_object, invocation, variant);
+
+		g_variant_unref (variant);
 	}
 }
 
 static gboolean
-impl_AddressBook_Book_cancelOperation(EDataBook *book, GError **error)
+impl_Book_cancelOperation (EGdbusBook *object, GDBusMethodInvocation *invocation, EDataBook *book)
 {
-	GError *err = NULL;
+	GError *error = NULL;
 
-	e_book_backend_cancel_operation (e_data_book_get_backend (book), book, &err);
+	e_book_backend_cancel_operation (e_data_book_get_backend (book), book, &error);
 
-	if (err) {
-		g_propagate_error (error, err);
-		return FALSE;
+	if (error) {
+		/* Translators: The '%s' is replaced with a detailed error message */
+		data_book_return_error (invocation, error, _("Cancel operation failed: %s"));
+		g_error_free (error);
+	} else {
+		e_gdbus_book_complete_cancel_operation (object, invocation);
 	}
 
 	return TRUE;
 }
 
-static void
-impl_AddressBook_Book_close(EDataBook *book, DBusGMethodInvocation *context)
+static gboolean
+impl_Book_close (EGdbusBook *object, GDBusMethodInvocation *invocation, EDataBook *book)
 {
 	e_book_backend_remove_client (e_data_book_get_backend (book), book);
 	g_object_unref (book);
 
-	dbus_g_method_return (context);
+	e_gdbus_book_complete_close (object, invocation);
+
+	return TRUE;
 }
 
 void
@@ -769,7 +744,7 @@ e_data_book_report_writable (EDataBook *book, gboolean writable)
 {
 	g_return_if_fail (book != NULL);
 
-	g_signal_emit (book, signals[WRITABLE], 0, writable);
+	e_gdbus_book_emit_writable (book->priv->gdbus_object, writable);
 }
 
 void
@@ -777,7 +752,7 @@ e_data_book_report_connection_status (EDataBook *book, gboolean connected)
 {
 	g_return_if_fail (book != NULL);
 
-	g_signal_emit (book, signals[CONNECTION], 0, connected);
+	e_gdbus_book_emit_connection (book->priv->gdbus_object, connected);
 }
 
 void
@@ -785,18 +760,19 @@ e_data_book_report_auth_required (EDataBook *book)
 {
 	g_return_if_fail (book != NULL);
 
-	g_signal_emit (book, signals[AUTH_REQUIRED], 0);
+	e_gdbus_book_emit_auth_required (book->priv->gdbus_object);
 }
 
 static void
-return_error_and_list (guint32 opid, GError *error, const gchar *error_fmt, GList *list, gboolean free_data)
+return_error_and_list (EGdbusBook *gdbus_object, void (* complete_func) (EGdbusBook *object, GDBusMethodInvocation *invocation, const gchar* const *out_array), guint32 opid, GError *error, const gchar *error_fmt, GList *list, gboolean free_data)
 {
-	DBusGMethodInvocation *context = opid_fetch (opid);
+	GDBusMethodInvocation *invocation = opid_fetch (opid);
 
 	g_return_if_fail (error_fmt != NULL);
+	g_return_if_fail (complete_func != NULL);
 
 	if (error) {
-		data_book_return_error (context, error, error_fmt);
+		data_book_return_error (invocation, error, error_fmt);
 		g_error_free (error);
 	} else {
 		gchar **array;
@@ -808,7 +784,7 @@ return_error_and_list (guint32 opid, GError *error, const gchar *error_fmt, GLis
 			array[i++] = l->data;
 		}
 
-		dbus_g_method_return (context, array);
+		complete_func (gdbus_object, invocation, (const gchar * const *) array);
 
 		if (free_data) {
 			g_strfreev (array);
@@ -817,3 +793,95 @@ return_error_and_list (guint32 opid, GError *error, const gchar *error_fmt, GLis
 		}
 	}
 }
+
+/**
+ * e_data_book_register_gdbus_object:
+ *
+ * Registers GDBus object of this EDataBook.
+ **/
+guint
+e_data_book_register_gdbus_object (EDataBook *book, GDBusConnection *connection, const gchar *object_path, GError **error)
+{
+	g_return_val_if_fail (book != NULL, 0);
+	g_return_val_if_fail (E_IS_DATA_BOOK (book), 0);
+	g_return_val_if_fail (connection != NULL, 0);
+	g_return_val_if_fail (object_path != NULL, 0);
+
+	return e_gdbus_book_register_object (book->priv->gdbus_object, connection, object_path, error);
+}
+
+/* Instance init */
+static void
+e_data_book_init (EDataBook *ebook)
+{
+	EGdbusBook *gdbus_object;
+
+	ebook->priv = G_TYPE_INSTANCE_GET_PRIVATE (ebook, E_TYPE_DATA_BOOK, EDataBookPrivate);
+
+	ebook->priv->gdbus_object = e_gdbus_book_stub_new ();
+
+	gdbus_object = ebook->priv->gdbus_object;
+	g_signal_connect (gdbus_object, "handle-open", G_CALLBACK (impl_Book_open), ebook);
+	g_signal_connect (gdbus_object, "handle-remove", G_CALLBACK (impl_Book_remove), ebook);
+	g_signal_connect (gdbus_object, "handle-get-contact", G_CALLBACK (impl_Book_getContact), ebook);
+	g_signal_connect (gdbus_object, "handle-get-contact-list", G_CALLBACK (impl_Book_getContactList), ebook);
+	g_signal_connect (gdbus_object, "handle-authenticate-user", G_CALLBACK (impl_Book_authenticateUser), ebook);
+	g_signal_connect (gdbus_object, "handle-add-contact", G_CALLBACK (impl_Book_addContact), ebook);
+	g_signal_connect (gdbus_object, "handle-remove-contacts", G_CALLBACK (impl_Book_removeContacts), ebook);
+	g_signal_connect (gdbus_object, "handle-modify-contact", G_CALLBACK (impl_Book_modifyContact), ebook);
+	g_signal_connect (gdbus_object, "handle-get-static-capabilities", G_CALLBACK (impl_Book_getStaticCapabilities), ebook);
+	g_signal_connect (gdbus_object, "handle-get-required-fields", G_CALLBACK (impl_Book_getRequiredFields), ebook);
+	g_signal_connect (gdbus_object, "handle-get-supported-fields", G_CALLBACK (impl_Book_getSupportedFields), ebook);
+	g_signal_connect (gdbus_object, "handle-get-supported-auth-methods", G_CALLBACK (impl_Book_getSupportedAuthMethods), ebook);
+	g_signal_connect (gdbus_object, "handle-get-book-view", G_CALLBACK (impl_Book_getBookView), ebook);
+	g_signal_connect (gdbus_object, "handle-get-changes", G_CALLBACK (impl_Book_getChanges), ebook);
+	g_signal_connect (gdbus_object, "handle-cancel-operation", G_CALLBACK (impl_Book_cancelOperation), ebook);
+	g_signal_connect (gdbus_object, "handle-close", G_CALLBACK (impl_Book_close), ebook);
+}
+
+static void
+e_data_book_dispose (GObject *object)
+{
+	EDataBook *book = E_DATA_BOOK (object);
+
+	if (book->priv->backend) {
+		g_object_unref (book->priv->backend);
+		book->priv->backend = NULL;
+	}
+
+	if (book->priv->source) {
+		g_object_unref (book->priv->source);
+		book->priv->source = NULL;
+	}
+
+	G_OBJECT_CLASS (e_data_book_parent_class)->dispose (object);
+}
+
+static void
+e_data_book_class_init (EDataBookClass *klass)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+	g_type_class_add_private (klass, sizeof (EDataBookPrivate));
+
+	object_class->dispose = e_data_book_dispose;
+
+	if (!op_pool) {
+		op_pool = g_thread_pool_new (operation_thread, NULL, 10, FALSE, NULL);
+
+		/* Kill threads which don't do anything for 10 seconds */
+		g_thread_pool_set_max_idle_time (10 * 1000);
+	}
+}
+
+EDataBook *
+e_data_book_new (EBookBackend *backend, ESource *source)
+{
+	EDataBook *book;
+
+	book = g_object_new (E_TYPE_DATA_BOOK, NULL);
+	book->priv->backend = g_object_ref (backend);
+	book->priv->source = g_object_ref (source);
+
+	return book;
+}
diff --git a/addressbook/libedata-book/e-data-book.h b/addressbook/libedata-book/e-data-book.h
index c879e1f..027f841 100644
--- a/addressbook/libedata-book/e-data-book.h
+++ b/addressbook/libedata-book/e-data-book.h
@@ -24,7 +24,7 @@
 #define __E_DATA_BOOK_H__
 
 #include <glib-object.h>
-#include <dbus/dbus-glib.h>
+#include <gio/gio.h>
 #include <libedataserver/e-source.h>
 #include "e-book-backend.h"
 #include "e-data-book-types.h"
@@ -38,10 +38,12 @@ G_BEGIN_DECLS
 #define E_IS_DATA_BOOK_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TYPE_DATA_BOOK))
 #define E_DATA_BOOK_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), E_TYPE_DATA_BOOK, EDataBookClass))
 
+typedef struct _EDataBookPrivate EDataBookPrivate;
+
 struct _EDataBook {
 	GObject parent;
-	EBookBackend *backend;
-	ESource *source;
+
+	EDataBookPrivate *priv;
 };
 
 struct _EDataBookClass {
@@ -95,6 +97,9 @@ const gchar *e_data_book_status_to_string (EDataBookStatus status);
 	} G_STMT_END
 
 EDataBook		*e_data_book_new                    (EBookBackend *backend, ESource *source);
+
+guint			e_data_book_register_gdbus_object (EDataBook *cal, GDBusConnection *connection, const gchar *object_path, GError **error);
+
 EBookBackend		*e_data_book_get_backend            (EDataBook *book);
 ESource			*e_data_book_get_source             (EDataBook *book);
 
diff --git a/addressbook/libegdbus/Makefile.am b/addressbook/libegdbus/Makefile.am
new file mode 100644
index 0000000..bc483d1
--- /dev/null
+++ b/addressbook/libegdbus/Makefile.am
@@ -0,0 +1,38 @@
+GDBUS_XML_FILES =					\
+	../libedata-book/e-data-book-factory.xml	\
+	../libedata-book/e-data-book-view.xml		\
+	../libedata-book/e-data-book.xml
+
+gdbus-files: $(GDBUS_XML_FILES)
+	gdbus-codegen --namespace=EGdbus --strip-prefix=org.gnome.evolution.dataserver.addressbook --output-prefix=e-gdbus $(GDBUS_XML_FILES)
+	rm e-gdbus-bindings.h
+	rm e-gdbus-bindings.stamp
+
+# The library
+noinst_LTLIBRARIES = libegdbus-book.la
+
+libegdbus_book_la_CPPFLAGS =			\
+	$(AM_CPPFLAGS)				\
+	-DG_LOG_DOMAIN=\"libegdbus-book\"	\
+	-I$(top_srcdir)/addressbook		\
+	$(GNOME_PLATFORM_CFLAGS)
+
+libegdbus_book_la_SOURCES =			\
+	e-gdbus-egdbusbook.h			\
+	e-gdbus-egdbusbook.c			\
+	e-gdbus-egdbusbookfactory.h		\
+	e-gdbus-egdbusbookfactory.c		\
+	e-gdbus-egdbusbookview.h		\
+	e-gdbus-egdbusbookview.c		\
+	e-gdbus-marshallers.h			\
+	e-gdbus-marshallers.c			\
+	e-gdbus-typemappers.h
+
+libegdbus_book_la_LIBADD =			\
+	$(GNOME_PLATFORM_LIBS)
+
+libegdbus_book_la_LDFLAGS = $(NO_UNDEFINED)
+
+EXTRA_DIST = e-gdbus-marshallers.list
+
+-include $(top_srcdir)/git.mk
diff --git a/addressbook/libegdbus/e-gdbus-egdbusbook.c b/addressbook/libegdbus/e-gdbus-egdbusbook.c
new file mode 100644
index 0000000..90c748f
--- /dev/null
+++ b/addressbook/libegdbus/e-gdbus-egdbusbook.c
@@ -0,0 +1,4525 @@
+/* File:       e-gdbus-egdbusbook.c
+ *
+ * GType name: EGdbusBook
+ * D-Bus name: org.gnome.evolution.dataserver.addressbook.Book
+ *
+ * Generated by GDBus Binding Tool 0.1. DO NOT EDIT.
+ */
+
+/**
+ * SECTION:e-gdbus-egdbusbook
+ * @title: EGdbusBook
+ * @short_description: Wraps the org.gnome.evolution.dataserver.addressbook.Book D-Bus interface
+ * @include: gio/gio.h
+ *
+ * The abstract #EGdbusBook interface type wraps the <literal>org.gnome.evolution.dataserver.addressbook.Book</literal> D-Bus interface. Two concrete implementations of this type are included: #EGdbusBookProxy and #EGdbusBookStub.
+ *
+ * The generated proxy type #EGdbusBookProxy is typically used with the generated constructors e_gdbus_book_proxy_new(), e_gdbus_book_proxy_new_sync() and e_gdbus_book_proxy_new_for_bus(), e_gdbus_book_proxy_new_for_bus_sync().
+ *
+ * The generated stub type #EGdbusBookStub takes care of handling properties, method invocations and signal emissions. Simply use e_gdbus_book_stub_new(), set some properties and connect to any of the handle-* signals to handle method invocations. Finally use e_gdbus_book_register_object() to export the object on a #GDBusConnection.
+ * |[
+ * /<!-- -->* You can also use g_object_new() with E_GDBUS_TYPE_BOOK_STUB
+ *  * to set properties at construction time.
+ *  *<!-- -->/
+ * object = e_gdbus_book_stub_new ();
+ * e_gdbus_book_set_&lt;property_name&gt; (object, &lt;value_for_property&gt;);
+ * [...]
+ *
+ * g_signal_connect (object,
+ *                   "handle-&lt;method-name&gt;",
+ *                   G_CALLBACK (on_handle_&lt;method_name&gt;),
+ *                   some_user_data);
+ * [...]
+ *
+ * error = NULL;
+ * id = e_gdbus_book_register_object (object,
+ *                                    connection,
+ *                                    "/path/of/object",
+ *                                    &error);
+ * ]|
+ *
+ * You don't <emphasis>have</emphasis> to use the generated stub type to export
+ * objects. Any type implementing the #EGdbusBook interface may be used with
+ * e_gdbus_book_register_object().
+ *
+ * Once exported, you can make the exported object emit D-Bus signals by simply
+ * emitting the corresponding GType signals. For better type-safety, you can use,
+ * the provided e_gdbus_book_emit_*() helpers.
+ *
+ * For property changes, #GObject::notify signal emissions on exported objects 
+ * will be intercepted and queued. In an idle handler, the queued notifications
+ * are processed and a single <literal>PropertiesChanged</literal> signal (on the
+ * <literal>org.freedesktop.DBus.Properties</literal> interface) will be emitted
+ * for all the properties that changed (possibly containing several properties).
+ * Use e_gdbus_book_drain_notify() to drain the queue immediately.
+ */
+
+#include "e-gdbus-egdbusbook.h"
+#include "e-gdbus-typemappers.h"
+#include "e-gdbus-marshallers.h"
+
+typedef EGdbusBookIface EGdbusBookInterface;
+G_DEFINE_INTERFACE (EGdbusBook, e_gdbus_book, G_TYPE_OBJECT);
+
+
+enum
+{
+  _0_SIGNAL,
+  __WRITABLE_SIGNAL,
+  __CONNECTION_SIGNAL,
+  __AUTH_REQUIRED_SIGNAL,
+  __OPEN_METHOD,
+  __REMOVE_METHOD,
+  __GET_CONTACT_METHOD,
+  __GET_CONTACT_LIST_METHOD,
+  __AUTHENTICATE_USER_METHOD,
+  __ADD_CONTACT_METHOD,
+  __REMOVE_CONTACTS_METHOD,
+  __MODIFY_CONTACT_METHOD,
+  __GET_STATIC_CAPABILITIES_METHOD,
+  __GET_REQUIRED_FIELDS_METHOD,
+  __GET_SUPPORTED_FIELDS_METHOD,
+  __GET_SUPPORTED_AUTH_METHODS_METHOD,
+  __GET_BOOK_VIEW_METHOD,
+  __GET_CHANGES_METHOD,
+  __CANCEL_OPERATION_METHOD,
+  __CLOSE_METHOD,
+  __LAST_SIGNAL
+};
+
+static guint signals[__LAST_SIGNAL] = {0};
+
+
+enum
+{
+  PROP_0,
+};
+
+/* ------------------------------------------------------------------------- */
+
+/* Various lookup tables */
+
+static GHashTable *_method_name_to_id = NULL;
+static GHashTable *_signal_name_to_id = NULL;
+static GHashTable *_property_name_to_id = NULL;
+static GHashTable *_property_gname_to_name = NULL;
+static GHashTable *_property_name_to_gname = NULL;
+
+
+static guint
+lookup_method_id_from_method_name (const gchar *method_name)
+{
+  return GPOINTER_TO_UINT (g_hash_table_lookup (_method_name_to_id, method_name));
+}
+
+static guint
+lookup_signal_id_from_signal_name (const gchar *signal_name)
+{
+  return GPOINTER_TO_UINT (g_hash_table_lookup (_signal_name_to_id, signal_name));
+}
+
+static guint
+lookup_property_id_from_property_name (const gchar *property_name)
+{
+  return GPOINTER_TO_UINT (g_hash_table_lookup (_property_name_to_id, property_name));
+}
+
+static const gchar *
+lookup_property_name_from_property_gname (const gchar *property_gname)
+{
+  return g_hash_table_lookup (_property_gname_to_name, property_gname);
+}
+
+static const gchar *
+lookup_property_gname_from_property_name (const gchar *property_name)
+{
+  return g_hash_table_lookup (_property_name_to_gname, property_name);
+}
+
+/* ------------------------------------------------------------------------- */
+static gboolean
+signal_emission_hook_cb_writable (GSignalInvocationHint *ihint,
+                         guint                  n_param_values,
+                         const GValue          *param_values,
+                         gpointer               user_data)
+{
+  GObject *object;
+  GDBusConnection *connection;
+  const gchar *path;
+  GVariant *params;
+  GVariant *item;
+  GVariantBuilder *builder;
+
+  if (n_param_values < 1 || !G_VALUE_HOLDS (&param_values[0], G_TYPE_OBJECT))
+    goto out;
+  object = g_value_get_object (&param_values[0]);
+  path = g_object_get_data (object, "gdbus-codegen-path");
+  connection = g_object_get_data (object, "gdbus-codegen-connection");
+  if (connection == NULL || path == NULL)
+    goto out;
+
+  builder = g_variant_builder_new (G_VARIANT_TYPE_TUPLE);
+  g_assert_cmpint (n_param_values - 1, ==, 1);
+  param_values++;
+  item = g_variant_new_boolean (g_value_get_boolean (param_values));
+  g_variant_builder_add_value (builder, item);
+  param_values++;
+  params = g_variant_builder_end (builder);
+  g_variant_builder_unref (builder);
+
+  g_dbus_connection_emit_signal (connection,
+                                 NULL,
+                                 path,
+                                 "org.gnome.evolution.dataserver.addressbook.Book",
+                                 "writable",
+                                 params,
+                                 NULL);
+out:
+  return TRUE;
+}
+
+static gboolean
+signal_emission_hook_cb_connection (GSignalInvocationHint *ihint,
+                         guint                  n_param_values,
+                         const GValue          *param_values,
+                         gpointer               user_data)
+{
+  GObject *object;
+  GDBusConnection *connection;
+  const gchar *path;
+  GVariant *params;
+  GVariant *item;
+  GVariantBuilder *builder;
+
+  if (n_param_values < 1 || !G_VALUE_HOLDS (&param_values[0], G_TYPE_OBJECT))
+    goto out;
+  object = g_value_get_object (&param_values[0]);
+  path = g_object_get_data (object, "gdbus-codegen-path");
+  connection = g_object_get_data (object, "gdbus-codegen-connection");
+  if (connection == NULL || path == NULL)
+    goto out;
+
+  builder = g_variant_builder_new (G_VARIANT_TYPE_TUPLE);
+  g_assert_cmpint (n_param_values - 1, ==, 1);
+  param_values++;
+  item = g_variant_new_boolean (g_value_get_boolean (param_values));
+  g_variant_builder_add_value (builder, item);
+  param_values++;
+  params = g_variant_builder_end (builder);
+  g_variant_builder_unref (builder);
+
+  g_dbus_connection_emit_signal (connection,
+                                 NULL,
+                                 path,
+                                 "org.gnome.evolution.dataserver.addressbook.Book",
+                                 "connection",
+                                 params,
+                                 NULL);
+out:
+  return TRUE;
+}
+
+static gboolean
+signal_emission_hook_cb_auth_required (GSignalInvocationHint *ihint,
+                         guint                  n_param_values,
+                         const GValue          *param_values,
+                         gpointer               user_data)
+{
+  GObject *object;
+  GDBusConnection *connection;
+  const gchar *path;
+  GVariant *params;
+
+  if (n_param_values < 1 || !G_VALUE_HOLDS (&param_values[0], G_TYPE_OBJECT))
+    goto out;
+  object = g_value_get_object (&param_values[0]);
+  path = g_object_get_data (object, "gdbus-codegen-path");
+  connection = g_object_get_data (object, "gdbus-codegen-connection");
+  if (connection == NULL || path == NULL)
+    goto out;
+
+  params = NULL;
+
+  g_dbus_connection_emit_signal (connection,
+                                 NULL,
+                                 path,
+                                 "org.gnome.evolution.dataserver.addressbook.Book",
+                                 "auth_required",
+                                 params,
+                                 NULL);
+out:
+  return TRUE;
+}
+
+static void
+e_gdbus_book_default_init (EGdbusBookIface *iface)
+{
+
+  /* Build lookup structures */
+  _method_name_to_id = g_hash_table_new (g_str_hash, g_str_equal);
+  _signal_name_to_id = g_hash_table_new (g_str_hash, g_str_equal);
+  _property_name_to_id = g_hash_table_new (g_str_hash, g_str_equal);
+  _property_gname_to_name = g_hash_table_new (g_str_hash, g_str_equal);
+  _property_name_to_gname = g_hash_table_new (g_str_hash, g_str_equal);
+  g_hash_table_insert (_method_name_to_id, (gpointer) "open", GUINT_TO_POINTER (__OPEN_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "remove", GUINT_TO_POINTER (__REMOVE_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "getContact", GUINT_TO_POINTER (__GET_CONTACT_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "getContactList", GUINT_TO_POINTER (__GET_CONTACT_LIST_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "authenticateUser", GUINT_TO_POINTER (__AUTHENTICATE_USER_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "addContact", GUINT_TO_POINTER (__ADD_CONTACT_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "removeContacts", GUINT_TO_POINTER (__REMOVE_CONTACTS_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "modifyContact", GUINT_TO_POINTER (__MODIFY_CONTACT_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "getStaticCapabilities", GUINT_TO_POINTER (__GET_STATIC_CAPABILITIES_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "getRequiredFields", GUINT_TO_POINTER (__GET_REQUIRED_FIELDS_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "getSupportedFields", GUINT_TO_POINTER (__GET_SUPPORTED_FIELDS_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "getSupportedAuthMethods", GUINT_TO_POINTER (__GET_SUPPORTED_AUTH_METHODS_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "getBookView", GUINT_TO_POINTER (__GET_BOOK_VIEW_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "getChanges", GUINT_TO_POINTER (__GET_CHANGES_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "cancelOperation", GUINT_TO_POINTER (__CANCEL_OPERATION_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "close", GUINT_TO_POINTER (__CLOSE_METHOD));
+  g_hash_table_insert (_signal_name_to_id, (gpointer) "writable", GUINT_TO_POINTER (__WRITABLE_SIGNAL));
+  g_hash_table_insert (_signal_name_to_id, (gpointer) "connection", GUINT_TO_POINTER (__CONNECTION_SIGNAL));
+  g_hash_table_insert (_signal_name_to_id, (gpointer) "auth_required", GUINT_TO_POINTER (__AUTH_REQUIRED_SIGNAL));
+
+  /* GObject signals definitions for D-Bus signals: */
+  /**
+   * EGdbusBook::writable:
+   * @object: The object emitting the signal.
+   * @value: Parameter.
+   *
+   * Represents the D-Bus signal <literal>writable</literal>.
+   *
+   * On proxies, connect to this signal to get notified whenever the remote
+   * object instances emits the signal (similar to how the
+   * #GDBusProxy::g-signal works). The signal is emitted in the
+   * thread-default main loop of the thread that the proxy was created in.
+   *
+   * On exported objects, emitting this signal causes the actual D-Bus signal to be emitted. You can use e_gdbus_book_emit_writable() to do this.
+   */  signals[__WRITABLE_SIGNAL] =
+    g_signal_new ("writable",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusBookIface, writable),
+                  NULL,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_VOID__BOOLEAN,
+                  G_TYPE_NONE,
+                  1,
+                  G_TYPE_BOOLEAN);
+  g_signal_add_emission_hook (signals[__WRITABLE_SIGNAL],
+                              0,
+                              signal_emission_hook_cb_writable,
+                              (gpointer) "writable",
+                              NULL);
+
+  /**
+   * EGdbusBook::connection:
+   * @object: The object emitting the signal.
+   * @connected: Parameter.
+   *
+   * Represents the D-Bus signal <literal>connection</literal>.
+   *
+   * On proxies, connect to this signal to get notified whenever the remote
+   * object instances emits the signal (similar to how the
+   * #GDBusProxy::g-signal works). The signal is emitted in the
+   * thread-default main loop of the thread that the proxy was created in.
+   *
+   * On exported objects, emitting this signal causes the actual D-Bus signal to be emitted. You can use e_gdbus_book_emit_connection() to do this.
+   */  signals[__CONNECTION_SIGNAL] =
+    g_signal_new ("connection",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusBookIface, connection),
+                  NULL,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_VOID__BOOLEAN,
+                  G_TYPE_NONE,
+                  1,
+                  G_TYPE_BOOLEAN);
+  g_signal_add_emission_hook (signals[__CONNECTION_SIGNAL],
+                              0,
+                              signal_emission_hook_cb_connection,
+                              (gpointer) "connection",
+                              NULL);
+
+  /**
+   * EGdbusBook::auth-required:
+   * @object: The object emitting the signal.
+   *
+   * Represents the D-Bus signal <literal>auth_required</literal>.
+   *
+   * On proxies, connect to this signal to get notified whenever the remote
+   * object instances emits the signal (similar to how the
+   * #GDBusProxy::g-signal works). The signal is emitted in the
+   * thread-default main loop of the thread that the proxy was created in.
+   *
+   * On exported objects, emitting this signal causes the actual D-Bus signal to be emitted. You can use e_gdbus_book_emit_auth_required() to do this.
+   */  signals[__AUTH_REQUIRED_SIGNAL] =
+    g_signal_new ("auth-required",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusBookIface, auth_required),
+                  NULL,
+                  NULL,
+                  g_cclosure_marshal_VOID__VOID,
+                  G_TYPE_NONE,
+                  0);
+  g_signal_add_emission_hook (signals[__AUTH_REQUIRED_SIGNAL],
+                              0,
+                              signal_emission_hook_cb_auth_required,
+                              (gpointer) "auth_required",
+                              NULL);
+
+
+  /* GObject signals definitions for D-Bus methods: */
+  /**
+   * EGdbusBook::handle-open:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   * @only_if_exists: Parameter.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>open</literal> D-Bus method on @object. Use e_gdbus_book_complete_open() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_book_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__OPEN_METHOD] =
+    g_signal_new ("handle-open",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusBookIface, handle_open),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_BOOLEAN,
+                  G_TYPE_BOOLEAN,
+                  2,
+                  G_TYPE_DBUS_METHOD_INVOCATION,
+                  G_TYPE_BOOLEAN);
+  /**
+   * EGdbusBook::handle-remove:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>remove</literal> D-Bus method on @object. Use e_gdbus_book_complete_remove() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_book_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__REMOVE_METHOD] =
+    g_signal_new ("handle-remove",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusBookIface, handle_remove),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT,
+                  G_TYPE_BOOLEAN,
+                  1,
+                  G_TYPE_DBUS_METHOD_INVOCATION);
+  /**
+   * EGdbusBook::handle-get-contact:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   * @uid: Parameter.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>getContact</literal> D-Bus method on @object. Use e_gdbus_book_complete_get_contact() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_book_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__GET_CONTACT_METHOD] =
+    g_signal_new ("handle-get-contact",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusBookIface, handle_get_contact),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING,
+                  G_TYPE_BOOLEAN,
+                  2,
+                  G_TYPE_DBUS_METHOD_INVOCATION,
+                  G_TYPE_STRING);
+  /**
+   * EGdbusBook::handle-get-contact-list:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   * @query: Parameter.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>getContactList</literal> D-Bus method on @object. Use e_gdbus_book_complete_get_contact_list() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_book_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__GET_CONTACT_LIST_METHOD] =
+    g_signal_new ("handle-get-contact-list",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusBookIface, handle_get_contact_list),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING,
+                  G_TYPE_BOOLEAN,
+                  2,
+                  G_TYPE_DBUS_METHOD_INVOCATION,
+                  G_TYPE_STRING);
+  /**
+   * EGdbusBook::handle-authenticate-user:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   * @user: Parameter.
+   * @passwd: Parameter.
+   * @auth_method: Parameter.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>authenticateUser</literal> D-Bus method on @object. Use e_gdbus_book_complete_authenticate_user() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_book_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__AUTHENTICATE_USER_METHOD] =
+    g_signal_new ("handle-authenticate-user",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusBookIface, handle_authenticate_user),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING_STRING_STRING,
+                  G_TYPE_BOOLEAN,
+                  4,
+                  G_TYPE_DBUS_METHOD_INVOCATION,
+                  G_TYPE_STRING,
+                  G_TYPE_STRING,
+                  G_TYPE_STRING);
+  /**
+   * EGdbusBook::handle-add-contact:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   * @vcard: Parameter.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>addContact</literal> D-Bus method on @object. Use e_gdbus_book_complete_add_contact() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_book_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__ADD_CONTACT_METHOD] =
+    g_signal_new ("handle-add-contact",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusBookIface, handle_add_contact),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING,
+                  G_TYPE_BOOLEAN,
+                  2,
+                  G_TYPE_DBUS_METHOD_INVOCATION,
+                  G_TYPE_STRING);
+  /**
+   * EGdbusBook::handle-remove-contacts:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   * @list: Parameter.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>removeContacts</literal> D-Bus method on @object. Use e_gdbus_book_complete_remove_contacts() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_book_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__REMOVE_CONTACTS_METHOD] =
+    g_signal_new ("handle-remove-contacts",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusBookIface, handle_remove_contacts),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_BOXED,
+                  G_TYPE_BOOLEAN,
+                  2,
+                  G_TYPE_DBUS_METHOD_INVOCATION,
+                  G_TYPE_STRV);
+  /**
+   * EGdbusBook::handle-modify-contact:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   * @vcard: Parameter.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>modifyContact</literal> D-Bus method on @object. Use e_gdbus_book_complete_modify_contact() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_book_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__MODIFY_CONTACT_METHOD] =
+    g_signal_new ("handle-modify-contact",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusBookIface, handle_modify_contact),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING,
+                  G_TYPE_BOOLEAN,
+                  2,
+                  G_TYPE_DBUS_METHOD_INVOCATION,
+                  G_TYPE_STRING);
+  /**
+   * EGdbusBook::handle-get-static-capabilities:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>getStaticCapabilities</literal> D-Bus method on @object. Use e_gdbus_book_complete_get_static_capabilities() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_book_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__GET_STATIC_CAPABILITIES_METHOD] =
+    g_signal_new ("handle-get-static-capabilities",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusBookIface, handle_get_static_capabilities),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT,
+                  G_TYPE_BOOLEAN,
+                  1,
+                  G_TYPE_DBUS_METHOD_INVOCATION);
+  /**
+   * EGdbusBook::handle-get-required-fields:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>getRequiredFields</literal> D-Bus method on @object. Use e_gdbus_book_complete_get_required_fields() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_book_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__GET_REQUIRED_FIELDS_METHOD] =
+    g_signal_new ("handle-get-required-fields",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusBookIface, handle_get_required_fields),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT,
+                  G_TYPE_BOOLEAN,
+                  1,
+                  G_TYPE_DBUS_METHOD_INVOCATION);
+  /**
+   * EGdbusBook::handle-get-supported-fields:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>getSupportedFields</literal> D-Bus method on @object. Use e_gdbus_book_complete_get_supported_fields() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_book_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__GET_SUPPORTED_FIELDS_METHOD] =
+    g_signal_new ("handle-get-supported-fields",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusBookIface, handle_get_supported_fields),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT,
+                  G_TYPE_BOOLEAN,
+                  1,
+                  G_TYPE_DBUS_METHOD_INVOCATION);
+  /**
+   * EGdbusBook::handle-get-supported-auth-methods:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>getSupportedAuthMethods</literal> D-Bus method on @object. Use e_gdbus_book_complete_get_supported_auth_methods() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_book_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__GET_SUPPORTED_AUTH_METHODS_METHOD] =
+    g_signal_new ("handle-get-supported-auth-methods",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusBookIface, handle_get_supported_auth_methods),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT,
+                  G_TYPE_BOOLEAN,
+                  1,
+                  G_TYPE_DBUS_METHOD_INVOCATION);
+  /**
+   * EGdbusBook::handle-get-book-view:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   * @query: Parameter.
+   * @max_results: Parameter.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>getBookView</literal> D-Bus method on @object. Use e_gdbus_book_complete_get_book_view() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_book_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__GET_BOOK_VIEW_METHOD] =
+    g_signal_new ("handle-get-book-view",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusBookIface, handle_get_book_view),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING_UINT,
+                  G_TYPE_BOOLEAN,
+                  3,
+                  G_TYPE_DBUS_METHOD_INVOCATION,
+                  G_TYPE_STRING,
+                  G_TYPE_UINT);
+  /**
+   * EGdbusBook::handle-get-changes:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   * @change_id: Parameter.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>getChanges</literal> D-Bus method on @object. Use e_gdbus_book_complete_get_changes() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_book_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__GET_CHANGES_METHOD] =
+    g_signal_new ("handle-get-changes",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusBookIface, handle_get_changes),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING,
+                  G_TYPE_BOOLEAN,
+                  2,
+                  G_TYPE_DBUS_METHOD_INVOCATION,
+                  G_TYPE_STRING);
+  /**
+   * EGdbusBook::handle-cancel-operation:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>cancelOperation</literal> D-Bus method on @object. Use e_gdbus_book_complete_cancel_operation() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_book_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__CANCEL_OPERATION_METHOD] =
+    g_signal_new ("handle-cancel-operation",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusBookIface, handle_cancel_operation),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT,
+                  G_TYPE_BOOLEAN,
+                  1,
+                  G_TYPE_DBUS_METHOD_INVOCATION);
+  /**
+   * EGdbusBook::handle-close:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>close</literal> D-Bus method on @object. Use e_gdbus_book_complete_close() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_book_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__CLOSE_METHOD] =
+    g_signal_new ("handle-close",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusBookIface, handle_close),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT,
+                  G_TYPE_BOOLEAN,
+                  1,
+                  G_TYPE_DBUS_METHOD_INVOCATION);
+
+  /* GObject property definitions for D-Bus properties: */
+}
+
+
+/* C Bindings for properties */
+
+/**
+ * e_gdbus_book_call_open:
+ * @proxy: A #EGdbusBook.
+ * @in_only_if_exists: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.open</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_book_call_open_finish() to get the result of the operation.
+ *
+ * See e_gdbus_book_call_open_sync() for the synchronous version of this method.
+ */
+void e_gdbus_book_call_open (
+        EGdbusBook *proxy,
+        gboolean in_only_if_exists,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(b)",
+                           in_only_if_exists);
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "open",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_book_call_open_finish:
+ * @proxy: A #EGdbusBook.
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_book_call_open().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.addressbook.Book.open</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_open_finish (
+        EGdbusBook *proxy,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_book_call_open_sync:
+ * @proxy: A #EGdbusBook.
+ * @in_only_if_exists: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.open</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_book_call_open() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_open_sync (
+        EGdbusBook *proxy,
+        gboolean in_only_if_exists,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = g_variant_new ("(b)",
+                           in_only_if_exists);
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "open",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_book_call_remove:
+ * @proxy: A #EGdbusBook.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.remove</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_book_call_remove_finish() to get the result of the operation.
+ *
+ * See e_gdbus_book_call_remove_sync() for the synchronous version of this method.
+ */
+void e_gdbus_book_call_remove (
+        EGdbusBook *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = NULL;
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "remove",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_book_call_remove_finish:
+ * @proxy: A #EGdbusBook.
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_book_call_remove().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.addressbook.Book.remove</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_remove_finish (
+        EGdbusBook *proxy,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_book_call_remove_sync:
+ * @proxy: A #EGdbusBook.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.remove</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_book_call_remove() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_remove_sync (
+        EGdbusBook *proxy,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = NULL;
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "remove",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_book_call_get_contact:
+ * @proxy: A #EGdbusBook.
+ * @in_uid: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.getContact</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_book_call_get_contact_finish() to get the result of the operation.
+ *
+ * See e_gdbus_book_call_get_contact_sync() for the synchronous version of this method.
+ */
+void e_gdbus_book_call_get_contact (
+        EGdbusBook *proxy,
+        const gchar *in_uid,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(s)",
+                           in_uid);
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "getContact",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_book_call_get_contact_finish:
+ * @proxy: A #EGdbusBook.
+ * @out_vcard: Return location for out parameter or %NULL. Free with g_free().
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_book_call_get_contact().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.addressbook.Book.getContact</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_get_contact_finish (
+        EGdbusBook *proxy,
+        gchar **out_vcard,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(s)",
+                   out_vcard);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_book_call_get_contact_sync:
+ * @proxy: A #EGdbusBook.
+ * @in_uid: Method parameter.
+ * @out_vcard: Return location for out parameter or %NULL. Free with g_free().
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.getContact</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_book_call_get_contact() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_get_contact_sync (
+        EGdbusBook *proxy,
+        const gchar *in_uid,
+        gchar **out_vcard,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = g_variant_new ("(s)",
+                           in_uid);
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "getContact",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(s)",
+                   out_vcard);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_book_call_get_contact_list:
+ * @proxy: A #EGdbusBook.
+ * @in_query: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.getContactList</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_book_call_get_contact_list_finish() to get the result of the operation.
+ *
+ * See e_gdbus_book_call_get_contact_list_sync() for the synchronous version of this method.
+ */
+void e_gdbus_book_call_get_contact_list (
+        EGdbusBook *proxy,
+        const gchar *in_query,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(s)",
+                           in_query);
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "getContactList",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_book_call_get_contact_list_finish:
+ * @proxy: A #EGdbusBook.
+ * @out_vcards: Return location for out parameter or %NULL. Free with g_strfreev().
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_book_call_get_contact_list().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.addressbook.Book.getContactList</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_get_contact_list_finish (
+        EGdbusBook *proxy,
+        gchar ***out_vcards,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(^as)",
+                   out_vcards);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_book_call_get_contact_list_sync:
+ * @proxy: A #EGdbusBook.
+ * @in_query: Method parameter.
+ * @out_vcards: Return location for out parameter or %NULL. Free with g_strfreev().
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.getContactList</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_book_call_get_contact_list() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_get_contact_list_sync (
+        EGdbusBook *proxy,
+        const gchar *in_query,
+        gchar ***out_vcards,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = g_variant_new ("(s)",
+                           in_query);
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "getContactList",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(^as)",
+                   out_vcards);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_book_call_authenticate_user:
+ * @proxy: A #EGdbusBook.
+ * @in_user: Method parameter.
+ * @in_passwd: Method parameter.
+ * @in_auth_method: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.authenticateUser</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_book_call_authenticate_user_finish() to get the result of the operation.
+ *
+ * See e_gdbus_book_call_authenticate_user_sync() for the synchronous version of this method.
+ */
+void e_gdbus_book_call_authenticate_user (
+        EGdbusBook *proxy,
+        const gchar *in_user,
+        const gchar *in_passwd,
+        const gchar *in_auth_method,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(sss)",
+                           in_user,
+                           in_passwd,
+                           in_auth_method);
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "authenticateUser",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_book_call_authenticate_user_finish:
+ * @proxy: A #EGdbusBook.
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_book_call_authenticate_user().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.addressbook.Book.authenticateUser</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_authenticate_user_finish (
+        EGdbusBook *proxy,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_book_call_authenticate_user_sync:
+ * @proxy: A #EGdbusBook.
+ * @in_user: Method parameter.
+ * @in_passwd: Method parameter.
+ * @in_auth_method: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.authenticateUser</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_book_call_authenticate_user() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_authenticate_user_sync (
+        EGdbusBook *proxy,
+        const gchar *in_user,
+        const gchar *in_passwd,
+        const gchar *in_auth_method,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = g_variant_new ("(sss)",
+                           in_user,
+                           in_passwd,
+                           in_auth_method);
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "authenticateUser",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_book_call_add_contact:
+ * @proxy: A #EGdbusBook.
+ * @in_vcard: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.addContact</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_book_call_add_contact_finish() to get the result of the operation.
+ *
+ * See e_gdbus_book_call_add_contact_sync() for the synchronous version of this method.
+ */
+void e_gdbus_book_call_add_contact (
+        EGdbusBook *proxy,
+        const gchar *in_vcard,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(s)",
+                           in_vcard);
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "addContact",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_book_call_add_contact_finish:
+ * @proxy: A #EGdbusBook.
+ * @out_uid: Return location for out parameter or %NULL. Free with g_free().
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_book_call_add_contact().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.addressbook.Book.addContact</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_add_contact_finish (
+        EGdbusBook *proxy,
+        gchar **out_uid,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(s)",
+                   out_uid);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_book_call_add_contact_sync:
+ * @proxy: A #EGdbusBook.
+ * @in_vcard: Method parameter.
+ * @out_uid: Return location for out parameter or %NULL. Free with g_free().
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.addContact</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_book_call_add_contact() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_add_contact_sync (
+        EGdbusBook *proxy,
+        const gchar *in_vcard,
+        gchar **out_uid,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = g_variant_new ("(s)",
+                           in_vcard);
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "addContact",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(s)",
+                   out_uid);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_book_call_remove_contacts:
+ * @proxy: A #EGdbusBook.
+ * @in_list: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.removeContacts</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_book_call_remove_contacts_finish() to get the result of the operation.
+ *
+ * See e_gdbus_book_call_remove_contacts_sync() for the synchronous version of this method.
+ */
+void e_gdbus_book_call_remove_contacts (
+        EGdbusBook *proxy,
+        const gchar* const *in_list,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(^as)",
+                           in_list);
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "removeContacts",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_book_call_remove_contacts_finish:
+ * @proxy: A #EGdbusBook.
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_book_call_remove_contacts().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.addressbook.Book.removeContacts</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_remove_contacts_finish (
+        EGdbusBook *proxy,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_book_call_remove_contacts_sync:
+ * @proxy: A #EGdbusBook.
+ * @in_list: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.removeContacts</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_book_call_remove_contacts() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_remove_contacts_sync (
+        EGdbusBook *proxy,
+        const gchar* const *in_list,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = g_variant_new ("(^as)",
+                           in_list);
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "removeContacts",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_book_call_modify_contact:
+ * @proxy: A #EGdbusBook.
+ * @in_vcard: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.modifyContact</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_book_call_modify_contact_finish() to get the result of the operation.
+ *
+ * See e_gdbus_book_call_modify_contact_sync() for the synchronous version of this method.
+ */
+void e_gdbus_book_call_modify_contact (
+        EGdbusBook *proxy,
+        const gchar *in_vcard,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(s)",
+                           in_vcard);
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "modifyContact",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_book_call_modify_contact_finish:
+ * @proxy: A #EGdbusBook.
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_book_call_modify_contact().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.addressbook.Book.modifyContact</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_modify_contact_finish (
+        EGdbusBook *proxy,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_book_call_modify_contact_sync:
+ * @proxy: A #EGdbusBook.
+ * @in_vcard: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.modifyContact</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_book_call_modify_contact() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_modify_contact_sync (
+        EGdbusBook *proxy,
+        const gchar *in_vcard,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = g_variant_new ("(s)",
+                           in_vcard);
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "modifyContact",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_book_call_get_static_capabilities:
+ * @proxy: A #EGdbusBook.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.getStaticCapabilities</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_book_call_get_static_capabilities_finish() to get the result of the operation.
+ *
+ * See e_gdbus_book_call_get_static_capabilities_sync() for the synchronous version of this method.
+ */
+void e_gdbus_book_call_get_static_capabilities (
+        EGdbusBook *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = NULL;
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "getStaticCapabilities",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_book_call_get_static_capabilities_finish:
+ * @proxy: A #EGdbusBook.
+ * @out_capabilities: Return location for out parameter or %NULL. Free with g_free().
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_book_call_get_static_capabilities().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.addressbook.Book.getStaticCapabilities</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_get_static_capabilities_finish (
+        EGdbusBook *proxy,
+        gchar **out_capabilities,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(s)",
+                   out_capabilities);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_book_call_get_static_capabilities_sync:
+ * @proxy: A #EGdbusBook.
+ * @out_capabilities: Return location for out parameter or %NULL. Free with g_free().
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.getStaticCapabilities</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_book_call_get_static_capabilities() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_get_static_capabilities_sync (
+        EGdbusBook *proxy,
+        gchar **out_capabilities,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = NULL;
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "getStaticCapabilities",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(s)",
+                   out_capabilities);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_book_call_get_required_fields:
+ * @proxy: A #EGdbusBook.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.getRequiredFields</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_book_call_get_required_fields_finish() to get the result of the operation.
+ *
+ * See e_gdbus_book_call_get_required_fields_sync() for the synchronous version of this method.
+ */
+void e_gdbus_book_call_get_required_fields (
+        EGdbusBook *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = NULL;
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "getRequiredFields",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_book_call_get_required_fields_finish:
+ * @proxy: A #EGdbusBook.
+ * @out_fields: Return location for out parameter or %NULL. Free with g_strfreev().
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_book_call_get_required_fields().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.addressbook.Book.getRequiredFields</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_get_required_fields_finish (
+        EGdbusBook *proxy,
+        gchar ***out_fields,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(^as)",
+                   out_fields);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_book_call_get_required_fields_sync:
+ * @proxy: A #EGdbusBook.
+ * @out_fields: Return location for out parameter or %NULL. Free with g_strfreev().
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.getRequiredFields</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_book_call_get_required_fields() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_get_required_fields_sync (
+        EGdbusBook *proxy,
+        gchar ***out_fields,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = NULL;
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "getRequiredFields",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(^as)",
+                   out_fields);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_book_call_get_supported_fields:
+ * @proxy: A #EGdbusBook.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.getSupportedFields</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_book_call_get_supported_fields_finish() to get the result of the operation.
+ *
+ * See e_gdbus_book_call_get_supported_fields_sync() for the synchronous version of this method.
+ */
+void e_gdbus_book_call_get_supported_fields (
+        EGdbusBook *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = NULL;
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "getSupportedFields",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_book_call_get_supported_fields_finish:
+ * @proxy: A #EGdbusBook.
+ * @out_fields: Return location for out parameter or %NULL. Free with g_strfreev().
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_book_call_get_supported_fields().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.addressbook.Book.getSupportedFields</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_get_supported_fields_finish (
+        EGdbusBook *proxy,
+        gchar ***out_fields,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(^as)",
+                   out_fields);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_book_call_get_supported_fields_sync:
+ * @proxy: A #EGdbusBook.
+ * @out_fields: Return location for out parameter or %NULL. Free with g_strfreev().
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.getSupportedFields</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_book_call_get_supported_fields() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_get_supported_fields_sync (
+        EGdbusBook *proxy,
+        gchar ***out_fields,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = NULL;
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "getSupportedFields",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(^as)",
+                   out_fields);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_book_call_get_supported_auth_methods:
+ * @proxy: A #EGdbusBook.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.getSupportedAuthMethods</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_book_call_get_supported_auth_methods_finish() to get the result of the operation.
+ *
+ * See e_gdbus_book_call_get_supported_auth_methods_sync() for the synchronous version of this method.
+ */
+void e_gdbus_book_call_get_supported_auth_methods (
+        EGdbusBook *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = NULL;
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "getSupportedAuthMethods",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_book_call_get_supported_auth_methods_finish:
+ * @proxy: A #EGdbusBook.
+ * @out_auth_methods: Return location for out parameter or %NULL. Free with g_strfreev().
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_book_call_get_supported_auth_methods().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.addressbook.Book.getSupportedAuthMethods</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_get_supported_auth_methods_finish (
+        EGdbusBook *proxy,
+        gchar ***out_auth_methods,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(^as)",
+                   out_auth_methods);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_book_call_get_supported_auth_methods_sync:
+ * @proxy: A #EGdbusBook.
+ * @out_auth_methods: Return location for out parameter or %NULL. Free with g_strfreev().
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.getSupportedAuthMethods</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_book_call_get_supported_auth_methods() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_get_supported_auth_methods_sync (
+        EGdbusBook *proxy,
+        gchar ***out_auth_methods,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = NULL;
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "getSupportedAuthMethods",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(^as)",
+                   out_auth_methods);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_book_call_get_book_view:
+ * @proxy: A #EGdbusBook.
+ * @in_query: Method parameter.
+ * @in_max_results: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.getBookView</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_book_call_get_book_view_finish() to get the result of the operation.
+ *
+ * See e_gdbus_book_call_get_book_view_sync() for the synchronous version of this method.
+ */
+void e_gdbus_book_call_get_book_view (
+        EGdbusBook *proxy,
+        const gchar *in_query,
+        guint in_max_results,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(su)",
+                           in_query,
+                           in_max_results);
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "getBookView",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_book_call_get_book_view_finish:
+ * @proxy: A #EGdbusBook.
+ * @out_view: Return location for out parameter or %NULL. Free with g_free().
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_book_call_get_book_view().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.addressbook.Book.getBookView</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_get_book_view_finish (
+        EGdbusBook *proxy,
+        gchar **out_view,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(o)",
+                   out_view);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_book_call_get_book_view_sync:
+ * @proxy: A #EGdbusBook.
+ * @in_query: Method parameter.
+ * @in_max_results: Method parameter.
+ * @out_view: Return location for out parameter or %NULL. Free with g_free().
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.getBookView</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_book_call_get_book_view() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_get_book_view_sync (
+        EGdbusBook *proxy,
+        const gchar *in_query,
+        guint in_max_results,
+        gchar **out_view,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = g_variant_new ("(su)",
+                           in_query,
+                           in_max_results);
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "getBookView",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(o)",
+                   out_view);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_book_call_get_changes:
+ * @proxy: A #EGdbusBook.
+ * @in_change_id: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.getChanges</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_book_call_get_changes_finish() to get the result of the operation.
+ *
+ * See e_gdbus_book_call_get_changes_sync() for the synchronous version of this method.
+ */
+void e_gdbus_book_call_get_changes (
+        EGdbusBook *proxy,
+        const gchar *in_change_id,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(s)",
+                           in_change_id);
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "getChanges",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_book_call_get_changes_finish:
+ * @proxy: A #EGdbusBook.
+ * @out_changes: Return location for out parameter or %NULL. Free with g_variant_unref().
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_book_call_get_changes().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.addressbook.Book.getChanges</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_get_changes_finish (
+        EGdbusBook *proxy,
+        GVariant **out_changes,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(*)",
+                   out_changes);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_book_call_get_changes_sync:
+ * @proxy: A #EGdbusBook.
+ * @in_change_id: Method parameter.
+ * @out_changes: Return location for out parameter or %NULL. Free with g_variant_unref().
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.getChanges</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_book_call_get_changes() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_get_changes_sync (
+        EGdbusBook *proxy,
+        const gchar *in_change_id,
+        GVariant **out_changes,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = g_variant_new ("(s)",
+                           in_change_id);
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "getChanges",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(*)",
+                   out_changes);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_book_call_cancel_operation:
+ * @proxy: A #EGdbusBook.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.cancelOperation</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_book_call_cancel_operation_finish() to get the result of the operation.
+ *
+ * See e_gdbus_book_call_cancel_operation_sync() for the synchronous version of this method.
+ */
+void e_gdbus_book_call_cancel_operation (
+        EGdbusBook *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = NULL;
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "cancelOperation",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_book_call_cancel_operation_finish:
+ * @proxy: A #EGdbusBook.
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_book_call_cancel_operation().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.addressbook.Book.cancelOperation</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_cancel_operation_finish (
+        EGdbusBook *proxy,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_book_call_cancel_operation_sync:
+ * @proxy: A #EGdbusBook.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.cancelOperation</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_book_call_cancel_operation() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_cancel_operation_sync (
+        EGdbusBook *proxy,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = NULL;
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "cancelOperation",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_book_call_close:
+ * @proxy: A #EGdbusBook.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.close</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_book_call_close_finish() to get the result of the operation.
+ *
+ * See e_gdbus_book_call_close_sync() for the synchronous version of this method.
+ */
+void e_gdbus_book_call_close (
+        EGdbusBook *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = NULL;
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "close",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_book_call_close_finish:
+ * @proxy: A #EGdbusBook.
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_book_call_close().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.addressbook.Book.close</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_close_finish (
+        EGdbusBook *proxy,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_book_call_close_sync:
+ * @proxy: A #EGdbusBook.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.addressbook.Book.close</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_book_call_close() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_call_close_sync (
+        EGdbusBook *proxy,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = NULL;
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "close",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_book_complete_open:
+ * @object: A #EGdbusBook.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.addressbook.Book.open</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_book_complete_open (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation, NULL);
+}
+
+
+/**
+ * e_gdbus_book_complete_remove:
+ * @object: A #EGdbusBook.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.addressbook.Book.remove</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_book_complete_remove (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation, NULL);
+}
+
+
+/**
+ * e_gdbus_book_complete_get_contact:
+ * @object: A #EGdbusBook.
+ * @invocation: A #GDBusMethodInvocation.
+ * @out_vcard: Value to return.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.addressbook.Book.getContact</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_book_complete_get_contact (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_vcard)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(s)",
+                           out_vcard);
+  g_dbus_method_invocation_return_value (invocation, _params);
+}
+
+
+/**
+ * e_gdbus_book_complete_get_contact_list:
+ * @object: A #EGdbusBook.
+ * @invocation: A #GDBusMethodInvocation.
+ * @out_vcards: Value to return.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.addressbook.Book.getContactList</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_book_complete_get_contact_list (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation,
+        const gchar* const *out_vcards)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(^as)",
+                           out_vcards);
+  g_dbus_method_invocation_return_value (invocation, _params);
+}
+
+
+/**
+ * e_gdbus_book_complete_authenticate_user:
+ * @object: A #EGdbusBook.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.addressbook.Book.authenticateUser</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_book_complete_authenticate_user (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation, NULL);
+}
+
+
+/**
+ * e_gdbus_book_complete_add_contact:
+ * @object: A #EGdbusBook.
+ * @invocation: A #GDBusMethodInvocation.
+ * @out_uid: Value to return.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.addressbook.Book.addContact</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_book_complete_add_contact (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_uid)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(s)",
+                           out_uid);
+  g_dbus_method_invocation_return_value (invocation, _params);
+}
+
+
+/**
+ * e_gdbus_book_complete_remove_contacts:
+ * @object: A #EGdbusBook.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.addressbook.Book.removeContacts</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_book_complete_remove_contacts (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation, NULL);
+}
+
+
+/**
+ * e_gdbus_book_complete_modify_contact:
+ * @object: A #EGdbusBook.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.addressbook.Book.modifyContact</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_book_complete_modify_contact (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation, NULL);
+}
+
+
+/**
+ * e_gdbus_book_complete_get_static_capabilities:
+ * @object: A #EGdbusBook.
+ * @invocation: A #GDBusMethodInvocation.
+ * @out_capabilities: Value to return.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.addressbook.Book.getStaticCapabilities</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_book_complete_get_static_capabilities (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_capabilities)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(s)",
+                           out_capabilities);
+  g_dbus_method_invocation_return_value (invocation, _params);
+}
+
+
+/**
+ * e_gdbus_book_complete_get_required_fields:
+ * @object: A #EGdbusBook.
+ * @invocation: A #GDBusMethodInvocation.
+ * @out_fields: Value to return.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.addressbook.Book.getRequiredFields</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_book_complete_get_required_fields (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation,
+        const gchar* const *out_fields)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(^as)",
+                           out_fields);
+  g_dbus_method_invocation_return_value (invocation, _params);
+}
+
+
+/**
+ * e_gdbus_book_complete_get_supported_fields:
+ * @object: A #EGdbusBook.
+ * @invocation: A #GDBusMethodInvocation.
+ * @out_fields: Value to return.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.addressbook.Book.getSupportedFields</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_book_complete_get_supported_fields (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation,
+        const gchar* const *out_fields)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(^as)",
+                           out_fields);
+  g_dbus_method_invocation_return_value (invocation, _params);
+}
+
+
+/**
+ * e_gdbus_book_complete_get_supported_auth_methods:
+ * @object: A #EGdbusBook.
+ * @invocation: A #GDBusMethodInvocation.
+ * @out_auth_methods: Value to return.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.addressbook.Book.getSupportedAuthMethods</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_book_complete_get_supported_auth_methods (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation,
+        const gchar* const *out_auth_methods)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(^as)",
+                           out_auth_methods);
+  g_dbus_method_invocation_return_value (invocation, _params);
+}
+
+
+/**
+ * e_gdbus_book_complete_get_book_view:
+ * @object: A #EGdbusBook.
+ * @invocation: A #GDBusMethodInvocation.
+ * @out_view: Value to return.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.addressbook.Book.getBookView</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_book_complete_get_book_view (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_view)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(o)",
+                           out_view);
+  g_dbus_method_invocation_return_value (invocation, _params);
+}
+
+
+/**
+ * e_gdbus_book_complete_get_changes:
+ * @object: A #EGdbusBook.
+ * @invocation: A #GDBusMethodInvocation.
+ * @out_changes: Value to return.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.addressbook.Book.getChanges</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_book_complete_get_changes (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation,
+        GVariant *out_changes)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(*)",
+                           out_changes);
+  g_dbus_method_invocation_return_value (invocation, _params);
+}
+
+
+/**
+ * e_gdbus_book_complete_cancel_operation:
+ * @object: A #EGdbusBook.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.addressbook.Book.cancelOperation</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_book_complete_cancel_operation (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation, NULL);
+}
+
+
+/**
+ * e_gdbus_book_complete_close:
+ * @object: A #EGdbusBook.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.addressbook.Book.close</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_book_complete_close (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation, NULL);
+}
+
+
+/**
+ * e_gdbus_book_emit_writable:
+ * @object: A #EGdbusBook.
+ * @arg_value: Signal parameter.
+ *
+ * Emits the <literal>org.gnome.evolution.dataserver.addressbook.Book.writable</literal>
+ * D-Bus signal.
+ */
+void e_gdbus_book_emit_writable (
+        EGdbusBook *object,
+        gboolean arg_value)
+{
+  g_signal_emit (object, signals[__WRITABLE_SIGNAL], 0, arg_value);
+}
+
+
+/**
+ * e_gdbus_book_emit_connection:
+ * @object: A #EGdbusBook.
+ * @arg_connected: Signal parameter.
+ *
+ * Emits the <literal>org.gnome.evolution.dataserver.addressbook.Book.connection</literal>
+ * D-Bus signal.
+ */
+void e_gdbus_book_emit_connection (
+        EGdbusBook *object,
+        gboolean arg_connected)
+{
+  g_signal_emit (object, signals[__CONNECTION_SIGNAL], 0, arg_connected);
+}
+
+
+/**
+ * e_gdbus_book_emit_auth_required:
+ * @object: A #EGdbusBook.
+ *
+ * Emits the <literal>org.gnome.evolution.dataserver.addressbook.Book.auth_required</literal>
+ * D-Bus signal.
+ */
+void e_gdbus_book_emit_auth_required (
+        EGdbusBook *object)
+{
+  g_signal_emit (object, signals[__AUTH_REQUIRED_SIGNAL], 0);
+}
+
+
+static const GDBusArgInfo e_gdbus_book_signal_writable_value =
+{
+  -1,
+  (gchar *) "value",
+  (gchar *) "b",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_book_signal_writable_arg_pointers[] =
+{
+  &e_gdbus_book_signal_writable_value,
+  NULL
+};
+
+static const GDBusSignalInfo e_gdbus_book_signal_writable =
+{
+  -1,
+  (gchar *) "writable",
+  (GDBusArgInfo **) &e_gdbus_book_signal_writable_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_book_signal_connection_connected =
+{
+  -1,
+  (gchar *) "connected",
+  (gchar *) "b",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_book_signal_connection_arg_pointers[] =
+{
+  &e_gdbus_book_signal_connection_connected,
+  NULL
+};
+
+static const GDBusSignalInfo e_gdbus_book_signal_connection =
+{
+  -1,
+  (gchar *) "connection",
+  (GDBusArgInfo **) &e_gdbus_book_signal_connection_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusSignalInfo e_gdbus_book_signal_auth_required =
+{
+  -1,
+  (gchar *) "auth_required",
+  (GDBusArgInfo **) NULL,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusSignalInfo * const e_gdbus_book_signal_info_pointers[] =
+{
+  &e_gdbus_book_signal_writable,
+  &e_gdbus_book_signal_connection,
+  &e_gdbus_book_signal_auth_required,
+  NULL
+};
+
+static const GDBusArgInfo e_gdbus_book_method_in_open_only_if_exists =
+{
+  -1,
+  (gchar *) "only_if_exists",
+  (gchar *) "b",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_book_method_in_open_arg_pointers[] =
+{
+  &e_gdbus_book_method_in_open_only_if_exists,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_book_method_open =
+{
+  -1,
+  (gchar *) "open",
+  (GDBusArgInfo **) &e_gdbus_book_method_in_open_arg_pointers,
+  (GDBusArgInfo **) NULL,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusMethodInfo e_gdbus_book_method_remove =
+{
+  -1,
+  (gchar *) "remove",
+  (GDBusArgInfo **) NULL,
+  (GDBusArgInfo **) NULL,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_book_method_in_getContact_uid =
+{
+  -1,
+  (gchar *) "uid",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_book_method_in_getContact_arg_pointers[] =
+{
+  &e_gdbus_book_method_in_getContact_uid,
+  NULL
+};
+
+static const GDBusArgInfo e_gdbus_book_method_out_getContact_vcard =
+{
+  -1,
+  (gchar *) "vcard",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_book_method_out_getContact_arg_pointers[] =
+{
+  &e_gdbus_book_method_out_getContact_vcard,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_book_method_getContact =
+{
+  -1,
+  (gchar *) "getContact",
+  (GDBusArgInfo **) &e_gdbus_book_method_in_getContact_arg_pointers,
+  (GDBusArgInfo **) &e_gdbus_book_method_out_getContact_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_book_method_in_getContactList_query =
+{
+  -1,
+  (gchar *) "query",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_book_method_in_getContactList_arg_pointers[] =
+{
+  &e_gdbus_book_method_in_getContactList_query,
+  NULL
+};
+
+static const GDBusArgInfo e_gdbus_book_method_out_getContactList_vcards =
+{
+  -1,
+  (gchar *) "vcards",
+  (gchar *) "as",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_book_method_out_getContactList_arg_pointers[] =
+{
+  &e_gdbus_book_method_out_getContactList_vcards,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_book_method_getContactList =
+{
+  -1,
+  (gchar *) "getContactList",
+  (GDBusArgInfo **) &e_gdbus_book_method_in_getContactList_arg_pointers,
+  (GDBusArgInfo **) &e_gdbus_book_method_out_getContactList_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_book_method_in_authenticateUser_user =
+{
+  -1,
+  (gchar *) "user",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo e_gdbus_book_method_in_authenticateUser_passwd =
+{
+  -1,
+  (gchar *) "passwd",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo e_gdbus_book_method_in_authenticateUser_auth_method =
+{
+  -1,
+  (gchar *) "auth_method",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_book_method_in_authenticateUser_arg_pointers[] =
+{
+  &e_gdbus_book_method_in_authenticateUser_user,
+  &e_gdbus_book_method_in_authenticateUser_passwd,
+  &e_gdbus_book_method_in_authenticateUser_auth_method,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_book_method_authenticateUser =
+{
+  -1,
+  (gchar *) "authenticateUser",
+  (GDBusArgInfo **) &e_gdbus_book_method_in_authenticateUser_arg_pointers,
+  (GDBusArgInfo **) NULL,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_book_method_in_addContact_vcard =
+{
+  -1,
+  (gchar *) "vcard",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_book_method_in_addContact_arg_pointers[] =
+{
+  &e_gdbus_book_method_in_addContact_vcard,
+  NULL
+};
+
+static const GDBusArgInfo e_gdbus_book_method_out_addContact_uid =
+{
+  -1,
+  (gchar *) "uid",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_book_method_out_addContact_arg_pointers[] =
+{
+  &e_gdbus_book_method_out_addContact_uid,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_book_method_addContact =
+{
+  -1,
+  (gchar *) "addContact",
+  (GDBusArgInfo **) &e_gdbus_book_method_in_addContact_arg_pointers,
+  (GDBusArgInfo **) &e_gdbus_book_method_out_addContact_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_book_method_in_removeContacts_list =
+{
+  -1,
+  (gchar *) "list",
+  (gchar *) "as",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_book_method_in_removeContacts_arg_pointers[] =
+{
+  &e_gdbus_book_method_in_removeContacts_list,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_book_method_removeContacts =
+{
+  -1,
+  (gchar *) "removeContacts",
+  (GDBusArgInfo **) &e_gdbus_book_method_in_removeContacts_arg_pointers,
+  (GDBusArgInfo **) NULL,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_book_method_in_modifyContact_vcard =
+{
+  -1,
+  (gchar *) "vcard",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_book_method_in_modifyContact_arg_pointers[] =
+{
+  &e_gdbus_book_method_in_modifyContact_vcard,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_book_method_modifyContact =
+{
+  -1,
+  (gchar *) "modifyContact",
+  (GDBusArgInfo **) &e_gdbus_book_method_in_modifyContact_arg_pointers,
+  (GDBusArgInfo **) NULL,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_book_method_out_getStaticCapabilities_capabilities =
+{
+  -1,
+  (gchar *) "capabilities",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_book_method_out_getStaticCapabilities_arg_pointers[] =
+{
+  &e_gdbus_book_method_out_getStaticCapabilities_capabilities,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_book_method_getStaticCapabilities =
+{
+  -1,
+  (gchar *) "getStaticCapabilities",
+  (GDBusArgInfo **) NULL,
+  (GDBusArgInfo **) &e_gdbus_book_method_out_getStaticCapabilities_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_book_method_out_getRequiredFields_fields =
+{
+  -1,
+  (gchar *) "fields",
+  (gchar *) "as",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_book_method_out_getRequiredFields_arg_pointers[] =
+{
+  &e_gdbus_book_method_out_getRequiredFields_fields,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_book_method_getRequiredFields =
+{
+  -1,
+  (gchar *) "getRequiredFields",
+  (GDBusArgInfo **) NULL,
+  (GDBusArgInfo **) &e_gdbus_book_method_out_getRequiredFields_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_book_method_out_getSupportedFields_fields =
+{
+  -1,
+  (gchar *) "fields",
+  (gchar *) "as",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_book_method_out_getSupportedFields_arg_pointers[] =
+{
+  &e_gdbus_book_method_out_getSupportedFields_fields,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_book_method_getSupportedFields =
+{
+  -1,
+  (gchar *) "getSupportedFields",
+  (GDBusArgInfo **) NULL,
+  (GDBusArgInfo **) &e_gdbus_book_method_out_getSupportedFields_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_book_method_out_getSupportedAuthMethods_auth_methods =
+{
+  -1,
+  (gchar *) "auth_methods",
+  (gchar *) "as",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_book_method_out_getSupportedAuthMethods_arg_pointers[] =
+{
+  &e_gdbus_book_method_out_getSupportedAuthMethods_auth_methods,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_book_method_getSupportedAuthMethods =
+{
+  -1,
+  (gchar *) "getSupportedAuthMethods",
+  (GDBusArgInfo **) NULL,
+  (GDBusArgInfo **) &e_gdbus_book_method_out_getSupportedAuthMethods_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_book_method_in_getBookView_query =
+{
+  -1,
+  (gchar *) "query",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo e_gdbus_book_method_in_getBookView_max_results =
+{
+  -1,
+  (gchar *) "max_results",
+  (gchar *) "u",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_book_method_in_getBookView_arg_pointers[] =
+{
+  &e_gdbus_book_method_in_getBookView_query,
+  &e_gdbus_book_method_in_getBookView_max_results,
+  NULL
+};
+
+static const GDBusArgInfo e_gdbus_book_method_out_getBookView_view =
+{
+  -1,
+  (gchar *) "view",
+  (gchar *) "o",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_book_method_out_getBookView_arg_pointers[] =
+{
+  &e_gdbus_book_method_out_getBookView_view,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_book_method_getBookView =
+{
+  -1,
+  (gchar *) "getBookView",
+  (GDBusArgInfo **) &e_gdbus_book_method_in_getBookView_arg_pointers,
+  (GDBusArgInfo **) &e_gdbus_book_method_out_getBookView_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_book_method_in_getChanges_change_id =
+{
+  -1,
+  (gchar *) "change_id",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_book_method_in_getChanges_arg_pointers[] =
+{
+  &e_gdbus_book_method_in_getChanges_change_id,
+  NULL
+};
+
+static const GDBusArgInfo e_gdbus_book_method_out_getChanges_changes =
+{
+  -1,
+  (gchar *) "changes",
+  (gchar *) "a(us)",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_book_method_out_getChanges_arg_pointers[] =
+{
+  &e_gdbus_book_method_out_getChanges_changes,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_book_method_getChanges =
+{
+  -1,
+  (gchar *) "getChanges",
+  (GDBusArgInfo **) &e_gdbus_book_method_in_getChanges_arg_pointers,
+  (GDBusArgInfo **) &e_gdbus_book_method_out_getChanges_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusMethodInfo e_gdbus_book_method_cancelOperation =
+{
+  -1,
+  (gchar *) "cancelOperation",
+  (GDBusArgInfo **) NULL,
+  (GDBusArgInfo **) NULL,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusMethodInfo e_gdbus_book_method_close =
+{
+  -1,
+  (gchar *) "close",
+  (GDBusArgInfo **) NULL,
+  (GDBusArgInfo **) NULL,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusMethodInfo * const e_gdbus_book_method_info_pointers[] =
+{
+  &e_gdbus_book_method_open,
+  &e_gdbus_book_method_remove,
+  &e_gdbus_book_method_getContact,
+  &e_gdbus_book_method_getContactList,
+  &e_gdbus_book_method_authenticateUser,
+  &e_gdbus_book_method_addContact,
+  &e_gdbus_book_method_removeContacts,
+  &e_gdbus_book_method_modifyContact,
+  &e_gdbus_book_method_getStaticCapabilities,
+  &e_gdbus_book_method_getRequiredFields,
+  &e_gdbus_book_method_getSupportedFields,
+  &e_gdbus_book_method_getSupportedAuthMethods,
+  &e_gdbus_book_method_getBookView,
+  &e_gdbus_book_method_getChanges,
+  &e_gdbus_book_method_cancelOperation,
+  &e_gdbus_book_method_close,
+  NULL
+};
+
+static const GDBusInterfaceInfo _e_gdbus_book_interface_info =
+{
+  -1,
+  (gchar *) "org.gnome.evolution.dataserver.addressbook.Book",
+  (GDBusMethodInfo **) &e_gdbus_book_method_info_pointers,
+  (GDBusSignalInfo **) &e_gdbus_book_signal_info_pointers,
+  (GDBusPropertyInfo **) NULL,
+};
+
+static void
+handle_method_call (GDBusConnection       *connection,
+                    const gchar           *sender,
+                    const gchar           *object_path,
+                    const gchar           *interface_name,
+                    const gchar           *method_name,
+                    GVariant              *parameters,
+                    GDBusMethodInvocation *invocation,
+                    gpointer               user_data)
+{
+  guint method_id;
+  method_id = lookup_method_id_from_method_name (method_name);
+  switch (method_id)
+    {
+    case __OPEN_METHOD:
+      {
+        EGdbusBook *object = E_GDBUS_BOOK (user_data);
+        gboolean handled;
+        gboolean arg_only_if_exists;
+        g_variant_get (parameters,
+                       "(b)",
+                       &arg_only_if_exists);
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, arg_only_if_exists, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __REMOVE_METHOD:
+      {
+        EGdbusBook *object = E_GDBUS_BOOK (user_data);
+        gboolean handled;
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __GET_CONTACT_METHOD:
+      {
+        EGdbusBook *object = E_GDBUS_BOOK (user_data);
+        gboolean handled;
+        const gchar *arg_uid;
+        g_variant_get (parameters,
+                       "(&s)",
+                       &arg_uid);
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, arg_uid, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __GET_CONTACT_LIST_METHOD:
+      {
+        EGdbusBook *object = E_GDBUS_BOOK (user_data);
+        gboolean handled;
+        const gchar *arg_query;
+        g_variant_get (parameters,
+                       "(&s)",
+                       &arg_query);
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, arg_query, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __AUTHENTICATE_USER_METHOD:
+      {
+        EGdbusBook *object = E_GDBUS_BOOK (user_data);
+        gboolean handled;
+        const gchar *arg_user;
+        const gchar *arg_passwd;
+        const gchar *arg_auth_method;
+        g_variant_get (parameters,
+                       "(&s&s&s)",
+                       &arg_user,
+                       &arg_passwd,
+                       &arg_auth_method);
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, arg_user, arg_passwd, arg_auth_method, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __ADD_CONTACT_METHOD:
+      {
+        EGdbusBook *object = E_GDBUS_BOOK (user_data);
+        gboolean handled;
+        const gchar *arg_vcard;
+        g_variant_get (parameters,
+                       "(&s)",
+                       &arg_vcard);
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, arg_vcard, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __REMOVE_CONTACTS_METHOD:
+      {
+        EGdbusBook *object = E_GDBUS_BOOK (user_data);
+        gboolean handled;
+        const gchar* const *arg_list;
+        g_variant_get (parameters,
+                       "(^a&s)",
+                       &arg_list);
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, arg_list, &handled);
+        g_free ((gpointer) arg_list);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __MODIFY_CONTACT_METHOD:
+      {
+        EGdbusBook *object = E_GDBUS_BOOK (user_data);
+        gboolean handled;
+        const gchar *arg_vcard;
+        g_variant_get (parameters,
+                       "(&s)",
+                       &arg_vcard);
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, arg_vcard, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __GET_STATIC_CAPABILITIES_METHOD:
+      {
+        EGdbusBook *object = E_GDBUS_BOOK (user_data);
+        gboolean handled;
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __GET_REQUIRED_FIELDS_METHOD:
+      {
+        EGdbusBook *object = E_GDBUS_BOOK (user_data);
+        gboolean handled;
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __GET_SUPPORTED_FIELDS_METHOD:
+      {
+        EGdbusBook *object = E_GDBUS_BOOK (user_data);
+        gboolean handled;
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __GET_SUPPORTED_AUTH_METHODS_METHOD:
+      {
+        EGdbusBook *object = E_GDBUS_BOOK (user_data);
+        gboolean handled;
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __GET_BOOK_VIEW_METHOD:
+      {
+        EGdbusBook *object = E_GDBUS_BOOK (user_data);
+        gboolean handled;
+        const gchar *arg_query;
+        guint arg_max_results;
+        g_variant_get (parameters,
+                       "(&su)",
+                       &arg_query,
+                       &arg_max_results);
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, arg_query, arg_max_results, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __GET_CHANGES_METHOD:
+      {
+        EGdbusBook *object = E_GDBUS_BOOK (user_data);
+        gboolean handled;
+        const gchar *arg_change_id;
+        g_variant_get (parameters,
+                       "(&s)",
+                       &arg_change_id);
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, arg_change_id, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __CANCEL_OPERATION_METHOD:
+      {
+        EGdbusBook *object = E_GDBUS_BOOK (user_data);
+        gboolean handled;
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __CLOSE_METHOD:
+      {
+        EGdbusBook *object = E_GDBUS_BOOK (user_data);
+        gboolean handled;
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    default:
+not_implemented:
+      g_dbus_method_invocation_return_error (invocation,
+                                             G_DBUS_ERROR,
+                                             G_DBUS_ERROR_NOT_SUPPORTED,
+                                             "Method `%s' is not implemented",
+                                             method_name);
+      break;
+    }
+};
+
+static GVariant *
+get_property (GDBusConnection  *connection,
+              const gchar      *sender,
+              const gchar      *object_path,
+              const gchar      *interface_name,
+              const gchar      *property_name,
+              GError          **error,
+              gpointer          user_data)
+{
+  GVariant *ret;
+  guint prop_id;
+  prop_id = lookup_property_id_from_property_name (property_name);
+  ret = NULL;
+  switch (prop_id)
+    {
+    default:
+      g_set_error (error,
+                   G_DBUS_ERROR,
+                   G_DBUS_ERROR_NOT_SUPPORTED,
+                   "This implementation does not support property `%s'",
+                   property_name);
+      break;
+    }
+
+  return ret;
+};
+
+static gboolean
+set_property (GDBusConnection  *connection,
+              const gchar      *sender,
+              const gchar      *object_path,
+              const gchar      *interface_name,
+              const gchar      *property_name,
+              GVariant         *value,
+              GError          **error,
+              gpointer          user_data)
+{
+  gboolean ret;
+  guint prop_id;
+  prop_id = lookup_property_id_from_property_name (property_name);
+  ret = TRUE;
+  switch (prop_id)
+    {
+    default:
+      g_set_error (error,
+                   G_DBUS_ERROR,
+                   G_DBUS_ERROR_NOT_SUPPORTED,
+                   "This implementation does not support property `%s'",
+                   property_name);
+      ret = FALSE;
+      break;
+    }
+
+  return ret;
+};
+
+static const GDBusInterfaceVTable e_gdbus_book_interface_vtable =
+{
+  handle_method_call,
+  get_property,
+  set_property,
+};
+
+static gboolean
+emit_notifications_in_idle (gpointer user_data)
+{
+  GObject *object = G_OBJECT (user_data);
+  GDBusConnection *connection;
+  const gchar *path;
+  GHashTable *notification_queue;
+  GHashTableIter iter;
+  const gchar *property_name;
+  GVariant *value;
+  GVariantBuilder *builder;
+  GVariantBuilder *invalidated_builder;
+  GHashTable *pvc;
+  gboolean has_changes;
+
+  notification_queue = g_object_get_data (object, "gdbus-codegen-notification-queue");
+  path = g_object_get_data (object, "gdbus-codegen-path");
+  connection = g_object_get_data (object, "gdbus-codegen-connection");
+  pvc = g_object_get_data (object, "gdbus-codegen-pvc");
+  g_assert (notification_queue != NULL && path != NULL && connection != NULL && pvc != NULL);
+
+  builder = g_variant_builder_new (G_VARIANT_TYPE_ARRAY);
+  invalidated_builder = g_variant_builder_new (G_VARIANT_TYPE ("as"));
+  g_hash_table_iter_init (&iter, notification_queue);
+  has_changes = FALSE;
+  while (g_hash_table_iter_next (&iter, (gpointer) &property_name, (gpointer) &value))
+    {
+      GVariant *cached_value;
+      cached_value = g_hash_table_lookup (pvc, property_name);
+      if (cached_value == NULL || !g_variant_equal (cached_value, value))
+        {
+          g_hash_table_insert (pvc, (gpointer) property_name, (gpointer) g_variant_ref (value));
+          g_variant_builder_add (builder, "{sv}", property_name, value);
+          has_changes = TRUE;
+        }
+    }
+
+  if (has_changes)
+    {
+      g_dbus_connection_emit_signal (connection,
+                                     NULL,
+                                     path,
+                                     "org.freedesktop.DBus.Properties",
+                                     "PropertiesChanged",
+                                     g_variant_new ("(sa{sv}as)",
+                                                    "org.gnome.evolution.dataserver.addressbook.Book",
+                                                    builder,
+                                                    invalidated_builder),
+                                     NULL);
+    }
+  else
+    {
+      g_variant_builder_unref (builder);
+      g_variant_builder_unref (invalidated_builder);
+    }
+
+  g_hash_table_remove_all (notification_queue);
+  g_object_set_data (object, "gdbus-codegen-notification-idle-id", GUINT_TO_POINTER (0));
+  return FALSE;
+}
+
+static void
+queue_notification (GObject     *object,
+                    const gchar *property_name,
+                    GVariant    *value)
+{
+  GHashTable *notification_queue;
+  guint idle_id;
+  notification_queue = g_object_get_data (object, "gdbus-codegen-notification-queue");
+  if (notification_queue == NULL)
+    {
+      notification_queue = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) g_variant_unref);
+      g_object_set_data_full (object, "gdbus-codegen-notification-queue", notification_queue, (GDestroyNotify) g_hash_table_unref);
+    }
+  g_hash_table_insert (notification_queue, (gpointer) property_name, (gpointer) value); /* adopts value */
+  idle_id = GPOINTER_TO_UINT (g_object_get_data (object, "gdbus-codegen-notification-idle-id"));
+  if (idle_id == 0)
+    {
+      GSource *idle_source;
+      idle_source = g_idle_source_new ();
+      g_source_set_priority (idle_source, G_PRIORITY_DEFAULT);
+      g_source_set_callback (idle_source,
+                             emit_notifications_in_idle,
+                             g_object_ref (object),
+                             (GDestroyNotify) g_object_unref);
+      idle_id = g_source_attach (idle_source, g_main_context_get_thread_default ());
+      g_source_unref (idle_source);
+      g_object_set_data (object, "gdbus-codegen-notification-idle-id", GUINT_TO_POINTER (idle_id));
+    }
+}
+
+/**
+ * e_gdbus_book_drain_notify:
+ * @object: A #EGdbusBook that is exported.
+ *
+ * If @object has queued notifications, empty the queue forcing
+ * the <literal>PropertiesChanged</literal> signal to be emitted.
+ * See <xref linkend="EGdbusBook.description"/> for more background information.
+ */
+void
+e_gdbus_book_drain_notify (EGdbusBook *object)
+{
+  gint idle_id;
+  idle_id = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (object), "gdbus-codegen-notification-idle-id"));
+  if (idle_id > 0)
+    {
+      emit_notifications_in_idle (object);
+      g_source_remove (idle_id);
+    }
+}
+
+static void
+on_notify (GObject    *object,
+           GParamSpec *pspec,
+           gpointer    user_data)
+{
+  GDBusConnection *connection;
+  const gchar *path;
+  GVariant *value;
+  const gchar *property_name;
+  guint prop_id;
+
+  path = g_object_get_data (object, "gdbus-codegen-path");
+  connection = g_object_get_data (object, "gdbus-codegen-connection");
+  if (connection == NULL || path == NULL)
+    goto out;
+
+  property_name = lookup_property_name_from_property_gname (pspec->name);
+  if (property_name == NULL)
+    goto out;
+  prop_id = lookup_property_id_from_property_name (property_name);
+
+  value = NULL;
+  switch (prop_id)
+    {
+  }
+
+  if (value != NULL && property_name != NULL)
+    {
+      queue_notification (object, property_name, g_variant_ref_sink (value));
+    }
+out:
+  ;
+}
+
+static void
+on_object_unregistered (GObject *object)
+{
+  gint idle_id;
+  idle_id = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (object), "gdbus-codegen-notification-idle-id"));
+  if (idle_id > 0)
+    {
+      g_source_remove (idle_id);
+    }
+  g_object_set_data (G_OBJECT (object), "gdbus-codegen-path", NULL);
+  g_object_set_data (G_OBJECT (object), "gdbus-codegen-connection", NULL);
+  g_signal_handlers_disconnect_by_func (object, on_notify, NULL);
+}
+
+/**
+ * e_gdbus_book_register_object:
+ * @object: An instance of a #GObject<!-- -->-derived type implementing the #EGdbusBook interface.
+ * @connection: A #GDBusConnection.
+ * @object_path: The object to register the object at.
+ * @error: Return location for error or %NULL.
+ *
+ * Registers @object at @object_path on @connection.
+ *
+ * See <xref linkend="EGdbusBook.description"/>
+ * for how properties, methods and signals are handled.
+ *
+ * Returns: 0 if @error is set, otherwise a registration id (never 0) that can be used with g_dbus_connection_unregister_object().
+ */
+guint
+e_gdbus_book_register_object (EGdbusBook *object,
+           GDBusConnection *connection,
+           const gchar *object_path,
+           GError **error)
+{
+  G_GNUC_UNUSED GVariant *value;
+  GHashTable *pvc;
+
+  pvc = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) g_variant_unref);
+
+  g_object_set_data_full (G_OBJECT (object), "gdbus-codegen-path", (gpointer) g_strdup (object_path), g_free);
+  g_object_set_data (G_OBJECT (object), "gdbus-codegen-connection", (gpointer) connection);
+  g_object_set_data_full (G_OBJECT (object), "gdbus-codegen-pvc", (gpointer) pvc, (GDestroyNotify) g_hash_table_unref);
+  g_signal_connect (object, "notify", G_CALLBACK (on_notify), NULL);
+  return g_dbus_connection_register_object (connection,
+          object_path,
+          &_e_gdbus_book_interface_info,
+          &e_gdbus_book_interface_vtable,
+          object,
+          (GDestroyNotify) on_object_unregistered,
+          error);
+}
+
+/**
+ * e_gdbus_book_interface_info:
+ *
+ * Gets interface description for the <literal>org.gnome.evolution.dataserver.addressbook.Book</literal> D-Bus interface.
+ *
+ * Returns: A #GDBusInterfaceInfo. Do not free, the object is statically allocated.
+ */
+const GDBusInterfaceInfo *
+e_gdbus_book_interface_info (void)
+{
+  return &_e_gdbus_book_interface_info;
+}
+
+
+/* ---------------------------------------------------------------------- */
+
+static void proxy_iface_init (EGdbusBookIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (EGdbusBookProxy, e_gdbus_book_proxy, G_TYPE_DBUS_PROXY,
+                         G_IMPLEMENT_INTERFACE (E_GDBUS_TYPE_BOOK, proxy_iface_init));
+
+static void
+e_gdbus_book_proxy_init (EGdbusBookProxy *proxy)
+{
+  g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy),
+                                   (GDBusInterfaceInfo *) &_e_gdbus_book_interface_info);
+}
+
+static void
+g_signal (GDBusProxy  *proxy,
+          const gchar *sender_name,
+          const gchar *signal_name,
+          GVariant    *parameters)
+{
+  guint signal_id;
+  signal_id = lookup_signal_id_from_signal_name (signal_name);
+  switch (signal_id)
+    {
+    case __WRITABLE_SIGNAL:
+      {
+        gboolean arg_value;
+        g_variant_get (parameters,
+                       "(b)",
+                       &arg_value);
+        g_signal_emit (proxy,
+                       signals[signal_id],
+                       0, arg_value);
+      }
+      break;
+
+    case __CONNECTION_SIGNAL:
+      {
+        gboolean arg_connected;
+        g_variant_get (parameters,
+                       "(b)",
+                       &arg_connected);
+        g_signal_emit (proxy,
+                       signals[signal_id],
+                       0, arg_connected);
+      }
+      break;
+
+    case __AUTH_REQUIRED_SIGNAL:
+      {
+        g_signal_emit (proxy,
+                       signals[signal_id],
+                       0);
+      }
+      break;
+
+    }
+}
+
+static void
+e_gdbus_book_proxy_get_property (GObject      *object,
+                       guint         prop_id,
+                       GValue       *value,
+                       GParamSpec   *pspec)
+{
+  G_GNUC_UNUSED GVariant *cached;
+  switch (prop_id)
+    {
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+property_set_cb (GDBusProxy   *proxy,
+                 GAsyncResult *res,
+                 gpointer      user_data)
+{
+  const gchar *property_name = user_data;
+  GError *error;
+  GVariant *result;
+
+  error = NULL;
+  result = g_dbus_proxy_call_finish (proxy, res, &error);
+  if (result == NULL)
+    {
+      g_warning ("Error setting property `%s': %s", property_name, error->message);
+      g_error_free (error);
+    }
+  else
+    {
+      g_variant_unref (result);
+    }
+}
+
+static void
+e_gdbus_book_proxy_set_property (GObject      *object,
+                       guint         prop_id,
+                       const GValue *value,
+                       GParamSpec   *pspec)
+{
+  GVariant *new_value;
+  const gchar *property_name;
+  new_value = NULL;
+  property_name = NULL;
+  switch (prop_id)
+    {
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+
+  if (new_value != NULL)
+    {
+      g_variant_ref_sink (new_value);
+      g_dbus_proxy_call (G_DBUS_PROXY (object),
+                         "org.freedesktop.DBus.Properties.Set",
+                         g_variant_new ("(ssv)",
+                                        "org.gnome.evolution.dataserver.addressbook.Book",
+                                        property_name,
+                                        new_value),
+                         G_DBUS_CALL_FLAGS_NONE,
+                         -1,
+                         NULL,
+                         (GAsyncReadyCallback) property_set_cb,
+                         (gpointer) property_name);
+      g_variant_unref (new_value);
+    }
+
+}
+
+static void
+g_properties_changed (GDBusProxy         *proxy,
+                      GVariant           *changed_properties,
+                      const gchar* const *invalidated_properties)
+{
+  guint n;
+  const gchar *key;
+  GVariantIter *iter;
+  const gchar *gname;
+
+  g_variant_get (changed_properties, "a{sv}", &iter);
+  while (g_variant_iter_next (iter, "{&sv}", &key, NULL))
+    {
+      gname = lookup_property_gname_from_property_name (key);
+      if (gname != NULL)
+        g_object_notify (G_OBJECT (proxy), gname);
+    }
+
+  for (n = 0; invalidated_properties[n] != NULL; n++)
+    {
+      gname = lookup_property_gname_from_property_name (invalidated_properties[n]);
+      if (gname != NULL)
+        g_object_notify (G_OBJECT (proxy), gname);
+    }
+
+}
+
+static void
+e_gdbus_book_proxy_class_init (EGdbusBookProxyClass *klass)
+{
+  GObjectClass *gobject_class;
+  GDBusProxyClass *proxy_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->get_property = e_gdbus_book_proxy_get_property;
+  gobject_class->set_property = e_gdbus_book_proxy_set_property;
+
+  proxy_class = G_DBUS_PROXY_CLASS (klass);
+  proxy_class->g_signal = g_signal;
+  proxy_class->g_properties_changed = g_properties_changed;
+
+}
+
+static void
+proxy_iface_init (EGdbusBookIface *iface)
+{
+}
+
+
+/**
+ * e_gdbus_book_proxy_new:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags used when constructing the proxy.
+ * @name: A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: Callback function to invoke when the proxy is ready.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like g_dbus_proxy_new() but returns a #EGdbusBookProxy.
+ *
+ * This is a failable asynchronous constructor - when the proxy is ready, callback will be invoked and you can use e_gdbus_book_proxy_new_finish() to get the result.
+ */
+void e_gdbus_book_proxy_new (GDBusConnection     *connection,
+                   GDBusProxyFlags      flags,
+                   const gchar         *name,
+                   const gchar         *object_path,
+                   GCancellable        *cancellable,
+                   GAsyncReadyCallback  callback,
+                   gpointer             user_data)
+{
+  g_async_initable_new_async (E_GDBUS_TYPE_BOOK_PROXY,
+                              G_PRIORITY_DEFAULT,
+                              cancellable,
+                              callback,
+                              user_data,
+                              "g-flags", flags,
+                              "g-name", name,
+                              "g-connection", connection,
+                              "g-object-path", object_path,
+                              "g-interface-name", "org.gnome.evolution.dataserver.addressbook.Book",
+                              NULL);
+}
+
+/**
+ * e_gdbus_book_proxy_new_finish:
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback function passed to e_gdbus_book_proxy_new().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes creating a #EGdbusBookProxy.
+ *
+ * Returns: A #EGdbusBookProxy or %NULL if @error is set. Free with g_object_unref().
+ */
+EGdbusBook *e_gdbus_book_proxy_new_finish (GAsyncResult  *res,
+                        GError       **error)
+{
+  GObject *object;
+  GObject *source_object;
+  source_object = g_async_result_get_source_object (res);
+  g_assert (source_object != NULL);
+  object = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object),
+                                        res,
+                                        error);
+  g_object_unref (source_object);
+  if (object != NULL)
+    return E_GDBUS_BOOK (object);
+  else
+    return NULL;
+}
+
+/**
+ * e_gdbus_book_proxy_new_sync:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags used when constructing the proxy.
+ * @name: A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Like g_dbus_proxy_new_sync() but returns a #EGdbusBookProxy.
+ *
+ * This is a synchronous failable constructor. See e_gdbus_book_proxy_new() and e_gdbus_book_proxy_new_finish() for the asynchronous version.
+ *
+ * Returns: A #EGdbusBookProxy or %NULL if error is set. Free with g_object_unref().
+ */
+EGdbusBook *e_gdbus_book_proxy_new_sync (GDBusConnection     *connection,
+                       GDBusProxyFlags      flags,
+                       const gchar         *name,
+                       const gchar         *object_path,
+                       GCancellable        *cancellable,
+                       GError             **error)
+{
+  GInitable *initable;
+  initable = g_initable_new (E_GDBUS_TYPE_BOOK_PROXY,
+                             cancellable,
+                             error,
+                             "g-flags", flags,
+                             "g-name", name,
+                             "g-connection", connection,
+                             "g-object-path", object_path,
+                             "g-interface-name", "org.gnome.evolution.dataserver.addressbook.Book",
+                             NULL);
+  if (initable != NULL)
+    return E_GDBUS_BOOK (initable);
+  else
+    return NULL;
+}
+
+
+/**
+ * e_gdbus_book_proxy_new_for_bus:
+ * @bus_type: A #GBusType.
+ * @flags: Flags used when constructing the proxy.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: Callback function to invoke when the proxy is ready.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like g_dbus_proxy_new_for_bus() but returns a #EGdbusBookProxy.
+ *
+ * This is a failable asynchronous constructor - when the proxy is ready, callback will be invoked and you can use e_gdbus_book_proxy_new_for_bus_finish() to get the result.
+ */
+void e_gdbus_book_proxy_new_for_bus (GBusType             bus_type,
+                           GDBusProxyFlags      flags,
+                           const gchar         *name,
+                           const gchar         *object_path,
+                           GCancellable        *cancellable,
+                           GAsyncReadyCallback  callback,
+                           gpointer             user_data)
+{
+  g_async_initable_new_async (E_GDBUS_TYPE_BOOK_PROXY,
+                              G_PRIORITY_DEFAULT,
+                              cancellable,
+                              callback,
+                              user_data,
+                              "g-flags", flags,
+                              "g-name", name,
+                              "g-bus-type", bus_type,
+                              "g-object-path", object_path,
+                              "g-interface-name", "org.gnome.evolution.dataserver.addressbook.Book",
+                              NULL);
+}
+
+/**
+ * e_gdbus_book_proxy_new_for_bus_finish:
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback function passed to e_gdbus_book_proxy_new_for_bus().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes creating a #EGdbusBookProxy.
+ *
+ * Returns: A #EGdbusBookProxy or %NULL if @error is set. Free with g_object_unref().
+ */
+EGdbusBook *e_gdbus_book_proxy_new_for_bus_finish (GAsyncResult  *res,
+                                GError       **error)
+{
+  GObject *object;
+  GObject *source_object;
+  source_object = g_async_result_get_source_object (res);
+  g_assert (source_object != NULL);
+  object = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object),
+                                        res,
+                                        error);
+  g_object_unref (source_object);
+  if (object != NULL)
+    return E_GDBUS_BOOK (object);
+  else
+    return NULL;
+}
+
+/**
+ * e_gdbus_book_proxy_new_for_bus_sync:
+ * @bus_type: A #GBusType.
+ * @flags: Flags used when constructing the proxy.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Like g_dbus_proxy_new_for_bus_sync() but returns a #EGdbusBookProxy.
+ *
+ * This is a synchronous failable constructor. See e_gdbus_book_proxy_new_for_bus() and e_gdbus_book_proxy_new_for_bus_finish() for the asynchronous version.
+ *
+ * Returns: A #EGdbusBookProxy or %NULL if error is set. Free with g_object_unref().
+ */
+EGdbusBook *e_gdbus_book_proxy_new_for_bus_sync (GBusType             bus_type,
+                               GDBusProxyFlags      flags,
+                               const gchar         *name,
+                               const gchar         *object_path,
+                               GCancellable        *cancellable,
+                               GError             **error)
+{
+  GInitable *initable;
+  initable = g_initable_new (E_GDBUS_TYPE_BOOK_PROXY,
+                             cancellable,
+                             error,
+                             "g-flags", flags,
+                             "g-name", name,
+                             "g-bus-type", bus_type,
+                             "g-object-path", object_path,
+                             "g-interface-name", "org.gnome.evolution.dataserver.addressbook.Book",
+                             NULL);
+  if (initable != NULL)
+    return E_GDBUS_BOOK (initable);
+  else
+    return NULL;
+}
+
+
+/* ---------------------------------------------------------------------- */
+
+struct _EGdbusBookStubPrivate
+{
+  gint foo;
+};
+
+static void stub_iface_init (EGdbusBookIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (EGdbusBookStub, e_gdbus_book_stub, G_TYPE_OBJECT,
+                         G_IMPLEMENT_INTERFACE (E_GDBUS_TYPE_BOOK, stub_iface_init));
+
+static void
+e_gdbus_book_stub_finalize (GObject *object)
+{
+  G_GNUC_UNUSED EGdbusBookStub *stub = (EGdbusBookStub *) object;
+  if (G_OBJECT_CLASS (e_gdbus_book_stub_parent_class)->finalize != NULL)
+    G_OBJECT_CLASS (e_gdbus_book_stub_parent_class)->finalize (object);
+}
+
+static void
+e_gdbus_book_stub_get_property (GObject      *object,
+                      guint         prop_id,
+                      GValue       *value,
+                      GParamSpec   *pspec)
+{
+  G_GNUC_UNUSED static gchar **strv_of_len_zero = {NULL};
+  G_GNUC_UNUSED EGdbusBookStub *stub = (EGdbusBookStub *) object;
+  switch (prop_id)
+    {
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+e_gdbus_book_stub_set_property (GObject      *object,
+                      guint         prop_id,
+                      const GValue *value,
+                      GParamSpec   *pspec)
+{
+  G_GNUC_UNUSED EGdbusBookStub *stub = (EGdbusBookStub *) object;
+  switch (prop_id)
+    {
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+e_gdbus_book_stub_init (EGdbusBookStub *stub)
+{
+  stub->priv = G_TYPE_INSTANCE_GET_PRIVATE (stub, E_GDBUS_TYPE_BOOK_STUB, EGdbusBookStubPrivate);
+}
+
+static void
+e_gdbus_book_stub_class_init (EGdbusBookStubClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize     = e_gdbus_book_stub_finalize;
+  gobject_class->get_property = e_gdbus_book_stub_get_property;
+  gobject_class->set_property = e_gdbus_book_stub_set_property;
+  g_type_class_add_private (klass, sizeof (EGdbusBookStubPrivate));
+}
+
+static void
+stub_iface_init (EGdbusBookIface *iface)
+{
+}
+
+/**
+ * e_gdbus_book_stub_new:
+ *
+ * Creates a new stub object that can be exported via e_gdbus_book_register_object().
+ *
+ * Returns: A #EGdbusBookStub instance. Free with g_object_unref().
+ */
+EGdbusBook *
+e_gdbus_book_stub_new (void)
+{
+  return E_GDBUS_BOOK (g_object_new (E_GDBUS_TYPE_BOOK_STUB, NULL));
+}
diff --git a/addressbook/libegdbus/e-gdbus-egdbusbook.h b/addressbook/libegdbus/e-gdbus-egdbusbook.h
new file mode 100644
index 0000000..62db87b
--- /dev/null
+++ b/addressbook/libegdbus/e-gdbus-egdbusbook.h
@@ -0,0 +1,681 @@
+/* File:       e-gdbus-egdbusbook.h
+ *
+ * GType name: EGdbusBook
+ * D-Bus name: org.gnome.evolution.dataserver.addressbook.Book
+ *
+ * Generated by GDBus Binding Tool 0.1. DO NOT EDIT.
+ */
+
+#ifndef __E_GDBUS_E_GDBUS_BOOK_H__
+#define __E_GDBUS_E_GDBUS_BOOK_H__
+
+#include <gio/gio.h>
+
+#include "e-gdbus-typemappers.h"
+G_BEGIN_DECLS
+
+#define E_GDBUS_TYPE_BOOK         (e_gdbus_book_get_type ())
+#define E_GDBUS_BOOK(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), E_GDBUS_TYPE_BOOK, EGdbusBook))
+#define E_GDBUS_IS_BOOK(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_GDBUS_TYPE_BOOK))
+#define E_GDBUS_BOOK_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE((o), E_GDBUS_TYPE_BOOK, EGdbusBookIface))
+
+/**
+ * EGdbusBook:
+ *
+ * Opaque type representing a proxy or an exported object.
+ */
+typedef struct _EGdbusBook EGdbusBook; /* Dummy typedef */
+/**
+ * EGdbusBookIface:
+ * @parent_iface: The parent interface.
+ * @writable: Handler for the #EGdbusBook::writable signal.
+ * @connection: Handler for the #EGdbusBook::connection signal.
+ * @auth_required: Handler for the #EGdbusBook::auth-required signal.
+ * @handle_open: Handler for the #EGdbusBook::handle-open signal.
+ * @handle_remove: Handler for the #EGdbusBook::handle-remove signal.
+ * @handle_get_contact: Handler for the #EGdbusBook::handle-get-contact signal.
+ * @handle_get_contact_list: Handler for the #EGdbusBook::handle-get-contact-list signal.
+ * @handle_authenticate_user: Handler for the #EGdbusBook::handle-authenticate-user signal.
+ * @handle_add_contact: Handler for the #EGdbusBook::handle-add-contact signal.
+ * @handle_remove_contacts: Handler for the #EGdbusBook::handle-remove-contacts signal.
+ * @handle_modify_contact: Handler for the #EGdbusBook::handle-modify-contact signal.
+ * @handle_get_static_capabilities: Handler for the #EGdbusBook::handle-get-static-capabilities signal.
+ * @handle_get_required_fields: Handler for the #EGdbusBook::handle-get-required-fields signal.
+ * @handle_get_supported_fields: Handler for the #EGdbusBook::handle-get-supported-fields signal.
+ * @handle_get_supported_auth_methods: Handler for the #EGdbusBook::handle-get-supported-auth-methods signal.
+ * @handle_get_book_view: Handler for the #EGdbusBook::handle-get-book-view signal.
+ * @handle_get_changes: Handler for the #EGdbusBook::handle-get-changes signal.
+ * @handle_cancel_operation: Handler for the #EGdbusBook::handle-cancel-operation signal.
+ * @handle_close: Handler for the #EGdbusBook::handle-close signal.
+ *
+ * Virtual table.
+ */
+typedef struct _EGdbusBookIface EGdbusBookIface;
+
+GType e_gdbus_book_get_type (void) G_GNUC_CONST;
+
+/* ---------------------------------------------------------------------- */
+
+typedef struct _EGdbusBookProxy EGdbusBookProxy;
+typedef struct _EGdbusBookProxyClass EGdbusBookProxyClass;
+
+/**
+ * EGdbusBookProxyPrivate:
+ *
+ * The #EGdbusBookProxyPrivate structure contains only private data.
+ */
+typedef struct _EGdbusBookProxyPrivate EGdbusBookProxyPrivate;
+
+/**
+ * EGdbusBookProxy:
+ *
+ * The #EGdbusBookProxy structure contains only private data and
+ * should only be accessed using the provided API.
+ */
+struct _EGdbusBookProxy
+{
+  GDBusProxy parent_instance;
+  EGdbusBookProxyPrivate *priv;
+};
+
+/**
+ * EGdbusBookProxyClass:
+ *
+ * Class structure for #EGdbusBookProxy.
+ */
+struct _EGdbusBookProxyClass
+{
+  GDBusProxyClass parent_class;
+};
+
+#define E_GDBUS_TYPE_BOOK_PROXY (e_gdbus_book_proxy_get_type ())
+GType e_gdbus_book_proxy_get_type (void) G_GNUC_CONST;
+
+void e_gdbus_book_proxy_new (GDBusConnection     *connection,
+                   GDBusProxyFlags      flags,
+                   const gchar         *name,
+                   const gchar         *object_path,
+                   GCancellable        *cancellable,
+                   GAsyncReadyCallback  callback,
+                   gpointer             user_data);
+EGdbusBook *e_gdbus_book_proxy_new_finish (GAsyncResult  *res,
+                        GError       **error);
+EGdbusBook *e_gdbus_book_proxy_new_sync (GDBusConnection     *connection,
+                       GDBusProxyFlags      flags,
+                       const gchar         *name,
+                       const gchar         *object_path,
+                       GCancellable        *cancellable,
+                       GError             **error);
+
+void e_gdbus_book_proxy_new_for_bus (GBusType             bus_type,
+                           GDBusProxyFlags      flags,
+                           const gchar         *name,
+                           const gchar         *object_path,
+                           GCancellable        *cancellable,
+                           GAsyncReadyCallback  callback,
+                           gpointer             user_data);
+EGdbusBook *e_gdbus_book_proxy_new_for_bus_finish (GAsyncResult  *res,
+                                 GError       **error);
+EGdbusBook *e_gdbus_book_proxy_new_for_bus_sync (GBusType             bus_type,
+                               GDBusProxyFlags      flags,
+                               const gchar         *name,
+                               const gchar         *object_path,
+                               GCancellable        *cancellable,
+                               GError             **error);
+
+/* ---------------------------------------------------------------------- */
+
+typedef struct _EGdbusBookStub EGdbusBookStub;
+typedef struct _EGdbusBookStubClass EGdbusBookStubClass;
+
+/**
+ * EGdbusBookStubPrivate:
+ *
+ * The #EGdbusBookStubPrivate structure contains only private data.
+ */
+typedef struct _EGdbusBookStubPrivate EGdbusBookStubPrivate;
+
+/**
+ * EGdbusBookStub:
+ *
+ * The #EGdbusBookStub structure contains only private data and
+ * should only be accessed using the provided API.
+ */
+struct _EGdbusBookStub
+{
+  GObject parent_instance;
+  EGdbusBookStubPrivate *priv;
+};
+
+/**
+ * EGdbusBookStubClass:
+ *
+ * Class structure for #EGdbusBookStub.
+ */
+struct _EGdbusBookStubClass
+{
+  GObjectClass parent_class;
+};
+
+#define E_GDBUS_TYPE_BOOK_STUB (e_gdbus_book_stub_get_type ())
+GType e_gdbus_book_stub_get_type (void) G_GNUC_CONST;
+
+EGdbusBook *e_gdbus_book_stub_new (void);
+
+
+guint e_gdbus_book_register_object (EGdbusBook *object,
+                    GDBusConnection *connection,
+                    const gchar *object_path,
+                    GError **error);
+
+void e_gdbus_book_drain_notify (EGdbusBook *object);
+
+
+const GDBusInterfaceInfo *e_gdbus_book_interface_info (void) G_GNUC_CONST;
+
+struct _EGdbusBookIface
+{
+  GTypeInterface parent_iface;
+
+  /* Signal handlers for receiving D-Bus signals: */
+  void (*writable) (
+        EGdbusBook *object,
+        gboolean arg_value);
+  void (*connection) (
+        EGdbusBook *object,
+        gboolean arg_connected);
+  void (*auth_required) (
+        EGdbusBook *object);
+
+  /* Signal handlers for handling D-Bus method calls: */
+  gboolean (*handle_open) (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation,
+        gboolean in_only_if_exists);
+  gboolean (*handle_remove) (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation);
+  gboolean (*handle_get_contact) (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *in_uid);
+  gboolean (*handle_get_contact_list) (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *in_query);
+  gboolean (*handle_authenticate_user) (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *in_user,
+        const gchar *in_passwd,
+        const gchar *in_auth_method);
+  gboolean (*handle_add_contact) (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *in_vcard);
+  gboolean (*handle_remove_contacts) (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation,
+        const gchar* const *in_list);
+  gboolean (*handle_modify_contact) (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *in_vcard);
+  gboolean (*handle_get_static_capabilities) (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation);
+  gboolean (*handle_get_required_fields) (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation);
+  gboolean (*handle_get_supported_fields) (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation);
+  gboolean (*handle_get_supported_auth_methods) (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation);
+  gboolean (*handle_get_book_view) (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *in_query,
+        guint in_max_results);
+  gboolean (*handle_get_changes) (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *in_change_id);
+  gboolean (*handle_cancel_operation) (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation);
+  gboolean (*handle_close) (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation);
+};
+
+/* C Bindings for properties */
+
+
+/* D-Bus Methods */
+void e_gdbus_book_call_open (
+        EGdbusBook *proxy,
+        gboolean in_only_if_exists,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_book_call_open_finish (
+        EGdbusBook *proxy,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_book_call_open_sync (
+        EGdbusBook *proxy,
+        gboolean in_only_if_exists,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_book_call_remove (
+        EGdbusBook *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_book_call_remove_finish (
+        EGdbusBook *proxy,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_book_call_remove_sync (
+        EGdbusBook *proxy,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_book_call_get_contact (
+        EGdbusBook *proxy,
+        const gchar *in_uid,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_book_call_get_contact_finish (
+        EGdbusBook *proxy,
+        gchar **out_vcard,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_book_call_get_contact_sync (
+        EGdbusBook *proxy,
+        const gchar *in_uid,
+        gchar **out_vcard,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_book_call_get_contact_list (
+        EGdbusBook *proxy,
+        const gchar *in_query,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_book_call_get_contact_list_finish (
+        EGdbusBook *proxy,
+        gchar ***out_vcards,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_book_call_get_contact_list_sync (
+        EGdbusBook *proxy,
+        const gchar *in_query,
+        gchar ***out_vcards,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_book_call_authenticate_user (
+        EGdbusBook *proxy,
+        const gchar *in_user,
+        const gchar *in_passwd,
+        const gchar *in_auth_method,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_book_call_authenticate_user_finish (
+        EGdbusBook *proxy,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_book_call_authenticate_user_sync (
+        EGdbusBook *proxy,
+        const gchar *in_user,
+        const gchar *in_passwd,
+        const gchar *in_auth_method,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_book_call_add_contact (
+        EGdbusBook *proxy,
+        const gchar *in_vcard,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_book_call_add_contact_finish (
+        EGdbusBook *proxy,
+        gchar **out_uid,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_book_call_add_contact_sync (
+        EGdbusBook *proxy,
+        const gchar *in_vcard,
+        gchar **out_uid,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_book_call_remove_contacts (
+        EGdbusBook *proxy,
+        const gchar* const *in_list,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_book_call_remove_contacts_finish (
+        EGdbusBook *proxy,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_book_call_remove_contacts_sync (
+        EGdbusBook *proxy,
+        const gchar* const *in_list,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_book_call_modify_contact (
+        EGdbusBook *proxy,
+        const gchar *in_vcard,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_book_call_modify_contact_finish (
+        EGdbusBook *proxy,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_book_call_modify_contact_sync (
+        EGdbusBook *proxy,
+        const gchar *in_vcard,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_book_call_get_static_capabilities (
+        EGdbusBook *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_book_call_get_static_capabilities_finish (
+        EGdbusBook *proxy,
+        gchar **out_capabilities,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_book_call_get_static_capabilities_sync (
+        EGdbusBook *proxy,
+        gchar **out_capabilities,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_book_call_get_required_fields (
+        EGdbusBook *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_book_call_get_required_fields_finish (
+        EGdbusBook *proxy,
+        gchar ***out_fields,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_book_call_get_required_fields_sync (
+        EGdbusBook *proxy,
+        gchar ***out_fields,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_book_call_get_supported_fields (
+        EGdbusBook *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_book_call_get_supported_fields_finish (
+        EGdbusBook *proxy,
+        gchar ***out_fields,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_book_call_get_supported_fields_sync (
+        EGdbusBook *proxy,
+        gchar ***out_fields,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_book_call_get_supported_auth_methods (
+        EGdbusBook *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_book_call_get_supported_auth_methods_finish (
+        EGdbusBook *proxy,
+        gchar ***out_auth_methods,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_book_call_get_supported_auth_methods_sync (
+        EGdbusBook *proxy,
+        gchar ***out_auth_methods,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_book_call_get_book_view (
+        EGdbusBook *proxy,
+        const gchar *in_query,
+        guint in_max_results,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_book_call_get_book_view_finish (
+        EGdbusBook *proxy,
+        gchar **out_view,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_book_call_get_book_view_sync (
+        EGdbusBook *proxy,
+        const gchar *in_query,
+        guint in_max_results,
+        gchar **out_view,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_book_call_get_changes (
+        EGdbusBook *proxy,
+        const gchar *in_change_id,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_book_call_get_changes_finish (
+        EGdbusBook *proxy,
+        GVariant **out_changes,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_book_call_get_changes_sync (
+        EGdbusBook *proxy,
+        const gchar *in_change_id,
+        GVariant **out_changes,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_book_call_cancel_operation (
+        EGdbusBook *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_book_call_cancel_operation_finish (
+        EGdbusBook *proxy,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_book_call_cancel_operation_sync (
+        EGdbusBook *proxy,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_book_call_close (
+        EGdbusBook *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_book_call_close_finish (
+        EGdbusBook *proxy,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_book_call_close_sync (
+        EGdbusBook *proxy,
+        GCancellable *cancellable,
+        GError **error);
+
+
+
+/* D-Bus Methods Completion Helpers */
+void e_gdbus_book_complete_open (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation);
+
+
+void e_gdbus_book_complete_remove (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation);
+
+
+void e_gdbus_book_complete_get_contact (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_vcard);
+
+
+void e_gdbus_book_complete_get_contact_list (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation,
+        const gchar* const *out_vcards);
+
+
+void e_gdbus_book_complete_authenticate_user (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation);
+
+
+void e_gdbus_book_complete_add_contact (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_uid);
+
+
+void e_gdbus_book_complete_remove_contacts (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation);
+
+
+void e_gdbus_book_complete_modify_contact (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation);
+
+
+void e_gdbus_book_complete_get_static_capabilities (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_capabilities);
+
+
+void e_gdbus_book_complete_get_required_fields (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation,
+        const gchar* const *out_fields);
+
+
+void e_gdbus_book_complete_get_supported_fields (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation,
+        const gchar* const *out_fields);
+
+
+void e_gdbus_book_complete_get_supported_auth_methods (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation,
+        const gchar* const *out_auth_methods);
+
+
+void e_gdbus_book_complete_get_book_view (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_view);
+
+
+void e_gdbus_book_complete_get_changes (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation,
+        GVariant *out_changes);
+
+
+void e_gdbus_book_complete_cancel_operation (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation);
+
+
+void e_gdbus_book_complete_close (
+        EGdbusBook *object,
+        GDBusMethodInvocation *invocation);
+
+
+
+/* D-Bus Signal Emission Helpers */
+void e_gdbus_book_emit_writable (
+        EGdbusBook *object,
+        gboolean arg_value);
+
+
+void e_gdbus_book_emit_connection (
+        EGdbusBook *object,
+        gboolean arg_connected);
+
+
+void e_gdbus_book_emit_auth_required (
+        EGdbusBook *object);
+
+
+
+G_END_DECLS
+
+#endif /* __E_GDBUS_E_GDBUS_BOOK_H__ */
diff --git a/addressbook/libegdbus/e-gdbus-egdbusbookfactory.c b/addressbook/libegdbus/e-gdbus-egdbusbookfactory.c
new file mode 100644
index 0000000..b7ed223
--- /dev/null
+++ b/addressbook/libegdbus/e-gdbus-egdbusbookfactory.c
@@ -0,0 +1,1120 @@
+/* File:       e-gdbus-egdbusbookfactory.c
+ *
+ * GType name: EGdbusBookFactory
+ * D-Bus name: org.gnome.evolution.dataserver.addressbook.BookFactory
+ *
+ * Generated by GDBus Binding Tool 0.1. DO NOT EDIT.
+ */
+
+/**
+ * SECTION:e-gdbus-egdbusbookfactory
+ * @title: EGdbusBookFactory
+ * @short_description: Wraps the org.gnome.evolution.dataserver.addressbook.BookFactory D-Bus interface
+ * @include: gio/gio.h
+ *
+ * The abstract #EGdbusBookFactory interface type wraps the <literal>org.gnome.evolution.dataserver.addressbook.BookFactory</literal> D-Bus interface. Two concrete implementations of this type are included: #EGdbusBookFactoryProxy and #EGdbusBookFactoryStub.
+ *
+ * The generated proxy type #EGdbusBookFactoryProxy is typically used with the generated constructors e_gdbus_book_factory_proxy_new(), e_gdbus_book_factory_proxy_new_sync() and e_gdbus_book_factory_proxy_new_for_bus(), e_gdbus_book_factory_proxy_new_for_bus_sync().
+ *
+ * The generated stub type #EGdbusBookFactoryStub takes care of handling properties, method invocations and signal emissions. Simply use e_gdbus_book_factory_stub_new(), set some properties and connect to any of the handle-* signals to handle method invocations. Finally use e_gdbus_book_factory_register_object() to export the object on a #GDBusConnection.
+ * |[
+ * /<!-- -->* You can also use g_object_new() with E_GDBUS_TYPE_BOOK_FACTORY_STUB
+ *  * to set properties at construction time.
+ *  *<!-- -->/
+ * object = e_gdbus_book_factory_stub_new ();
+ * e_gdbus_book_factory_set_&lt;property_name&gt; (object, &lt;value_for_property&gt;);
+ * [...]
+ *
+ * g_signal_connect (object,
+ *                   "handle-&lt;method-name&gt;",
+ *                   G_CALLBACK (on_handle_&lt;method_name&gt;),
+ *                   some_user_data);
+ * [...]
+ *
+ * error = NULL;
+ * id = e_gdbus_book_factory_register_object (object,
+ *                                            connection,
+ *                                            "/path/of/object",
+ *                                            &error);
+ * ]|
+ *
+ * You don't <emphasis>have</emphasis> to use the generated stub type to export
+ * objects. Any type implementing the #EGdbusBookFactory interface may be used with
+ * e_gdbus_book_factory_register_object().
+ *
+ * Once exported, you can make the exported object emit D-Bus signals by simply
+ * emitting the corresponding GType signals. For better type-safety, you can use,
+ * the provided e_gdbus_book_factory_emit_*() helpers.
+ *
+ * For property changes, #GObject::notify signal emissions on exported objects 
+ * will be intercepted and queued. In an idle handler, the queued notifications
+ * are processed and a single <literal>PropertiesChanged</literal> signal (on the
+ * <literal>org.freedesktop.DBus.Properties</literal> interface) will be emitted
+ * for all the properties that changed (possibly containing several properties).
+ * Use e_gdbus_book_factory_drain_notify() to drain the queue immediately.
+ */
+
+#include "e-gdbus-egdbusbookfactory.h"
+#include "e-gdbus-typemappers.h"
+#include "e-gdbus-marshallers.h"
+
+typedef EGdbusBookFactoryIface EGdbusBookFactoryInterface;
+G_DEFINE_INTERFACE (EGdbusBookFactory, e_gdbus_book_factory, G_TYPE_OBJECT);
+
+
+enum
+{
+  _0_SIGNAL,
+  __GET_BOOK_METHOD,
+  __LAST_SIGNAL
+};
+
+static guint signals[__LAST_SIGNAL] = {0};
+
+
+enum
+{
+  PROP_0,
+};
+
+/* ------------------------------------------------------------------------- */
+
+/* Various lookup tables */
+
+static GHashTable *_method_name_to_id = NULL;
+static GHashTable *_signal_name_to_id = NULL;
+static GHashTable *_property_name_to_id = NULL;
+static GHashTable *_property_gname_to_name = NULL;
+static GHashTable *_property_name_to_gname = NULL;
+
+
+static guint
+lookup_method_id_from_method_name (const gchar *method_name)
+{
+  return GPOINTER_TO_UINT (g_hash_table_lookup (_method_name_to_id, method_name));
+}
+
+static guint
+lookup_signal_id_from_signal_name (const gchar *signal_name)
+{
+  return GPOINTER_TO_UINT (g_hash_table_lookup (_signal_name_to_id, signal_name));
+}
+
+static guint
+lookup_property_id_from_property_name (const gchar *property_name)
+{
+  return GPOINTER_TO_UINT (g_hash_table_lookup (_property_name_to_id, property_name));
+}
+
+static const gchar *
+lookup_property_name_from_property_gname (const gchar *property_gname)
+{
+  return g_hash_table_lookup (_property_gname_to_name, property_gname);
+}
+
+static const gchar *
+lookup_property_gname_from_property_name (const gchar *property_name)
+{
+  return g_hash_table_lookup (_property_name_to_gname, property_name);
+}
+
+/* ------------------------------------------------------------------------- */
+static void
+e_gdbus_book_factory_default_init (EGdbusBookFactoryIface *iface)
+{
+
+  /* Build lookup structures */
+  _method_name_to_id = g_hash_table_new (g_str_hash, g_str_equal);
+  _signal_name_to_id = g_hash_table_new (g_str_hash, g_str_equal);
+  _property_name_to_id = g_hash_table_new (g_str_hash, g_str_equal);
+  _property_gname_to_name = g_hash_table_new (g_str_hash, g_str_equal);
+  _property_name_to_gname = g_hash_table_new (g_str_hash, g_str_equal);
+  g_hash_table_insert (_method_name_to_id, (gpointer) "getBook", GUINT_TO_POINTER (__GET_BOOK_METHOD));
+
+  /* GObject signals definitions for D-Bus signals: */
+
+  /* GObject signals definitions for D-Bus methods: */
+  /**
+   * EGdbusBookFactory::handle-get-book:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   * @source: Parameter.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>getBook</literal> D-Bus method on @object. Use e_gdbus_book_factory_complete_get_book() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_book_factory_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__GET_BOOK_METHOD] =
+    g_signal_new ("handle-get-book",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusBookFactoryIface, handle_get_book),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING,
+                  G_TYPE_BOOLEAN,
+                  2,
+                  G_TYPE_DBUS_METHOD_INVOCATION,
+                  G_TYPE_STRING);
+
+  /* GObject property definitions for D-Bus properties: */
+}
+
+
+/* C Bindings for properties */
+
+/**
+ * e_gdbus_book_factory_call_get_book:
+ * @proxy: A #EGdbusBookFactory.
+ * @in_source: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.addressbook.BookFactory.getBook</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_book_factory_call_get_book_finish() to get the result of the operation.
+ *
+ * See e_gdbus_book_factory_call_get_book_sync() for the synchronous version of this method.
+ */
+void e_gdbus_book_factory_call_get_book (
+        EGdbusBookFactory *proxy,
+        const gchar *in_source,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(s)",
+                           in_source);
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "getBook",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_book_factory_call_get_book_finish:
+ * @proxy: A #EGdbusBookFactory.
+ * @out_path: Return location for out parameter or %NULL. Free with g_free().
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_book_factory_call_get_book().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.addressbook.BookFactory.getBook</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_factory_call_get_book_finish (
+        EGdbusBookFactory *proxy,
+        gchar **out_path,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(o)",
+                   out_path);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_book_factory_call_get_book_sync:
+ * @proxy: A #EGdbusBookFactory.
+ * @in_source: Method parameter.
+ * @out_path: Return location for out parameter or %NULL. Free with g_free().
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.addressbook.BookFactory.getBook</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_book_factory_call_get_book() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_factory_call_get_book_sync (
+        EGdbusBookFactory *proxy,
+        const gchar *in_source,
+        gchar **out_path,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = g_variant_new ("(s)",
+                           in_source);
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "getBook",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(o)",
+                   out_path);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_book_factory_complete_get_book:
+ * @object: A #EGdbusBookFactory.
+ * @invocation: A #GDBusMethodInvocation.
+ * @out_path: Value to return.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.addressbook.BookFactory.getBook</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_book_factory_complete_get_book (
+        EGdbusBookFactory *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_path)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(o)",
+                           out_path);
+  g_dbus_method_invocation_return_value (invocation, _params);
+}
+
+
+static const GDBusArgInfo e_gdbus_book_factory_method_in_getBook_source =
+{
+  -1,
+  (gchar *) "source",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_book_factory_method_in_getBook_arg_pointers[] =
+{
+  &e_gdbus_book_factory_method_in_getBook_source,
+  NULL
+};
+
+static const GDBusArgInfo e_gdbus_book_factory_method_out_getBook_path =
+{
+  -1,
+  (gchar *) "path",
+  (gchar *) "o",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_book_factory_method_out_getBook_arg_pointers[] =
+{
+  &e_gdbus_book_factory_method_out_getBook_path,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_book_factory_method_getBook =
+{
+  -1,
+  (gchar *) "getBook",
+  (GDBusArgInfo **) &e_gdbus_book_factory_method_in_getBook_arg_pointers,
+  (GDBusArgInfo **) &e_gdbus_book_factory_method_out_getBook_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusMethodInfo * const e_gdbus_book_factory_method_info_pointers[] =
+{
+  &e_gdbus_book_factory_method_getBook,
+  NULL
+};
+
+static const GDBusInterfaceInfo _e_gdbus_book_factory_interface_info =
+{
+  -1,
+  (gchar *) "org.gnome.evolution.dataserver.addressbook.BookFactory",
+  (GDBusMethodInfo **) &e_gdbus_book_factory_method_info_pointers,
+  (GDBusSignalInfo **) NULL,
+  (GDBusPropertyInfo **) NULL,
+};
+
+static void
+handle_method_call (GDBusConnection       *connection,
+                    const gchar           *sender,
+                    const gchar           *object_path,
+                    const gchar           *interface_name,
+                    const gchar           *method_name,
+                    GVariant              *parameters,
+                    GDBusMethodInvocation *invocation,
+                    gpointer               user_data)
+{
+  guint method_id;
+  method_id = lookup_method_id_from_method_name (method_name);
+  switch (method_id)
+    {
+    case __GET_BOOK_METHOD:
+      {
+        EGdbusBookFactory *object = E_GDBUS_BOOK_FACTORY (user_data);
+        gboolean handled;
+        const gchar *arg_source;
+        g_variant_get (parameters,
+                       "(&s)",
+                       &arg_source);
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, arg_source, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    default:
+not_implemented:
+      g_dbus_method_invocation_return_error (invocation,
+                                             G_DBUS_ERROR,
+                                             G_DBUS_ERROR_NOT_SUPPORTED,
+                                             "Method `%s' is not implemented",
+                                             method_name);
+      break;
+    }
+};
+
+static GVariant *
+get_property (GDBusConnection  *connection,
+              const gchar      *sender,
+              const gchar      *object_path,
+              const gchar      *interface_name,
+              const gchar      *property_name,
+              GError          **error,
+              gpointer          user_data)
+{
+  GVariant *ret;
+  guint prop_id;
+  prop_id = lookup_property_id_from_property_name (property_name);
+  ret = NULL;
+  switch (prop_id)
+    {
+    default:
+      g_set_error (error,
+                   G_DBUS_ERROR,
+                   G_DBUS_ERROR_NOT_SUPPORTED,
+                   "This implementation does not support property `%s'",
+                   property_name);
+      break;
+    }
+
+  return ret;
+};
+
+static gboolean
+set_property (GDBusConnection  *connection,
+              const gchar      *sender,
+              const gchar      *object_path,
+              const gchar      *interface_name,
+              const gchar      *property_name,
+              GVariant         *value,
+              GError          **error,
+              gpointer          user_data)
+{
+  gboolean ret;
+  guint prop_id;
+  prop_id = lookup_property_id_from_property_name (property_name);
+  ret = TRUE;
+  switch (prop_id)
+    {
+    default:
+      g_set_error (error,
+                   G_DBUS_ERROR,
+                   G_DBUS_ERROR_NOT_SUPPORTED,
+                   "This implementation does not support property `%s'",
+                   property_name);
+      ret = FALSE;
+      break;
+    }
+
+  return ret;
+};
+
+static const GDBusInterfaceVTable e_gdbus_book_factory_interface_vtable =
+{
+  handle_method_call,
+  get_property,
+  set_property,
+};
+
+static gboolean
+emit_notifications_in_idle (gpointer user_data)
+{
+  GObject *object = G_OBJECT (user_data);
+  GDBusConnection *connection;
+  const gchar *path;
+  GHashTable *notification_queue;
+  GHashTableIter iter;
+  const gchar *property_name;
+  GVariant *value;
+  GVariantBuilder *builder;
+  GVariantBuilder *invalidated_builder;
+  GHashTable *pvc;
+  gboolean has_changes;
+
+  notification_queue = g_object_get_data (object, "gdbus-codegen-notification-queue");
+  path = g_object_get_data (object, "gdbus-codegen-path");
+  connection = g_object_get_data (object, "gdbus-codegen-connection");
+  pvc = g_object_get_data (object, "gdbus-codegen-pvc");
+  g_assert (notification_queue != NULL && path != NULL && connection != NULL && pvc != NULL);
+
+  builder = g_variant_builder_new (G_VARIANT_TYPE_ARRAY);
+  invalidated_builder = g_variant_builder_new (G_VARIANT_TYPE ("as"));
+  g_hash_table_iter_init (&iter, notification_queue);
+  has_changes = FALSE;
+  while (g_hash_table_iter_next (&iter, (gpointer) &property_name, (gpointer) &value))
+    {
+      GVariant *cached_value;
+      cached_value = g_hash_table_lookup (pvc, property_name);
+      if (cached_value == NULL || !g_variant_equal (cached_value, value))
+        {
+          g_hash_table_insert (pvc, (gpointer) property_name, (gpointer) g_variant_ref (value));
+          g_variant_builder_add (builder, "{sv}", property_name, value);
+          has_changes = TRUE;
+        }
+    }
+
+  if (has_changes)
+    {
+      g_dbus_connection_emit_signal (connection,
+                                     NULL,
+                                     path,
+                                     "org.freedesktop.DBus.Properties",
+                                     "PropertiesChanged",
+                                     g_variant_new ("(sa{sv}as)",
+                                                    "org.gnome.evolution.dataserver.addressbook.BookFactory",
+                                                    builder,
+                                                    invalidated_builder),
+                                     NULL);
+    }
+  else
+    {
+      g_variant_builder_unref (builder);
+      g_variant_builder_unref (invalidated_builder);
+    }
+
+  g_hash_table_remove_all (notification_queue);
+  g_object_set_data (object, "gdbus-codegen-notification-idle-id", GUINT_TO_POINTER (0));
+  return FALSE;
+}
+
+static void
+queue_notification (GObject     *object,
+                    const gchar *property_name,
+                    GVariant    *value)
+{
+  GHashTable *notification_queue;
+  guint idle_id;
+  notification_queue = g_object_get_data (object, "gdbus-codegen-notification-queue");
+  if (notification_queue == NULL)
+    {
+      notification_queue = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) g_variant_unref);
+      g_object_set_data_full (object, "gdbus-codegen-notification-queue", notification_queue, (GDestroyNotify) g_hash_table_unref);
+    }
+  g_hash_table_insert (notification_queue, (gpointer) property_name, (gpointer) value); /* adopts value */
+  idle_id = GPOINTER_TO_UINT (g_object_get_data (object, "gdbus-codegen-notification-idle-id"));
+  if (idle_id == 0)
+    {
+      GSource *idle_source;
+      idle_source = g_idle_source_new ();
+      g_source_set_priority (idle_source, G_PRIORITY_DEFAULT);
+      g_source_set_callback (idle_source,
+                             emit_notifications_in_idle,
+                             g_object_ref (object),
+                             (GDestroyNotify) g_object_unref);
+      idle_id = g_source_attach (idle_source, g_main_context_get_thread_default ());
+      g_source_unref (idle_source);
+      g_object_set_data (object, "gdbus-codegen-notification-idle-id", GUINT_TO_POINTER (idle_id));
+    }
+}
+
+/**
+ * e_gdbus_book_factory_drain_notify:
+ * @object: A #EGdbusBookFactory that is exported.
+ *
+ * If @object has queued notifications, empty the queue forcing
+ * the <literal>PropertiesChanged</literal> signal to be emitted.
+ * See <xref linkend="EGdbusBookFactory.description"/> for more background information.
+ */
+void
+e_gdbus_book_factory_drain_notify (EGdbusBookFactory *object)
+{
+  gint idle_id;
+  idle_id = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (object), "gdbus-codegen-notification-idle-id"));
+  if (idle_id > 0)
+    {
+      emit_notifications_in_idle (object);
+      g_source_remove (idle_id);
+    }
+}
+
+static void
+on_notify (GObject    *object,
+           GParamSpec *pspec,
+           gpointer    user_data)
+{
+  GDBusConnection *connection;
+  const gchar *path;
+  GVariant *value;
+  const gchar *property_name;
+  guint prop_id;
+
+  path = g_object_get_data (object, "gdbus-codegen-path");
+  connection = g_object_get_data (object, "gdbus-codegen-connection");
+  if (connection == NULL || path == NULL)
+    goto out;
+
+  property_name = lookup_property_name_from_property_gname (pspec->name);
+  if (property_name == NULL)
+    goto out;
+  prop_id = lookup_property_id_from_property_name (property_name);
+
+  value = NULL;
+  switch (prop_id)
+    {
+  }
+
+  if (value != NULL && property_name != NULL)
+    {
+      queue_notification (object, property_name, g_variant_ref_sink (value));
+    }
+out:
+  ;
+}
+
+static void
+on_object_unregistered (GObject *object)
+{
+  gint idle_id;
+  idle_id = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (object), "gdbus-codegen-notification-idle-id"));
+  if (idle_id > 0)
+    {
+      g_source_remove (idle_id);
+    }
+  g_object_set_data (G_OBJECT (object), "gdbus-codegen-path", NULL);
+  g_object_set_data (G_OBJECT (object), "gdbus-codegen-connection", NULL);
+  g_signal_handlers_disconnect_by_func (object, on_notify, NULL);
+}
+
+/**
+ * e_gdbus_book_factory_register_object:
+ * @object: An instance of a #GObject<!-- -->-derived type implementing the #EGdbusBookFactory interface.
+ * @connection: A #GDBusConnection.
+ * @object_path: The object to register the object at.
+ * @error: Return location for error or %NULL.
+ *
+ * Registers @object at @object_path on @connection.
+ *
+ * See <xref linkend="EGdbusBookFactory.description"/>
+ * for how properties, methods and signals are handled.
+ *
+ * Returns: 0 if @error is set, otherwise a registration id (never 0) that can be used with g_dbus_connection_unregister_object().
+ */
+guint
+e_gdbus_book_factory_register_object (EGdbusBookFactory *object,
+           GDBusConnection *connection,
+           const gchar *object_path,
+           GError **error)
+{
+  G_GNUC_UNUSED GVariant *value;
+  GHashTable *pvc;
+
+  pvc = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) g_variant_unref);
+
+  g_object_set_data_full (G_OBJECT (object), "gdbus-codegen-path", (gpointer) g_strdup (object_path), g_free);
+  g_object_set_data (G_OBJECT (object), "gdbus-codegen-connection", (gpointer) connection);
+  g_object_set_data_full (G_OBJECT (object), "gdbus-codegen-pvc", (gpointer) pvc, (GDestroyNotify) g_hash_table_unref);
+  g_signal_connect (object, "notify", G_CALLBACK (on_notify), NULL);
+  return g_dbus_connection_register_object (connection,
+          object_path,
+          &_e_gdbus_book_factory_interface_info,
+          &e_gdbus_book_factory_interface_vtable,
+          object,
+          (GDestroyNotify) on_object_unregistered,
+          error);
+}
+
+/**
+ * e_gdbus_book_factory_interface_info:
+ *
+ * Gets interface description for the <literal>org.gnome.evolution.dataserver.addressbook.BookFactory</literal> D-Bus interface.
+ *
+ * Returns: A #GDBusInterfaceInfo. Do not free, the object is statically allocated.
+ */
+const GDBusInterfaceInfo *
+e_gdbus_book_factory_interface_info (void)
+{
+  return &_e_gdbus_book_factory_interface_info;
+}
+
+
+/* ---------------------------------------------------------------------- */
+
+static void proxy_iface_init (EGdbusBookFactoryIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (EGdbusBookFactoryProxy, e_gdbus_book_factory_proxy, G_TYPE_DBUS_PROXY,
+                         G_IMPLEMENT_INTERFACE (E_GDBUS_TYPE_BOOK_FACTORY, proxy_iface_init));
+
+static void
+e_gdbus_book_factory_proxy_init (EGdbusBookFactoryProxy *proxy)
+{
+  g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy),
+                                   (GDBusInterfaceInfo *) &_e_gdbus_book_factory_interface_info);
+}
+
+static void
+g_signal (GDBusProxy  *proxy,
+          const gchar *sender_name,
+          const gchar *signal_name,
+          GVariant    *parameters)
+{
+  guint signal_id;
+  signal_id = lookup_signal_id_from_signal_name (signal_name);
+  switch (signal_id)
+    {
+    }
+}
+
+static void
+e_gdbus_book_factory_proxy_get_property (GObject      *object,
+                       guint         prop_id,
+                       GValue       *value,
+                       GParamSpec   *pspec)
+{
+  G_GNUC_UNUSED GVariant *cached;
+  switch (prop_id)
+    {
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+property_set_cb (GDBusProxy   *proxy,
+                 GAsyncResult *res,
+                 gpointer      user_data)
+{
+  const gchar *property_name = user_data;
+  GError *error;
+  GVariant *result;
+
+  error = NULL;
+  result = g_dbus_proxy_call_finish (proxy, res, &error);
+  if (result == NULL)
+    {
+      g_warning ("Error setting property `%s': %s", property_name, error->message);
+      g_error_free (error);
+    }
+  else
+    {
+      g_variant_unref (result);
+    }
+}
+
+static void
+e_gdbus_book_factory_proxy_set_property (GObject      *object,
+                       guint         prop_id,
+                       const GValue *value,
+                       GParamSpec   *pspec)
+{
+  GVariant *new_value;
+  const gchar *property_name;
+  new_value = NULL;
+  property_name = NULL;
+  switch (prop_id)
+    {
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+
+  if (new_value != NULL)
+    {
+      g_variant_ref_sink (new_value);
+      g_dbus_proxy_call (G_DBUS_PROXY (object),
+                         "org.freedesktop.DBus.Properties.Set",
+                         g_variant_new ("(ssv)",
+                                        "org.gnome.evolution.dataserver.addressbook.BookFactory",
+                                        property_name,
+                                        new_value),
+                         G_DBUS_CALL_FLAGS_NONE,
+                         -1,
+                         NULL,
+                         (GAsyncReadyCallback) property_set_cb,
+                         (gpointer) property_name);
+      g_variant_unref (new_value);
+    }
+
+}
+
+static void
+g_properties_changed (GDBusProxy         *proxy,
+                      GVariant           *changed_properties,
+                      const gchar* const *invalidated_properties)
+{
+  guint n;
+  const gchar *key;
+  GVariantIter *iter;
+  const gchar *gname;
+
+  g_variant_get (changed_properties, "a{sv}", &iter);
+  while (g_variant_iter_next (iter, "{&sv}", &key, NULL))
+    {
+      gname = lookup_property_gname_from_property_name (key);
+      if (gname != NULL)
+        g_object_notify (G_OBJECT (proxy), gname);
+    }
+
+  for (n = 0; invalidated_properties[n] != NULL; n++)
+    {
+      gname = lookup_property_gname_from_property_name (invalidated_properties[n]);
+      if (gname != NULL)
+        g_object_notify (G_OBJECT (proxy), gname);
+    }
+
+}
+
+static void
+e_gdbus_book_factory_proxy_class_init (EGdbusBookFactoryProxyClass *klass)
+{
+  GObjectClass *gobject_class;
+  GDBusProxyClass *proxy_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->get_property = e_gdbus_book_factory_proxy_get_property;
+  gobject_class->set_property = e_gdbus_book_factory_proxy_set_property;
+
+  proxy_class = G_DBUS_PROXY_CLASS (klass);
+  proxy_class->g_signal = g_signal;
+  proxy_class->g_properties_changed = g_properties_changed;
+
+}
+
+static void
+proxy_iface_init (EGdbusBookFactoryIface *iface)
+{
+}
+
+
+/**
+ * e_gdbus_book_factory_proxy_new:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags used when constructing the proxy.
+ * @name: A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: Callback function to invoke when the proxy is ready.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like g_dbus_proxy_new() but returns a #EGdbusBookFactoryProxy.
+ *
+ * This is a failable asynchronous constructor - when the proxy is ready, callback will be invoked and you can use e_gdbus_book_factory_proxy_new_finish() to get the result.
+ */
+void e_gdbus_book_factory_proxy_new (GDBusConnection     *connection,
+                   GDBusProxyFlags      flags,
+                   const gchar         *name,
+                   const gchar         *object_path,
+                   GCancellable        *cancellable,
+                   GAsyncReadyCallback  callback,
+                   gpointer             user_data)
+{
+  g_async_initable_new_async (E_GDBUS_TYPE_BOOK_FACTORY_PROXY,
+                              G_PRIORITY_DEFAULT,
+                              cancellable,
+                              callback,
+                              user_data,
+                              "g-flags", flags,
+                              "g-name", name,
+                              "g-connection", connection,
+                              "g-object-path", object_path,
+                              "g-interface-name", "org.gnome.evolution.dataserver.addressbook.BookFactory",
+                              NULL);
+}
+
+/**
+ * e_gdbus_book_factory_proxy_new_finish:
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback function passed to e_gdbus_book_factory_proxy_new().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes creating a #EGdbusBookFactoryProxy.
+ *
+ * Returns: A #EGdbusBookFactoryProxy or %NULL if @error is set. Free with g_object_unref().
+ */
+EGdbusBookFactory *e_gdbus_book_factory_proxy_new_finish (GAsyncResult  *res,
+                        GError       **error)
+{
+  GObject *object;
+  GObject *source_object;
+  source_object = g_async_result_get_source_object (res);
+  g_assert (source_object != NULL);
+  object = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object),
+                                        res,
+                                        error);
+  g_object_unref (source_object);
+  if (object != NULL)
+    return E_GDBUS_BOOK_FACTORY (object);
+  else
+    return NULL;
+}
+
+/**
+ * e_gdbus_book_factory_proxy_new_sync:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags used when constructing the proxy.
+ * @name: A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Like g_dbus_proxy_new_sync() but returns a #EGdbusBookFactoryProxy.
+ *
+ * This is a synchronous failable constructor. See e_gdbus_book_factory_proxy_new() and e_gdbus_book_factory_proxy_new_finish() for the asynchronous version.
+ *
+ * Returns: A #EGdbusBookFactoryProxy or %NULL if error is set. Free with g_object_unref().
+ */
+EGdbusBookFactory *e_gdbus_book_factory_proxy_new_sync (GDBusConnection     *connection,
+                       GDBusProxyFlags      flags,
+                       const gchar         *name,
+                       const gchar         *object_path,
+                       GCancellable        *cancellable,
+                       GError             **error)
+{
+  GInitable *initable;
+  initable = g_initable_new (E_GDBUS_TYPE_BOOK_FACTORY_PROXY,
+                             cancellable,
+                             error,
+                             "g-flags", flags,
+                             "g-name", name,
+                             "g-connection", connection,
+                             "g-object-path", object_path,
+                             "g-interface-name", "org.gnome.evolution.dataserver.addressbook.BookFactory",
+                             NULL);
+  if (initable != NULL)
+    return E_GDBUS_BOOK_FACTORY (initable);
+  else
+    return NULL;
+}
+
+
+/**
+ * e_gdbus_book_factory_proxy_new_for_bus:
+ * @bus_type: A #GBusType.
+ * @flags: Flags used when constructing the proxy.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: Callback function to invoke when the proxy is ready.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like g_dbus_proxy_new_for_bus() but returns a #EGdbusBookFactoryProxy.
+ *
+ * This is a failable asynchronous constructor - when the proxy is ready, callback will be invoked and you can use e_gdbus_book_factory_proxy_new_for_bus_finish() to get the result.
+ */
+void e_gdbus_book_factory_proxy_new_for_bus (GBusType             bus_type,
+                           GDBusProxyFlags      flags,
+                           const gchar         *name,
+                           const gchar         *object_path,
+                           GCancellable        *cancellable,
+                           GAsyncReadyCallback  callback,
+                           gpointer             user_data)
+{
+  g_async_initable_new_async (E_GDBUS_TYPE_BOOK_FACTORY_PROXY,
+                              G_PRIORITY_DEFAULT,
+                              cancellable,
+                              callback,
+                              user_data,
+                              "g-flags", flags,
+                              "g-name", name,
+                              "g-bus-type", bus_type,
+                              "g-object-path", object_path,
+                              "g-interface-name", "org.gnome.evolution.dataserver.addressbook.BookFactory",
+                              NULL);
+}
+
+/**
+ * e_gdbus_book_factory_proxy_new_for_bus_finish:
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback function passed to e_gdbus_book_factory_proxy_new_for_bus().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes creating a #EGdbusBookFactoryProxy.
+ *
+ * Returns: A #EGdbusBookFactoryProxy or %NULL if @error is set. Free with g_object_unref().
+ */
+EGdbusBookFactory *e_gdbus_book_factory_proxy_new_for_bus_finish (GAsyncResult  *res,
+                                GError       **error)
+{
+  GObject *object;
+  GObject *source_object;
+  source_object = g_async_result_get_source_object (res);
+  g_assert (source_object != NULL);
+  object = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object),
+                                        res,
+                                        error);
+  g_object_unref (source_object);
+  if (object != NULL)
+    return E_GDBUS_BOOK_FACTORY (object);
+  else
+    return NULL;
+}
+
+/**
+ * e_gdbus_book_factory_proxy_new_for_bus_sync:
+ * @bus_type: A #GBusType.
+ * @flags: Flags used when constructing the proxy.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Like g_dbus_proxy_new_for_bus_sync() but returns a #EGdbusBookFactoryProxy.
+ *
+ * This is a synchronous failable constructor. See e_gdbus_book_factory_proxy_new_for_bus() and e_gdbus_book_factory_proxy_new_for_bus_finish() for the asynchronous version.
+ *
+ * Returns: A #EGdbusBookFactoryProxy or %NULL if error is set. Free with g_object_unref().
+ */
+EGdbusBookFactory *e_gdbus_book_factory_proxy_new_for_bus_sync (GBusType             bus_type,
+                               GDBusProxyFlags      flags,
+                               const gchar         *name,
+                               const gchar         *object_path,
+                               GCancellable        *cancellable,
+                               GError             **error)
+{
+  GInitable *initable;
+  initable = g_initable_new (E_GDBUS_TYPE_BOOK_FACTORY_PROXY,
+                             cancellable,
+                             error,
+                             "g-flags", flags,
+                             "g-name", name,
+                             "g-bus-type", bus_type,
+                             "g-object-path", object_path,
+                             "g-interface-name", "org.gnome.evolution.dataserver.addressbook.BookFactory",
+                             NULL);
+  if (initable != NULL)
+    return E_GDBUS_BOOK_FACTORY (initable);
+  else
+    return NULL;
+}
+
+
+/* ---------------------------------------------------------------------- */
+
+struct _EGdbusBookFactoryStubPrivate
+{
+  gint foo;
+};
+
+static void stub_iface_init (EGdbusBookFactoryIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (EGdbusBookFactoryStub, e_gdbus_book_factory_stub, G_TYPE_OBJECT,
+                         G_IMPLEMENT_INTERFACE (E_GDBUS_TYPE_BOOK_FACTORY, stub_iface_init));
+
+static void
+e_gdbus_book_factory_stub_finalize (GObject *object)
+{
+  G_GNUC_UNUSED EGdbusBookFactoryStub *stub = (EGdbusBookFactoryStub *) object;
+  if (G_OBJECT_CLASS (e_gdbus_book_factory_stub_parent_class)->finalize != NULL)
+    G_OBJECT_CLASS (e_gdbus_book_factory_stub_parent_class)->finalize (object);
+}
+
+static void
+e_gdbus_book_factory_stub_get_property (GObject      *object,
+                      guint         prop_id,
+                      GValue       *value,
+                      GParamSpec   *pspec)
+{
+  G_GNUC_UNUSED static gchar **strv_of_len_zero = {NULL};
+  G_GNUC_UNUSED EGdbusBookFactoryStub *stub = (EGdbusBookFactoryStub *) object;
+  switch (prop_id)
+    {
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+e_gdbus_book_factory_stub_set_property (GObject      *object,
+                      guint         prop_id,
+                      const GValue *value,
+                      GParamSpec   *pspec)
+{
+  G_GNUC_UNUSED EGdbusBookFactoryStub *stub = (EGdbusBookFactoryStub *) object;
+  switch (prop_id)
+    {
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+e_gdbus_book_factory_stub_init (EGdbusBookFactoryStub *stub)
+{
+  stub->priv = G_TYPE_INSTANCE_GET_PRIVATE (stub, E_GDBUS_TYPE_BOOK_FACTORY_STUB, EGdbusBookFactoryStubPrivate);
+}
+
+static void
+e_gdbus_book_factory_stub_class_init (EGdbusBookFactoryStubClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize     = e_gdbus_book_factory_stub_finalize;
+  gobject_class->get_property = e_gdbus_book_factory_stub_get_property;
+  gobject_class->set_property = e_gdbus_book_factory_stub_set_property;
+  g_type_class_add_private (klass, sizeof (EGdbusBookFactoryStubPrivate));
+}
+
+static void
+stub_iface_init (EGdbusBookFactoryIface *iface)
+{
+}
+
+/**
+ * e_gdbus_book_factory_stub_new:
+ *
+ * Creates a new stub object that can be exported via e_gdbus_book_factory_register_object().
+ *
+ * Returns: A #EGdbusBookFactoryStub instance. Free with g_object_unref().
+ */
+EGdbusBookFactory *
+e_gdbus_book_factory_stub_new (void)
+{
+  return E_GDBUS_BOOK_FACTORY (g_object_new (E_GDBUS_TYPE_BOOK_FACTORY_STUB, NULL));
+}
diff --git a/addressbook/libegdbus/e-gdbus-egdbusbookfactory.h b/addressbook/libegdbus/e-gdbus-egdbusbookfactory.h
new file mode 100644
index 0000000..b050214
--- /dev/null
+++ b/addressbook/libegdbus/e-gdbus-egdbusbookfactory.h
@@ -0,0 +1,209 @@
+/* File:       e-gdbus-egdbusbookfactory.h
+ *
+ * GType name: EGdbusBookFactory
+ * D-Bus name: org.gnome.evolution.dataserver.addressbook.BookFactory
+ *
+ * Generated by GDBus Binding Tool 0.1. DO NOT EDIT.
+ */
+
+#ifndef __E_GDBUS_E_GDBUS_BOOK_FACTORY_H__
+#define __E_GDBUS_E_GDBUS_BOOK_FACTORY_H__
+
+#include <gio/gio.h>
+
+#include "e-gdbus-typemappers.h"
+G_BEGIN_DECLS
+
+#define E_GDBUS_TYPE_BOOK_FACTORY         (e_gdbus_book_factory_get_type ())
+#define E_GDBUS_BOOK_FACTORY(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), E_GDBUS_TYPE_BOOK_FACTORY, EGdbusBookFactory))
+#define E_GDBUS_IS_BOOK_FACTORY(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_GDBUS_TYPE_BOOK_FACTORY))
+#define E_GDBUS_BOOK_FACTORY_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE((o), E_GDBUS_TYPE_BOOK_FACTORY, EGdbusBookFactoryIface))
+
+/**
+ * EGdbusBookFactory:
+ *
+ * Opaque type representing a proxy or an exported object.
+ */
+typedef struct _EGdbusBookFactory EGdbusBookFactory; /* Dummy typedef */
+/**
+ * EGdbusBookFactoryIface:
+ * @parent_iface: The parent interface.
+ * @handle_get_book: Handler for the #EGdbusBookFactory::handle-get-book signal.
+ *
+ * Virtual table.
+ */
+typedef struct _EGdbusBookFactoryIface EGdbusBookFactoryIface;
+
+GType e_gdbus_book_factory_get_type (void) G_GNUC_CONST;
+
+/* ---------------------------------------------------------------------- */
+
+typedef struct _EGdbusBookFactoryProxy EGdbusBookFactoryProxy;
+typedef struct _EGdbusBookFactoryProxyClass EGdbusBookFactoryProxyClass;
+
+/**
+ * EGdbusBookFactoryProxyPrivate:
+ *
+ * The #EGdbusBookFactoryProxyPrivate structure contains only private data.
+ */
+typedef struct _EGdbusBookFactoryProxyPrivate EGdbusBookFactoryProxyPrivate;
+
+/**
+ * EGdbusBookFactoryProxy:
+ *
+ * The #EGdbusBookFactoryProxy structure contains only private data and
+ * should only be accessed using the provided API.
+ */
+struct _EGdbusBookFactoryProxy
+{
+  GDBusProxy parent_instance;
+  EGdbusBookFactoryProxyPrivate *priv;
+};
+
+/**
+ * EGdbusBookFactoryProxyClass:
+ *
+ * Class structure for #EGdbusBookFactoryProxy.
+ */
+struct _EGdbusBookFactoryProxyClass
+{
+  GDBusProxyClass parent_class;
+};
+
+#define E_GDBUS_TYPE_BOOK_FACTORY_PROXY (e_gdbus_book_factory_proxy_get_type ())
+GType e_gdbus_book_factory_proxy_get_type (void) G_GNUC_CONST;
+
+void e_gdbus_book_factory_proxy_new (GDBusConnection     *connection,
+                   GDBusProxyFlags      flags,
+                   const gchar         *name,
+                   const gchar         *object_path,
+                   GCancellable        *cancellable,
+                   GAsyncReadyCallback  callback,
+                   gpointer             user_data);
+EGdbusBookFactory *e_gdbus_book_factory_proxy_new_finish (GAsyncResult  *res,
+                        GError       **error);
+EGdbusBookFactory *e_gdbus_book_factory_proxy_new_sync (GDBusConnection     *connection,
+                       GDBusProxyFlags      flags,
+                       const gchar         *name,
+                       const gchar         *object_path,
+                       GCancellable        *cancellable,
+                       GError             **error);
+
+void e_gdbus_book_factory_proxy_new_for_bus (GBusType             bus_type,
+                           GDBusProxyFlags      flags,
+                           const gchar         *name,
+                           const gchar         *object_path,
+                           GCancellable        *cancellable,
+                           GAsyncReadyCallback  callback,
+                           gpointer             user_data);
+EGdbusBookFactory *e_gdbus_book_factory_proxy_new_for_bus_finish (GAsyncResult  *res,
+                                 GError       **error);
+EGdbusBookFactory *e_gdbus_book_factory_proxy_new_for_bus_sync (GBusType             bus_type,
+                               GDBusProxyFlags      flags,
+                               const gchar         *name,
+                               const gchar         *object_path,
+                               GCancellable        *cancellable,
+                               GError             **error);
+
+/* ---------------------------------------------------------------------- */
+
+typedef struct _EGdbusBookFactoryStub EGdbusBookFactoryStub;
+typedef struct _EGdbusBookFactoryStubClass EGdbusBookFactoryStubClass;
+
+/**
+ * EGdbusBookFactoryStubPrivate:
+ *
+ * The #EGdbusBookFactoryStubPrivate structure contains only private data.
+ */
+typedef struct _EGdbusBookFactoryStubPrivate EGdbusBookFactoryStubPrivate;
+
+/**
+ * EGdbusBookFactoryStub:
+ *
+ * The #EGdbusBookFactoryStub structure contains only private data and
+ * should only be accessed using the provided API.
+ */
+struct _EGdbusBookFactoryStub
+{
+  GObject parent_instance;
+  EGdbusBookFactoryStubPrivate *priv;
+};
+
+/**
+ * EGdbusBookFactoryStubClass:
+ *
+ * Class structure for #EGdbusBookFactoryStub.
+ */
+struct _EGdbusBookFactoryStubClass
+{
+  GObjectClass parent_class;
+};
+
+#define E_GDBUS_TYPE_BOOK_FACTORY_STUB (e_gdbus_book_factory_stub_get_type ())
+GType e_gdbus_book_factory_stub_get_type (void) G_GNUC_CONST;
+
+EGdbusBookFactory *e_gdbus_book_factory_stub_new (void);
+
+
+guint e_gdbus_book_factory_register_object (EGdbusBookFactory *object,
+                    GDBusConnection *connection,
+                    const gchar *object_path,
+                    GError **error);
+
+void e_gdbus_book_factory_drain_notify (EGdbusBookFactory *object);
+
+
+const GDBusInterfaceInfo *e_gdbus_book_factory_interface_info (void) G_GNUC_CONST;
+
+struct _EGdbusBookFactoryIface
+{
+  GTypeInterface parent_iface;
+
+  /* Signal handlers for receiving D-Bus signals: */
+
+  /* Signal handlers for handling D-Bus method calls: */
+  gboolean (*handle_get_book) (
+        EGdbusBookFactory *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *in_source);
+};
+
+/* C Bindings for properties */
+
+
+/* D-Bus Methods */
+void e_gdbus_book_factory_call_get_book (
+        EGdbusBookFactory *proxy,
+        const gchar *in_source,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_book_factory_call_get_book_finish (
+        EGdbusBookFactory *proxy,
+        gchar **out_path,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_book_factory_call_get_book_sync (
+        EGdbusBookFactory *proxy,
+        const gchar *in_source,
+        gchar **out_path,
+        GCancellable *cancellable,
+        GError **error);
+
+
+
+/* D-Bus Methods Completion Helpers */
+void e_gdbus_book_factory_complete_get_book (
+        EGdbusBookFactory *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_path);
+
+
+
+/* D-Bus Signal Emission Helpers */
+
+G_END_DECLS
+
+#endif /* __E_GDBUS_E_GDBUS_BOOK_FACTORY_H__ */
diff --git a/addressbook/libegdbus/e-gdbus-egdbusbookview.c b/addressbook/libegdbus/e-gdbus-egdbusbookview.c
new file mode 100644
index 0000000..613e5c5
--- /dev/null
+++ b/addressbook/libegdbus/e-gdbus-egdbusbookview.c
@@ -0,0 +1,2043 @@
+/* File:       e-gdbus-egdbusbookview.c
+ *
+ * GType name: EGdbusBookView
+ * D-Bus name: org.gnome.evolution.dataserver.addressbook.BookView
+ *
+ * Generated by GDBus Binding Tool 0.1. DO NOT EDIT.
+ */
+
+/**
+ * SECTION:e-gdbus-egdbusbookview
+ * @title: EGdbusBookView
+ * @short_description: Wraps the org.gnome.evolution.dataserver.addressbook.BookView D-Bus interface
+ * @include: gio/gio.h
+ *
+ * The abstract #EGdbusBookView interface type wraps the <literal>org.gnome.evolution.dataserver.addressbook.BookView</literal> D-Bus interface. Two concrete implementations of this type are included: #EGdbusBookViewProxy and #EGdbusBookViewStub.
+ *
+ * The generated proxy type #EGdbusBookViewProxy is typically used with the generated constructors e_gdbus_book_view_proxy_new(), e_gdbus_book_view_proxy_new_sync() and e_gdbus_book_view_proxy_new_for_bus(), e_gdbus_book_view_proxy_new_for_bus_sync().
+ *
+ * The generated stub type #EGdbusBookViewStub takes care of handling properties, method invocations and signal emissions. Simply use e_gdbus_book_view_stub_new(), set some properties and connect to any of the handle-* signals to handle method invocations. Finally use e_gdbus_book_view_register_object() to export the object on a #GDBusConnection.
+ * |[
+ * /<!-- -->* You can also use g_object_new() with E_GDBUS_TYPE_BOOK_VIEW_STUB
+ *  * to set properties at construction time.
+ *  *<!-- -->/
+ * object = e_gdbus_book_view_stub_new ();
+ * e_gdbus_book_view_set_&lt;property_name&gt; (object, &lt;value_for_property&gt;);
+ * [...]
+ *
+ * g_signal_connect (object,
+ *                   "handle-&lt;method-name&gt;",
+ *                   G_CALLBACK (on_handle_&lt;method_name&gt;),
+ *                   some_user_data);
+ * [...]
+ *
+ * error = NULL;
+ * id = e_gdbus_book_view_register_object (object,
+ *                                         connection,
+ *                                         "/path/of/object",
+ *                                         &error);
+ * ]|
+ *
+ * You don't <emphasis>have</emphasis> to use the generated stub type to export
+ * objects. Any type implementing the #EGdbusBookView interface may be used with
+ * e_gdbus_book_view_register_object().
+ *
+ * Once exported, you can make the exported object emit D-Bus signals by simply
+ * emitting the corresponding GType signals. For better type-safety, you can use,
+ * the provided e_gdbus_book_view_emit_*() helpers.
+ *
+ * For property changes, #GObject::notify signal emissions on exported objects 
+ * will be intercepted and queued. In an idle handler, the queued notifications
+ * are processed and a single <literal>PropertiesChanged</literal> signal (on the
+ * <literal>org.freedesktop.DBus.Properties</literal> interface) will be emitted
+ * for all the properties that changed (possibly containing several properties).
+ * Use e_gdbus_book_view_drain_notify() to drain the queue immediately.
+ */
+
+#include "e-gdbus-egdbusbookview.h"
+#include "e-gdbus-typemappers.h"
+#include "e-gdbus-marshallers.h"
+
+typedef EGdbusBookViewIface EGdbusBookViewInterface;
+G_DEFINE_INTERFACE (EGdbusBookView, e_gdbus_book_view, G_TYPE_OBJECT);
+
+
+enum
+{
+  _0_SIGNAL,
+  __CONTACTS_ADDED_SIGNAL,
+  __CONTACTS_CHANGED_SIGNAL,
+  __CONTACTS_REMOVED_SIGNAL,
+  __STATUS_MESSAGE_SIGNAL,
+  __COMPLETE_SIGNAL,
+  __START_METHOD,
+  __STOP_METHOD,
+  __DISPOSE_METHOD,
+  __LAST_SIGNAL
+};
+
+static guint signals[__LAST_SIGNAL] = {0};
+
+
+enum
+{
+  PROP_0,
+};
+
+/* ------------------------------------------------------------------------- */
+
+/* Various lookup tables */
+
+static GHashTable *_method_name_to_id = NULL;
+static GHashTable *_signal_name_to_id = NULL;
+static GHashTable *_property_name_to_id = NULL;
+static GHashTable *_property_gname_to_name = NULL;
+static GHashTable *_property_name_to_gname = NULL;
+
+
+static guint
+lookup_method_id_from_method_name (const gchar *method_name)
+{
+  return GPOINTER_TO_UINT (g_hash_table_lookup (_method_name_to_id, method_name));
+}
+
+static guint
+lookup_signal_id_from_signal_name (const gchar *signal_name)
+{
+  return GPOINTER_TO_UINT (g_hash_table_lookup (_signal_name_to_id, signal_name));
+}
+
+static guint
+lookup_property_id_from_property_name (const gchar *property_name)
+{
+  return GPOINTER_TO_UINT (g_hash_table_lookup (_property_name_to_id, property_name));
+}
+
+static const gchar *
+lookup_property_name_from_property_gname (const gchar *property_gname)
+{
+  return g_hash_table_lookup (_property_gname_to_name, property_gname);
+}
+
+static const gchar *
+lookup_property_gname_from_property_name (const gchar *property_name)
+{
+  return g_hash_table_lookup (_property_name_to_gname, property_name);
+}
+
+/* ------------------------------------------------------------------------- */
+static gboolean
+signal_emission_hook_cb_contacts_added (GSignalInvocationHint *ihint,
+                         guint                  n_param_values,
+                         const GValue          *param_values,
+                         gpointer               user_data)
+{
+  GObject *object;
+  GDBusConnection *connection;
+  const gchar *path;
+  GVariant *params;
+  GVariant *item;
+  GVariantBuilder *builder;
+
+  if (n_param_values < 1 || !G_VALUE_HOLDS (&param_values[0], G_TYPE_OBJECT))
+    goto out;
+  object = g_value_get_object (&param_values[0]);
+  path = g_object_get_data (object, "gdbus-codegen-path");
+  connection = g_object_get_data (object, "gdbus-codegen-connection");
+  if (connection == NULL || path == NULL)
+    goto out;
+
+  builder = g_variant_builder_new (G_VARIANT_TYPE_TUPLE);
+  g_assert_cmpint (n_param_values - 1, ==, 1);
+  param_values++;
+  item = g_variant_new ("^as", g_value_get_boxed (param_values));
+  g_variant_builder_add_value (builder, item);
+  param_values++;
+  params = g_variant_builder_end (builder);
+  g_variant_builder_unref (builder);
+
+  g_dbus_connection_emit_signal (connection,
+                                 NULL,
+                                 path,
+                                 "org.gnome.evolution.dataserver.addressbook.BookView",
+                                 "ContactsAdded",
+                                 params,
+                                 NULL);
+out:
+  return TRUE;
+}
+
+static gboolean
+signal_emission_hook_cb_contacts_changed (GSignalInvocationHint *ihint,
+                         guint                  n_param_values,
+                         const GValue          *param_values,
+                         gpointer               user_data)
+{
+  GObject *object;
+  GDBusConnection *connection;
+  const gchar *path;
+  GVariant *params;
+  GVariant *item;
+  GVariantBuilder *builder;
+
+  if (n_param_values < 1 || !G_VALUE_HOLDS (&param_values[0], G_TYPE_OBJECT))
+    goto out;
+  object = g_value_get_object (&param_values[0]);
+  path = g_object_get_data (object, "gdbus-codegen-path");
+  connection = g_object_get_data (object, "gdbus-codegen-connection");
+  if (connection == NULL || path == NULL)
+    goto out;
+
+  builder = g_variant_builder_new (G_VARIANT_TYPE_TUPLE);
+  g_assert_cmpint (n_param_values - 1, ==, 1);
+  param_values++;
+  item = g_variant_new ("^as", g_value_get_boxed (param_values));
+  g_variant_builder_add_value (builder, item);
+  param_values++;
+  params = g_variant_builder_end (builder);
+  g_variant_builder_unref (builder);
+
+  g_dbus_connection_emit_signal (connection,
+                                 NULL,
+                                 path,
+                                 "org.gnome.evolution.dataserver.addressbook.BookView",
+                                 "ContactsChanged",
+                                 params,
+                                 NULL);
+out:
+  return TRUE;
+}
+
+static gboolean
+signal_emission_hook_cb_contacts_removed (GSignalInvocationHint *ihint,
+                         guint                  n_param_values,
+                         const GValue          *param_values,
+                         gpointer               user_data)
+{
+  GObject *object;
+  GDBusConnection *connection;
+  const gchar *path;
+  GVariant *params;
+  GVariant *item;
+  GVariantBuilder *builder;
+
+  if (n_param_values < 1 || !G_VALUE_HOLDS (&param_values[0], G_TYPE_OBJECT))
+    goto out;
+  object = g_value_get_object (&param_values[0]);
+  path = g_object_get_data (object, "gdbus-codegen-path");
+  connection = g_object_get_data (object, "gdbus-codegen-connection");
+  if (connection == NULL || path == NULL)
+    goto out;
+
+  builder = g_variant_builder_new (G_VARIANT_TYPE_TUPLE);
+  g_assert_cmpint (n_param_values - 1, ==, 1);
+  param_values++;
+  item = g_variant_new ("^as", g_value_get_boxed (param_values));
+  g_variant_builder_add_value (builder, item);
+  param_values++;
+  params = g_variant_builder_end (builder);
+  g_variant_builder_unref (builder);
+
+  g_dbus_connection_emit_signal (connection,
+                                 NULL,
+                                 path,
+                                 "org.gnome.evolution.dataserver.addressbook.BookView",
+                                 "ContactsRemoved",
+                                 params,
+                                 NULL);
+out:
+  return TRUE;
+}
+
+static gboolean
+signal_emission_hook_cb_status_message (GSignalInvocationHint *ihint,
+                         guint                  n_param_values,
+                         const GValue          *param_values,
+                         gpointer               user_data)
+{
+  GObject *object;
+  GDBusConnection *connection;
+  const gchar *path;
+  GVariant *params;
+  GVariant *item;
+  GVariantBuilder *builder;
+
+  if (n_param_values < 1 || !G_VALUE_HOLDS (&param_values[0], G_TYPE_OBJECT))
+    goto out;
+  object = g_value_get_object (&param_values[0]);
+  path = g_object_get_data (object, "gdbus-codegen-path");
+  connection = g_object_get_data (object, "gdbus-codegen-connection");
+  if (connection == NULL || path == NULL)
+    goto out;
+
+  builder = g_variant_builder_new (G_VARIANT_TYPE_TUPLE);
+  g_assert_cmpint (n_param_values - 1, ==, 1);
+  param_values++;
+  item = g_variant_new ("s", g_value_get_string (param_values));
+  g_variant_builder_add_value (builder, item);
+  param_values++;
+  params = g_variant_builder_end (builder);
+  g_variant_builder_unref (builder);
+
+  g_dbus_connection_emit_signal (connection,
+                                 NULL,
+                                 path,
+                                 "org.gnome.evolution.dataserver.addressbook.BookView",
+                                 "StatusMessage",
+                                 params,
+                                 NULL);
+out:
+  return TRUE;
+}
+
+static gboolean
+signal_emission_hook_cb_complete (GSignalInvocationHint *ihint,
+                         guint                  n_param_values,
+                         const GValue          *param_values,
+                         gpointer               user_data)
+{
+  GObject *object;
+  GDBusConnection *connection;
+  const gchar *path;
+  GVariant *params;
+  GVariant *item;
+  GVariantBuilder *builder;
+
+  if (n_param_values < 1 || !G_VALUE_HOLDS (&param_values[0], G_TYPE_OBJECT))
+    goto out;
+  object = g_value_get_object (&param_values[0]);
+  path = g_object_get_data (object, "gdbus-codegen-path");
+  connection = g_object_get_data (object, "gdbus-codegen-connection");
+  if (connection == NULL || path == NULL)
+    goto out;
+
+  builder = g_variant_builder_new (G_VARIANT_TYPE_TUPLE);
+  g_assert_cmpint (n_param_values - 1, ==, 2);
+  param_values++;
+  item = g_variant_new_uint32 (g_value_get_uint (param_values));
+  g_variant_builder_add_value (builder, item);
+  param_values++;
+  item = g_variant_new ("s", g_value_get_string (param_values));
+  g_variant_builder_add_value (builder, item);
+  param_values++;
+  params = g_variant_builder_end (builder);
+  g_variant_builder_unref (builder);
+
+  g_dbus_connection_emit_signal (connection,
+                                 NULL,
+                                 path,
+                                 "org.gnome.evolution.dataserver.addressbook.BookView",
+                                 "Complete",
+                                 params,
+                                 NULL);
+out:
+  return TRUE;
+}
+
+static void
+e_gdbus_book_view_default_init (EGdbusBookViewIface *iface)
+{
+
+  /* Build lookup structures */
+  _method_name_to_id = g_hash_table_new (g_str_hash, g_str_equal);
+  _signal_name_to_id = g_hash_table_new (g_str_hash, g_str_equal);
+  _property_name_to_id = g_hash_table_new (g_str_hash, g_str_equal);
+  _property_gname_to_name = g_hash_table_new (g_str_hash, g_str_equal);
+  _property_name_to_gname = g_hash_table_new (g_str_hash, g_str_equal);
+  g_hash_table_insert (_method_name_to_id, (gpointer) "start", GUINT_TO_POINTER (__START_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "stop", GUINT_TO_POINTER (__STOP_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "dispose", GUINT_TO_POINTER (__DISPOSE_METHOD));
+  g_hash_table_insert (_signal_name_to_id, (gpointer) "ContactsAdded", GUINT_TO_POINTER (__CONTACTS_ADDED_SIGNAL));
+  g_hash_table_insert (_signal_name_to_id, (gpointer) "ContactsChanged", GUINT_TO_POINTER (__CONTACTS_CHANGED_SIGNAL));
+  g_hash_table_insert (_signal_name_to_id, (gpointer) "ContactsRemoved", GUINT_TO_POINTER (__CONTACTS_REMOVED_SIGNAL));
+  g_hash_table_insert (_signal_name_to_id, (gpointer) "StatusMessage", GUINT_TO_POINTER (__STATUS_MESSAGE_SIGNAL));
+  g_hash_table_insert (_signal_name_to_id, (gpointer) "Complete", GUINT_TO_POINTER (__COMPLETE_SIGNAL));
+
+  /* GObject signals definitions for D-Bus signals: */
+  /**
+   * EGdbusBookView::contacts-added:
+   * @object: The object emitting the signal.
+   * @vcards: Parameter.
+   *
+   * Represents the D-Bus signal <literal>ContactsAdded</literal>.
+   *
+   * On proxies, connect to this signal to get notified whenever the remote
+   * object instances emits the signal (similar to how the
+   * #GDBusProxy::g-signal works). The signal is emitted in the
+   * thread-default main loop of the thread that the proxy was created in.
+   *
+   * On exported objects, emitting this signal causes the actual D-Bus signal to be emitted. You can use e_gdbus_book_view_emit_contacts_added() to do this.
+   */  signals[__CONTACTS_ADDED_SIGNAL] =
+    g_signal_new ("contacts-added",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusBookViewIface, contacts_added),
+                  NULL,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_VOID__BOXED,
+                  G_TYPE_NONE,
+                  1,
+                  G_TYPE_STRV);
+  g_signal_add_emission_hook (signals[__CONTACTS_ADDED_SIGNAL],
+                              0,
+                              signal_emission_hook_cb_contacts_added,
+                              (gpointer) "ContactsAdded",
+                              NULL);
+
+  /**
+   * EGdbusBookView::contacts-changed:
+   * @object: The object emitting the signal.
+   * @vcards: Parameter.
+   *
+   * Represents the D-Bus signal <literal>ContactsChanged</literal>.
+   *
+   * On proxies, connect to this signal to get notified whenever the remote
+   * object instances emits the signal (similar to how the
+   * #GDBusProxy::g-signal works). The signal is emitted in the
+   * thread-default main loop of the thread that the proxy was created in.
+   *
+   * On exported objects, emitting this signal causes the actual D-Bus signal to be emitted. You can use e_gdbus_book_view_emit_contacts_changed() to do this.
+   */  signals[__CONTACTS_CHANGED_SIGNAL] =
+    g_signal_new ("contacts-changed",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusBookViewIface, contacts_changed),
+                  NULL,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_VOID__BOXED,
+                  G_TYPE_NONE,
+                  1,
+                  G_TYPE_STRV);
+  g_signal_add_emission_hook (signals[__CONTACTS_CHANGED_SIGNAL],
+                              0,
+                              signal_emission_hook_cb_contacts_changed,
+                              (gpointer) "ContactsChanged",
+                              NULL);
+
+  /**
+   * EGdbusBookView::contacts-removed:
+   * @object: The object emitting the signal.
+   * @ids: Parameter.
+   *
+   * Represents the D-Bus signal <literal>ContactsRemoved</literal>.
+   *
+   * On proxies, connect to this signal to get notified whenever the remote
+   * object instances emits the signal (similar to how the
+   * #GDBusProxy::g-signal works). The signal is emitted in the
+   * thread-default main loop of the thread that the proxy was created in.
+   *
+   * On exported objects, emitting this signal causes the actual D-Bus signal to be emitted. You can use e_gdbus_book_view_emit_contacts_removed() to do this.
+   */  signals[__CONTACTS_REMOVED_SIGNAL] =
+    g_signal_new ("contacts-removed",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusBookViewIface, contacts_removed),
+                  NULL,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_VOID__BOXED,
+                  G_TYPE_NONE,
+                  1,
+                  G_TYPE_STRV);
+  g_signal_add_emission_hook (signals[__CONTACTS_REMOVED_SIGNAL],
+                              0,
+                              signal_emission_hook_cb_contacts_removed,
+                              (gpointer) "ContactsRemoved",
+                              NULL);
+
+  /**
+   * EGdbusBookView::status-message:
+   * @object: The object emitting the signal.
+   * @message: Parameter.
+   *
+   * Represents the D-Bus signal <literal>StatusMessage</literal>.
+   *
+   * On proxies, connect to this signal to get notified whenever the remote
+   * object instances emits the signal (similar to how the
+   * #GDBusProxy::g-signal works). The signal is emitted in the
+   * thread-default main loop of the thread that the proxy was created in.
+   *
+   * On exported objects, emitting this signal causes the actual D-Bus signal to be emitted. You can use e_gdbus_book_view_emit_status_message() to do this.
+   */  signals[__STATUS_MESSAGE_SIGNAL] =
+    g_signal_new ("status-message",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusBookViewIface, status_message),
+                  NULL,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_VOID__STRING,
+                  G_TYPE_NONE,
+                  1,
+                  G_TYPE_STRING);
+  g_signal_add_emission_hook (signals[__STATUS_MESSAGE_SIGNAL],
+                              0,
+                              signal_emission_hook_cb_status_message,
+                              (gpointer) "StatusMessage",
+                              NULL);
+
+  /**
+   * EGdbusBookView::complete:
+   * @object: The object emitting the signal.
+   * @status: Parameter.
+   * @message: Parameter.
+   *
+   * Represents the D-Bus signal <literal>Complete</literal>.
+   *
+   * On proxies, connect to this signal to get notified whenever the remote
+   * object instances emits the signal (similar to how the
+   * #GDBusProxy::g-signal works). The signal is emitted in the
+   * thread-default main loop of the thread that the proxy was created in.
+   *
+   * On exported objects, emitting this signal causes the actual D-Bus signal to be emitted. You can use e_gdbus_book_view_emit_complete() to do this.
+   */  signals[__COMPLETE_SIGNAL] =
+    g_signal_new ("complete",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusBookViewIface, complete),
+                  NULL,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_VOID__UINT_STRING,
+                  G_TYPE_NONE,
+                  2,
+                  G_TYPE_UINT,
+                  G_TYPE_STRING);
+  g_signal_add_emission_hook (signals[__COMPLETE_SIGNAL],
+                              0,
+                              signal_emission_hook_cb_complete,
+                              (gpointer) "Complete",
+                              NULL);
+
+
+  /* GObject signals definitions for D-Bus methods: */
+  /**
+   * EGdbusBookView::handle-start:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>start</literal> D-Bus method on @object. Use e_gdbus_book_view_complete_start() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_book_view_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__START_METHOD] =
+    g_signal_new ("handle-start",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusBookViewIface, handle_start),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT,
+                  G_TYPE_BOOLEAN,
+                  1,
+                  G_TYPE_DBUS_METHOD_INVOCATION);
+  /**
+   * EGdbusBookView::handle-stop:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>stop</literal> D-Bus method on @object. Use e_gdbus_book_view_complete_stop() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_book_view_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__STOP_METHOD] =
+    g_signal_new ("handle-stop",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusBookViewIface, handle_stop),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT,
+                  G_TYPE_BOOLEAN,
+                  1,
+                  G_TYPE_DBUS_METHOD_INVOCATION);
+  /**
+   * EGdbusBookView::handle-dispose:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>dispose</literal> D-Bus method on @object. Use e_gdbus_book_view_complete_dispose() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_book_view_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__DISPOSE_METHOD] =
+    g_signal_new ("handle-dispose",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusBookViewIface, handle_dispose),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT,
+                  G_TYPE_BOOLEAN,
+                  1,
+                  G_TYPE_DBUS_METHOD_INVOCATION);
+
+  /* GObject property definitions for D-Bus properties: */
+}
+
+
+/* C Bindings for properties */
+
+/**
+ * e_gdbus_book_view_call_start:
+ * @proxy: A #EGdbusBookView.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.addressbook.BookView.start</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_book_view_call_start_finish() to get the result of the operation.
+ *
+ * See e_gdbus_book_view_call_start_sync() for the synchronous version of this method.
+ */
+void e_gdbus_book_view_call_start (
+        EGdbusBookView *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = NULL;
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "start",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_book_view_call_start_finish:
+ * @proxy: A #EGdbusBookView.
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_book_view_call_start().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.addressbook.BookView.start</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_view_call_start_finish (
+        EGdbusBookView *proxy,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_book_view_call_start_sync:
+ * @proxy: A #EGdbusBookView.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.addressbook.BookView.start</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_book_view_call_start() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_view_call_start_sync (
+        EGdbusBookView *proxy,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = NULL;
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "start",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_book_view_call_stop:
+ * @proxy: A #EGdbusBookView.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.addressbook.BookView.stop</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_book_view_call_stop_finish() to get the result of the operation.
+ *
+ * See e_gdbus_book_view_call_stop_sync() for the synchronous version of this method.
+ */
+void e_gdbus_book_view_call_stop (
+        EGdbusBookView *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = NULL;
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "stop",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_book_view_call_stop_finish:
+ * @proxy: A #EGdbusBookView.
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_book_view_call_stop().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.addressbook.BookView.stop</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_view_call_stop_finish (
+        EGdbusBookView *proxy,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_book_view_call_stop_sync:
+ * @proxy: A #EGdbusBookView.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.addressbook.BookView.stop</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_book_view_call_stop() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_view_call_stop_sync (
+        EGdbusBookView *proxy,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = NULL;
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "stop",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_book_view_call_dispose:
+ * @proxy: A #EGdbusBookView.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.addressbook.BookView.dispose</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_book_view_call_dispose_finish() to get the result of the operation.
+ *
+ * See e_gdbus_book_view_call_dispose_sync() for the synchronous version of this method.
+ */
+void e_gdbus_book_view_call_dispose (
+        EGdbusBookView *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = NULL;
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "dispose",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_book_view_call_dispose_finish:
+ * @proxy: A #EGdbusBookView.
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_book_view_call_dispose().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.addressbook.BookView.dispose</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_view_call_dispose_finish (
+        EGdbusBookView *proxy,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_book_view_call_dispose_sync:
+ * @proxy: A #EGdbusBookView.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.addressbook.BookView.dispose</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_book_view_call_dispose() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_book_view_call_dispose_sync (
+        EGdbusBookView *proxy,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = NULL;
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "dispose",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_book_view_complete_start:
+ * @object: A #EGdbusBookView.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.addressbook.BookView.start</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_book_view_complete_start (
+        EGdbusBookView *object,
+        GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation, NULL);
+}
+
+
+/**
+ * e_gdbus_book_view_complete_stop:
+ * @object: A #EGdbusBookView.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.addressbook.BookView.stop</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_book_view_complete_stop (
+        EGdbusBookView *object,
+        GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation, NULL);
+}
+
+
+/**
+ * e_gdbus_book_view_complete_dispose:
+ * @object: A #EGdbusBookView.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.addressbook.BookView.dispose</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_book_view_complete_dispose (
+        EGdbusBookView *object,
+        GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation, NULL);
+}
+
+
+/**
+ * e_gdbus_book_view_emit_contacts_added:
+ * @object: A #EGdbusBookView.
+ * @arg_vcards: Signal parameter.
+ *
+ * Emits the <literal>org.gnome.evolution.dataserver.addressbook.BookView.ContactsAdded</literal>
+ * D-Bus signal.
+ */
+void e_gdbus_book_view_emit_contacts_added (
+        EGdbusBookView *object,
+        const gchar* const *arg_vcards)
+{
+  g_signal_emit (object, signals[__CONTACTS_ADDED_SIGNAL], 0, arg_vcards);
+}
+
+
+/**
+ * e_gdbus_book_view_emit_contacts_changed:
+ * @object: A #EGdbusBookView.
+ * @arg_vcards: Signal parameter.
+ *
+ * Emits the <literal>org.gnome.evolution.dataserver.addressbook.BookView.ContactsChanged</literal>
+ * D-Bus signal.
+ */
+void e_gdbus_book_view_emit_contacts_changed (
+        EGdbusBookView *object,
+        const gchar* const *arg_vcards)
+{
+  g_signal_emit (object, signals[__CONTACTS_CHANGED_SIGNAL], 0, arg_vcards);
+}
+
+
+/**
+ * e_gdbus_book_view_emit_contacts_removed:
+ * @object: A #EGdbusBookView.
+ * @arg_ids: Signal parameter.
+ *
+ * Emits the <literal>org.gnome.evolution.dataserver.addressbook.BookView.ContactsRemoved</literal>
+ * D-Bus signal.
+ */
+void e_gdbus_book_view_emit_contacts_removed (
+        EGdbusBookView *object,
+        const gchar* const *arg_ids)
+{
+  g_signal_emit (object, signals[__CONTACTS_REMOVED_SIGNAL], 0, arg_ids);
+}
+
+
+/**
+ * e_gdbus_book_view_emit_status_message:
+ * @object: A #EGdbusBookView.
+ * @arg_message: Signal parameter.
+ *
+ * Emits the <literal>org.gnome.evolution.dataserver.addressbook.BookView.StatusMessage</literal>
+ * D-Bus signal.
+ */
+void e_gdbus_book_view_emit_status_message (
+        EGdbusBookView *object,
+        const gchar *arg_message)
+{
+  g_signal_emit (object, signals[__STATUS_MESSAGE_SIGNAL], 0, arg_message);
+}
+
+
+/**
+ * e_gdbus_book_view_emit_complete:
+ * @object: A #EGdbusBookView.
+ * @arg_status: Signal parameter.
+ * @arg_message: Signal parameter.
+ *
+ * Emits the <literal>org.gnome.evolution.dataserver.addressbook.BookView.Complete</literal>
+ * D-Bus signal.
+ */
+void e_gdbus_book_view_emit_complete (
+        EGdbusBookView *object,
+        guint arg_status,
+        const gchar *arg_message)
+{
+  g_signal_emit (object, signals[__COMPLETE_SIGNAL], 0, arg_status, arg_message);
+}
+
+
+static const GDBusArgInfo e_gdbus_book_view_signal_ContactsAdded_vcards =
+{
+  -1,
+  (gchar *) "vcards",
+  (gchar *) "as",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_book_view_signal_ContactsAdded_arg_pointers[] =
+{
+  &e_gdbus_book_view_signal_ContactsAdded_vcards,
+  NULL
+};
+
+static const GDBusSignalInfo e_gdbus_book_view_signal_ContactsAdded =
+{
+  -1,
+  (gchar *) "ContactsAdded",
+  (GDBusArgInfo **) &e_gdbus_book_view_signal_ContactsAdded_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_book_view_signal_ContactsChanged_vcards =
+{
+  -1,
+  (gchar *) "vcards",
+  (gchar *) "as",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_book_view_signal_ContactsChanged_arg_pointers[] =
+{
+  &e_gdbus_book_view_signal_ContactsChanged_vcards,
+  NULL
+};
+
+static const GDBusSignalInfo e_gdbus_book_view_signal_ContactsChanged =
+{
+  -1,
+  (gchar *) "ContactsChanged",
+  (GDBusArgInfo **) &e_gdbus_book_view_signal_ContactsChanged_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_book_view_signal_ContactsRemoved_ids =
+{
+  -1,
+  (gchar *) "ids",
+  (gchar *) "as",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_book_view_signal_ContactsRemoved_arg_pointers[] =
+{
+  &e_gdbus_book_view_signal_ContactsRemoved_ids,
+  NULL
+};
+
+static const GDBusSignalInfo e_gdbus_book_view_signal_ContactsRemoved =
+{
+  -1,
+  (gchar *) "ContactsRemoved",
+  (GDBusArgInfo **) &e_gdbus_book_view_signal_ContactsRemoved_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_book_view_signal_StatusMessage_message =
+{
+  -1,
+  (gchar *) "message",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_book_view_signal_StatusMessage_arg_pointers[] =
+{
+  &e_gdbus_book_view_signal_StatusMessage_message,
+  NULL
+};
+
+static const GDBusSignalInfo e_gdbus_book_view_signal_StatusMessage =
+{
+  -1,
+  (gchar *) "StatusMessage",
+  (GDBusArgInfo **) &e_gdbus_book_view_signal_StatusMessage_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_book_view_signal_Complete_status =
+{
+  -1,
+  (gchar *) "status",
+  (gchar *) "u",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo e_gdbus_book_view_signal_Complete_message =
+{
+  -1,
+  (gchar *) "message",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_book_view_signal_Complete_arg_pointers[] =
+{
+  &e_gdbus_book_view_signal_Complete_status,
+  &e_gdbus_book_view_signal_Complete_message,
+  NULL
+};
+
+static const GDBusSignalInfo e_gdbus_book_view_signal_Complete =
+{
+  -1,
+  (gchar *) "Complete",
+  (GDBusArgInfo **) &e_gdbus_book_view_signal_Complete_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusSignalInfo * const e_gdbus_book_view_signal_info_pointers[] =
+{
+  &e_gdbus_book_view_signal_ContactsAdded,
+  &e_gdbus_book_view_signal_ContactsChanged,
+  &e_gdbus_book_view_signal_ContactsRemoved,
+  &e_gdbus_book_view_signal_StatusMessage,
+  &e_gdbus_book_view_signal_Complete,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_book_view_method_start =
+{
+  -1,
+  (gchar *) "start",
+  (GDBusArgInfo **) NULL,
+  (GDBusArgInfo **) NULL,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusMethodInfo e_gdbus_book_view_method_stop =
+{
+  -1,
+  (gchar *) "stop",
+  (GDBusArgInfo **) NULL,
+  (GDBusArgInfo **) NULL,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusMethodInfo e_gdbus_book_view_method_dispose =
+{
+  -1,
+  (gchar *) "dispose",
+  (GDBusArgInfo **) NULL,
+  (GDBusArgInfo **) NULL,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusMethodInfo * const e_gdbus_book_view_method_info_pointers[] =
+{
+  &e_gdbus_book_view_method_start,
+  &e_gdbus_book_view_method_stop,
+  &e_gdbus_book_view_method_dispose,
+  NULL
+};
+
+static const GDBusInterfaceInfo _e_gdbus_book_view_interface_info =
+{
+  -1,
+  (gchar *) "org.gnome.evolution.dataserver.addressbook.BookView",
+  (GDBusMethodInfo **) &e_gdbus_book_view_method_info_pointers,
+  (GDBusSignalInfo **) &e_gdbus_book_view_signal_info_pointers,
+  (GDBusPropertyInfo **) NULL,
+};
+
+static void
+handle_method_call (GDBusConnection       *connection,
+                    const gchar           *sender,
+                    const gchar           *object_path,
+                    const gchar           *interface_name,
+                    const gchar           *method_name,
+                    GVariant              *parameters,
+                    GDBusMethodInvocation *invocation,
+                    gpointer               user_data)
+{
+  guint method_id;
+  method_id = lookup_method_id_from_method_name (method_name);
+  switch (method_id)
+    {
+    case __START_METHOD:
+      {
+        EGdbusBookView *object = E_GDBUS_BOOK_VIEW (user_data);
+        gboolean handled;
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __STOP_METHOD:
+      {
+        EGdbusBookView *object = E_GDBUS_BOOK_VIEW (user_data);
+        gboolean handled;
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __DISPOSE_METHOD:
+      {
+        EGdbusBookView *object = E_GDBUS_BOOK_VIEW (user_data);
+        gboolean handled;
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    default:
+not_implemented:
+      g_dbus_method_invocation_return_error (invocation,
+                                             G_DBUS_ERROR,
+                                             G_DBUS_ERROR_NOT_SUPPORTED,
+                                             "Method `%s' is not implemented",
+                                             method_name);
+      break;
+    }
+};
+
+static GVariant *
+get_property (GDBusConnection  *connection,
+              const gchar      *sender,
+              const gchar      *object_path,
+              const gchar      *interface_name,
+              const gchar      *property_name,
+              GError          **error,
+              gpointer          user_data)
+{
+  GVariant *ret;
+  guint prop_id;
+  prop_id = lookup_property_id_from_property_name (property_name);
+  ret = NULL;
+  switch (prop_id)
+    {
+    default:
+      g_set_error (error,
+                   G_DBUS_ERROR,
+                   G_DBUS_ERROR_NOT_SUPPORTED,
+                   "This implementation does not support property `%s'",
+                   property_name);
+      break;
+    }
+
+  return ret;
+};
+
+static gboolean
+set_property (GDBusConnection  *connection,
+              const gchar      *sender,
+              const gchar      *object_path,
+              const gchar      *interface_name,
+              const gchar      *property_name,
+              GVariant         *value,
+              GError          **error,
+              gpointer          user_data)
+{
+  gboolean ret;
+  guint prop_id;
+  prop_id = lookup_property_id_from_property_name (property_name);
+  ret = TRUE;
+  switch (prop_id)
+    {
+    default:
+      g_set_error (error,
+                   G_DBUS_ERROR,
+                   G_DBUS_ERROR_NOT_SUPPORTED,
+                   "This implementation does not support property `%s'",
+                   property_name);
+      ret = FALSE;
+      break;
+    }
+
+  return ret;
+};
+
+static const GDBusInterfaceVTable e_gdbus_book_view_interface_vtable =
+{
+  handle_method_call,
+  get_property,
+  set_property,
+};
+
+static gboolean
+emit_notifications_in_idle (gpointer user_data)
+{
+  GObject *object = G_OBJECT (user_data);
+  GDBusConnection *connection;
+  const gchar *path;
+  GHashTable *notification_queue;
+  GHashTableIter iter;
+  const gchar *property_name;
+  GVariant *value;
+  GVariantBuilder *builder;
+  GVariantBuilder *invalidated_builder;
+  GHashTable *pvc;
+  gboolean has_changes;
+
+  notification_queue = g_object_get_data (object, "gdbus-codegen-notification-queue");
+  path = g_object_get_data (object, "gdbus-codegen-path");
+  connection = g_object_get_data (object, "gdbus-codegen-connection");
+  pvc = g_object_get_data (object, "gdbus-codegen-pvc");
+  g_assert (notification_queue != NULL && path != NULL && connection != NULL && pvc != NULL);
+
+  builder = g_variant_builder_new (G_VARIANT_TYPE_ARRAY);
+  invalidated_builder = g_variant_builder_new (G_VARIANT_TYPE ("as"));
+  g_hash_table_iter_init (&iter, notification_queue);
+  has_changes = FALSE;
+  while (g_hash_table_iter_next (&iter, (gpointer) &property_name, (gpointer) &value))
+    {
+      GVariant *cached_value;
+      cached_value = g_hash_table_lookup (pvc, property_name);
+      if (cached_value == NULL || !g_variant_equal (cached_value, value))
+        {
+          g_hash_table_insert (pvc, (gpointer) property_name, (gpointer) g_variant_ref (value));
+          g_variant_builder_add (builder, "{sv}", property_name, value);
+          has_changes = TRUE;
+        }
+    }
+
+  if (has_changes)
+    {
+      g_dbus_connection_emit_signal (connection,
+                                     NULL,
+                                     path,
+                                     "org.freedesktop.DBus.Properties",
+                                     "PropertiesChanged",
+                                     g_variant_new ("(sa{sv}as)",
+                                                    "org.gnome.evolution.dataserver.addressbook.BookView",
+                                                    builder,
+                                                    invalidated_builder),
+                                     NULL);
+    }
+  else
+    {
+      g_variant_builder_unref (builder);
+      g_variant_builder_unref (invalidated_builder);
+    }
+
+  g_hash_table_remove_all (notification_queue);
+  g_object_set_data (object, "gdbus-codegen-notification-idle-id", GUINT_TO_POINTER (0));
+  return FALSE;
+}
+
+static void
+queue_notification (GObject     *object,
+                    const gchar *property_name,
+                    GVariant    *value)
+{
+  GHashTable *notification_queue;
+  guint idle_id;
+  notification_queue = g_object_get_data (object, "gdbus-codegen-notification-queue");
+  if (notification_queue == NULL)
+    {
+      notification_queue = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) g_variant_unref);
+      g_object_set_data_full (object, "gdbus-codegen-notification-queue", notification_queue, (GDestroyNotify) g_hash_table_unref);
+    }
+  g_hash_table_insert (notification_queue, (gpointer) property_name, (gpointer) value); /* adopts value */
+  idle_id = GPOINTER_TO_UINT (g_object_get_data (object, "gdbus-codegen-notification-idle-id"));
+  if (idle_id == 0)
+    {
+      GSource *idle_source;
+      idle_source = g_idle_source_new ();
+      g_source_set_priority (idle_source, G_PRIORITY_DEFAULT);
+      g_source_set_callback (idle_source,
+                             emit_notifications_in_idle,
+                             g_object_ref (object),
+                             (GDestroyNotify) g_object_unref);
+      idle_id = g_source_attach (idle_source, g_main_context_get_thread_default ());
+      g_source_unref (idle_source);
+      g_object_set_data (object, "gdbus-codegen-notification-idle-id", GUINT_TO_POINTER (idle_id));
+    }
+}
+
+/**
+ * e_gdbus_book_view_drain_notify:
+ * @object: A #EGdbusBookView that is exported.
+ *
+ * If @object has queued notifications, empty the queue forcing
+ * the <literal>PropertiesChanged</literal> signal to be emitted.
+ * See <xref linkend="EGdbusBookView.description"/> for more background information.
+ */
+void
+e_gdbus_book_view_drain_notify (EGdbusBookView *object)
+{
+  gint idle_id;
+  idle_id = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (object), "gdbus-codegen-notification-idle-id"));
+  if (idle_id > 0)
+    {
+      emit_notifications_in_idle (object);
+      g_source_remove (idle_id);
+    }
+}
+
+static void
+on_notify (GObject    *object,
+           GParamSpec *pspec,
+           gpointer    user_data)
+{
+  GDBusConnection *connection;
+  const gchar *path;
+  GVariant *value;
+  const gchar *property_name;
+  guint prop_id;
+
+  path = g_object_get_data (object, "gdbus-codegen-path");
+  connection = g_object_get_data (object, "gdbus-codegen-connection");
+  if (connection == NULL || path == NULL)
+    goto out;
+
+  property_name = lookup_property_name_from_property_gname (pspec->name);
+  if (property_name == NULL)
+    goto out;
+  prop_id = lookup_property_id_from_property_name (property_name);
+
+  value = NULL;
+  switch (prop_id)
+    {
+  }
+
+  if (value != NULL && property_name != NULL)
+    {
+      queue_notification (object, property_name, g_variant_ref_sink (value));
+    }
+out:
+  ;
+}
+
+static void
+on_object_unregistered (GObject *object)
+{
+  gint idle_id;
+  idle_id = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (object), "gdbus-codegen-notification-idle-id"));
+  if (idle_id > 0)
+    {
+      g_source_remove (idle_id);
+    }
+  g_object_set_data (G_OBJECT (object), "gdbus-codegen-path", NULL);
+  g_object_set_data (G_OBJECT (object), "gdbus-codegen-connection", NULL);
+  g_signal_handlers_disconnect_by_func (object, on_notify, NULL);
+}
+
+/**
+ * e_gdbus_book_view_register_object:
+ * @object: An instance of a #GObject<!-- -->-derived type implementing the #EGdbusBookView interface.
+ * @connection: A #GDBusConnection.
+ * @object_path: The object to register the object at.
+ * @error: Return location for error or %NULL.
+ *
+ * Registers @object at @object_path on @connection.
+ *
+ * See <xref linkend="EGdbusBookView.description"/>
+ * for how properties, methods and signals are handled.
+ *
+ * Returns: 0 if @error is set, otherwise a registration id (never 0) that can be used with g_dbus_connection_unregister_object().
+ */
+guint
+e_gdbus_book_view_register_object (EGdbusBookView *object,
+           GDBusConnection *connection,
+           const gchar *object_path,
+           GError **error)
+{
+  G_GNUC_UNUSED GVariant *value;
+  GHashTable *pvc;
+
+  pvc = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) g_variant_unref);
+
+  g_object_set_data_full (G_OBJECT (object), "gdbus-codegen-path", (gpointer) g_strdup (object_path), g_free);
+  g_object_set_data (G_OBJECT (object), "gdbus-codegen-connection", (gpointer) connection);
+  g_object_set_data_full (G_OBJECT (object), "gdbus-codegen-pvc", (gpointer) pvc, (GDestroyNotify) g_hash_table_unref);
+  g_signal_connect (object, "notify", G_CALLBACK (on_notify), NULL);
+  return g_dbus_connection_register_object (connection,
+          object_path,
+          &_e_gdbus_book_view_interface_info,
+          &e_gdbus_book_view_interface_vtable,
+          object,
+          (GDestroyNotify) on_object_unregistered,
+          error);
+}
+
+/**
+ * e_gdbus_book_view_interface_info:
+ *
+ * Gets interface description for the <literal>org.gnome.evolution.dataserver.addressbook.BookView</literal> D-Bus interface.
+ *
+ * Returns: A #GDBusInterfaceInfo. Do not free, the object is statically allocated.
+ */
+const GDBusInterfaceInfo *
+e_gdbus_book_view_interface_info (void)
+{
+  return &_e_gdbus_book_view_interface_info;
+}
+
+
+/* ---------------------------------------------------------------------- */
+
+static void proxy_iface_init (EGdbusBookViewIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (EGdbusBookViewProxy, e_gdbus_book_view_proxy, G_TYPE_DBUS_PROXY,
+                         G_IMPLEMENT_INTERFACE (E_GDBUS_TYPE_BOOK_VIEW, proxy_iface_init));
+
+static void
+e_gdbus_book_view_proxy_init (EGdbusBookViewProxy *proxy)
+{
+  g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy),
+                                   (GDBusInterfaceInfo *) &_e_gdbus_book_view_interface_info);
+}
+
+static void
+g_signal (GDBusProxy  *proxy,
+          const gchar *sender_name,
+          const gchar *signal_name,
+          GVariant    *parameters)
+{
+  guint signal_id;
+  signal_id = lookup_signal_id_from_signal_name (signal_name);
+  switch (signal_id)
+    {
+    case __CONTACTS_ADDED_SIGNAL:
+      {
+        const gchar* const *arg_vcards;
+        g_variant_get (parameters,
+                       "(^a&s)",
+                       &arg_vcards);
+        g_signal_emit (proxy,
+                       signals[signal_id],
+                       0, arg_vcards);
+        g_free ((gpointer) arg_vcards);
+      }
+      break;
+
+    case __CONTACTS_CHANGED_SIGNAL:
+      {
+        const gchar* const *arg_vcards;
+        g_variant_get (parameters,
+                       "(^a&s)",
+                       &arg_vcards);
+        g_signal_emit (proxy,
+                       signals[signal_id],
+                       0, arg_vcards);
+        g_free ((gpointer) arg_vcards);
+      }
+      break;
+
+    case __CONTACTS_REMOVED_SIGNAL:
+      {
+        const gchar* const *arg_ids;
+        g_variant_get (parameters,
+                       "(^a&s)",
+                       &arg_ids);
+        g_signal_emit (proxy,
+                       signals[signal_id],
+                       0, arg_ids);
+        g_free ((gpointer) arg_ids);
+      }
+      break;
+
+    case __STATUS_MESSAGE_SIGNAL:
+      {
+        const gchar *arg_message;
+        g_variant_get (parameters,
+                       "(&s)",
+                       &arg_message);
+        g_signal_emit (proxy,
+                       signals[signal_id],
+                       0, arg_message);
+      }
+      break;
+
+    case __COMPLETE_SIGNAL:
+      {
+        guint arg_status;
+        const gchar *arg_message;
+        g_variant_get (parameters,
+                       "(u&s)",
+                       &arg_status,
+                       &arg_message);
+        g_signal_emit (proxy,
+                       signals[signal_id],
+                       0, arg_status, arg_message);
+      }
+      break;
+
+    }
+}
+
+static void
+e_gdbus_book_view_proxy_get_property (GObject      *object,
+                       guint         prop_id,
+                       GValue       *value,
+                       GParamSpec   *pspec)
+{
+  G_GNUC_UNUSED GVariant *cached;
+  switch (prop_id)
+    {
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+property_set_cb (GDBusProxy   *proxy,
+                 GAsyncResult *res,
+                 gpointer      user_data)
+{
+  const gchar *property_name = user_data;
+  GError *error;
+  GVariant *result;
+
+  error = NULL;
+  result = g_dbus_proxy_call_finish (proxy, res, &error);
+  if (result == NULL)
+    {
+      g_warning ("Error setting property `%s': %s", property_name, error->message);
+      g_error_free (error);
+    }
+  else
+    {
+      g_variant_unref (result);
+    }
+}
+
+static void
+e_gdbus_book_view_proxy_set_property (GObject      *object,
+                       guint         prop_id,
+                       const GValue *value,
+                       GParamSpec   *pspec)
+{
+  GVariant *new_value;
+  const gchar *property_name;
+  new_value = NULL;
+  property_name = NULL;
+  switch (prop_id)
+    {
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+
+  if (new_value != NULL)
+    {
+      g_variant_ref_sink (new_value);
+      g_dbus_proxy_call (G_DBUS_PROXY (object),
+                         "org.freedesktop.DBus.Properties.Set",
+                         g_variant_new ("(ssv)",
+                                        "org.gnome.evolution.dataserver.addressbook.BookView",
+                                        property_name,
+                                        new_value),
+                         G_DBUS_CALL_FLAGS_NONE,
+                         -1,
+                         NULL,
+                         (GAsyncReadyCallback) property_set_cb,
+                         (gpointer) property_name);
+      g_variant_unref (new_value);
+    }
+
+}
+
+static void
+g_properties_changed (GDBusProxy         *proxy,
+                      GVariant           *changed_properties,
+                      const gchar* const *invalidated_properties)
+{
+  guint n;
+  const gchar *key;
+  GVariantIter *iter;
+  const gchar *gname;
+
+  g_variant_get (changed_properties, "a{sv}", &iter);
+  while (g_variant_iter_next (iter, "{&sv}", &key, NULL))
+    {
+      gname = lookup_property_gname_from_property_name (key);
+      if (gname != NULL)
+        g_object_notify (G_OBJECT (proxy), gname);
+    }
+
+  for (n = 0; invalidated_properties[n] != NULL; n++)
+    {
+      gname = lookup_property_gname_from_property_name (invalidated_properties[n]);
+      if (gname != NULL)
+        g_object_notify (G_OBJECT (proxy), gname);
+    }
+
+}
+
+static void
+e_gdbus_book_view_proxy_class_init (EGdbusBookViewProxyClass *klass)
+{
+  GObjectClass *gobject_class;
+  GDBusProxyClass *proxy_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->get_property = e_gdbus_book_view_proxy_get_property;
+  gobject_class->set_property = e_gdbus_book_view_proxy_set_property;
+
+  proxy_class = G_DBUS_PROXY_CLASS (klass);
+  proxy_class->g_signal = g_signal;
+  proxy_class->g_properties_changed = g_properties_changed;
+
+}
+
+static void
+proxy_iface_init (EGdbusBookViewIface *iface)
+{
+}
+
+
+/**
+ * e_gdbus_book_view_proxy_new:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags used when constructing the proxy.
+ * @name: A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: Callback function to invoke when the proxy is ready.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like g_dbus_proxy_new() but returns a #EGdbusBookViewProxy.
+ *
+ * This is a failable asynchronous constructor - when the proxy is ready, callback will be invoked and you can use e_gdbus_book_view_proxy_new_finish() to get the result.
+ */
+void e_gdbus_book_view_proxy_new (GDBusConnection     *connection,
+                   GDBusProxyFlags      flags,
+                   const gchar         *name,
+                   const gchar         *object_path,
+                   GCancellable        *cancellable,
+                   GAsyncReadyCallback  callback,
+                   gpointer             user_data)
+{
+  g_async_initable_new_async (E_GDBUS_TYPE_BOOK_VIEW_PROXY,
+                              G_PRIORITY_DEFAULT,
+                              cancellable,
+                              callback,
+                              user_data,
+                              "g-flags", flags,
+                              "g-name", name,
+                              "g-connection", connection,
+                              "g-object-path", object_path,
+                              "g-interface-name", "org.gnome.evolution.dataserver.addressbook.BookView",
+                              NULL);
+}
+
+/**
+ * e_gdbus_book_view_proxy_new_finish:
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback function passed to e_gdbus_book_view_proxy_new().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes creating a #EGdbusBookViewProxy.
+ *
+ * Returns: A #EGdbusBookViewProxy or %NULL if @error is set. Free with g_object_unref().
+ */
+EGdbusBookView *e_gdbus_book_view_proxy_new_finish (GAsyncResult  *res,
+                        GError       **error)
+{
+  GObject *object;
+  GObject *source_object;
+  source_object = g_async_result_get_source_object (res);
+  g_assert (source_object != NULL);
+  object = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object),
+                                        res,
+                                        error);
+  g_object_unref (source_object);
+  if (object != NULL)
+    return E_GDBUS_BOOK_VIEW (object);
+  else
+    return NULL;
+}
+
+/**
+ * e_gdbus_book_view_proxy_new_sync:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags used when constructing the proxy.
+ * @name: A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Like g_dbus_proxy_new_sync() but returns a #EGdbusBookViewProxy.
+ *
+ * This is a synchronous failable constructor. See e_gdbus_book_view_proxy_new() and e_gdbus_book_view_proxy_new_finish() for the asynchronous version.
+ *
+ * Returns: A #EGdbusBookViewProxy or %NULL if error is set. Free with g_object_unref().
+ */
+EGdbusBookView *e_gdbus_book_view_proxy_new_sync (GDBusConnection     *connection,
+                       GDBusProxyFlags      flags,
+                       const gchar         *name,
+                       const gchar         *object_path,
+                       GCancellable        *cancellable,
+                       GError             **error)
+{
+  GInitable *initable;
+  initable = g_initable_new (E_GDBUS_TYPE_BOOK_VIEW_PROXY,
+                             cancellable,
+                             error,
+                             "g-flags", flags,
+                             "g-name", name,
+                             "g-connection", connection,
+                             "g-object-path", object_path,
+                             "g-interface-name", "org.gnome.evolution.dataserver.addressbook.BookView",
+                             NULL);
+  if (initable != NULL)
+    return E_GDBUS_BOOK_VIEW (initable);
+  else
+    return NULL;
+}
+
+
+/**
+ * e_gdbus_book_view_proxy_new_for_bus:
+ * @bus_type: A #GBusType.
+ * @flags: Flags used when constructing the proxy.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: Callback function to invoke when the proxy is ready.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like g_dbus_proxy_new_for_bus() but returns a #EGdbusBookViewProxy.
+ *
+ * This is a failable asynchronous constructor - when the proxy is ready, callback will be invoked and you can use e_gdbus_book_view_proxy_new_for_bus_finish() to get the result.
+ */
+void e_gdbus_book_view_proxy_new_for_bus (GBusType             bus_type,
+                           GDBusProxyFlags      flags,
+                           const gchar         *name,
+                           const gchar         *object_path,
+                           GCancellable        *cancellable,
+                           GAsyncReadyCallback  callback,
+                           gpointer             user_data)
+{
+  g_async_initable_new_async (E_GDBUS_TYPE_BOOK_VIEW_PROXY,
+                              G_PRIORITY_DEFAULT,
+                              cancellable,
+                              callback,
+                              user_data,
+                              "g-flags", flags,
+                              "g-name", name,
+                              "g-bus-type", bus_type,
+                              "g-object-path", object_path,
+                              "g-interface-name", "org.gnome.evolution.dataserver.addressbook.BookView",
+                              NULL);
+}
+
+/**
+ * e_gdbus_book_view_proxy_new_for_bus_finish:
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback function passed to e_gdbus_book_view_proxy_new_for_bus().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes creating a #EGdbusBookViewProxy.
+ *
+ * Returns: A #EGdbusBookViewProxy or %NULL if @error is set. Free with g_object_unref().
+ */
+EGdbusBookView *e_gdbus_book_view_proxy_new_for_bus_finish (GAsyncResult  *res,
+                                GError       **error)
+{
+  GObject *object;
+  GObject *source_object;
+  source_object = g_async_result_get_source_object (res);
+  g_assert (source_object != NULL);
+  object = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object),
+                                        res,
+                                        error);
+  g_object_unref (source_object);
+  if (object != NULL)
+    return E_GDBUS_BOOK_VIEW (object);
+  else
+    return NULL;
+}
+
+/**
+ * e_gdbus_book_view_proxy_new_for_bus_sync:
+ * @bus_type: A #GBusType.
+ * @flags: Flags used when constructing the proxy.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Like g_dbus_proxy_new_for_bus_sync() but returns a #EGdbusBookViewProxy.
+ *
+ * This is a synchronous failable constructor. See e_gdbus_book_view_proxy_new_for_bus() and e_gdbus_book_view_proxy_new_for_bus_finish() for the asynchronous version.
+ *
+ * Returns: A #EGdbusBookViewProxy or %NULL if error is set. Free with g_object_unref().
+ */
+EGdbusBookView *e_gdbus_book_view_proxy_new_for_bus_sync (GBusType             bus_type,
+                               GDBusProxyFlags      flags,
+                               const gchar         *name,
+                               const gchar         *object_path,
+                               GCancellable        *cancellable,
+                               GError             **error)
+{
+  GInitable *initable;
+  initable = g_initable_new (E_GDBUS_TYPE_BOOK_VIEW_PROXY,
+                             cancellable,
+                             error,
+                             "g-flags", flags,
+                             "g-name", name,
+                             "g-bus-type", bus_type,
+                             "g-object-path", object_path,
+                             "g-interface-name", "org.gnome.evolution.dataserver.addressbook.BookView",
+                             NULL);
+  if (initable != NULL)
+    return E_GDBUS_BOOK_VIEW (initable);
+  else
+    return NULL;
+}
+
+
+/* ---------------------------------------------------------------------- */
+
+struct _EGdbusBookViewStubPrivate
+{
+  gint foo;
+};
+
+static void stub_iface_init (EGdbusBookViewIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (EGdbusBookViewStub, e_gdbus_book_view_stub, G_TYPE_OBJECT,
+                         G_IMPLEMENT_INTERFACE (E_GDBUS_TYPE_BOOK_VIEW, stub_iface_init));
+
+static void
+e_gdbus_book_view_stub_finalize (GObject *object)
+{
+  G_GNUC_UNUSED EGdbusBookViewStub *stub = (EGdbusBookViewStub *) object;
+  if (G_OBJECT_CLASS (e_gdbus_book_view_stub_parent_class)->finalize != NULL)
+    G_OBJECT_CLASS (e_gdbus_book_view_stub_parent_class)->finalize (object);
+}
+
+static void
+e_gdbus_book_view_stub_get_property (GObject      *object,
+                      guint         prop_id,
+                      GValue       *value,
+                      GParamSpec   *pspec)
+{
+  G_GNUC_UNUSED static gchar **strv_of_len_zero = {NULL};
+  G_GNUC_UNUSED EGdbusBookViewStub *stub = (EGdbusBookViewStub *) object;
+  switch (prop_id)
+    {
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+e_gdbus_book_view_stub_set_property (GObject      *object,
+                      guint         prop_id,
+                      const GValue *value,
+                      GParamSpec   *pspec)
+{
+  G_GNUC_UNUSED EGdbusBookViewStub *stub = (EGdbusBookViewStub *) object;
+  switch (prop_id)
+    {
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+e_gdbus_book_view_stub_init (EGdbusBookViewStub *stub)
+{
+  stub->priv = G_TYPE_INSTANCE_GET_PRIVATE (stub, E_GDBUS_TYPE_BOOK_VIEW_STUB, EGdbusBookViewStubPrivate);
+}
+
+static void
+e_gdbus_book_view_stub_class_init (EGdbusBookViewStubClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize     = e_gdbus_book_view_stub_finalize;
+  gobject_class->get_property = e_gdbus_book_view_stub_get_property;
+  gobject_class->set_property = e_gdbus_book_view_stub_set_property;
+  g_type_class_add_private (klass, sizeof (EGdbusBookViewStubPrivate));
+}
+
+static void
+stub_iface_init (EGdbusBookViewIface *iface)
+{
+}
+
+/**
+ * e_gdbus_book_view_stub_new:
+ *
+ * Creates a new stub object that can be exported via e_gdbus_book_view_register_object().
+ *
+ * Returns: A #EGdbusBookViewStub instance. Free with g_object_unref().
+ */
+EGdbusBookView *
+e_gdbus_book_view_stub_new (void)
+{
+  return E_GDBUS_BOOK_VIEW (g_object_new (E_GDBUS_TYPE_BOOK_VIEW_STUB, NULL));
+}
diff --git a/addressbook/libegdbus/e-gdbus-egdbusbookview.h b/addressbook/libegdbus/e-gdbus-egdbusbookview.h
new file mode 100644
index 0000000..ede4b5c
--- /dev/null
+++ b/addressbook/libegdbus/e-gdbus-egdbusbookview.h
@@ -0,0 +1,302 @@
+/* File:       e-gdbus-egdbusbookview.h
+ *
+ * GType name: EGdbusBookView
+ * D-Bus name: org.gnome.evolution.dataserver.addressbook.BookView
+ *
+ * Generated by GDBus Binding Tool 0.1. DO NOT EDIT.
+ */
+
+#ifndef __E_GDBUS_E_GDBUS_BOOK_VIEW_H__
+#define __E_GDBUS_E_GDBUS_BOOK_VIEW_H__
+
+#include <gio/gio.h>
+
+#include "e-gdbus-typemappers.h"
+G_BEGIN_DECLS
+
+#define E_GDBUS_TYPE_BOOK_VIEW         (e_gdbus_book_view_get_type ())
+#define E_GDBUS_BOOK_VIEW(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), E_GDBUS_TYPE_BOOK_VIEW, EGdbusBookView))
+#define E_GDBUS_IS_BOOK_VIEW(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_GDBUS_TYPE_BOOK_VIEW))
+#define E_GDBUS_BOOK_VIEW_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE((o), E_GDBUS_TYPE_BOOK_VIEW, EGdbusBookViewIface))
+
+/**
+ * EGdbusBookView:
+ *
+ * Opaque type representing a proxy or an exported object.
+ */
+typedef struct _EGdbusBookView EGdbusBookView; /* Dummy typedef */
+/**
+ * EGdbusBookViewIface:
+ * @parent_iface: The parent interface.
+ * @contacts_added: Handler for the #EGdbusBookView::contacts-added signal.
+ * @contacts_changed: Handler for the #EGdbusBookView::contacts-changed signal.
+ * @contacts_removed: Handler for the #EGdbusBookView::contacts-removed signal.
+ * @status_message: Handler for the #EGdbusBookView::status-message signal.
+ * @complete: Handler for the #EGdbusBookView::complete signal.
+ * @handle_start: Handler for the #EGdbusBookView::handle-start signal.
+ * @handle_stop: Handler for the #EGdbusBookView::handle-stop signal.
+ * @handle_dispose: Handler for the #EGdbusBookView::handle-dispose signal.
+ *
+ * Virtual table.
+ */
+typedef struct _EGdbusBookViewIface EGdbusBookViewIface;
+
+GType e_gdbus_book_view_get_type (void) G_GNUC_CONST;
+
+/* ---------------------------------------------------------------------- */
+
+typedef struct _EGdbusBookViewProxy EGdbusBookViewProxy;
+typedef struct _EGdbusBookViewProxyClass EGdbusBookViewProxyClass;
+
+/**
+ * EGdbusBookViewProxyPrivate:
+ *
+ * The #EGdbusBookViewProxyPrivate structure contains only private data.
+ */
+typedef struct _EGdbusBookViewProxyPrivate EGdbusBookViewProxyPrivate;
+
+/**
+ * EGdbusBookViewProxy:
+ *
+ * The #EGdbusBookViewProxy structure contains only private data and
+ * should only be accessed using the provided API.
+ */
+struct _EGdbusBookViewProxy
+{
+  GDBusProxy parent_instance;
+  EGdbusBookViewProxyPrivate *priv;
+};
+
+/**
+ * EGdbusBookViewProxyClass:
+ *
+ * Class structure for #EGdbusBookViewProxy.
+ */
+struct _EGdbusBookViewProxyClass
+{
+  GDBusProxyClass parent_class;
+};
+
+#define E_GDBUS_TYPE_BOOK_VIEW_PROXY (e_gdbus_book_view_proxy_get_type ())
+GType e_gdbus_book_view_proxy_get_type (void) G_GNUC_CONST;
+
+void e_gdbus_book_view_proxy_new (GDBusConnection     *connection,
+                   GDBusProxyFlags      flags,
+                   const gchar         *name,
+                   const gchar         *object_path,
+                   GCancellable        *cancellable,
+                   GAsyncReadyCallback  callback,
+                   gpointer             user_data);
+EGdbusBookView *e_gdbus_book_view_proxy_new_finish (GAsyncResult  *res,
+                        GError       **error);
+EGdbusBookView *e_gdbus_book_view_proxy_new_sync (GDBusConnection     *connection,
+                       GDBusProxyFlags      flags,
+                       const gchar         *name,
+                       const gchar         *object_path,
+                       GCancellable        *cancellable,
+                       GError             **error);
+
+void e_gdbus_book_view_proxy_new_for_bus (GBusType             bus_type,
+                           GDBusProxyFlags      flags,
+                           const gchar         *name,
+                           const gchar         *object_path,
+                           GCancellable        *cancellable,
+                           GAsyncReadyCallback  callback,
+                           gpointer             user_data);
+EGdbusBookView *e_gdbus_book_view_proxy_new_for_bus_finish (GAsyncResult  *res,
+                                 GError       **error);
+EGdbusBookView *e_gdbus_book_view_proxy_new_for_bus_sync (GBusType             bus_type,
+                               GDBusProxyFlags      flags,
+                               const gchar         *name,
+                               const gchar         *object_path,
+                               GCancellable        *cancellable,
+                               GError             **error);
+
+/* ---------------------------------------------------------------------- */
+
+typedef struct _EGdbusBookViewStub EGdbusBookViewStub;
+typedef struct _EGdbusBookViewStubClass EGdbusBookViewStubClass;
+
+/**
+ * EGdbusBookViewStubPrivate:
+ *
+ * The #EGdbusBookViewStubPrivate structure contains only private data.
+ */
+typedef struct _EGdbusBookViewStubPrivate EGdbusBookViewStubPrivate;
+
+/**
+ * EGdbusBookViewStub:
+ *
+ * The #EGdbusBookViewStub structure contains only private data and
+ * should only be accessed using the provided API.
+ */
+struct _EGdbusBookViewStub
+{
+  GObject parent_instance;
+  EGdbusBookViewStubPrivate *priv;
+};
+
+/**
+ * EGdbusBookViewStubClass:
+ *
+ * Class structure for #EGdbusBookViewStub.
+ */
+struct _EGdbusBookViewStubClass
+{
+  GObjectClass parent_class;
+};
+
+#define E_GDBUS_TYPE_BOOK_VIEW_STUB (e_gdbus_book_view_stub_get_type ())
+GType e_gdbus_book_view_stub_get_type (void) G_GNUC_CONST;
+
+EGdbusBookView *e_gdbus_book_view_stub_new (void);
+
+
+guint e_gdbus_book_view_register_object (EGdbusBookView *object,
+                    GDBusConnection *connection,
+                    const gchar *object_path,
+                    GError **error);
+
+void e_gdbus_book_view_drain_notify (EGdbusBookView *object);
+
+
+const GDBusInterfaceInfo *e_gdbus_book_view_interface_info (void) G_GNUC_CONST;
+
+struct _EGdbusBookViewIface
+{
+  GTypeInterface parent_iface;
+
+  /* Signal handlers for receiving D-Bus signals: */
+  void (*contacts_added) (
+        EGdbusBookView *object,
+        const gchar* const *arg_vcards);
+  void (*contacts_changed) (
+        EGdbusBookView *object,
+        const gchar* const *arg_vcards);
+  void (*contacts_removed) (
+        EGdbusBookView *object,
+        const gchar* const *arg_ids);
+  void (*status_message) (
+        EGdbusBookView *object,
+        const gchar *arg_message);
+  void (*complete) (
+        EGdbusBookView *object,
+        guint arg_status,
+        const gchar *arg_message);
+
+  /* Signal handlers for handling D-Bus method calls: */
+  gboolean (*handle_start) (
+        EGdbusBookView *object,
+        GDBusMethodInvocation *invocation);
+  gboolean (*handle_stop) (
+        EGdbusBookView *object,
+        GDBusMethodInvocation *invocation);
+  gboolean (*handle_dispose) (
+        EGdbusBookView *object,
+        GDBusMethodInvocation *invocation);
+};
+
+/* C Bindings for properties */
+
+
+/* D-Bus Methods */
+void e_gdbus_book_view_call_start (
+        EGdbusBookView *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_book_view_call_start_finish (
+        EGdbusBookView *proxy,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_book_view_call_start_sync (
+        EGdbusBookView *proxy,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_book_view_call_stop (
+        EGdbusBookView *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_book_view_call_stop_finish (
+        EGdbusBookView *proxy,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_book_view_call_stop_sync (
+        EGdbusBookView *proxy,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_book_view_call_dispose (
+        EGdbusBookView *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_book_view_call_dispose_finish (
+        EGdbusBookView *proxy,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_book_view_call_dispose_sync (
+        EGdbusBookView *proxy,
+        GCancellable *cancellable,
+        GError **error);
+
+
+
+/* D-Bus Methods Completion Helpers */
+void e_gdbus_book_view_complete_start (
+        EGdbusBookView *object,
+        GDBusMethodInvocation *invocation);
+
+
+void e_gdbus_book_view_complete_stop (
+        EGdbusBookView *object,
+        GDBusMethodInvocation *invocation);
+
+
+void e_gdbus_book_view_complete_dispose (
+        EGdbusBookView *object,
+        GDBusMethodInvocation *invocation);
+
+
+
+/* D-Bus Signal Emission Helpers */
+void e_gdbus_book_view_emit_contacts_added (
+        EGdbusBookView *object,
+        const gchar* const *arg_vcards);
+
+
+void e_gdbus_book_view_emit_contacts_changed (
+        EGdbusBookView *object,
+        const gchar* const *arg_vcards);
+
+
+void e_gdbus_book_view_emit_contacts_removed (
+        EGdbusBookView *object,
+        const gchar* const *arg_ids);
+
+
+void e_gdbus_book_view_emit_status_message (
+        EGdbusBookView *object,
+        const gchar *arg_message);
+
+
+void e_gdbus_book_view_emit_complete (
+        EGdbusBookView *object,
+        guint arg_status,
+        const gchar *arg_message);
+
+
+
+G_END_DECLS
+
+#endif /* __E_GDBUS_E_GDBUS_BOOK_VIEW_H__ */
diff --git a/addressbook/libegdbus/e-gdbus-marshallers.c b/addressbook/libegdbus/e-gdbus-marshallers.c
new file mode 100644
index 0000000..fe8613b
--- /dev/null
+++ b/addressbook/libegdbus/e-gdbus-marshallers.c
@@ -0,0 +1,345 @@
+#include "e-gdbus-marshallers.h"
+
+#include	<glib-object.h>
+
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v)  g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v)     g_value_get_char (v)
+#define g_marshal_value_peek_uchar(v)    g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v)      g_value_get_int (v)
+#define g_marshal_value_peek_uint(v)     g_value_get_uint (v)
+#define g_marshal_value_peek_long(v)     g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v)    g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v)    g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v)   g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v)     g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v)    g_value_get_flags (v)
+#define g_marshal_value_peek_float(v)    g_value_get_float (v)
+#define g_marshal_value_peek_double(v)   g_value_get_double (v)
+#define g_marshal_value_peek_string(v)   (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v)    g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v)    g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v)  g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v)   g_value_get_object (v)
+#define g_marshal_value_peek_variant(v)  g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ *          Do not access GValues directly in your code. Instead, use the
+ *          g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v)  (v)->data[0].v_int
+#define g_marshal_value_peek_char(v)     (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v)    (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v)      (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v)     (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v)     (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v)    (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v)    (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v)   (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v)     (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v)    (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v)    (v)->data[0].v_float
+#define g_marshal_value_peek_double(v)   (v)->data[0].v_double
+#define g_marshal_value_peek_string(v)   (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v)    (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v)    (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v)  (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v)   (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v)  (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+/* BOOLEAN:OBJECT,STRING (e-gdbus-marshallers.list:1) */
+void
+_e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING (GClosure     *closure,
+                                                           GValue       *return_value G_GNUC_UNUSED,
+                                                           guint         n_param_values,
+                                                           const GValue *param_values,
+                                                           gpointer      invocation_hint G_GNUC_UNUSED,
+                                                           gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__OBJECT_STRING) (gpointer     data1,
+                                                           gpointer     arg_1,
+                                                           gpointer     arg_2,
+                                                           gpointer     data2);
+  register GMarshalFunc_BOOLEAN__OBJECT_STRING callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__OBJECT_STRING) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_object (param_values + 1),
+                       g_marshal_value_peek_string (param_values + 2),
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+/* VOID:BOXED (e-gdbus-marshallers.list:2) */
+
+/* VOID:STRING (e-gdbus-marshallers.list:3) */
+
+/* VOID:UINT,STRING (e-gdbus-marshallers.list:4) */
+void
+_e_gdbus_gdbus_cclosure_marshaller_VOID__UINT_STRING (GClosure     *closure,
+                                                      GValue       *return_value G_GNUC_UNUSED,
+                                                      guint         n_param_values,
+                                                      const GValue *param_values,
+                                                      gpointer      invocation_hint G_GNUC_UNUSED,
+                                                      gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__UINT_STRING) (gpointer     data1,
+                                                  guint        arg_1,
+                                                  gpointer     arg_2,
+                                                  gpointer     data2);
+  register GMarshalFunc_VOID__UINT_STRING callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__UINT_STRING) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_marshal_value_peek_uint (param_values + 1),
+            g_marshal_value_peek_string (param_values + 2),
+            data2);
+}
+
+/* BOOLEAN:OBJECT (e-gdbus-marshallers.list:5) */
+void
+_e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT (GClosure     *closure,
+                                                    GValue       *return_value G_GNUC_UNUSED,
+                                                    guint         n_param_values,
+                                                    const GValue *param_values,
+                                                    gpointer      invocation_hint G_GNUC_UNUSED,
+                                                    gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__OBJECT) (gpointer     data1,
+                                                    gpointer     arg_1,
+                                                    gpointer     data2);
+  register GMarshalFunc_BOOLEAN__OBJECT callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 2);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__OBJECT) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_object (param_values + 1),
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+/* VOID:BOOLEAN (e-gdbus-marshallers.list:6) */
+
+/* BOOLEAN:OBJECT,BOOLEAN (e-gdbus-marshallers.list:7) */
+void
+_e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_BOOLEAN (GClosure     *closure,
+                                                            GValue       *return_value G_GNUC_UNUSED,
+                                                            guint         n_param_values,
+                                                            const GValue *param_values,
+                                                            gpointer      invocation_hint G_GNUC_UNUSED,
+                                                            gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__OBJECT_BOOLEAN) (gpointer     data1,
+                                                            gpointer     arg_1,
+                                                            gboolean     arg_2,
+                                                            gpointer     data2);
+  register GMarshalFunc_BOOLEAN__OBJECT_BOOLEAN callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__OBJECT_BOOLEAN) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_object (param_values + 1),
+                       g_marshal_value_peek_boolean (param_values + 2),
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+/* BOOLEAN:OBJECT,STRING,STRING,STRING (e-gdbus-marshallers.list:8) */
+void
+_e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING_STRING_STRING (GClosure     *closure,
+                                                                         GValue       *return_value G_GNUC_UNUSED,
+                                                                         guint         n_param_values,
+                                                                         const GValue *param_values,
+                                                                         gpointer      invocation_hint G_GNUC_UNUSED,
+                                                                         gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__OBJECT_STRING_STRING_STRING) (gpointer     data1,
+                                                                         gpointer     arg_1,
+                                                                         gpointer     arg_2,
+                                                                         gpointer     arg_3,
+                                                                         gpointer     arg_4,
+                                                                         gpointer     data2);
+  register GMarshalFunc_BOOLEAN__OBJECT_STRING_STRING_STRING callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 5);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__OBJECT_STRING_STRING_STRING) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_object (param_values + 1),
+                       g_marshal_value_peek_string (param_values + 2),
+                       g_marshal_value_peek_string (param_values + 3),
+                       g_marshal_value_peek_string (param_values + 4),
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+/* BOOLEAN:OBJECT,BOXED (e-gdbus-marshallers.list:9) */
+void
+_e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_BOXED (GClosure     *closure,
+                                                          GValue       *return_value G_GNUC_UNUSED,
+                                                          guint         n_param_values,
+                                                          const GValue *param_values,
+                                                          gpointer      invocation_hint G_GNUC_UNUSED,
+                                                          gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__OBJECT_BOXED) (gpointer     data1,
+                                                          gpointer     arg_1,
+                                                          gpointer     arg_2,
+                                                          gpointer     data2);
+  register GMarshalFunc_BOOLEAN__OBJECT_BOXED callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__OBJECT_BOXED) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_object (param_values + 1),
+                       g_marshal_value_peek_boxed (param_values + 2),
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+/* BOOLEAN:OBJECT,STRING,UINT (e-gdbus-marshallers.list:10) */
+void
+_e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING_UINT (GClosure     *closure,
+                                                                GValue       *return_value G_GNUC_UNUSED,
+                                                                guint         n_param_values,
+                                                                const GValue *param_values,
+                                                                gpointer      invocation_hint G_GNUC_UNUSED,
+                                                                gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__OBJECT_STRING_UINT) (gpointer     data1,
+                                                                gpointer     arg_1,
+                                                                gpointer     arg_2,
+                                                                guint        arg_3,
+                                                                gpointer     data2);
+  register GMarshalFunc_BOOLEAN__OBJECT_STRING_UINT callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 4);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__OBJECT_STRING_UINT) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_object (param_values + 1),
+                       g_marshal_value_peek_string (param_values + 2),
+                       g_marshal_value_peek_uint (param_values + 3),
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
diff --git a/addressbook/libegdbus/e-gdbus-marshallers.h b/addressbook/libegdbus/e-gdbus-marshallers.h
new file mode 100644
index 0000000..d477e91
--- /dev/null
+++ b/addressbook/libegdbus/e-gdbus-marshallers.h
@@ -0,0 +1,77 @@
+
+#ifndef ___e_gdbus_gdbus_cclosure_marshaller_MARSHAL_H__
+#define ___e_gdbus_gdbus_cclosure_marshaller_MARSHAL_H__
+
+#include	<glib-object.h>
+
+G_BEGIN_DECLS
+
+/* BOOLEAN:OBJECT,STRING (e-gdbus-marshallers.list:1) */
+extern void _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING (GClosure     *closure,
+                                                                       GValue       *return_value,
+                                                                       guint         n_param_values,
+                                                                       const GValue *param_values,
+                                                                       gpointer      invocation_hint,
+                                                                       gpointer      marshal_data);
+
+/* VOID:BOXED (e-gdbus-marshallers.list:2) */
+#define _e_gdbus_gdbus_cclosure_marshaller_VOID__BOXED	g_cclosure_marshal_VOID__BOXED
+
+/* VOID:STRING (e-gdbus-marshallers.list:3) */
+#define _e_gdbus_gdbus_cclosure_marshaller_VOID__STRING	g_cclosure_marshal_VOID__STRING
+
+/* VOID:UINT,STRING (e-gdbus-marshallers.list:4) */
+extern void _e_gdbus_gdbus_cclosure_marshaller_VOID__UINT_STRING (GClosure     *closure,
+                                                                  GValue       *return_value,
+                                                                  guint         n_param_values,
+                                                                  const GValue *param_values,
+                                                                  gpointer      invocation_hint,
+                                                                  gpointer      marshal_data);
+
+/* BOOLEAN:OBJECT (e-gdbus-marshallers.list:5) */
+extern void _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT (GClosure     *closure,
+                                                                GValue       *return_value,
+                                                                guint         n_param_values,
+                                                                const GValue *param_values,
+                                                                gpointer      invocation_hint,
+                                                                gpointer      marshal_data);
+
+/* VOID:BOOLEAN (e-gdbus-marshallers.list:6) */
+#define _e_gdbus_gdbus_cclosure_marshaller_VOID__BOOLEAN	g_cclosure_marshal_VOID__BOOLEAN
+
+/* BOOLEAN:OBJECT,BOOLEAN (e-gdbus-marshallers.list:7) */
+extern void _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_BOOLEAN (GClosure     *closure,
+                                                                        GValue       *return_value,
+                                                                        guint         n_param_values,
+                                                                        const GValue *param_values,
+                                                                        gpointer      invocation_hint,
+                                                                        gpointer      marshal_data);
+
+/* BOOLEAN:OBJECT,STRING,STRING,STRING (e-gdbus-marshallers.list:8) */
+extern void _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING_STRING_STRING (GClosure     *closure,
+                                                                                     GValue       *return_value,
+                                                                                     guint         n_param_values,
+                                                                                     const GValue *param_values,
+                                                                                     gpointer      invocation_hint,
+                                                                                     gpointer      marshal_data);
+
+/* BOOLEAN:OBJECT,BOXED (e-gdbus-marshallers.list:9) */
+extern void _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_BOXED (GClosure     *closure,
+                                                                      GValue       *return_value,
+                                                                      guint         n_param_values,
+                                                                      const GValue *param_values,
+                                                                      gpointer      invocation_hint,
+                                                                      gpointer      marshal_data);
+
+/* BOOLEAN:OBJECT,STRING,UINT (e-gdbus-marshallers.list:10) */
+extern void _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING_UINT (GClosure     *closure,
+                                                                            GValue       *return_value,
+                                                                            guint         n_param_values,
+                                                                            const GValue *param_values,
+                                                                            gpointer      invocation_hint,
+                                                                            gpointer      marshal_data);
+
+G_END_DECLS
+
+#endif /* ___e_gdbus_gdbus_cclosure_marshaller_MARSHAL_H__ */
+
diff --git a/addressbook/libegdbus/e-gdbus-marshallers.list b/addressbook/libegdbus/e-gdbus-marshallers.list
new file mode 100644
index 0000000..46f24d4
--- /dev/null
+++ b/addressbook/libegdbus/e-gdbus-marshallers.list
@@ -0,0 +1,10 @@
+BOOLEAN:OBJECT,STRING
+VOID:BOXED
+VOID:STRING
+VOID:UINT,STRING
+BOOLEAN:OBJECT
+VOID:BOOLEAN
+BOOLEAN:OBJECT,BOOLEAN
+BOOLEAN:OBJECT,STRING,STRING,STRING
+BOOLEAN:OBJECT,BOXED
+BOOLEAN:OBJECT,STRING,UINT
diff --git a/addressbook/libegdbus/e-gdbus-typemappers.h b/addressbook/libegdbus/e-gdbus-typemappers.h
new file mode 100644
index 0000000..d99ad9c
--- /dev/null
+++ b/addressbook/libegdbus/e-gdbus-typemappers.h
@@ -0,0 +1,12 @@
+/* File:       e-gdbus-typemappers.h
+ *
+ * Generated by GDBus Binding Tool 0.1. DO NOT EDIT.
+ */
+
+#ifndef __E_GDBUS_TYPE_MAPPERS_H__
+#define __E_GDBUS_TYPE_MAPPERS_H__
+
+#include <gio/gio.h>
+
+
+#endif /* __E_GDBUS_TYPE_MAPPERS_H__ */
diff --git a/addressbook/tests/ebook/ebook-test-utils.c b/addressbook/tests/ebook/ebook-test-utils.c
index 3b94eaf..fa021b6 100644
--- a/addressbook/tests/ebook/ebook-test-utils.c
+++ b/addressbook/tests/ebook/ebook-test-utils.c
@@ -643,7 +643,6 @@ EBook*
 ebook_test_utils_book_new_temp (gchar **uri)
 {
         EBook *book;
-	GError *error = NULL;
 	gchar *file_template;
         gchar *uri_result;
 
@@ -651,10 +650,9 @@ ebook_test_utils_book_new_temp (gchar **uri)
                         "ebook-test-XXXXXX/", NULL);
 	g_mkstemp (file_template);
 
-	uri_result = g_filename_to_uri (file_template, NULL, &error);
+	uri_result = g_strconcat ("local:", file_template, NULL);
 	if (!uri_result) {
-                g_warning ("failed to convert %s to an URI: %s", file_template,
-                                error->message);
+                g_warning ("failed to convert %s to a 'local:' URI", file_template);
 		exit (1);
 	}
 	g_free (file_template);
diff --git a/calendar/Makefile.am b/calendar/Makefile.am
index 1213b79..6070753 100644
--- a/calendar/Makefile.am
+++ b/calendar/Makefile.am
@@ -1,3 +1,3 @@
-SUBDIRS = libecal libedata-cal backends tests
+SUBDIRS = libegdbus libecal libedata-cal backends tests
 
 -include $(top_srcdir)/git.mk
diff --git a/calendar/libecal/Makefile.am b/calendar/libecal/Makefile.am
index 7d0d17f..47831ba 100644
--- a/calendar/libecal/Makefile.am
+++ b/calendar/libecal/Makefile.am
@@ -5,31 +5,33 @@ MARSHAL_GENERATED = e-cal-marshal.c e-cal-marshal.h
 # The library
 lib_LTLIBRARIES = libecal-1.2.la
 
-libecal_1_2_la_CPPFLAGS = \
-	$(AM_CPPFLAGS)							\
-	-DG_LOG_DOMAIN=\"libecal\"				\
-	-I$(top_srcdir) 						\
-	-I$(top_srcdir)/calendar				\
-	-I$(top_builddir)						\
-	-I$(top_builddir)/calendar/libecal		\
-	$(LIBICAL_CFLAGS)						\
+libecal_1_2_la_CPPFLAGS =			\
+	$(AM_CPPFLAGS)				\
+	-DG_LOG_DOMAIN=\"libecal\"		\
+	-I$(top_srcdir) 			\
+	-I$(top_srcdir)/calendar		\
+	-I$(top_srcdir)/calendar/libegdbus	\
+	-I$(top_srcdir)/calendar/libedata-cal	\
+	-I$(top_builddir)			\
+	-I$(top_builddir)/calendar/libecal	\
+	$(LIBICAL_CFLAGS)			\
 	$(EVOLUTION_CALENDAR_CFLAGS)
 
-libecal_1_2_la_SOURCES =	\
-	$(MARSHAL_GENERATED)	\
-	$(DBUS_GENERATED_H)	\
-	e-cal.c			\
-	e-cal-component.c	\
-	e-cal-recur.c		\
-	e-cal-time-util.c	\
-        e-cal-check-timezones.c \
-	e-cal-system-timezone.c	\
-	e-cal-system-timezone.h	\
-	e-cal-util.c		\
-	e-cal-view.c		\
+libecal_1_2_la_SOURCES =			\
+	$(MARSHAL_GENERATED)			\
+	e-cal.c					\
+	e-cal-component.c			\
+	e-cal-recur.c				\
+	e-cal-time-util.c			\
+	e-cal-check-timezones.c 		\
+	e-cal-system-timezone.c			\
+	e-cal-system-timezone.h			\
+	e-cal-util.c				\
+	e-cal-view.c				\
 	e-cal-view-private.h
 
 libecal_1_2_la_LIBADD = 					\
+	$(top_builddir)/calendar/libegdbus/libegdbus-cal.la	\
 	$(top_builddir)/libedataserver/libedataserver-1.2.la 	\
 	$(LIBICAL_LIBS)						\
 	$(EVOLUTION_CALENDAR_LIBS)
@@ -56,12 +58,7 @@ libecalinclude_HEADERS =	\
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = libecal-$(API_VERSION).pc
 
-DBUS_GENERATED_H = e-data-cal-factory-bindings.h e-data-cal-bindings.h e-data-cal-view-bindings.h
-
-%-bindings.h: $(top_srcdir)/calendar/libedata-cal/%.xml
-	@DBUS_BINDING_TOOL@ --mode=glib-client --output=$@ --prefix=$(subst -,_,$*) $^
-
-BUILT_SOURCES = $(DBUS_GENERATED_H) $(MARSHAL_GENERATED)
+BUILT_SOURCES = $(MARSHAL_GENERATED)
 CLEANFILES = $(BUILT_SOURCES)
 DISTCLEANFILES = $(pkgconfig_DATA)
 
diff --git a/calendar/libecal/e-cal-view-private.h b/calendar/libecal/e-cal-view-private.h
index e542702..9aa39df 100644
--- a/calendar/libecal/e-cal-view-private.h
+++ b/calendar/libecal/e-cal-view-private.h
@@ -24,11 +24,11 @@
 #include <libecal/e-cal-types.h>
 #include <libecal/e-cal-view.h>
 
-#include <dbus/dbus-glib.h>
-
 G_BEGIN_DECLS
 
-ECalView *_e_cal_view_new (struct _ECal *client, DBusGProxy *view_proxy, GStaticRecMutex *connection_lock);
+struct _EGdbusCalView;
+
+ECalView *_e_cal_view_new (struct _ECal *client,  struct _EGdbusCalView *gdbus_calview);
 
 G_END_DECLS
 
diff --git a/calendar/libecal/e-cal-view.c b/calendar/libecal/e-cal-view.c
index 5ac66b2..ec81ff2 100644
--- a/calendar/libecal/e-cal-view.c
+++ b/calendar/libecal/e-cal-view.c
@@ -30,18 +30,14 @@
 #include "e-cal.h"
 #include "e-cal-view.h"
 #include "e-cal-view-private.h"
-#include "e-data-cal-view-bindings.h"
+#include "e-gdbus-egdbuscalview.h"
 
 G_DEFINE_TYPE(ECalView, e_cal_view, G_TYPE_OBJECT);
 #define E_CAL_VIEW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), E_TYPE_CAL_VIEW, ECalViewPrivate))
 
-#define LOCK_VIEW()   g_static_rec_mutex_lock (priv->view_proxy_lock)
-#define UNLOCK_VIEW() g_static_rec_mutex_unlock (priv->view_proxy_lock)
-
 /* Private part of the ECalView structure */
 struct _ECalViewPrivate {
-	DBusGProxy *view_proxy;
-	GStaticRecMutex *view_proxy_lock;
+	EGdbusCalView *gdbus_calview;
 	ECal *client;
 };
 
@@ -49,7 +45,6 @@ struct _ECalViewPrivate {
 enum props {
 	PROP_0,
 	PROP_VIEW,
-	PROP_VIEW_LOCK,
 	PROP_CLIENT
 };
 
@@ -68,10 +63,8 @@ enum {
 
 static guint signals[LAST_SIGNAL];
 
-static GObjectClass *parent_class;
-
 static GList *
-build_object_list (const gchar **seq)
+build_object_list (const gchar * const *seq)
 {
 	GList *list;
 	gint i;
@@ -87,11 +80,11 @@ build_object_list (const gchar **seq)
 		list = g_list_prepend (list, comp);
 	}
 
-	return list;
+	return g_list_reverse (list);
 }
 
 static GList *
-build_id_list (const gchar **seq)
+build_id_list (const gchar * const *seq)
 {
 	GList *list;
 	gint i;
@@ -104,88 +97,76 @@ build_id_list (const gchar **seq)
 		id->rid = NULL; /* TODO */
 		list = g_list_prepend (list, id);
 	}
-	return list;
+
+	return g_list_reverse (list);
 }
 
 static void
-objects_added_cb (DBusGProxy *proxy, const gchar **objects, gpointer data)
+objects_added_cb (EGdbusCalView *gdbus_calview, const gchar * const *objects, ECalView *view)
 {
-	ECalView *view;
         GList *list;
 
-	view = E_CAL_VIEW (data);
+	g_return_if_fail (E_IS_CAL_VIEW (view));
 	g_object_ref (view);
 
 	list = build_object_list (objects);
 
 	g_signal_emit (G_OBJECT (view), signals[OBJECTS_ADDED], 0, list);
 
-        while (list) {
-          icalcomponent_free (list->data);
-          list = g_list_delete_link (list, list);
-        }
+	g_list_foreach (list, (GFunc) icalcomponent_free, NULL);
+	g_list_free (list);
 
 	g_object_unref (view);
 }
 
 static void
-objects_modified_cb (DBusGProxy *proxy, const gchar **objects, gpointer data)
+objects_modified_cb (EGdbusCalView *gdbus_calview, const gchar * const *objects, ECalView *view)
 {
-	ECalView *view;
         GList *list;
 
-	view = E_CAL_VIEW (data);
+	g_return_if_fail (E_IS_CAL_VIEW (view));
 	g_object_ref (view);
 
 	list = build_object_list (objects);
 
 	g_signal_emit (G_OBJECT (view), signals[OBJECTS_MODIFIED], 0, list);
 
-        while (list) {
-          icalcomponent_free (list->data);
-          list = g_list_delete_link (list, list);
-        }
+	g_list_foreach (list, (GFunc) icalcomponent_free, NULL);
+	g_list_free (list);
 
 	g_object_unref (view);
 }
 
 static void
-objects_removed_cb (DBusGProxy *proxy, const gchar **uids, gpointer data)
+objects_removed_cb (EGdbusCalView *gdbus_calview, const gchar * const *uids, ECalView *view)
 {
-	ECalView *view;
         GList *list;
 
-	view = E_CAL_VIEW (data);
+	g_return_if_fail (E_IS_CAL_VIEW (view));
 	g_object_ref (view);
 
 	list = build_id_list (uids);
 
 	g_signal_emit (G_OBJECT (view), signals[OBJECTS_REMOVED], 0, list);
 
-        while (list) {
-		e_cal_component_free_id (list->data);
-		list = g_list_delete_link (list, list);
-        }
+	g_list_foreach (list, (GFunc) e_cal_component_free_id, NULL);
+	g_list_free (list);
 
 	g_object_unref (view);
 }
 
 static void
-progress_cb (DBusGProxy *proxy, const gchar *message, gint percent, gpointer data)
+progress_cb (EGdbusCalView *gdbus_calview, const gchar *message, guint percent, ECalView *view)
 {
-	ECalView *view;
-
-	view = E_CAL_VIEW (data);
+	g_return_if_fail (E_IS_CAL_VIEW (view));
 
 	g_signal_emit (G_OBJECT (view), signals[VIEW_PROGRESS], 0, message, percent);
 }
 
 static void
-done_cb (DBusGProxy *proxy, ECalendarStatus status, const gchar *message, gpointer data)
+done_cb (EGdbusCalView *gdbus_calview, /* ECalendarStatus */ guint status, const gchar *message, ECalView *view)
 {
-	ECalView *view;
-
-	view = E_CAL_VIEW (data);
+	g_return_if_fail (E_IS_CAL_VIEW (view));
 
 	#ifndef E_CAL_DISABLE_DEPRECATED
 	g_signal_emit (G_OBJECT (view), signals[VIEW_DONE], 0, status);
@@ -212,31 +193,15 @@ e_cal_view_set_property (GObject *object, guint property_id, const GValue *value
 
 	switch (property_id) {
 	case PROP_VIEW:
-		if (priv->view_proxy != NULL)
-			g_object_unref (priv->view_proxy);
-
-		priv->view_proxy = g_object_ref (g_value_get_pointer (value));
-
-                dbus_g_proxy_add_signal (priv->view_proxy, "ObjectsAdded", G_TYPE_STRV, G_TYPE_INVALID);
-                dbus_g_proxy_connect_signal (priv->view_proxy, "ObjectsAdded", G_CALLBACK (objects_added_cb), view, NULL);
-
-                dbus_g_proxy_add_signal (priv->view_proxy, "ObjectsModified", G_TYPE_STRV, G_TYPE_INVALID);
-                dbus_g_proxy_connect_signal (priv->view_proxy, "ObjectsModified", G_CALLBACK (objects_modified_cb), view, NULL);
-
-                dbus_g_proxy_add_signal (priv->view_proxy, "ObjectsRemoved", G_TYPE_STRV, G_TYPE_INVALID);
-                dbus_g_proxy_connect_signal (priv->view_proxy, "ObjectsRemoved", G_CALLBACK (objects_removed_cb), view, NULL);
-
-                dbus_g_object_register_marshaller (e_cal_marshal_VOID__STRING_UINT, G_TYPE_NONE, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_INVALID);
-                dbus_g_proxy_add_signal (priv->view_proxy, "Progress", G_TYPE_STRING, G_TYPE_UINT, G_TYPE_INVALID);
-                dbus_g_proxy_connect_signal (priv->view_proxy, "Progress", G_CALLBACK (progress_cb), view, NULL);
-
-                dbus_g_object_register_marshaller (e_cal_marshal_VOID__UINT_STRING, G_TYPE_NONE, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_INVALID);
-                dbus_g_proxy_add_signal (priv->view_proxy, "Done", G_TYPE_UINT, G_TYPE_STRING, G_TYPE_INVALID);
-                dbus_g_proxy_connect_signal (priv->view_proxy, "Done", G_CALLBACK (done_cb), view, NULL);
-
-		break;
-	case PROP_VIEW_LOCK:
-		priv->view_proxy_lock = g_value_get_pointer (value);
+		if (priv->gdbus_calview != NULL)
+			g_object_unref (priv->gdbus_calview);
+
+		priv->gdbus_calview = g_object_ref (g_value_get_pointer (value));
+		g_signal_connect (priv->gdbus_calview, "objects-added", G_CALLBACK (objects_added_cb), view);
+		g_signal_connect (priv->gdbus_calview, "objects-modified", G_CALLBACK (objects_modified_cb), view);
+		g_signal_connect (priv->gdbus_calview, "objects-removed", G_CALLBACK (objects_removed_cb), view);
+		g_signal_connect (priv->gdbus_calview, "progress", G_CALLBACK (progress_cb), view);
+		g_signal_connect (priv->gdbus_calview, "done", G_CALLBACK (done_cb), view);
 		break;
 	case PROP_CLIENT:
 		priv->client = E_CAL (g_value_dup_object (value));
@@ -258,10 +223,7 @@ e_cal_view_get_property (GObject *object, guint property_id, GValue *value, GPar
 
 	switch (property_id) {
 	case PROP_VIEW:
-		g_value_set_pointer (value, priv->view_proxy);
-		break;
-	case PROP_VIEW_LOCK:
-		g_value_set_pointer (value, priv->view_proxy_lock);
+		g_value_set_pointer (value, priv->gdbus_calview);
 		break;
 	case PROP_CLIENT:
 		g_value_set_object (value, priv->client);
@@ -285,13 +247,13 @@ e_cal_view_finalize (GObject *object)
 	view = E_CAL_VIEW (object);
 	priv = view->priv;
 
-	if (priv->view_proxy != NULL)
-		g_object_unref (priv->view_proxy);
+	if (priv->gdbus_calview != NULL)
+		g_object_unref (priv->gdbus_calview);
 
 	g_object_unref (priv->client);
 
-	if (G_OBJECT_CLASS (parent_class)->finalize)
-		(* G_OBJECT_CLASS (parent_class)->finalize) (object);
+	if (G_OBJECT_CLASS (e_cal_view_parent_class)->finalize)
+		(* G_OBJECT_CLASS (e_cal_view_parent_class)->finalize) (object);
 }
 
 /* Class initialization function for the calendar view */
@@ -302,8 +264,6 @@ e_cal_view_class_init (ECalViewClass *klass)
 
 	object_class = (GObjectClass *) klass;
 
-	parent_class = g_type_class_peek_parent (klass);
-
 	object_class->set_property = e_cal_view_set_property;
 	object_class->get_property = e_cal_view_get_property;
 	object_class->finalize = e_cal_view_finalize;
@@ -311,11 +271,7 @@ e_cal_view_class_init (ECalViewClass *klass)
 	g_type_class_add_private (klass, sizeof (ECalViewPrivate));
 
 	g_object_class_install_property (object_class, PROP_VIEW,
-		g_param_spec_pointer ("view", "The DBus view proxy", NULL,
-				      G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
-
-	g_object_class_install_property (object_class, PROP_VIEW_LOCK,
-		g_param_spec_pointer ("view-lock", "The DBus view proxy lock", NULL,
+		g_param_spec_pointer ("view", "The GDBus view proxy", NULL,
 				      G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
 
 	g_object_class_install_property (object_class, PROP_CLIENT,
@@ -378,8 +334,8 @@ e_cal_view_class_init (ECalViewClass *klass)
 
 /**
  * _e_cal_view_new:
- * @corba_view: The CORBA object for the view.
  * @client: An #ECal object.
+ * @gdbuc_calview: The GDBus object for the view.
  *
  * Creates a new view object by issuing the view creation request to the
  * calendar server.
@@ -387,14 +343,13 @@ e_cal_view_class_init (ECalViewClass *klass)
  * Returns: A newly-created view object, or NULL if the request failed.
  **/
 ECalView *
-_e_cal_view_new (ECal *client, DBusGProxy *view_proxy, GStaticRecMutex *connection_lock)
+_e_cal_view_new (ECal *client, EGdbusCalView *gdbus_calview)
 {
 	ECalView *view;
 
 	view = g_object_new (E_TYPE_CAL_VIEW,
 		"client", client,
-		"view", view_proxy,
-		"view-lock", connection_lock,
+		"view", gdbus_calview,
 		NULL);
 
 	return view;
@@ -437,10 +392,8 @@ e_cal_view_start (ECalView *view)
 
 	priv = E_CAL_VIEW_GET_PRIVATE(view);
 
-	if (priv->view_proxy) {
-		LOCK_VIEW ();
-		org_gnome_evolution_dataserver_calendar_CalView_start (priv->view_proxy, &error);
-		UNLOCK_VIEW ();
+	if (priv->gdbus_calview) {
+		e_gdbus_cal_view_call_start_sync (priv->gdbus_calview, NULL, &error);
 	}
 
 	if (error) {
@@ -475,10 +428,8 @@ e_cal_view_stop (ECalView *view)
 
 	priv = E_CAL_VIEW_GET_PRIVATE(view);
 
-	if (priv->view_proxy) {
-		LOCK_VIEW ();
-		org_gnome_evolution_dataserver_calendar_CalView_stop (priv->view_proxy, &error);
-		UNLOCK_VIEW ();
+	if (priv->gdbus_calview) {
+		e_gdbus_cal_view_call_stop_sync (priv->gdbus_calview, NULL, &error);
 	}
 
 	if (error) {
diff --git a/calendar/libecal/e-cal.c b/calendar/libecal/e-cal.c
index 0b9e83f..b367a82 100644
--- a/calendar/libecal/e-cal.c
+++ b/calendar/libecal/e-cal.c
@@ -42,27 +42,24 @@
 #include <libedataserver/e-url.h>
 #include <libedataserver/e-data-server-util.h>
 
-#include <dbus/dbus-glib-lowlevel.h>
-#include <dbus/dbus.h>
-#include <dbus/dbus-glib.h>
 #include <glib-object.h>
 
+#include "libedata-cal/e-data-cal-types.h"
+
 #include "e-cal-check-timezones.h"
 #include "e-cal-marshal.h"
 #include "e-cal-time-util.h"
 #include "e-cal-view-private.h"
 #include "e-cal.h"
-#include "e-data-cal-factory-bindings.h"
-#include "e-data-cal-bindings.h"
-#include <libedata-cal/e-data-cal-types.h>
 
-static DBusGConnection *connection = NULL;
-static DBusGProxy *factory_proxy = NULL;
+#include "e-gdbus-egdbuscalfactory.h"
+#include "e-gdbus-egdbuscal.h"
+#include "e-gdbus-egdbuscalview.h"
 
-/* guards both connection and factory_proxy */
-static GStaticRecMutex connection_lock = G_STATIC_REC_MUTEX_INIT;
-#define LOCK_CONN()   g_static_rec_mutex_lock (&connection_lock)
-#define UNLOCK_CONN() g_static_rec_mutex_unlock (&connection_lock)
+static EGdbusCalFactory *cal_factory_proxy = NULL;
+static GStaticRecMutex cal_factory_proxy_lock = G_STATIC_REC_MUTEX_INIT;
+#define LOCK_FACTORY()   g_static_rec_mutex_lock   (&cal_factory_proxy_lock)
+#define UNLOCK_FACTORY() g_static_rec_mutex_unlock (&cal_factory_proxy_lock)
 
 G_DEFINE_TYPE(ECal, e_cal, G_TYPE_OBJECT)
 #define E_CAL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), E_TYPE_CAL, ECalPrivate))
@@ -99,7 +96,7 @@ struct _ECalPrivate {
 
 	gboolean read_only;
 
-	DBusGProxy *proxy;
+	EGdbusCal *gdbus_cal;
 
 	/* The authentication function */
 	ECalAuthFunc auth_func;
@@ -204,7 +201,7 @@ e_calendar_error_quark (void)
  * Otherwise return CORBA_EXCEPTION (I know this is DBus...).
  */
 static ECalendarStatus
-get_status_from_error (GError *error)
+get_status_from_error (const GError *error)
 {
 	#define err(a,b) "org.gnome.evolution.dataserver.calendar.Cal." a, b
 	static struct {
@@ -242,17 +239,22 @@ get_status_from_error (GError *error)
 	if G_LIKELY (error == NULL)
 		return Success;
 
-	if (error->domain == DBUS_GERROR && error->code == DBUS_GERROR_REMOTE_EXCEPTION) {
-		const gchar *name;
+	if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_DBUS_ERROR)) {
+		gchar *name;
 		gint i;
 
-		name = dbus_g_error_get_name (error);
+		name = g_dbus_error_get_remote_error (error);
+
 		for (i = 0; i < G_N_ELEMENTS (errors); i++) {
-			if (g_ascii_strcasecmp (errors[i].name, name) == 0)
+			if (g_ascii_strcasecmp (errors[i].name, name) == 0) {
+				g_free (name);
 				return errors[i].err_code;
+			}
 		}
 
 		g_warning ("Unmatched error name %s", name);
+		g_free (name);
+
 		return E_CALENDAR_STATUS_OTHER_ERROR;
 	} else if (error->domain == E_CALENDAR_ERROR) {
 		return error->code;
@@ -268,18 +270,24 @@ get_status_from_error (GError *error)
  * alone.
  */
 static gboolean
-unwrap_gerror(GError **error)
+unwrap_gerror (GError **error)
 {
 	if (*error == NULL)
 		return TRUE;
-	if ((*error)->domain == DBUS_GERROR && (*error)->code == DBUS_GERROR_REMOTE_EXCEPTION) {
+
+	if (g_error_matches (*error, G_IO_ERROR, G_IO_ERROR_DBUS_ERROR)) {
 		GError *new_error = NULL;
 		gint code;
+
 		code = get_status_from_error (*error);
+		g_dbus_error_strip_remote_error (*error);
+
 		new_error = g_error_new_literal (E_CALENDAR_ERROR, code, (*error)->message);
+
 		g_error_free (*error);
 		*error = new_error;
 	}
+
 	return FALSE;
 }
 
@@ -400,7 +408,7 @@ e_cal_init (ECal *ecal)
 	priv->alarm_email_address = NULL;
 	priv->ldap_attribute = NULL;
 	priv->capabilities = NULL;
-	priv->proxy = NULL;
+	priv->gdbus_cal = NULL;
 	priv->timezones = g_hash_table_new (g_str_hash, g_str_equal);
 	priv->default_zone = icaltimezone_get_utc_timezone ();
 }
@@ -409,7 +417,7 @@ e_cal_init (ECal *ecal)
  * Called when the calendar server dies.
  */
 static void
-proxy_destroyed (gpointer data, GObject *object)
+gdbus_cal_destroyed_cb (gpointer data, GObject *object)
 {
         ECal *ecal = data;
 	ECalPrivate *priv;
@@ -421,11 +429,11 @@ proxy_destroyed (gpointer data, GObject *object)
         g_warning (G_STRLOC ": e-d-s proxy died");
 
         /* Ensure that everything relevant is reset */
-        LOCK_CONN ();
-        factory_proxy = NULL;
-        priv->proxy = NULL;
+        LOCK_FACTORY ();
+        cal_factory_proxy = NULL;
+        priv->gdbus_cal = NULL;
 	priv->load_state = E_CAL_LOAD_NOT_LOADED;
-        UNLOCK_CONN ();
+        UNLOCK_FACTORY ();
 
         g_signal_emit (G_OBJECT (ecal), e_cal_signals [BACKEND_DIED], 0);
 }
@@ -440,17 +448,18 @@ e_cal_dispose (GObject *object)
 	ecal = E_CAL (object);
 	priv = ecal->priv;
 
-	if (priv->proxy) {
+	if (priv->gdbus_cal) {
 		GError *error = NULL;
 
-                g_object_weak_unref (G_OBJECT (priv->proxy), proxy_destroyed, ecal);
-		LOCK_CONN ();
-		org_gnome_evolution_dataserver_calendar_Cal_close (priv->proxy, &error);
-		g_object_unref (priv->proxy);
-		priv->proxy = NULL;
-		UNLOCK_CONN ();
+                g_object_weak_unref (G_OBJECT (priv->gdbus_cal), gdbus_cal_destroyed_cb, ecal);
+
+		e_gdbus_cal_call_close_sync (priv->gdbus_cal, NULL, &error);
+		g_object_unref (priv->gdbus_cal);
+		priv->gdbus_cal = NULL;
 
 		if (error) {
+			unwrap_gerror (&error);
+
 			g_warning ("%s: Failed to close calendar, %s\n", G_STRFUNC, error->message);
 			g_error_free (error);
 		}
@@ -591,79 +600,40 @@ e_cal_class_init (ECalClass *klass)
 	g_type_class_add_private (klass, sizeof (ECalPrivate));
 }
 
-static DBusHandlerResult
-filter_dbus_msgs_cb (DBusConnection *pconnection, DBusMessage *message, gpointer user_data)
-{
-	if (dbus_message_is_signal (message, DBUS_INTERFACE_LOCAL, "Disconnected")) {
-		DBusGConnection *conn = connection;
-
-		LOCK_CONN ();
-		factory_proxy = NULL;
-		connection = NULL;
-		UNLOCK_CONN ();
-		dbus_g_connection_unref (conn);
-		return DBUS_HANDLER_RESULT_HANDLED;
-	}
-
-	return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-}
-
 static void
-factory_proxy_destroy_cb (DBusGProxy *proxy, gpointer user_data)
+cal_factory_proxy_destroyed_cb (gpointer user_data, GObject *what)
 {
-	LOCK_CONN ();
-	factory_proxy = NULL;
-	UNLOCK_CONN ();
+	LOCK_FACTORY ();
+	cal_factory_proxy = NULL;
+	UNLOCK_FACTORY ();
 }
 
 /* one-time start up for libecal */
 static gboolean
-e_cal_activate(GError **error)
+e_cal_activate (GError **error)
 {
-	DBusError derror;
-
-	LOCK_CONN ();
-	if (G_LIKELY (factory_proxy)) {
-		UNLOCK_CONN ();
+	LOCK_FACTORY ();
+	if (G_LIKELY (cal_factory_proxy)) {
+		UNLOCK_FACTORY ();
 		return TRUE;
 	}
 
-	if (!connection) {
-		connection = dbus_g_bus_get (DBUS_BUS_SESSION, error);
-		if (!connection) {
-			UNLOCK_CONN ();
-			return FALSE;
-		}
-
-		dbus_connection_add_filter (dbus_g_connection_get_connection (connection), filter_dbus_msgs_cb, NULL, NULL);
-	}
+	cal_factory_proxy = e_gdbus_cal_factory_proxy_new_for_bus_sync (
+		G_BUS_TYPE_SESSION,
+		G_DBUS_PROXY_FLAGS_NONE,
+		"org.gnome.evolution.dataserver.Calendar",
+		"/org/gnome/evolution/dataserver/calendar/CalFactory",
+		NULL,
+		error);
 
-	dbus_error_init (&derror);
-	if (!dbus_bus_start_service_by_name (dbus_g_connection_get_connection (connection),
-													"org.gnome.evolution.dataserver.Calendar",
-													0, NULL, &derror))
-	{
-		dbus_set_g_error (error, &derror);
-		dbus_error_free (&derror);
-		UNLOCK_CONN ();
+	if (!cal_factory_proxy) {
+		UNLOCK_FACTORY ();
 		return FALSE;
 	}
 
-	if (!factory_proxy) {
-		factory_proxy = dbus_g_proxy_new_for_name_owner (connection,
-							"org.gnome.evolution.dataserver.Calendar",
-							"/org/gnome/evolution/dataserver/calendar/CalFactory",
-							"org.gnome.evolution.dataserver.calendar.CalFactory",
-							error);
-		if (!factory_proxy) {
-			UNLOCK_CONN ();
-			return FALSE;
-		}
-
-		g_signal_connect (factory_proxy, "destroy", G_CALLBACK (factory_proxy_destroy_cb), NULL);
-	}
+	g_object_weak_ref (G_OBJECT (cal_factory_proxy), cal_factory_proxy_destroyed_cb, NULL);
 
-	UNLOCK_CONN ();
+	UNLOCK_FACTORY ();
 
 	return TRUE;
 }
@@ -689,46 +659,13 @@ reopen_with_auth (gpointer data)
 }
 
 static void
-auth_required_cb (DBusGProxy *proxy, ECal *cal)
+auth_required_cb (EGdbusCal *gdbus_cal, ECal *cal)
 {
 	g_return_if_fail (E_IS_CAL (cal));
 
-	g_idle_add (reopen_with_auth, (gpointer)cal);
+	g_idle_add (reopen_with_auth, (gpointer) cal);
 }
 
-static void
-mode_cb (DBusGProxy *proxy, EDataCalMode mode, ECal *cal)
-{
-	g_return_if_fail (E_IS_CAL (cal));
-	g_return_if_fail (mode & AnyMode);
-
-	g_signal_emit (G_OBJECT (cal), e_cal_signals[CAL_SET_MODE],
-		       0, E_CALENDAR_STATUS_OK, mode);
-}
-
-static void
-readonly_cb (DBusGProxy *proxy, gboolean read_only, ECal *cal)
-{
-	ECalPrivate *priv;
-
-	g_return_if_fail (cal && E_IS_CAL (cal));
-
-	priv = cal->priv;
-	priv->read_only = read_only;
-}
-
-/*
-static void
-backend_died_cb (EComponentListener *cl, gpointer user_data)
-{
-	ECalPrivate *priv;
-	ECal *ecal = (ECal *) user_data;
-
-	priv = ecal->priv;
-	priv->load_state = E_CAL_LOAD_NOT_LOADED;
-	g_signal_emit (G_OBJECT (ecal), e_cal_signals[BACKEND_DIED], 0);
-}*/
-
 typedef struct
 {
 	ECal *ecal;
@@ -751,7 +688,7 @@ backend_error_idle_cb (gpointer data)
 
 /* Handle the error_occurred signal from the listener */
 static void
-backend_error_cb (DBusGProxy *proxy, const gchar *message, ECal *ecal)
+backend_error_cb (EGdbusCal *gdbus_cal, const gchar *message, ECal *ecal)
 {
 	ECalErrorData *error_data;
 
@@ -766,19 +703,51 @@ backend_error_cb (DBusGProxy *proxy, const gchar *message, ECal *ecal)
 }
 
 static void
+readonly_cb (EGdbusCal *gdbus_cal, gboolean read_only, ECal *cal)
+{
+	ECalPrivate *priv;
+
+	g_return_if_fail (cal && E_IS_CAL (cal));
+
+	priv = cal->priv;
+	priv->read_only = read_only;
+}
+
+static void
+mode_cb (EGdbusCal *gdbus_cal, EDataCalMode mode, ECal *cal)
+{
+	g_return_if_fail (E_IS_CAL (cal));
+	g_return_if_fail (mode & AnyMode);
+
+	g_signal_emit (G_OBJECT (cal), e_cal_signals[CAL_SET_MODE],
+		       0, E_CALENDAR_STATUS_OK, mode);
+}
+
+/*
+static void
+backend_died_cb (EComponentListener *cl, gpointer user_data)
+{
+	ECalPrivate *priv;
+	ECal *ecal = (ECal *) user_data;
+
+	priv = ecal->priv;
+	priv->load_state = E_CAL_LOAD_NOT_LOADED;
+	g_signal_emit (G_OBJECT (ecal), e_cal_signals[BACKEND_DIED], 0);
+}*/
+
+static void
 set_local_attachment_store (ECal *ecal)
 {
 	gchar *cache_dir = NULL;
 	GError *error = NULL;
 
-	LOCK_CONN ();
-	org_gnome_evolution_dataserver_calendar_Cal_get_cache_dir (
-		ecal->priv->proxy, &cache_dir, &error);
-	UNLOCK_CONN ();
+	e_gdbus_cal_call_get_cache_dir_sync (
+		ecal->priv->gdbus_cal, &cache_dir, NULL, &error);
 
 	if (error == NULL)
 		ecal->priv->local_attachment_store = cache_dir;
 	else {
+		unwrap_gerror (&error);
 		g_warning ("%s", error->message);
 		g_error_free (error);
 	}
@@ -807,8 +776,10 @@ e_cal_new (ESource *source, ECalSourceType type)
 	g_return_val_if_fail (type < E_CAL_SOURCE_TYPE_LAST, NULL);
 
 	if (!e_cal_activate (&error)) {
+		unwrap_gerror (&error);
 		g_warning("Cannot activate ECal: %s\n", error ? error->message : "Unknown error");
-		g_error_free (error);
+		if (error)
+			g_error_free (error);
 		return NULL;
 	}
 
@@ -820,41 +791,45 @@ e_cal_new (ESource *source, ECalSourceType type)
 	priv->type = type;
 
 	xml = e_source_to_standalone_xml (priv->source);
-	LOCK_CONN ();
-	if (!org_gnome_evolution_dataserver_calendar_CalFactory_get_cal (factory_proxy, xml, convert_type (priv->type), &path, &error)) {
-		UNLOCK_CONN ();
+	if (!e_gdbus_cal_factory_call_get_cal_sync (cal_factory_proxy, xml, convert_type (priv->type), &path, NULL, &error)) {
 		g_free (xml);
+		unwrap_gerror (&error);
 		g_warning ("Cannot get cal from factory: %s", error ? error->message : "Unknown error");
-		g_error_free (error);
+		if (error)
+			g_error_free (error);
 		g_object_unref (ecal);
 		return NULL;
 	}
 	g_free (xml);
 
-	priv->proxy = dbus_g_proxy_new_for_name_owner (connection,
-									"org.gnome.evolution.dataserver.Calendar", path,
-									"org.gnome.evolution.dataserver.calendar.Cal",
-									&error);
-
-	UNLOCK_CONN ();
-
-	if (!priv->proxy)
+	priv->gdbus_cal = e_gdbus_cal_proxy_new_sync (g_dbus_proxy_get_connection (G_DBUS_PROXY (cal_factory_proxy)),
+						      G_DBUS_PROXY_FLAGS_NONE,
+						      "org.gnome.evolution.dataserver.Calendar",
+						      path,
+						      NULL,
+						      &error);
+
+	if (!priv->gdbus_cal) {
+		g_free (path);
+		unwrap_gerror (&error);
+		g_warning ("Cannot create cal proxy: %s", error ? error->message : "Unknown error");
+		if (error)
+			g_error_free (error);
+		g_object_unref (ecal);
 		return NULL;
+	}
 
-	g_object_weak_ref (G_OBJECT (priv->proxy), proxy_destroyed, ecal);
-
-	dbus_g_proxy_add_signal (priv->proxy, "auth_required", G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal (priv->proxy, "auth_required", G_CALLBACK (auth_required_cb), ecal, NULL);
-	dbus_g_proxy_add_signal (priv->proxy, "backend_error", G_TYPE_STRING, G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal (priv->proxy, "backend_error", G_CALLBACK (backend_error_cb), ecal, NULL);
-	dbus_g_proxy_add_signal (priv->proxy, "readonly", G_TYPE_BOOLEAN, G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal (priv->proxy, "readonly", G_CALLBACK (readonly_cb), ecal, NULL);
-	dbus_g_proxy_add_signal (priv->proxy, "mode", G_TYPE_INT, G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal (priv->proxy, "mode", G_CALLBACK (mode_cb), ecal, NULL);
+	g_object_weak_ref (G_OBJECT (priv->gdbus_cal), gdbus_cal_destroyed_cb, ecal);
+	g_signal_connect (priv->gdbus_cal, "auth-required", G_CALLBACK (auth_required_cb), ecal);
+	g_signal_connect (priv->gdbus_cal, "backend-error", G_CALLBACK (backend_error_cb), ecal);
+	g_signal_connect (priv->gdbus_cal, "readonly", G_CALLBACK (readonly_cb), ecal);
+	g_signal_connect (priv->gdbus_cal, "mode", G_CALLBACK (mode_cb), ecal);
 
 	/* Set the local attachment store path for the calendar */
 	set_local_attachment_store (ecal);
 
+	g_free (path);
+
 	return ecal;
 }
 
@@ -1065,27 +1040,23 @@ build_pass_key (ECal *ecal)
 }
 
 static void
-async_signal_idle_cb (DBusGProxy *proxy, GError *error, gpointer user_data)
+async_open_report_result (ECal *ecal, const GError *error)
 {
-	ECal *ecal;
 	#ifndef E_CAL_DISABLE_DEPRECATED
 	ECalendarStatus status;
 	#endif
 
-	ecal = E_CAL (user_data);
-
 	g_return_if_fail (ecal && E_IS_CAL (ecal));
 
 	if (error) {
 	#ifndef E_CAL_DISABLE_DEPRECATED
 		status = get_status_from_error (error);
-
 	} else {
 		status = E_CALENDAR_STATUS_OK;
+	#else
+	} else {
 	#endif
-		LOCK_CONN ();
-		org_gnome_evolution_dataserver_calendar_Cal_is_read_only (ecal->priv->proxy, NULL);
-		UNLOCK_CONN ();
+		e_gdbus_cal_call_is_read_only_sync (ecal->priv->gdbus_cal, NULL, NULL);
 	}
 
 	#ifndef E_CAL_DISABLE_DEPRECATED
@@ -1094,6 +1065,21 @@ async_signal_idle_cb (DBusGProxy *proxy, GError *error, gpointer user_data)
 	g_signal_emit (G_OBJECT (ecal), e_cal_signals[CAL_OPENED_EX], 0, error);
 }
 
+static void
+async_open_ready_cb (EGdbusCal *gdbus_cal, GAsyncResult *res, ECal *ecal)
+{
+	GError *error = NULL;
+
+	g_return_if_fail (ecal && E_IS_CAL (ecal));
+
+	e_gdbus_cal_call_open_finish (gdbus_cal, res, &error);
+
+	async_open_report_result (ecal, error);
+
+	if (error)
+		g_error_free (error);
+}
+
 static gboolean
 open_calendar (ECal *ecal, gboolean only_if_exists, GError **error,
 	#ifndef E_CAL_DISABLE_DEPRECATED
@@ -1109,7 +1095,7 @@ open_calendar (ECal *ecal, gboolean only_if_exists, GError **error,
 	e_return_error_if_fail (ecal != NULL, E_CALENDAR_STATUS_INVALID_ARG);
 	e_return_error_if_fail (E_IS_CAL (ecal), E_CALENDAR_STATUS_INVALID_ARG);
 	priv = ecal->priv;
-	e_return_error_if_fail (priv->proxy, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (priv->gdbus_cal, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
 
 	if (!needs_auth && priv->load_state == E_CAL_LOAD_LOADED) {
 		return TRUE;
@@ -1188,21 +1174,13 @@ open_calendar (ECal *ecal, gboolean only_if_exists, GError **error,
 	*status = E_CALENDAR_STATUS_OK;
 	#endif
 	if (!async) {
-		LOCK_CONN ();
-		if (!org_gnome_evolution_dataserver_calendar_Cal_open (priv->proxy, only_if_exists, username ? username : "", password ? password : "", error)) {
+		if (!e_gdbus_cal_call_open_sync (priv->gdbus_cal, only_if_exists, username ? username : "", password ? password : "", NULL, error)) {
 			#ifndef E_CAL_DISABLE_DEPRECATED
 			*status = E_CALENDAR_STATUS_DBUS_EXCEPTION;
 			#endif
 		}
-		UNLOCK_CONN ();
 	} else {
-		LOCK_CONN ();
-		if (!org_gnome_evolution_dataserver_calendar_Cal_open_async (priv->proxy, only_if_exists, username ? username : "", password ? password : "", async_signal_idle_cb, ecal)) {
-			#ifndef E_CAL_DISABLE_DEPRECATED
-			*status = E_CALENDAR_STATUS_DBUS_EXCEPTION;
-			#endif
-		}
-		UNLOCK_CONN ();
+		e_gdbus_cal_call_open (priv->gdbus_cal, only_if_exists, username ? username : "", password ? password : "", NULL, (GAsyncReadyCallback) async_open_ready_cb, ecal);
 	}
 
 	g_free (password);
@@ -1214,9 +1192,7 @@ open_calendar (ECal *ecal, gboolean only_if_exists, GError **error,
 		if (!async) {
 			GError *err = NULL;
 
-			LOCK_CONN ();
-			org_gnome_evolution_dataserver_calendar_Cal_is_read_only (priv->proxy, &err);
-			UNLOCK_CONN ();
+			e_gdbus_cal_call_is_read_only_sync (ecal->priv->gdbus_cal, NULL, &err);
 
 			if (err)
 				g_error_free (err);
@@ -1285,7 +1261,7 @@ idle_async_error_reply_cb (gpointer user_data)
 	g_return_val_if_fail (data->ecal != NULL, FALSE);
 	g_return_val_if_fail (data->error != NULL, FALSE);
 
-	async_signal_idle_cb (NULL, data->error, data->ecal);
+	async_open_report_result (data->ecal, data->error);
 
 	g_object_unref (data->ecal);
 	g_error_free (data->error);
@@ -1381,14 +1357,11 @@ e_cal_refresh (ECal *ecal, GError **error)
 
 	e_return_error_if_fail (E_IS_CAL (ecal), E_CALENDAR_STATUS_INVALID_ARG);
 	priv = ecal->priv;
-	e_return_error_if_fail (priv->proxy, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (priv->gdbus_cal, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
 
-	LOCK_CONN ();
-	if (!org_gnome_evolution_dataserver_calendar_Cal_refresh (priv->proxy, error)) {
-		UNLOCK_CONN ();
+	if (!e_gdbus_cal_call_refresh_sync (priv->gdbus_cal, NULL, error)) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_DBUS_EXCEPTION, error);
 	}
-	UNLOCK_CONN ();
 
 	return TRUE;
 }
@@ -1409,14 +1382,11 @@ e_cal_remove (ECal *ecal, GError **error)
 
 	e_return_error_if_fail (E_IS_CAL (ecal), E_CALENDAR_STATUS_INVALID_ARG);
 	priv = ecal->priv;
-	e_return_error_if_fail (priv->proxy, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (priv->gdbus_cal, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
 
-	LOCK_CONN ();
-	if (!org_gnome_evolution_dataserver_calendar_Cal_remove (priv->proxy, error)) {
-		UNLOCK_CONN ();
+	if (!e_gdbus_cal_call_remove_sync (priv->gdbus_cal, NULL, error)) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_DBUS_EXCEPTION, error);
 	}
-	UNLOCK_CONN ();
 
 	return TRUE;
 }
@@ -1643,21 +1613,18 @@ e_cal_get_cal_address (ECal *ecal, gchar **cal_address, GError **error)
 	e_return_error_if_fail (E_IS_CAL (ecal), E_CALENDAR_STATUS_INVALID_ARG);
 	e_return_error_if_fail (cal_address != NULL, E_CALENDAR_STATUS_INVALID_ARG);
 	priv = ecal->priv;
-	e_return_error_if_fail (priv->proxy, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (priv->gdbus_cal, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
 	*cal_address = NULL;
 
 	if (priv->cal_address == NULL) {
-		e_return_error_if_fail (priv->proxy, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
+		e_return_error_if_fail (priv->gdbus_cal, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
 		if (priv->load_state != E_CAL_LOAD_LOADED) {
 			E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
 		}
 
-		LOCK_CONN ();
-		if (!org_gnome_evolution_dataserver_calendar_Cal_get_cal_address (priv->proxy, cal_address, error)) {
-			UNLOCK_CONN ();
+		if (!e_gdbus_cal_call_get_cal_address_sync (priv->gdbus_cal, cal_address, NULL, error)) {
 			E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_DBUS_EXCEPTION, error);
 		}
-		UNLOCK_CONN ();
 	} else {
 		*cal_address = g_strdup (priv->cal_address);
 	}
@@ -1684,19 +1651,16 @@ e_cal_get_alarm_email_address (ECal *ecal, gchar **alarm_address, GError **error
 	e_return_error_if_fail (alarm_address != NULL, E_CALENDAR_STATUS_INVALID_ARG);
 	e_return_error_if_fail (E_IS_CAL (ecal), E_CALENDAR_STATUS_INVALID_ARG);
 	priv = ecal->priv;
-	e_return_error_if_fail (priv->proxy, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (priv->gdbus_cal, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
 	*alarm_address = NULL;
 
 	if (priv->load_state != E_CAL_LOAD_LOADED) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
 	}
 
-	LOCK_CONN ();
-	if (!org_gnome_evolution_dataserver_calendar_Cal_get_alarm_email_address (priv->proxy, alarm_address, error)) {
-		UNLOCK_CONN ();
+	if (!e_gdbus_cal_call_get_alarm_email_address_sync (priv->gdbus_cal, alarm_address, NULL, error)) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_DBUS_EXCEPTION, error);
 	}
-	UNLOCK_CONN ();
 
 	return TRUE;
 }
@@ -1720,19 +1684,16 @@ e_cal_get_ldap_attribute (ECal *ecal, gchar **ldap_attribute, GError **error)
 	e_return_error_if_fail (ldap_attribute != NULL, E_CALENDAR_STATUS_INVALID_ARG);
 	e_return_error_if_fail (E_IS_CAL (ecal), E_CALENDAR_STATUS_INVALID_ARG);
 	priv = ecal->priv;
-	e_return_error_if_fail (priv->proxy, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (priv->gdbus_cal, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
 	*ldap_attribute = NULL;
 
 	if (priv->load_state != E_CAL_LOAD_LOADED) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
 	}
 
-	LOCK_CONN ();
-	if (!org_gnome_evolution_dataserver_calendar_Cal_get_ldap_attribute (priv->proxy, ldap_attribute, error)) {
-		UNLOCK_CONN ();
+	if (!e_gdbus_cal_call_get_ldap_attribute_sync (priv->gdbus_cal, ldap_attribute, NULL, error)) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_DBUS_EXCEPTION, error);
 	}
-	UNLOCK_CONN ();
 
 	return TRUE;
 }
@@ -1743,7 +1704,7 @@ load_static_capabilities (ECal *ecal, GError **error)
 	ECalPrivate *priv;
 
 	priv = ecal->priv;
-	e_return_error_if_fail (priv->proxy, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (priv->gdbus_cal, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
 
 	if (priv->capabilities)
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_OK, error);
@@ -1752,12 +1713,9 @@ load_static_capabilities (ECal *ecal, GError **error)
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
 	}
 
-	LOCK_CONN ();
-	if (!org_gnome_evolution_dataserver_calendar_Cal_get_scheduling_information (priv->proxy, &priv->capabilities, error)) {
-		UNLOCK_CONN ();
+	if (!e_gdbus_cal_call_get_scheduling_information_sync (priv->gdbus_cal, &priv->capabilities, NULL, error)) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_DBUS_EXCEPTION, error);
 	}
-	UNLOCK_CONN ();
 
 	return TRUE;
 }
@@ -1923,17 +1881,16 @@ e_cal_set_mode (ECal *ecal, CalMode mode)
 	g_return_val_if_fail (mode & CAL_MODE_ANY, FALSE);
 
 	priv = ecal->priv;
-	g_return_val_if_fail (priv->proxy, FALSE);
+	g_return_val_if_fail (priv->gdbus_cal, FALSE);
 	g_return_val_if_fail (priv->load_state == E_CAL_LOAD_LOADED, FALSE);
 
-	LOCK_CONN ();
-	if (!org_gnome_evolution_dataserver_calendar_Cal_set_mode (priv->proxy, mode, &error)) {
-		UNLOCK_CONN ();
+	if (!e_gdbus_cal_call_set_mode_sync (priv->gdbus_cal, mode, NULL, &error)) {
+		unwrap_gerror (&error);
 		g_printerr ("%s: %s\n", G_STRFUNC, error ? error->message : "Unknown error");
-		g_error_free (error);
+		if (error)
+			g_error_free (error);
 		return FALSE;
 	}
-	UNLOCK_CONN ();
 
 	return TRUE;
 }
@@ -1970,19 +1927,16 @@ e_cal_get_default_object (ECal *ecal, icalcomponent **icalcomp, GError **error)
 	e_return_error_if_fail (icalcomp != NULL, E_CALENDAR_STATUS_INVALID_ARG);
 	e_return_error_if_fail (E_IS_CAL (ecal), E_CALENDAR_STATUS_INVALID_ARG);
 	priv = ecal->priv;
-	e_return_error_if_fail (priv->proxy, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (priv->gdbus_cal, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
 	*icalcomp = NULL;
 
 	if (priv->load_state != E_CAL_LOAD_LOADED) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
 	}
 
-	LOCK_CONN ();
-	if (!org_gnome_evolution_dataserver_calendar_Cal_get_default_object (priv->proxy, &object, error)) {
-		UNLOCK_CONN ();
+	if (!e_gdbus_cal_call_get_default_object_sync (priv->gdbus_cal, &object, NULL, error)) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_DBUS_EXCEPTION, error);
 	}
-	UNLOCK_CONN ();
 
 	if (object) {
 		*icalcomp = icalparser_parse_string (object);
@@ -2024,19 +1978,16 @@ e_cal_get_attachments_for_comp (ECal *ecal, const gchar *uid, const gchar *rid,
 	e_return_error_if_fail (list != NULL, E_CALENDAR_STATUS_INVALID_ARG);
 	e_return_error_if_fail (E_IS_CAL (ecal), E_CALENDAR_STATUS_INVALID_ARG);
 	priv = ecal->priv;
-	e_return_error_if_fail (priv->proxy, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (priv->gdbus_cal, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
 	*list = NULL;
 
 	if (priv->load_state != E_CAL_LOAD_LOADED) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
 	}
 
-	LOCK_CONN ();
-	if (!org_gnome_evolution_dataserver_calendar_Cal_get_attachment_list (priv->proxy, uid, rid ? rid: "", &list_array, error)) {
-		UNLOCK_CONN ();
+	if (!e_gdbus_cal_call_get_attachment_list_sync (priv->gdbus_cal, uid, rid ? rid: "", &list_array, NULL, error)) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_DBUS_EXCEPTION, error);
 	}
-	UNLOCK_CONN ();
 
 	if (list_array) {
 		gchar **string;
@@ -2077,19 +2028,16 @@ e_cal_get_object (ECal *ecal, const gchar *uid, const gchar *rid, icalcomponent
 	e_return_error_if_fail (icalcomp != NULL, E_CALENDAR_STATUS_INVALID_ARG);
 	e_return_error_if_fail (E_IS_CAL (ecal), E_CALENDAR_STATUS_INVALID_ARG);
 	priv = ecal->priv;
-	e_return_error_if_fail (priv->proxy, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (priv->gdbus_cal, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
 	*icalcomp = NULL;
 
 	if (priv->load_state != E_CAL_LOAD_LOADED) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
 	}
 
-	LOCK_CONN ();
-	if (!org_gnome_evolution_dataserver_calendar_Cal_get_object (priv->proxy, uid, rid ? rid : "", &object, error)) {
-		UNLOCK_CONN ();
+	if (!e_gdbus_cal_call_get_object_sync (priv->gdbus_cal, uid, rid ? rid : "", &object, NULL, error)) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_DBUS_EXCEPTION, error);
 	}
-	UNLOCK_CONN ();
 
 	status = E_CALENDAR_STATUS_OK;
 	tmp_icalcomp = icalparser_parse_string (object);
@@ -2157,19 +2105,16 @@ e_cal_get_objects_for_uid (ECal *ecal, const gchar *uid, GList **objects, GError
 	e_return_error_if_fail (objects != NULL, E_CALENDAR_STATUS_INVALID_ARG);
 	e_return_error_if_fail (E_IS_CAL (ecal), E_CALENDAR_STATUS_INVALID_ARG);
 	priv = ecal->priv;
-	e_return_error_if_fail (priv->proxy, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (priv->gdbus_cal, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
 	*objects = NULL;
 
 	if (priv->load_state != E_CAL_LOAD_LOADED) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
 	}
 
-	LOCK_CONN ();
-	if (!org_gnome_evolution_dataserver_calendar_Cal_get_object (priv->proxy, uid, "", &object, error)) {
-		UNLOCK_CONN ();
+	if (!e_gdbus_cal_call_get_object_sync (priv->gdbus_cal, uid, "", &object, NULL, error)) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_DBUS_EXCEPTION, error);
 	}
-	UNLOCK_CONN ();
 
 	status = E_CALENDAR_STATUS_OK;
 	{
@@ -2269,25 +2214,22 @@ gboolean
 e_cal_get_changes (ECal *ecal, const gchar *change_id, GList **changes, GError **error)
 {
 	ECalPrivate *priv;
-	gchar **additions, **modifications, **removals;
+	gchar **additions = NULL, **modifications = NULL, **removals = NULL;
 
 	e_return_error_if_fail (changes != NULL, E_CALENDAR_STATUS_INVALID_ARG);
 	e_return_error_if_fail (change_id != NULL, E_CALENDAR_STATUS_INVALID_ARG);
 	e_return_error_if_fail (E_IS_CAL (ecal), E_CALENDAR_STATUS_INVALID_ARG);
 	priv = ecal->priv;
-	e_return_error_if_fail (priv->proxy, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (priv->gdbus_cal, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
 	*changes = NULL;
 
 	if (priv->load_state != E_CAL_LOAD_LOADED) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
 	}
 
-	LOCK_CONN ();
-	if (!org_gnome_evolution_dataserver_calendar_Cal_get_changes (priv->proxy, change_id, &additions, &modifications, &removals, error)) {
-		UNLOCK_CONN ();
+	if (!e_gdbus_cal_call_get_changes_sync (priv->gdbus_cal, change_id, &additions, &modifications, &removals, NULL, error)) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_DBUS_EXCEPTION, error);
 	}
-	UNLOCK_CONN ();
 
 	/* TODO: Be more elegant and split this into a function */
 	/* Mostly copied from the old e-cal-listener.c */
@@ -2329,9 +2271,17 @@ e_cal_get_changes (ECal *ecal, const gchar *change_id, GList **changes, GError *
 				*changes = g_list_append (*changes, change);
 			}
 		}
-	}
-	else
+
+		g_strfreev (additions);
+		g_strfreev (modifications);
+		g_strfreev (removals);
+	} else {
+		g_strfreev (additions);
+		g_strfreev (modifications);
+		g_strfreev (removals);
+
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_OTHER_ERROR, error);
+	}
 
 	E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_OK, error);
 }
@@ -2385,19 +2335,16 @@ e_cal_get_object_list (ECal *ecal, const gchar *query, GList **objects, GError *
 	e_return_error_if_fail (query, E_CALENDAR_STATUS_INVALID_ARG);
 	e_return_error_if_fail (E_IS_CAL (ecal), E_CALENDAR_STATUS_INVALID_ARG);
 	priv = ecal->priv;
-	e_return_error_if_fail (priv->proxy, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (priv->gdbus_cal, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
 	*objects = NULL;
 
 	if (priv->load_state != E_CAL_LOAD_LOADED) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
 	}
 
-	LOCK_CONN ();
-	if (!org_gnome_evolution_dataserver_calendar_Cal_get_object_list (priv->proxy, query, &object_array, error)) {
-		UNLOCK_CONN ();
+	if (!e_gdbus_cal_call_get_object_list_sync (priv->gdbus_cal, query, &object_array, NULL, error)) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_DBUS_EXCEPTION, error);
 	}
-	UNLOCK_CONN ();
 
 	if (object_array) {
 		icalcomponent *comp;
@@ -2407,6 +2354,9 @@ e_cal_get_object_list (ECal *ecal, const gchar *query, GList **objects, GError *
 			if (!comp) continue;
 			*objects = g_list_prepend (*objects, comp);
 		}
+
+		g_strfreev (object_array);
+
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_OK, error);
 	}
 	else
@@ -2532,7 +2482,7 @@ e_cal_get_free_busy (ECal *ecal, GList *users, time_t start, time_t end,
 	e_return_error_if_fail (freebusy != NULL, E_CALENDAR_STATUS_INVALID_ARG);
 	e_return_error_if_fail (E_IS_CAL (ecal), E_CALENDAR_STATUS_INVALID_ARG);
 	priv = ecal->priv;
-	e_return_error_if_fail (priv->proxy, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (priv->gdbus_cal, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
 	*freebusy = NULL;
 
 	if (priv->load_state != E_CAL_LOAD_LOADED) {
@@ -2543,17 +2493,14 @@ e_cal_get_free_busy (ECal *ecal, GList *users, time_t start, time_t end,
 	for (l = users, i = 0; l; l = l->next, i++)
 		users_list[i] = g_strdup (l->data);
 
-	LOCK_CONN ();
-	if (!org_gnome_evolution_dataserver_calendar_Cal_get_free_busy (priv->proxy, (const gchar **)users_list, start, end, &freebusy_array, error)) {
-		UNLOCK_CONN ();
+	if (!e_gdbus_cal_call_get_free_busy_sync (priv->gdbus_cal, (const gchar * const *) users_list, start, end, &freebusy_array, NULL, error)) {
 		g_strfreev (users_list);
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_DBUS_EXCEPTION, error);
 	}
-	UNLOCK_CONN ();
 	g_strfreev (users_list);
 
 	if (freebusy_array) {
-		*freebusy = build_free_busy_list ((const gchar **)freebusy_array);
+		*freebusy = build_free_busy_list ((const gchar **) freebusy_array);
 		g_strfreev (freebusy_array);
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_OK, error);
 	} else
@@ -2779,6 +2726,7 @@ try_again:
 				goto try_again;
 			}
 
+			unwrap_gerror (&error);
 			g_message ("Failed to get recurrence objects for uid %s \n", error ? error->message : "Unknown error");
 			g_clear_error (&error);
 			return;
@@ -3265,13 +3213,13 @@ e_cal_discard_alarm (ECal *ecal, ECalComponent *comp, const gchar *auid, GError
 	ECalPrivate *priv;
 	const gchar *uid;
 
-	g_return_val_if_fail (ecal != NULL, FALSE);
-	g_return_val_if_fail (E_IS_CAL (ecal), FALSE);
-	g_return_val_if_fail (comp != NULL, FALSE);
-	g_return_val_if_fail (E_IS_CAL_COMPONENT (comp), FALSE);
-	g_return_val_if_fail (auid != NULL, FALSE);
+	e_return_error_if_fail (ecal != NULL, E_CALENDAR_STATUS_INVALID_ARG);
+	e_return_error_if_fail (E_IS_CAL (ecal), E_CALENDAR_STATUS_INVALID_ARG);
+	e_return_error_if_fail (comp != NULL, E_CALENDAR_STATUS_INVALID_ARG);
+	e_return_error_if_fail (E_IS_CAL_COMPONENT (comp), E_CALENDAR_STATUS_INVALID_ARG);
+	e_return_error_if_fail (auid != NULL, E_CALENDAR_STATUS_INVALID_ARG);
 	priv = ecal->priv;
-	e_return_error_if_fail (priv->proxy, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (priv->gdbus_cal, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
 
 	if (priv->load_state != E_CAL_LOAD_LOADED) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
@@ -3279,12 +3227,9 @@ e_cal_discard_alarm (ECal *ecal, ECalComponent *comp, const gchar *auid, GError
 
 	e_cal_component_get_uid (comp, &uid);
 
-	LOCK_CONN ();
-	if (!org_gnome_evolution_dataserver_calendar_Cal_discard_alarm (priv->proxy, uid, auid, error)) {
-		UNLOCK_CONN ();
+	if (!e_gdbus_cal_call_discard_alarm_sync (priv->gdbus_cal, uid ? uid : "", auid, NULL, error)) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_DBUS_EXCEPTION, error);
 	}
-	UNLOCK_CONN ();
 
 	E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_OK, error);
 }
@@ -3478,20 +3423,17 @@ e_cal_create_object (ECal *ecal, icalcomponent *icalcomp, gchar **uid, GError **
 	e_return_error_if_fail (icalcomp != NULL, E_CALENDAR_STATUS_INVALID_ARG);
 	e_return_error_if_fail (icalcomponent_is_valid (icalcomp), E_CALENDAR_STATUS_INVALID_ARG);
 	priv = ecal->priv;
-	e_return_error_if_fail (priv->proxy, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (priv->gdbus_cal, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
 
 	if (priv->load_state != E_CAL_LOAD_LOADED) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
 	}
 
 	obj = icalcomponent_as_ical_string_r (icalcomp);
-	LOCK_CONN ();
-	if (!org_gnome_evolution_dataserver_calendar_Cal_create_object (priv->proxy, obj, &muid, error)) {
-		UNLOCK_CONN ();
+	if (!e_gdbus_cal_call_create_object_sync (priv->gdbus_cal, obj, &muid, NULL, error)) {
 		g_free (obj);
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_DBUS_EXCEPTION, error);
 	}
-	UNLOCK_CONN ();
 
 	g_free (obj);
 
@@ -3537,20 +3479,17 @@ e_cal_modify_object (ECal *ecal, icalcomponent *icalcomp, CalObjModType mod, GEr
 	e_return_error_if_fail (icalcomponent_is_valid (icalcomp), E_CALENDAR_STATUS_INVALID_ARG);
 	e_return_error_if_fail (mod & CALOBJ_MOD_ALL, E_CALENDAR_STATUS_INVALID_ARG);
 	priv = ecal->priv;
-	e_return_error_if_fail (priv->proxy, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (priv->gdbus_cal, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
 
 	if (priv->load_state != E_CAL_LOAD_LOADED) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
 	}
 
 	obj = icalcomponent_as_ical_string_r (icalcomp);
-	LOCK_CONN ();
-	if (!org_gnome_evolution_dataserver_calendar_Cal_modify_object (priv->proxy, obj, mod, error)) {
-		UNLOCK_CONN ();
+	if (!e_gdbus_cal_call_modify_object_sync (priv->gdbus_cal, obj, mod, NULL, error)) {
 		g_free (obj);
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_DBUS_EXCEPTION, error);
 	}
-	UNLOCK_CONN ();
 
 	g_free (obj);
 	E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_OK, error);
@@ -3585,18 +3524,15 @@ e_cal_remove_object_with_mod (ECal *ecal, const gchar *uid,
 	e_return_error_if_fail (uid, E_CALENDAR_STATUS_INVALID_ARG);
 	e_return_error_if_fail (mod & CALOBJ_MOD_ALL, E_CALENDAR_STATUS_INVALID_ARG);
 	priv = ecal->priv;
-	e_return_error_if_fail (priv->proxy, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (priv->gdbus_cal, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
 
 	if (priv->load_state != E_CAL_LOAD_LOADED) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
 	}
 
-	LOCK_CONN ();
-	if (!org_gnome_evolution_dataserver_calendar_Cal_remove_object (priv->proxy, uid, rid ? rid : "", mod, error)) {
-		UNLOCK_CONN ();
+	if (!e_gdbus_cal_call_remove_object_sync (priv->gdbus_cal, uid, rid ? rid : "", mod, NULL, error)) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_DBUS_EXCEPTION, error);
 	}
-	UNLOCK_CONN ();
 
 	E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_OK, error);
 }
@@ -3643,18 +3579,15 @@ e_cal_receive_objects (ECal *ecal, icalcomponent *icalcomp, GError **error)
 	e_return_error_if_fail (icalcomp, E_CALENDAR_STATUS_INVALID_ARG);
 	e_return_error_if_fail (icalcomponent_is_valid (icalcomp), E_CALENDAR_STATUS_INVALID_ARG);
 	priv = ecal->priv;
-	e_return_error_if_fail (priv->proxy, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (priv->gdbus_cal, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
 
 	if (priv->load_state != E_CAL_LOAD_LOADED) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
 	}
 
-	LOCK_CONN ();
-	if (!org_gnome_evolution_dataserver_calendar_Cal_receive_objects (priv->proxy, icalcomponent_as_ical_string (icalcomp), error)) {
-		UNLOCK_CONN ();
+	if (!e_gdbus_cal_call_receive_objects_sync (priv->gdbus_cal, icalcomponent_as_ical_string (icalcomp), NULL, error)) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_DBUS_EXCEPTION, error);
 	}
-	UNLOCK_CONN ();
 
 	E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_OK, error);
 }
@@ -3687,7 +3620,7 @@ e_cal_send_objects (ECal *ecal, icalcomponent *icalcomp, GList **users, icalcomp
 	e_return_error_if_fail (icalcomponent_is_valid (icalcomp), E_CALENDAR_STATUS_INVALID_ARG);
 	e_return_error_if_fail (E_IS_CAL (ecal), E_CALENDAR_STATUS_INVALID_ARG);
 	priv = ecal->priv;
-	e_return_error_if_fail (priv->proxy, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (priv->gdbus_cal, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
 	*users = NULL;
 	*modified_icalcomp = NULL;
 
@@ -3695,12 +3628,9 @@ e_cal_send_objects (ECal *ecal, icalcomponent *icalcomp, GList **users, icalcomp
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
 	}
 
-	LOCK_CONN ();
-	if (!org_gnome_evolution_dataserver_calendar_Cal_send_objects (priv->proxy, icalcomponent_as_ical_string (icalcomp), &users_array, &object, error)) {
-		UNLOCK_CONN ();
+	if (!e_gdbus_cal_call_send_objects_sync (priv->gdbus_cal, icalcomponent_as_ical_string (icalcomp), &users_array, &object, NULL, error)) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_DBUS_EXCEPTION, error);
 	}
-	UNLOCK_CONN ();
 
 	status = E_CALENDAR_STATUS_OK;
 	if (users_array) {
@@ -3741,7 +3671,7 @@ e_cal_get_timezone (ECal *ecal, const gchar *tzid, icaltimezone **zone, GError *
 	e_return_error_if_fail (zone, E_CALENDAR_STATUS_INVALID_ARG);
 	e_return_error_if_fail (E_IS_CAL (ecal), E_CALENDAR_STATUS_INVALID_ARG);
 	priv = ecal->priv;
-	e_return_error_if_fail (priv->proxy, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (priv->gdbus_cal, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
 	*zone = NULL;
 
 	if (priv->load_state != E_CAL_LOAD_LOADED) {
@@ -3776,12 +3706,9 @@ e_cal_get_timezone (ECal *ecal, const gchar *tzid, icaltimezone **zone, GError *
 	systzid = e_cal_match_tzid (tzid);
 	if (!systzid) {
 		/* call the backend */
-		LOCK_CONN ();
-		if (!org_gnome_evolution_dataserver_calendar_Cal_get_timezone (priv->proxy, tzid, &object, error)) {
-			UNLOCK_CONN ();
+		if (!e_gdbus_cal_call_get_timezone_sync (priv->gdbus_cal, tzid, &object, NULL, error)) {
 			E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_DBUS_EXCEPTION, error);
 		}
-		UNLOCK_CONN ();
 
 		icalcomp = icalparser_parse_string (object);
 		if (!icalcomp)
@@ -3853,7 +3780,7 @@ e_cal_add_timezone (ECal *ecal, icaltimezone *izone, GError **error)
 	e_return_error_if_fail (E_IS_CAL (ecal), E_CALENDAR_STATUS_INVALID_ARG);
 	e_return_error_if_fail (izone, E_CALENDAR_STATUS_INVALID_ARG);
 	priv = ecal->priv;
-	e_return_error_if_fail (priv->proxy, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (priv->gdbus_cal, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
 
 	if (priv->load_state != E_CAL_LOAD_LOADED) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
@@ -3874,13 +3801,10 @@ e_cal_add_timezone (ECal *ecal, icaltimezone *izone, GError **error)
 	tzobj = icalcomponent_as_ical_string_r (icalcomp);
 
 	/* call the backend */
-	LOCK_CONN ();
-	if (!org_gnome_evolution_dataserver_calendar_Cal_add_timezone (priv->proxy, tzobj, error)) {
-		UNLOCK_CONN ();
+	if (!e_gdbus_cal_call_add_timezone_sync (priv->gdbus_cal, tzobj, NULL, error)) {
 		g_free (tzobj);
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_DBUS_EXCEPTION, error);
 	}
-	UNLOCK_CONN ();
 
 	g_free (tzobj);
 	E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_OK, error);
@@ -3904,43 +3828,40 @@ e_cal_get_query (ECal *ecal, const gchar *sexp, ECalView **query, GError **error
 	ECalPrivate *priv;
 	ECalendarStatus status;
 	gchar *query_path;
-	DBusGProxy *query_proxy;
+	EGdbusCalView *gdbus_calview;
 
 	e_return_error_if_fail (sexp, E_CALENDAR_STATUS_INVALID_ARG);
 	e_return_error_if_fail (query, E_CALENDAR_STATUS_INVALID_ARG);
 	e_return_error_if_fail (E_IS_CAL (ecal), E_CALENDAR_STATUS_INVALID_ARG);
 	priv = ecal->priv;
-	e_return_error_if_fail (priv->proxy, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (priv->gdbus_cal, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
 	*query = NULL;
 
 	if (priv->load_state != E_CAL_LOAD_LOADED) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
 	}
 
-	LOCK_CONN ();
-	if (!org_gnome_evolution_dataserver_calendar_Cal_get_query (priv->proxy, sexp, &query_path, error)) {
-		UNLOCK_CONN ();
+	if (!e_gdbus_cal_call_get_query_sync (priv->gdbus_cal, sexp, &query_path, NULL, error)) {
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_DBUS_EXCEPTION, error);
 	}
-	UNLOCK_CONN ();
 
 	status = E_CALENDAR_STATUS_OK;
 
-	LOCK_CONN ();
-	query_proxy = dbus_g_proxy_new_for_name_owner (connection,
-                                                "org.gnome.evolution.dataserver.Calendar", query_path,
-                                                "org.gnome.evolution.dataserver.calendar.CalView", error);
-	UNLOCK_CONN ();
+	gdbus_calview = e_gdbus_cal_view_proxy_new_sync (g_dbus_proxy_get_connection (G_DBUS_PROXY (cal_factory_proxy)),
+							G_DBUS_PROXY_FLAGS_NONE,
+							"org.gnome.evolution.dataserver.Calendar",
+							query_path,
+							NULL,
+							error);
 
-	if (!query_proxy) {
+	if (!gdbus_calview) {
 		*query = NULL;
 		status = E_CALENDAR_STATUS_OTHER_ERROR;
 	} else {
-		*query = _e_cal_view_new (ecal, query_proxy, &connection_lock);
+		*query = _e_cal_view_new (ecal, gdbus_calview);
+		g_object_unref (gdbus_calview);
 	}
 
-	g_object_unref (query_proxy);
-
 	E_CALENDAR_CHECK_STATUS (status, error);
 }
 
@@ -3965,7 +3886,7 @@ e_cal_set_default_timezone (ECal *ecal, icaltimezone *zone, GError **error)
 	e_return_error_if_fail (E_IS_CAL (ecal), E_CALENDAR_STATUS_INVALID_ARG);
 	e_return_error_if_fail (zone, E_CALENDAR_STATUS_INVALID_ARG);
 	priv = ecal->priv;
-	e_return_error_if_fail (priv->proxy, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
+	e_return_error_if_fail (priv->gdbus_cal, E_CALENDAR_STATUS_REPOSITORY_OFFLINE);
 
 	/* If the same timezone is already set, we don't have to do anything. */
 	if (priv->default_zone == zone)
@@ -3981,13 +3902,10 @@ e_cal_set_default_timezone (ECal *ecal, icaltimezone *zone, GError **error)
 	tzobj = icalcomponent_as_ical_string_r (icalcomp);
 
 	/* call the backend */
-	LOCK_CONN ();
-	if (!org_gnome_evolution_dataserver_calendar_Cal_set_default_timezone (priv->proxy, tzobj, error)) {
-		UNLOCK_CONN ();
+	if (!e_gdbus_cal_call_set_default_timezone_sync (priv->gdbus_cal, tzobj, NULL, error)) {
 		g_free (tzobj);
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_DBUS_EXCEPTION, error);
 	}
-	UNLOCK_CONN ();
 
 	g_free (tzobj);
 	priv->default_zone = zone;
diff --git a/calendar/libedata-cal/Makefile.am b/calendar/libedata-cal/Makefile.am
index ef5f904..352abb8 100644
--- a/calendar/libedata-cal/Makefile.am
+++ b/calendar/libedata-cal/Makefile.am
@@ -1,10 +1,3 @@
-MARSHAL_GENERATED = e-data-cal-marshal.c e-data-cal-marshal.h
- EVO_MARSHAL_RULE@
-
-DBUS_GENERATED_H = e-data-cal-glue.h e-data-cal-factory-glue.h e-data-cal-view-glue.h
-%-glue.h: %.xml
-	@DBUS_BINDING_TOOL@ --mode=glib-server --output=$@ --prefix=$(subst -,_,$*) $^
-
 include $(top_srcdir)/glib-gen.mak
 glib_enum_headers=e-data-cal-types.h
 glib_enum_define=E_DATA_CAL
@@ -15,21 +8,20 @@ ENUM_GENERATED = e-data-cal-enumtypes.h e-data-cal-enumtypes.c
 # The libraray
 lib_LTLIBRARIES = libedata-cal-1.2.la
 
-libedata_cal_1_2_la_CPPFLAGS = \
-	$(AM_CPPFLAGS)					\
-	-DG_LOG_DOMAIN=\"libedata-cal\"			\
-	-DBASE_VERSION=\""$(BASE_VERSION)"\"		\
-	-I$(top_srcdir)					\
-	-I$(top_builddir)				\
-	-I$(top_srcdir)/calendar			\
-	-I$(top_builddir)/calendar			\
-	$(LIBICAL_CFLAGS)				\
+libedata_cal_1_2_la_CPPFLAGS = 			\
+	$(AM_CPPFLAGS)				\
+	-DG_LOG_DOMAIN=\"libedata-cal\"		\
+	-DBASE_VERSION=\""$(BASE_VERSION)"\"	\
+	-I$(top_srcdir)				\
+	-I$(top_srcdir)/calendar		\
+	-I$(top_srcdir)/calendar/libegdbus	\
+	-I$(top_builddir)			\
+	-I$(top_builddir)/calendar		\
+	$(LIBICAL_CFLAGS)			\
 	$(EVOLUTION_CALENDAR_CFLAGS)
 
 libedata_cal_1_2_la_SOURCES =		\
-	$(MARSHAL_GENERATED)		\
 	$(ENUM_GENERATED)		\
-	$(DBUS_GENERATED_H)		\
 	e-cal-backend.c			\
 	e-cal-backend-cache.c		\
 	e-cal-backend-factory.c		\
@@ -42,6 +34,7 @@ libedata_cal_1_2_la_SOURCES =		\
 	e-data-cal-view.c
 
 libedata_cal_1_2_la_LIBADD =					\
+	$(top_builddir)/calendar/libegdbus/libegdbus-cal.la	\
 	$(top_builddir)/calendar/libecal/libecal-1.2.la		\
 	$(top_builddir)/libedataserver/libedataserver-1.2.la 	\
 	$(top_builddir)/libebackend/libebackend-1.2.la 		\
@@ -79,12 +72,11 @@ servicedir = $(datadir)/dbus-1/services
 service_DATA = $(service_in_files:.service.in=.service)
 @EVO_SUBST_SERVICE_RULE@
 
-BUILT_SOURCES = $(DBUS_GENERATED_H) $(MARSHAL_GENERATED) $(ENUM_GENERATED)
+BUILT_SOURCES = $(ENUM_GENERATED)
 CLEANFILES = $(BUILT_SOURCES) $(service_DATA)
 DISTCLEANFILES = $(pkgconfig_DATA) $(service_DATA)
 
 EXTRA_DIST = 						\
-	e-data-cal-marshal.list				\
 	e-data-cal-factory.xml				\
 	e-data-cal-view.xml				\
 	e-data-cal.xml					\
@@ -95,11 +87,11 @@ EXTRA_DIST = 						\
 factorydir = $(libexecdir)
 factory_PROGRAMS = e-calendar-factory
 
-e_calendar_factory_SOURCES = \
-	e-data-cal-factory.c \
-	e-data-cal-factory.h \
-	e-data-cal-migrate.c \
-	e-cal-backend-loader-factory.c \
+e_calendar_factory_SOURCES =		\
+	e-data-cal-factory.c		\
+	e-data-cal-factory.h		\
+	e-data-cal-migrate.c		\
+	e-cal-backend-loader-factory.c	\
 	e-cal-backend-loader-factory.h
 
 e_calendar_factory_CPPFLAGS = \
@@ -108,15 +100,17 @@ e_calendar_factory_CPPFLAGS = \
 	-DE_PRGNAME=\"e-calendar-factory\"		\
 	-DLOCALEDIR=\"$(localedir)\"			\
 	-I$(top_srcdir)					\
-	-I$(top_builddir)				\
 	-I$(top_srcdir)/calendar			\
+	-I$(top_srcdir)/calendar/libegdbus		\
+	-I$(top_builddir)				\
 	-I$(top_builddir)/calendar			\
 	$(LIBICAL_CFLAGS)				\
 	$(EVOLUTION_CALENDAR_CFLAGS)
 
-e_calendar_factory_LDADD =					\
-	$(builddir)/libedata-cal-1.2.la				\
-	$(top_builddir)/libedataserver/libedataserver-1.2.la 	\
+e_calendar_factory_LDADD =						\
+	$(top_builddir)/calendar/libegdbus/libegdbus-cal.la		\
+	$(top_builddir)/calendar/libedata-cal/libedata-cal-1.2.la	\
+	$(top_builddir)/libedataserver/libedataserver-1.2.la 		\
 	$(top_builddir)/libebackend/libebackend-1.2.la
 
 -include $(top_srcdir)/git.mk
diff --git a/calendar/libedata-cal/e-data-cal-factory.c b/calendar/libedata-cal/e-data-cal-factory.c
index cd3e20a..11267b2 100644
--- a/calendar/libedata-cal/e-data-cal-factory.c
+++ b/calendar/libedata-cal/e-data-cal-factory.c
@@ -30,9 +30,6 @@
 #include <unistd.h>
 #include <glib/gi18n.h>
 #include <glib-object.h>
-#include <dbus/dbus-glib.h>
-#include <dbus/dbus-glib-lowlevel.h>
-#include <dbus/dbus-glib-bindings.h>
 
 #include "libedataserver/e-url.h"
 #include "libedataserver/e-source.h"
@@ -46,14 +43,11 @@
 #include "e-data-cal-factory.h"
 #include "e-cal-backend-loader-factory.h"
 
-#define d(x)
+#include "e-gdbus-egdbuscalfactory.h"
 
-static void impl_CalFactory_getCal (EDataCalFactory *factory, const gchar *IN_uri, EDataCalObjType type, DBusGMethodInvocation *context);
-#include "e-data-cal-factory-glue.h"
+#define d(x)
 
 static GMainLoop *loop;
-static EDataCalFactory *factory;
-extern DBusGConnection *connection;
 
 /* Convenience macro to test and set a GError/return on failure */
 #define g_set_error_val_if_fail(test, returnval, error, domain, code) G_STMT_START{ \
@@ -69,6 +63,8 @@ G_DEFINE_TYPE(EDataCalFactory, e_data_cal_factory, G_TYPE_OBJECT);
 #define E_DATA_CAL_FACTORY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), E_TYPE_DATA_CAL_FACTORY, EDataCalFactoryPrivate))
 
 struct _EDataCalFactoryPrivate {
+	EGdbusCalFactory *gdbus_object;
+
 	/* Hash table from URI method strings to GType * for backend class types */
 	GHashTable *methods;
 
@@ -237,16 +233,22 @@ construct_cal_factory_path (void)
 		getpid (), g_atomic_int_exchange_and_add (&counter, 1));
 }
 
+static gboolean
+remove_dead_calendar_cb (gpointer path, gpointer calendar, gpointer dead_calendar)
+{
+	return calendar == dead_calendar;
+}
+
 static void
-my_remove (gchar *key, GObject *dead)
+calendar_freed_cb (EDataCalFactory *factory, GObject *dead)
 {
 	EDataCalFactoryPrivate *priv = factory->priv;
 	GHashTableIter iter;
 	gpointer hkey, hvalue;
 
-	d (g_debug ("%s (%p) is dead", key, dead));
+	d (g_debug ("in factory %p (%p) is dead", factory, dead));
 
-	g_hash_table_remove (priv->calendars, key);
+	g_hash_table_foreach_remove (priv->calendars, remove_dead_calendar_cb, dead);
 
 	g_hash_table_iter_init (&iter, priv->connections);
 	while (g_hash_table_iter_next (&iter, &hkey, &hvalue)) {
@@ -265,8 +267,6 @@ my_remove (gchar *key, GObject *dead)
 		}
 	}
 
-	g_free (key);
-
 	/* If there are no open calendars, start a timer to quit. */
 	if (priv->exit_timeout == 0 && g_hash_table_size (priv->calendars) == 0)
 		priv->exit_timeout = g_timeout_add_seconds (
@@ -304,11 +304,8 @@ find_backend_cb (gpointer key, gpointer value, gpointer data)
 	}
 }
 
-static void
-impl_CalFactory_getCal (EDataCalFactory *factory,
-                        const gchar *source_xml,
-                        EDataCalObjType type,
-                        DBusGMethodInvocation *context)
+static gboolean
+impl_CalFactory_getCal (EGdbusCalFactory *object, GDBusMethodInvocation *invocation, const gchar *source_xml, guint type, EDataCalFactory *factory)
 {
 	EDataCal *calendar;
 	EDataCalFactoryPrivate *priv = factory->priv;
@@ -318,7 +315,8 @@ impl_CalFactory_getCal (EDataCalFactory *factory,
 	gchar *str_uri;
 	EUri *uri;
 	gchar *uid_type_string;
-	gchar *path = NULL, *sender;
+	gchar *path = NULL;
+	const gchar *sender;
 	GList *list;
 	GError *error = NULL;
 
@@ -330,11 +328,11 @@ impl_CalFactory_getCal (EDataCalFactory *factory,
 
 	source = e_source_new_from_standalone_xml (source_xml);
 	if (!source) {
-		dbus_g_method_return_error (
-			context, g_error_new (
-			E_DATA_CAL_ERROR, NoSuchCal,
-			_("Invalid source")));
-		return;
+		error = g_error_new (E_DATA_CAL_ERROR, NoSuchCal, _("Invalid source"));
+		g_dbus_method_invocation_return_gerror (invocation, error);
+		g_error_free (error);
+
+		return TRUE;
 	}
 
 	/* Get the URI so we can extract the protocol */
@@ -342,21 +340,21 @@ impl_CalFactory_getCal (EDataCalFactory *factory,
 	if (!str_uri) {
 		g_object_unref (source);
 
-		dbus_g_method_return_error (
-			context, g_error_new (
-			E_DATA_CAL_ERROR, NoSuchCal,
-			_("Invalid source")));
-		return;
+		error = g_error_new (E_DATA_CAL_ERROR, NoSuchCal, _("Invalid source"));
+		g_dbus_method_invocation_return_gerror (invocation, error);
+		g_error_free (error);
+
+		return TRUE;
 	}
 
 	/* Parse the uri */
 	uri = e_uri_new (str_uri);
 	if (!uri) {
-		dbus_g_method_return_error (
-			context, g_error_new (
-			E_DATA_CAL_ERROR, NoSuchCal,
-			_("Invalid URI")));
-		return;
+		error = g_error_new (E_DATA_CAL_ERROR, NoSuchCal, _("Invalid URI"));
+		g_dbus_method_invocation_return_gerror (invocation, error);
+		g_error_free (error);
+
+		return TRUE;
 	}
 
 	uid_type_string = g_strdup_printf (
@@ -454,17 +452,16 @@ impl_CalFactory_getCal (EDataCalFactory *factory,
 	e_cal_backend_add_client (backend, calendar);
 
 	path = construct_cal_factory_path ();
-	dbus_g_connection_register_g_object (
-		connection, path, G_OBJECT (calendar));
+	e_data_cal_register_gdbus_object (calendar, g_dbus_method_invocation_get_connection (invocation), path, &error);
 	g_object_weak_ref (
-		G_OBJECT (calendar), (GWeakNotify) my_remove, path);
+		G_OBJECT (calendar), (GWeakNotify) calendar_freed_cb, factory);
 
 	g_hash_table_insert (priv->calendars, g_strdup (path), calendar);
 
-	sender = dbus_g_method_get_sender (context);
+	sender = g_dbus_method_invocation_get_sender (invocation);
 	list = g_hash_table_lookup (priv->connections, sender);
 	list = g_list_prepend (list, calendar);
-	g_hash_table_insert (priv->connections, sender, list);
+	g_hash_table_insert (priv->connections, g_strdup (sender), list);
 
 cleanup:
 	/* The reason why the lock is held for such a long time is that there is
@@ -479,10 +476,15 @@ cleanup2:
 	g_free (uid_type_string);
 	g_object_unref (source);
 
-	if (error)
-		dbus_g_method_return_error (context, error);
-	else
-		dbus_g_method_return (context, path);
+	if (error) {
+		g_dbus_method_invocation_return_gerror (invocation, error);
+		g_error_free (error);
+	} else
+		e_gdbus_cal_factory_complete_get_cal (object, invocation, path);
+
+	g_free (path);
+
+	return TRUE;
 }
 
 static void
@@ -501,54 +503,15 @@ remove_data_cal_cb (gpointer data_cl,
 	g_object_unref (data_cal);
 }
 
-static void
-name_owner_changed (DBusGProxy *proxy,
-                    const gchar *name,
-                    const gchar *prev_owner,
-                    const gchar *new_owner,
-                    EDataCalFactory *factory)
-{
-	GList *list = NULL;
-	gchar *key;
-
-	if (strcmp (new_owner, "") != 0)
-		return;
-
-	if (strcmp (name, prev_owner) != 0)
-		return;
-
-	while (g_hash_table_lookup_extended (
-		factory->priv->connections, prev_owner,
-		(gpointer) &key, (gpointer) &list)) {
-
-		GList *copy = g_list_copy (list);
-
-		/* this should trigger the book's weak ref notify
-		 * function, which will remove it from the list before
-		 * it's freed, and will remove the connection from
-		 * priv->connections once they're all gone */
-		g_list_foreach (copy, remove_data_cal_cb, NULL);
-		g_list_free (copy);
-	}
-}
-
-/* Class initialization function for the calendar factory */
-static void
-e_data_cal_factory_class_init (EDataCalFactoryClass *class)
-{
-	g_type_class_add_private (class, sizeof (EDataCalFactoryPrivate));
-
-	dbus_g_object_type_install_info (
-		G_TYPE_FROM_CLASS (class),
-		&dbus_glib_e_data_cal_factory_object_info);
-}
-
 /* Instance init */
 static void
 e_data_cal_factory_init (EDataCalFactory *factory)
 {
 	factory->priv = E_DATA_CAL_FACTORY_GET_PRIVATE (factory);
 
+	factory->priv->gdbus_object = e_gdbus_cal_factory_stub_new ();
+	g_signal_connect (factory->priv->gdbus_object, "handle-get-cal", G_CALLBACK (impl_CalFactory_getCal), factory);
+
 	factory->priv->methods = g_hash_table_new_full (
 		g_str_hash, g_str_equal,
 		(GDestroyNotify) g_free,
@@ -576,6 +539,49 @@ e_data_cal_factory_init (EDataCalFactory *factory)
 }
 
 static void
+e_data_cal_factory_finalize (GObject *object)
+{
+	EDataCalFactory *factory = E_DATA_CAL_FACTORY (object);
+
+	g_return_if_fail (factory != NULL);
+
+	g_object_unref (factory->priv->gdbus_object);
+
+	g_hash_table_destroy (factory->priv->methods);
+	g_hash_table_destroy (factory->priv->backends);
+	g_hash_table_destroy (factory->priv->calendars);
+	g_hash_table_destroy (factory->priv->connections);
+
+	g_mutex_free (factory->priv->backends_mutex);
+
+	if (G_OBJECT_CLASS (e_data_cal_factory_parent_class)->finalize)
+		G_OBJECT_CLASS (e_data_cal_factory_parent_class)->finalize (object);
+}
+
+/* Class initialization function for the calendar factory */
+static void
+e_data_cal_factory_class_init (EDataCalFactoryClass *klass)
+{
+	GObjectClass *object_class;
+
+	g_type_class_add_private (klass, sizeof (EDataCalFactoryPrivate));
+
+	object_class = G_OBJECT_CLASS (klass);
+	object_class->finalize = e_data_cal_factory_finalize;
+}
+
+static guint
+e_data_cal_factory_register_gdbus_object (EDataCalFactory *factory, GDBusConnection *connection, const gchar *object_path, GError **error)
+{
+	g_return_val_if_fail (factory != NULL, 0);
+	g_return_val_if_fail (E_IS_DATA_CAL_FACTORY (factory), 0);
+	g_return_val_if_fail (connection != NULL, 0);
+	g_return_val_if_fail (object_path != NULL, 0);
+
+	return e_gdbus_cal_factory_register_object (factory->priv->gdbus_object, connection, object_path, error);
+}
+
+static void
 set_backend_online_status (gpointer key, gpointer value, gpointer data)
 {
 	ECalBackend *backend = E_CAL_BACKEND (value);
@@ -789,13 +795,64 @@ offline_state_changed_cb (EOfflineListener *eol,
 #define E_DATA_CAL_FACTORY_SERVICE_NAME \
 	"org.gnome.evolution.dataserver.Calendar"
 
+static void
+on_bus_acquired (GDBusConnection *connection,
+                 const gchar     *name,
+                 gpointer         user_data)
+{
+	EDataCalFactory *factory = user_data;
+	guint registration_id;
+	GError *error = NULL;
+
+	registration_id = e_data_cal_factory_register_gdbus_object (
+		factory,
+		connection,
+		"/org/gnome/evolution/dataserver/calendar/CalFactory",
+		&error);
+
+	if (error)
+		die ("Failed to register a CalFactory object", error);
+
+	g_assert (registration_id > 0);
+}
+
+static void
+on_name_acquired (GDBusConnection *connection,
+                  const gchar     *name,
+                  gpointer         user_data)
+{
+}
+
+static void
+on_name_lost (GDBusConnection *connection,
+              const gchar     *name,
+              gpointer         user_data)
+{
+	GList *list = NULL;
+	gchar *key;
+	EDataCalFactory *factory = user_data;
+
+	while (g_hash_table_lookup_extended (
+		factory->priv->connections, name,
+		(gpointer) &key, (gpointer) &list)) {
+
+		GList *copy = g_list_copy (list);
+
+		/* this should trigger the book's weak ref notify
+		 * function, which will remove it from the list before
+		 * it's freed, and will remove the connection from
+		 * priv->connections once they're all gone */
+		g_list_foreach (copy, remove_data_cal_cb, NULL);
+		g_list_free (copy);
+	}
+}
+
 gint
 main (gint argc, gchar **argv)
 {
-	GError *error = NULL;
-	DBusGProxy *bus_proxy;
-	guint32 request_name_ret;
 	EOfflineListener *eol;
+	EDataCalFactory *factory;
+	guint owner_id;
 
 	setlocale (LC_ALL, "");
 	bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
@@ -804,42 +861,10 @@ main (gint argc, gchar **argv)
 	g_type_init ();
 	g_set_prgname (E_PRGNAME);
 	if (!g_thread_supported ()) g_thread_init (NULL);
-	dbus_g_thread_init ();
-
-	loop = g_main_loop_new (NULL, FALSE);
-
-	/* Obtain a connection to the session bus */
-	connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
-	if (connection == NULL)
-		die ("Failed to open connection to bus", error);
-
-	bus_proxy = dbus_g_proxy_new_for_name (connection,
-					       DBUS_SERVICE_DBUS,
-					       DBUS_PATH_DBUS,
-					       DBUS_INTERFACE_DBUS);
 
 	factory = g_object_new (E_TYPE_DATA_CAL_FACTORY, NULL);
-	dbus_g_connection_register_g_object (
-		connection,
-		"/org/gnome/evolution/dataserver/calendar/CalFactory",
-		G_OBJECT (factory));
-
-	dbus_g_proxy_add_signal (
-		bus_proxy, "NameOwnerChanged",
-		G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal (
-		bus_proxy, "NameOwnerChanged",
-		G_CALLBACK (name_owner_changed), factory, NULL);
-
-	if (!org_freedesktop_DBus_request_name (
-		bus_proxy, E_DATA_CAL_FACTORY_SERVICE_NAME,
-		0, &request_name_ret, &error))
-		die ("Failed to get name", error);
-
-	if (request_name_ret != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) {
-		g_error ("Got result code %u from requesting name", request_name_ret);
-		exit (1);
-	}
+
+	loop = g_main_loop_new (NULL, FALSE);
 
 	eol = e_offline_listener_new ();
 	offline_state_changed_cb (eol, factory);
@@ -847,16 +872,25 @@ main (gint argc, gchar **argv)
 		eol, "changed",
 		G_CALLBACK (offline_state_changed_cb), factory);
 
-	printf ("Server is up and running...\n");
+	owner_id = g_bus_own_name (G_BUS_TYPE_SESSION,
+		E_DATA_CAL_FACTORY_SERVICE_NAME,
+		G_BUS_NAME_OWNER_FLAGS_NONE,
+		on_bus_acquired,
+		on_name_acquired,
+		on_name_lost,
+		factory,
+		NULL);
 
 	/* Migrate user data from ~/.evolution to XDG base directories. */
 	e_data_cal_migrate ();
 
-	g_main_loop_run (loop);
+	printf ("Server is up and running...\n");
 
-	dbus_g_connection_unref (connection);
+	g_main_loop_run (loop);
 
+	g_bus_unown_name (owner_id);
 	g_object_unref (eol);
+	g_object_unref (factory);
 
 	printf ("Bye.\n");
 
diff --git a/calendar/libedata-cal/e-data-cal-view.c b/calendar/libedata-cal/e-data-cal-view.c
index 8beaa15..ff9c000 100644
--- a/calendar/libedata-cal/e-data-cal-view.c
+++ b/calendar/libedata-cal/e-data-cal-view.c
@@ -28,23 +28,17 @@
 #include <string.h>
 #include <glib.h>
 
-#include <dbus/dbus.h>
-#include <dbus/dbus-glib.h>
 #include <glib-object.h>
 
 #include "e-cal-backend-sexp.h"
 #include "e-data-cal-view.h"
-#include "e-data-cal-marshal.h"
-
-extern DBusGConnection *connection;
-
-static gboolean impl_EDataCalView_start (EDataCalView *query, GError **error);
-static gboolean impl_EDataCalView_stop (EDataCalView *query, GError **error);
-#include "e-data-cal-view-glue.h"
+#include "e-gdbus-egdbuscalview.h"
 
 #define THRESHOLD 32
 
 struct _EDataCalViewPrivate {
+	EGdbusCalView *gdbus_object;
+
 	/* The backend we are monitoring */
 	ECalBackend *backend;
 
@@ -60,8 +54,6 @@ struct _EDataCalViewPrivate {
 	GArray *removes;
 
 	GHashTable *ids;
-
-	gchar *path;
 };
 
 G_DEFINE_TYPE (EDataCalView, e_data_cal_view, G_TYPE_OBJECT);
@@ -79,23 +71,10 @@ enum props {
 	PROP_SEXP
 };
 
-/* Signals */
-enum {
-  OBJECTS_ADDED,
-  OBJECTS_MODIFIED,
-  OBJECTS_REMOVED,
-  PROGRESS,
-  DONE,
-  LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
 /* Class init */
 static void
 e_data_cal_view_class_init (EDataCalViewClass *klass)
 {
-	GParamSpec *param;
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
 	g_type_class_add_private (klass, sizeof (EDataCalViewPrivate));
@@ -105,54 +84,15 @@ e_data_cal_view_class_init (EDataCalViewClass *klass)
 	object_class->dispose = e_data_cal_view_dispose;
 	object_class->finalize = e_data_cal_view_finalize;
 
-	param =  g_param_spec_object ("backend", NULL, NULL, E_TYPE_CAL_BACKEND,
-				      G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY);
-	g_object_class_install_property (object_class, PROP_BACKEND, param);
-	param =  g_param_spec_object ("sexp", NULL, NULL, E_TYPE_CAL_BACKEND_SEXP,
-				      G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY);
-	g_object_class_install_property (object_class, PROP_SEXP, param);
-
-        signals[OBJECTS_ADDED] =
-          g_signal_new ("objects-added",
-                        G_OBJECT_CLASS_TYPE (klass),
-                        G_SIGNAL_RUN_LAST,
-                        0, NULL, NULL,
-                        g_cclosure_marshal_VOID__BOXED,
-                        G_TYPE_NONE, 1, G_TYPE_STRV);
-
-        signals[OBJECTS_MODIFIED] =
-          g_signal_new ("objects-modified",
-                        G_OBJECT_CLASS_TYPE (klass),
-                        G_SIGNAL_RUN_LAST,
-                        0, NULL, NULL,
-                        g_cclosure_marshal_VOID__BOXED,
-                        G_TYPE_NONE, 1, G_TYPE_STRV);
-
-        signals[OBJECTS_REMOVED] =
-          g_signal_new ("objects-removed",
-                        G_OBJECT_CLASS_TYPE (klass),
-                        G_SIGNAL_RUN_LAST,
-                        0, NULL, NULL,
-                        g_cclosure_marshal_VOID__BOXED,
-                        G_TYPE_NONE, 1, G_TYPE_STRV);
-
-        signals[PROGRESS] =
-          g_signal_new ("progress",
-                        G_OBJECT_CLASS_TYPE (klass),
-                        G_SIGNAL_RUN_LAST,
-                        0, NULL, NULL,
-                        e_data_cal_marshal_VOID__STRING_UINT,
-                        G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_UINT);
-
-        signals[DONE] =
-          g_signal_new ("done",
-                        G_OBJECT_CLASS_TYPE (klass),
-                        G_SIGNAL_RUN_LAST,
-                        0, NULL, NULL,
-                        e_data_cal_marshal_NONE__UINT_STRING,
-                        G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_STRING);
-
-	dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (klass), &dbus_glib_e_data_cal_view_object_info);
+	g_object_class_install_property (object_class, PROP_BACKEND,
+		g_param_spec_object (
+			"backend", NULL, NULL, E_TYPE_CAL_BACKEND,
+			G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
+
+	g_object_class_install_property (object_class, PROP_SEXP,
+		g_param_spec_object (
+			"sexp", NULL, NULL, E_TYPE_CAL_BACKEND_SEXP,
+			G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
 }
 
 static guint
@@ -169,57 +109,25 @@ id_equal (gconstpointer a, gconstpointer b)
 	return g_strcmp0 (id_a->uid, id_b->uid) == 0 && g_strcmp0 (id_a->rid, id_b->rid) == 0;
 }
 
-/* Instance init */
-static void
-e_data_cal_view_init (EDataCalView *view)
-{
-	EDataCalViewPrivate *priv = E_DATA_CAL_VIEW_GET_PRIVATE (view);
-
-	view->priv = priv;
-
-	priv->backend = NULL;
-	priv->started = FALSE;
-	priv->stopped = FALSE;
-	priv->done = FALSE;
-	priv->sexp = NULL;
-
-	priv->adds = g_array_sized_new (TRUE, TRUE, sizeof (gchar *), THRESHOLD);
-	priv->changes = g_array_sized_new (TRUE, TRUE, sizeof (gchar *), THRESHOLD);
-	priv->removes = g_array_sized_new (TRUE, TRUE, sizeof (gchar *), THRESHOLD);
-
-	priv->ids = g_hash_table_new_full (id_hash, id_equal, (GDestroyNotify)e_cal_component_free_id, NULL);
-}
-
 EDataCalView *
-e_data_cal_view_new (ECalBackend *backend,
-		     const gchar *path, ECalBackendSExp *sexp)
+e_data_cal_view_new (ECalBackend *backend, ECalBackendSExp *sexp)
 {
 	EDataCalView *query;
 
 	query = g_object_new (E_DATA_CAL_VIEW_TYPE, "backend", backend, "sexp", sexp, NULL);
-	query->priv->path = g_strdup (path);
-
-	dbus_g_connection_register_g_object (connection, path, G_OBJECT (query));
 
 	return query;
 }
 
-/**
- * e_data_cal_view_get_dbus_path:
- * @view: an #EDataCalView
- *
- * Returns the D-Bus path for @view.
- *
- * Returns: the D-Bus path for @view
- *
- * Since: 2.30
- **/
-const gchar *
-e_data_cal_view_get_dbus_path (EDataCalView *view)
+guint
+e_data_cal_view_register_gdbus_object (EDataCalView *query, GDBusConnection *connection, const gchar *object_path, GError **error)
 {
-	g_return_val_if_fail (E_IS_DATA_CAL_VIEW (view), NULL);
+	g_return_val_if_fail (query != NULL, 0);
+	g_return_val_if_fail (E_IS_DATA_CAL_VIEW (query), 0);
+	g_return_val_if_fail (connection != NULL, 0);
+	g_return_val_if_fail (object_path != NULL, 0);
 
-	return view->priv->path;
+	return e_gdbus_cal_view_register_object (query->priv->gdbus_object, connection, object_path, error);
 }
 
 static void
@@ -246,7 +154,7 @@ send_pending_adds (EDataCalView *view)
 	if (priv->adds->len == 0)
 		return;
 
-	g_signal_emit (view, signals[OBJECTS_ADDED], 0, priv->adds->data);
+	e_gdbus_cal_view_emit_objects_added (view->priv->gdbus_object, (const gchar * const *) priv->adds->data);
 	reset_array (priv->adds);
 }
 
@@ -258,7 +166,7 @@ send_pending_changes (EDataCalView *view)
 	if (priv->changes->len == 0)
 		return;
 
-	g_signal_emit (view, signals[OBJECTS_MODIFIED], 0, priv->changes->data);
+	e_gdbus_cal_view_emit_objects_modified (view->priv->gdbus_object, (const gchar * const *) priv->changes->data);
 	reset_array (priv->changes);
 }
 
@@ -271,7 +179,7 @@ send_pending_removes (EDataCalView *view)
 		return;
 
 	/* TODO: send ECalComponentIds as a list of pairs */
-	g_signal_emit (view, signals[OBJECTS_REMOVED], 0, priv->removes->data);
+	e_gdbus_cal_view_emit_objects_removed (view->priv->gdbus_object, (const gchar * const *) priv->removes->data);
 	reset_array (priv->removes);
 }
 
@@ -330,11 +238,11 @@ notify_done (EDataCalView *view, const GError *error)
 	send_pending_changes (view);
 	send_pending_removes (view);
 
-	g_signal_emit (view, signals[DONE], 0, error ? error->code : 0, error ? error->message : NULL);
+	e_gdbus_cal_view_emit_done (view->priv->gdbus_object, error ? error->code : 0, error ? error->message : "");
 }
 
 static gboolean
-impl_EDataCalView_start (EDataCalView *query, GError **error)
+impl_DataCalView_start (EGdbusCalView *object, GDBusMethodInvocation *invocation, EDataCalView *query)
 {
 	EDataCalViewPrivate *priv;
 
@@ -345,11 +253,13 @@ impl_EDataCalView_start (EDataCalView *query, GError **error)
 		e_cal_backend_start_query (priv->backend, query);
 	}
 
+	e_gdbus_cal_view_complete_start (object, invocation);
+
 	return TRUE;
 }
 
 static gboolean
-impl_EDataCalView_stop (EDataCalView *query, GError **error)
+impl_DataCalView_stop (EGdbusCalView *object, GDBusMethodInvocation *invocation, EDataCalView *query)
 {
 	EDataCalViewPrivate *priv;
 
@@ -357,6 +267,8 @@ impl_EDataCalView_stop (EDataCalView *query, GError **error)
 
 	priv->stopped = TRUE;
 
+	e_gdbus_cal_view_complete_stop (object, invocation);
+
 	return TRUE;
 }
 
@@ -404,6 +316,31 @@ e_data_cal_view_get_property (GObject *object, guint property_id, GValue *value,
 	}
 }
 
+/* Instance init */
+static void
+e_data_cal_view_init (EDataCalView *query)
+{
+	EDataCalViewPrivate *priv = E_DATA_CAL_VIEW_GET_PRIVATE (query);
+
+	query->priv = priv;
+
+	priv->gdbus_object = e_gdbus_cal_view_stub_new ();
+	g_signal_connect (priv->gdbus_object, "handle-start", G_CALLBACK (impl_DataCalView_start), query);
+	g_signal_connect (priv->gdbus_object, "handle-stop", G_CALLBACK (impl_DataCalView_stop), query);
+
+	priv->backend = NULL;
+	priv->started = FALSE;
+	priv->stopped = FALSE;
+	priv->done = FALSE;
+	priv->sexp = NULL;
+
+	priv->adds = g_array_sized_new (TRUE, TRUE, sizeof (gchar *), THRESHOLD);
+	priv->changes = g_array_sized_new (TRUE, TRUE, sizeof (gchar *), THRESHOLD);
+	priv->removes = g_array_sized_new (TRUE, TRUE, sizeof (gchar *), THRESHOLD);
+
+	priv->ids = g_hash_table_new_full (id_hash, id_equal, (GDestroyNotify)e_cal_component_free_id, NULL);
+}
+
 static void
 e_data_cal_view_dispose (GObject *object)
 {
@@ -443,8 +380,6 @@ e_data_cal_view_finalize (GObject *object)
 
 	g_hash_table_destroy (priv->ids);
 
-	g_free (priv->path);
-
 	(* G_OBJECT_CLASS (e_data_cal_view_parent_class)->finalize) (object);
 }
 
@@ -734,7 +669,7 @@ e_data_cal_view_notify_progress (EDataCalView *view, const gchar *message, gint
 	if (!priv->started || priv->stopped)
 		return;
 
-	g_signal_emit (view, signals[PROGRESS], 0, message, percent);
+	e_gdbus_cal_view_emit_progress (view->priv->gdbus_object, message ? message : "", percent);
 }
 
 /**
diff --git a/calendar/libedata-cal/e-data-cal-view.h b/calendar/libedata-cal/e-data-cal-view.h
index c988482..2ec3f48 100644
--- a/calendar/libedata-cal/e-data-cal-view.h
+++ b/calendar/libedata-cal/e-data-cal-view.h
@@ -23,7 +23,7 @@
 
 #include <glib.h>
 #include <glib-object.h>
-#include <dbus/dbus-glib.h>
+#include <gio/gio.h>
 #include <libedata-cal/e-data-cal-common.h>
 #include <libedata-cal/e-cal-backend-sexp.h>
 #include <libedata-cal/e-data-cal-types.h>
@@ -52,9 +52,9 @@ struct _EDataCalViewClass {
 };
 
 GType                 e_data_cal_view_get_type (void);
-EDataCalView         *e_data_cal_view_new (ECalBackend *backend, const gchar *path, ECalBackendSExp *sexp);
+EDataCalView         *e_data_cal_view_new (ECalBackend *backend, ECalBackendSExp *sexp);
 
-const gchar * e_data_cal_view_get_dbus_path (EDataCalView *view);
+guint e_data_cal_view_register_gdbus_object (EDataCalView *query, GDBusConnection *connection, const gchar *object_path, GError **error);
 
 const gchar           *e_data_cal_view_get_text (EDataCalView *query);
 ECalBackendSExp      *e_data_cal_view_get_object_sexp (EDataCalView *query);
diff --git a/calendar/libedata-cal/e-data-cal.c b/calendar/libedata-cal/e-data-cal.c
index 5c72e9d..c0cf6f3 100644
--- a/calendar/libedata-cal/e-data-cal.c
+++ b/calendar/libedata-cal/e-data-cal.c
@@ -30,64 +30,21 @@
 #include <glib/gi18n-lib.h>
 #include <unistd.h>
 
-#include <dbus/dbus.h>
-#include <dbus/dbus-glib.h>
 #include <glib-object.h>
 
 #include "e-data-cal.h"
 #include "e-data-cal-enumtypes.h"
-
-DBusGConnection *connection;
-
-/* DBus glue */
-static void impl_Cal_get_uri (EDataCal *cal, DBusGMethodInvocation *context);
-static void impl_Cal_getCacheDir (EDataCal *cal, DBusGMethodInvocation *context);
-static void impl_Cal_open (EDataCal *cal, gboolean only_if_exists, gchar *username, gchar *password, DBusGMethodInvocation *context);
-static gboolean impl_Cal_close (EDataCal *cal, GError **error);
-static void impl_Cal_refresh (EDataCal *cal, DBusGMethodInvocation *context);
-static void impl_Cal_remove (EDataCal *cal, DBusGMethodInvocation *context);
-static void impl_Cal_isReadOnly (EDataCal *cal, DBusGMethodInvocation *context);
-static void impl_Cal_getCalAddress (EDataCal *cal, DBusGMethodInvocation *context);
-static void impl_Cal_getAlarmEmailAddress (EDataCal *cal, DBusGMethodInvocation *context);
-static void impl_Cal_getLdapAttribute (EDataCal *cal, DBusGMethodInvocation *context);
-static void impl_Cal_getStaticCapabilities (EDataCal *cal, DBusGMethodInvocation *context);
-static void impl_Cal_setMode (EDataCal *cal, EDataCalMode mode, DBusGMethodInvocation *context);
-static void impl_Cal_getDefaultObject (EDataCal *cal, DBusGMethodInvocation *context);
-static void impl_Cal_getObject (EDataCal *cal, const gchar *uid, const gchar *rid, DBusGMethodInvocation *context);
-static void impl_Cal_getObjectList (EDataCal *cal, const gchar *sexp, DBusGMethodInvocation *context);
-static void impl_Cal_getChanges (EDataCal *cal, const gchar *change_id, DBusGMethodInvocation *context);
-static void impl_Cal_getFreeBusy (EDataCal *cal, const gchar **user_list, const gulong start, const gulong end, DBusGMethodInvocation *context);
-static void impl_Cal_discardAlarm (EDataCal *cal, const gchar *uid, const gchar *auid, DBusGMethodInvocation *context);
-static void impl_Cal_createObject (EDataCal *cal, const gchar *calobj, DBusGMethodInvocation *context);
-static void impl_Cal_modifyObject (EDataCal *cal, const gchar *calobj, const EDataCalObjModType mod, DBusGMethodInvocation *context);
-static void impl_Cal_removeObject (EDataCal *cal, const gchar *uid, const gchar *rid, const EDataCalObjModType mod, DBusGMethodInvocation *context);
-static void impl_Cal_receiveObjects (EDataCal *cal, const gchar *calobj, DBusGMethodInvocation *context);
-static void impl_Cal_sendObjects (EDataCal *cal, const gchar *calobj, DBusGMethodInvocation *context);
-static void impl_Cal_getAttachmentList (EDataCal *cal, gchar *uid, gchar *rid, DBusGMethodInvocation *context);
-static void impl_Cal_getQuery (EDataCal *cal, const gchar *sexp, DBusGMethodInvocation *context);
-static void impl_Cal_getTimezone (EDataCal *cal, const gchar *tzid, DBusGMethodInvocation *context);
-static void impl_Cal_addTimezone (EDataCal *cal, const gchar *tz, DBusGMethodInvocation *context);
-static void impl_Cal_setDefaultTimezone (EDataCal *cal, const gchar *tz, DBusGMethodInvocation *context);
-#include "e-data-cal-glue.h"
-
-enum
-{
-  AUTH_REQUIRED,
-  BACKEND_ERROR,
-  READ_ONLY,
-  MODE,
-  LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
+#include "e-gdbus-egdbuscal.h"
 
 G_DEFINE_TYPE (EDataCal, e_data_cal, G_TYPE_OBJECT);
 
 #define E_DATA_CAL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), E_TYPE_DATA_CAL, EDataCalPrivate))
 
 #define EDC_ERROR(_code) e_data_cal_create_error (_code, NULL)
+#define EDC_ERROR_EX(_code, _msg) e_data_cal_create_error (_code, _msg)
 
 struct _EDataCalPrivate {
+	EGdbusCal *gdbus_object;
 	ECalBackend *backend;
 	ESource *source;
 	GHashTable *live_queries;
@@ -97,10 +54,43 @@ struct _EDataCalPrivate {
 GQuark
 e_data_cal_error_quark (void)
 {
-  static GQuark quark = 0;
-  if (!quark)
-    quark = g_quark_from_static_string ("e_data_cal_error");
-  return quark;
+	#define ERR_PREFIX "org.gnome.evolution.dataserver.calendar.Cal."
+
+	static const GDBusErrorEntry entries[] = {
+		{ Success, 				ERR_PREFIX "Success" },
+		{ RepositoryOffline,			ERR_PREFIX "RepositoryOffline" },
+		{ PermissionDenied,			ERR_PREFIX "PermissionDenied" },
+		{ InvalidRange,				ERR_PREFIX "InvalidRange" },
+		{ ObjectNotFound,			ERR_PREFIX "ObjectNotFound" },
+		{ InvalidObject,			ERR_PREFIX "InvalidObject" },
+		{ ObjectIdAlreadyExists,		ERR_PREFIX "ObjectIdAlreadyExists" },
+		{ AuthenticationFailed,			ERR_PREFIX "AuthenticationFailed" },
+		{ AuthenticationRequired,		ERR_PREFIX "AuthenticationRequired" },
+		{ UnsupportedField,			ERR_PREFIX "UnsupportedField" },
+		{ UnsupportedMethod,			ERR_PREFIX "UnsupportedMethod" },
+		{ UnsupportedAuthenticationMethod,	ERR_PREFIX "UnsupportedAuthenticationMethod" },
+		{ TLSNotAvailable,			ERR_PREFIX "TLSNotAvailable" },
+		{ NoSuchCal,				ERR_PREFIX "NoSuchCal" },
+		{ UnknownUser,				ERR_PREFIX "UnknownUser" },
+		{ OfflineUnavailable,			ERR_PREFIX "OfflineUnavailable" },
+		{ SearchSizeLimitExceeded,		ERR_PREFIX "SearchSizeLimitExceeded" },
+		{ SearchTimeLimitExceeded,		ERR_PREFIX "SearchTimeLimitExceeded" },
+		{ InvalidQuery,				ERR_PREFIX "InvalidQuery" },
+		{ QueryRefused,				ERR_PREFIX "QueryRefused" },
+		{ CouldNotCancel,			ERR_PREFIX "CouldNotCancel" },
+		{ OtherError,				ERR_PREFIX "OtherError" },
+		{ InvalidServerVersion,			ERR_PREFIX "InvalidServerVersion" },
+		{ InvalidArg,				ERR_PREFIX "InvalidArg" },
+		{ NotSupported,				ERR_PREFIX "NotSupported" }
+	};
+
+	#undef ERR_PREFIX
+
+	static volatile gsize quark_volatile = 0;
+
+	g_dbus_error_register_error_domain ("e-data-cal-error", &quark_volatile, entries, G_N_ELEMENTS (entries));
+
+	return (GQuark) quark_volatile;
 }
 
 const gchar *
@@ -177,79 +167,17 @@ e_data_cal_create_error_fmt (EDataCalCallStatus status, const gchar *custom_msg_
 }
 
 static void
-data_cal_return_error (DBusGMethodInvocation *context, const GError *perror, const gchar *error_fmt)
+data_cal_return_error (GDBusMethodInvocation *invocation, const GError *perror, const gchar *error_fmt)
 {
 	GError *error;
 
 	g_return_if_fail (perror != NULL);
 
 	error = g_error_new (E_DATA_CAL_ERROR, perror->code, error_fmt, perror->message);
-	dbus_g_method_return_error (context, error);
 
-	g_error_free (error);
-}
+	g_dbus_method_invocation_return_gerror (invocation, error);
 
-/* Class init */
-static void
-e_data_cal_class_init (EDataCalClass *e_data_cal_class)
-{
-	/* TODO: finalise dispose */
-
-	g_type_class_add_private (e_data_cal_class, sizeof (EDataCalPrivate));
-
-	signals[AUTH_REQUIRED] =
-	  g_signal_new ("auth-required",
-						G_OBJECT_CLASS_TYPE (e_data_cal_class),
-						G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
-						0,
-						NULL, NULL,
-						g_cclosure_marshal_VOID__VOID,
-						G_TYPE_NONE, 0);
-	signals[BACKEND_ERROR] =
-	  g_signal_new ("backend-error",
-						G_OBJECT_CLASS_TYPE (e_data_cal_class),
-						G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
-						0,
-						NULL, NULL,
-						g_cclosure_marshal_VOID__STRING,
-						G_TYPE_NONE, 1, G_TYPE_STRING);
-	signals[READ_ONLY] =
-	  g_signal_new ("readonly",
-						G_OBJECT_CLASS_TYPE (e_data_cal_class),
-						G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
-						0,
-						NULL, NULL,
-						g_cclosure_marshal_VOID__BOOLEAN,
-						G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
-	signals[MODE] =
-	  g_signal_new ("mode",
-						G_OBJECT_CLASS_TYPE (e_data_cal_class),
-						G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
-						0,
-						NULL, NULL,
-						g_cclosure_marshal_VOID__INT,
-						G_TYPE_NONE, 1, G_TYPE_INT);
-
-	dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (e_data_cal_class), &dbus_glib_e_data_cal_object_info);
-
-	dbus_g_error_domain_register (E_DATA_CAL_ERROR, NULL, E_TYPE_DATA_CAL_CALL_STATUS);
-}
-
-/* Instance init */
-static void
-e_data_cal_init (EDataCal *ecal)
-{
-	ecal->priv = E_DATA_CAL_GET_PRIVATE (ecal);
-}
-
-EDataCal *
-e_data_cal_new (ECalBackend *backend, ESource *source)
-{
-	EDataCal *cal;
-	cal = g_object_new (E_TYPE_DATA_CAL, NULL);
-	cal->priv->backend = backend;
-	cal->priv->source = source;
-	return cal;
+	g_error_free (error);
 }
 
 /**
@@ -275,143 +203,157 @@ e_data_cal_get_backend (EDataCal *cal)
 }
 
 /* EDataCal::getUri method */
-static void
-impl_Cal_get_uri (EDataCal *cal, DBusGMethodInvocation *context)
+static gboolean
+impl_Cal_getUri (EGdbusCal *object, GDBusMethodInvocation *invocation, EDataCal *cal)
 {
-	dbus_g_method_return (context, g_strdup (e_cal_backend_get_uri (cal->priv->backend)));
+	e_gdbus_cal_complete_get_uri (object, invocation, e_cal_backend_get_uri (cal->priv->backend));
+
+	return TRUE;
 }
 
 /* EDataCal::getCacheDir method */
-static void
-impl_Cal_getCacheDir (EDataCal *cal, DBusGMethodInvocation *context)
+static gboolean
+impl_Cal_getCacheDir (EGdbusCal *object, GDBusMethodInvocation *invocation, EDataCal *cal)
 {
-	const gchar *cache_dir;
+	e_gdbus_cal_complete_get_cache_dir (object, invocation, e_cal_backend_get_cache_dir (cal->priv->backend));
 
-	cache_dir = e_cal_backend_get_cache_dir (cal->priv->backend);
-	dbus_g_method_return (context, g_strdup (cache_dir));
+	return TRUE;
 }
 
 /* EDataCal::open method */
-static void
-impl_Cal_open (EDataCal *cal,
-	       gboolean only_if_exists,
-	       gchar *username,
-	       gchar *password, DBusGMethodInvocation *context)
+static gboolean
+impl_Cal_open (EGdbusCal *object, GDBusMethodInvocation *invocation, gboolean only_if_exists, const gchar *username, const gchar *password, EDataCal *cal)
 {
-	e_cal_backend_open (cal->priv->backend, cal, context, only_if_exists, username, password);
+	e_cal_backend_open (cal->priv->backend, cal, invocation, only_if_exists, username, password);
+
+	return TRUE;
 }
 
-/* EDataCal::close method */
+/* EDataCal::refresh method */
 static gboolean
-impl_Cal_close (EDataCal *cal, GError **error)
+impl_Cal_refresh (EGdbusCal *object, GDBusMethodInvocation *invocation, EDataCal *cal)
 {
-	e_cal_backend_remove_client (cal->priv->backend, cal);
-	g_object_unref (cal);
+	e_cal_backend_refresh (cal->priv->backend, cal, invocation);
+
 	return TRUE;
 }
 
-/* EDataCal::refresh method */
-static void
-impl_Cal_refresh (EDataCal *cal, DBusGMethodInvocation *context)
+/* EDataCal::close method */
+static gboolean
+impl_Cal_close (EGdbusCal *object, GDBusMethodInvocation *invocation, EDataCal *cal)
 {
-	e_cal_backend_refresh (cal->priv->backend, cal, context);
+	e_cal_backend_remove_client (cal->priv->backend, cal);
+	e_gdbus_cal_complete_close (object, invocation);
+
+	g_object_unref (cal);
+
+	return TRUE;
 }
 
 /* EDataCal::remove method */
-static void
-impl_Cal_remove (EDataCal *cal, DBusGMethodInvocation *context)
+static gboolean
+impl_Cal_remove (EGdbusCal *object, GDBusMethodInvocation *invocation, EDataCal *cal)
 {
-	e_cal_backend_remove (cal->priv->backend, cal, context);
+	e_cal_backend_remove (cal->priv->backend, cal, invocation);
+
+	return TRUE;
 }
 
 /* EDataCal::isReadOnly method */
-static void
-impl_Cal_isReadOnly (EDataCal *cal, DBusGMethodInvocation *context)
+static gboolean
+impl_Cal_isReadOnly (EGdbusCal *object, GDBusMethodInvocation *invocation, EDataCal *cal)
 {
 	e_cal_backend_is_read_only (cal->priv->backend, cal);
-	dbus_g_method_return (context);
+	e_gdbus_cal_complete_is_read_only (object, invocation);
+
+	return TRUE;
 }
 
 /* EDataCal::getCalAddress method */
-static void
-impl_Cal_getCalAddress (EDataCal *cal, DBusGMethodInvocation *context)
+static gboolean
+impl_Cal_getCalAddress (EGdbusCal *object, GDBusMethodInvocation *invocation, EDataCal *cal)
 {
-	e_cal_backend_get_cal_address (cal->priv->backend, cal, context);
+	e_cal_backend_get_cal_address (cal->priv->backend, cal, invocation);
+
+	return TRUE;
 }
 
 /* EDataCal::getAlarmEmailAddress method */
-static void
-impl_Cal_getAlarmEmailAddress (EDataCal *cal, DBusGMethodInvocation *context)
+static gboolean
+impl_Cal_getAlarmEmailAddress (EGdbusCal *object, GDBusMethodInvocation *invocation, EDataCal *cal)
 {
-	e_cal_backend_get_alarm_email_address (cal->priv->backend, cal, context);
+	e_cal_backend_get_alarm_email_address (cal->priv->backend, cal, invocation);
+
+	return TRUE;
 }
 
 /* EDataCal::getLdapAttribute method */
-static void
-impl_Cal_getLdapAttribute (EDataCal *cal, DBusGMethodInvocation *context)
+static gboolean
+impl_Cal_getLdapAttribute (EGdbusCal *object, GDBusMethodInvocation *invocation, EDataCal *cal)
 {
-	e_cal_backend_get_ldap_attribute (cal->priv->backend, cal, context);
+	e_cal_backend_get_ldap_attribute (cal->priv->backend, cal, invocation);
+
+	return TRUE;
 }
 
 /* EDataCal::getSchedulingInformation method */
-static void
-impl_Cal_getStaticCapabilities (EDataCal *cal, DBusGMethodInvocation *context)
+static gboolean
+impl_Cal_getSchedulingInformation (EGdbusCal *object, GDBusMethodInvocation *invocation, EDataCal *cal)
 {
-	e_cal_backend_get_static_capabilities (cal->priv->backend, cal, context);
+	e_cal_backend_get_static_capabilities (cal->priv->backend, cal, invocation);
+
+	return TRUE;
 }
 
 /* EDataCal::setMode method */
-static void
-impl_Cal_setMode (EDataCal *cal,
-		  EDataCalMode mode,
-		  DBusGMethodInvocation *context)
+static gboolean
+impl_Cal_setMode (EGdbusCal *object, GDBusMethodInvocation *invocation, EDataCalMode mode, EDataCal *cal)
 {
 	e_cal_backend_set_mode (cal->priv->backend, mode);
-	dbus_g_method_return (context);
+	e_gdbus_cal_complete_set_mode (object, invocation);
+
+	return TRUE;
 }
 
 /* EDataCal::getDefaultObject method */
-static void
-impl_Cal_getDefaultObject (EDataCal *cal, DBusGMethodInvocation *context)
+static gboolean
+impl_Cal_getDefaultObject (EGdbusCal *object, GDBusMethodInvocation *invocation, EDataCal *cal)
 {
-	e_cal_backend_get_default_object (cal->priv->backend, cal, context);
+	e_cal_backend_get_default_object (cal->priv->backend, cal, invocation);
+
+	return TRUE;
 }
 
 /* EDataCal::getObject method */
-static void
-impl_Cal_getObject (EDataCal *cal,
-		    const gchar *uid,
-		    const gchar *rid,
-		    DBusGMethodInvocation *context)
+static gboolean
+impl_Cal_getObject (EGdbusCal *object, GDBusMethodInvocation *invocation, const gchar *uid, const gchar *rid, EDataCal *cal)
 {
-	e_cal_backend_get_object (cal->priv->backend, cal, context, uid, rid);
+	e_cal_backend_get_object (cal->priv->backend, cal, invocation, uid, rid);
+
+	return TRUE;
 }
 
 /* EDataCal::getObjectList method */
-static void
-impl_Cal_getObjectList (EDataCal *cal,
-			const gchar *sexp,
-			DBusGMethodInvocation *context)
+static gboolean
+impl_Cal_getObjectList (EGdbusCal *object, GDBusMethodInvocation *invocation, const gchar *sexp, EDataCal *cal)
 {
-		e_cal_backend_get_object_list (cal->priv->backend, cal, context, sexp);
+	e_cal_backend_get_object_list (cal->priv->backend, cal, invocation, sexp);
+
+	return TRUE;
 }
 
 /* EDataCal::getChanges method */
-static void
-impl_Cal_getChanges (EDataCal *cal,
-		     const gchar *change_id,
-		     DBusGMethodInvocation *context)
+static gboolean
+impl_Cal_getChanges (EGdbusCal *object, GDBusMethodInvocation *invocation, const gchar *change_id, EDataCal *cal)
 {
-       e_cal_backend_get_changes (cal->priv->backend, cal, context, change_id);
+	e_cal_backend_get_changes (cal->priv->backend, cal, invocation, change_id);
+
+	return TRUE;
 }
 
 /* EDataCal::getFreeBusy method */
-static void
-impl_Cal_getFreeBusy (EDataCal *cal,
-		      const gchar **user_list,
-		      const gulong start,
-		      const gulong end,
-		      DBusGMethodInvocation *context)
+static gboolean
+impl_Cal_getFreeBusy (EGdbusCal *object, GDBusMethodInvocation *invocation, const gchar **user_list, guint start, guint end, EDataCal *cal)
 {
 	GList *users = NULL;
 
@@ -423,97 +365,93 @@ impl_Cal_getFreeBusy (EDataCal *cal,
 	}
 
 	/* call the backend's get_free_busy method */
-	e_cal_backend_get_free_busy (cal->priv->backend, cal, context, users, (time_t)start, (time_t)end);
+	e_cal_backend_get_free_busy (cal->priv->backend, cal, invocation, users, (time_t)start, (time_t)end);
+
+	return TRUE;
 }
 
 /* EDataCal::discardAlarm method */
-static void
-impl_Cal_discardAlarm (EDataCal *cal,
-		       const gchar *uid,
-		       const gchar *auid,
-		       DBusGMethodInvocation *context)
+static gboolean
+impl_Cal_discardAlarm (EGdbusCal *object, GDBusMethodInvocation *invocation, const gchar *uid, const gchar *auid, EDataCal *cal)
 {
-	e_cal_backend_discard_alarm (cal->priv->backend, cal, context, uid, auid);
+	e_cal_backend_discard_alarm (cal->priv->backend, cal, invocation, uid, auid);
+
+	return TRUE;
 }
 
 /* EDataCal::createObject method */
-static void
-impl_Cal_createObject (EDataCal *cal,
-		       const gchar *calobj,
-		       DBusGMethodInvocation *context)
+static gboolean
+impl_Cal_createObject (EGdbusCal *object, GDBusMethodInvocation *invocation, const gchar *calobj, EDataCal *cal)
 {
-	e_cal_backend_create_object (cal->priv->backend, cal, context, calobj);
+	e_cal_backend_create_object (cal->priv->backend, cal, invocation, calobj);
+
+	return TRUE;
 }
 
 /* EDataCal::modifyObject method */
-static void
-impl_Cal_modifyObject (EDataCal *cal,
-		       const gchar *calobj,
-		       const EDataCalObjModType mod,
-		       DBusGMethodInvocation *context)
+static gboolean
+impl_Cal_modifyObject (EGdbusCal *object, GDBusMethodInvocation *invocation, const gchar *calobj, EDataCalObjModType mod, EDataCal *cal)
 {
-	e_cal_backend_modify_object (cal->priv->backend, cal, context, calobj, mod);
+	e_cal_backend_modify_object (cal->priv->backend, cal, invocation, calobj, mod);
+
+	return TRUE;
 }
 
 /* EDataCal::removeObject method */
-static void
-impl_Cal_removeObject (EDataCal *cal,
-		       const gchar *uid,
-		       const gchar *rid,
-		       const EDataCalObjModType mod,
-		       DBusGMethodInvocation *context)
+static gboolean
+impl_Cal_removeObject (EGdbusCal *object, GDBusMethodInvocation *invocation, const gchar *uid, const gchar *rid, EDataCalObjModType mod, EDataCal *cal)
 {
 	if (rid[0] == '\0')
 		rid = NULL;
 
-	e_cal_backend_remove_object (cal->priv->backend, cal, context, uid, rid, mod);
+	e_cal_backend_remove_object (cal->priv->backend, cal, invocation, uid, rid, mod);
+
+	return TRUE;
 }
 
 /* EDataCal::receiveObjects method */
-static void
-impl_Cal_receiveObjects (EDataCal *cal,
-			 const gchar *calobj,
-			 DBusGMethodInvocation *context)
+static gboolean
+impl_Cal_receiveObjects (EGdbusCal *object, GDBusMethodInvocation *invocation, const gchar *calobj, EDataCal *cal)
 {
-	e_cal_backend_receive_objects (cal->priv->backend, cal, context, calobj);
+	e_cal_backend_receive_objects (cal->priv->backend, cal, invocation, calobj);
+
+	return TRUE;
 }
 
 /* EDataCal::sendObjects method */
-static void
-impl_Cal_sendObjects (EDataCal *cal,
-		      const gchar *calobj,
-		      DBusGMethodInvocation *context)
+static gboolean
+impl_Cal_sendObjects (EGdbusCal *object, GDBusMethodInvocation *invocation, const gchar *calobj, EDataCal *cal)
 {
-	e_cal_backend_send_objects (cal->priv->backend, cal, context, calobj);
+	e_cal_backend_send_objects (cal->priv->backend, cal, invocation, calobj);
+
+	return TRUE;
 }
 
 /* EDataCal::getAttachmentList method */
-static void
-impl_Cal_getAttachmentList (EDataCal *cal,
-                   gchar *uid,
-                   gchar *rid,
-                   DBusGMethodInvocation *context)
+static gboolean
+impl_Cal_getAttachmentList (EGdbusCal *object, GDBusMethodInvocation *invocation, const gchar *uid, const gchar *rid, EDataCal *cal)
 {
-	e_cal_backend_get_attachment_list (cal->priv->backend, cal, context, uid, rid);
+	e_cal_backend_get_attachment_list (cal->priv->backend, cal, invocation, uid, rid);
+
+	return TRUE;
 }
 
 /* Function to get a new EDataCalView path, used by getQuery below */
 static gchar *
 construct_calview_path (void)
 {
-  static guint counter = 1;
-  return g_strdup_printf ("/org/gnome/evolution/dataserver/calendar/CalView/%d/%d", getpid(), counter++);
+	static guint counter = 1;
+	return g_strdup_printf ("/org/gnome/evolution/dataserver/calendar/CalView/%d/%d", getpid(), counter++);
 }
 
 /* EDataCal::getQuery method */
-static void
-impl_Cal_getQuery (EDataCal *cal,
-		   const gchar *sexp,
-		   DBusGMethodInvocation *context)
+static gboolean
+impl_Cal_getQuery (EGdbusCal *object, GDBusMethodInvocation *invocation, const gchar *sexp, EDataCal *cal)
 {
 	EDataCalView *query;
 	ECalBackendSExp *obj_sexp;
 	gchar *path;
+	GError *error = NULL;
 
 	/* we handle this entirely here, since it doesn't require any
 	   backend involvement now that we have e_cal_view_start to
@@ -521,50 +459,95 @@ impl_Cal_getQuery (EDataCal *cal,
 
 	obj_sexp = e_cal_backend_sexp_new (sexp);
 	if (!obj_sexp) {
-		e_data_cal_notify_query (cal, context, EDC_ERROR (InvalidQuery), NULL);
-		return;
+		e_data_cal_notify_query (cal, invocation, EDC_ERROR (InvalidQuery), NULL);
+		return TRUE;
 	}
 
-	path = construct_calview_path ();
-	query = e_data_cal_view_new (cal->priv->backend, path, obj_sexp);
+	query = e_data_cal_view_new (cal->priv->backend, obj_sexp);
 	if (!query) {
 		g_object_unref (obj_sexp);
-		e_data_cal_notify_query (cal, context, EDC_ERROR (OtherError), NULL);
-		return;
+		e_data_cal_notify_query (cal, invocation, EDC_ERROR (OtherError), NULL);
+		return TRUE;
+	}
+
+	path = construct_calview_path ();
+	e_data_cal_view_register_gdbus_object (query, g_dbus_method_invocation_get_connection (invocation), path, &error);
+
+	if (error) {
+		g_object_unref (query);
+		e_data_cal_notify_query (cal, invocation, EDC_ERROR_EX (OtherError, error->message), NULL);
+		g_error_free (error);
+		g_free (path);
+
+		return TRUE;
 	}
 
 	e_cal_backend_add_query (cal->priv->backend, query);
 
-	e_data_cal_notify_query (cal, context, EDC_ERROR (Success), path);
+	e_data_cal_notify_query (cal, invocation, EDC_ERROR (Success), path);
 
         g_free (path);
+
+	return TRUE;
 }
 
 /* EDataCal::getTimezone method */
-static void
-impl_Cal_getTimezone (EDataCal *cal,
-		      const gchar *tzid,
-		      DBusGMethodInvocation *context)
+static gboolean
+impl_Cal_getTimezone (EGdbusCal *object, GDBusMethodInvocation *invocation, const gchar *tzid, EDataCal *cal)
 {
-	e_cal_backend_get_timezone (cal->priv->backend, cal, context, tzid);
+	e_cal_backend_get_timezone (cal->priv->backend, cal, invocation, tzid);
+
+	return TRUE;
 }
 
 /* EDataCal::addTimezone method */
-static void
-impl_Cal_addTimezone (EDataCal *cal,
-		      const gchar *tz,
-		      DBusGMethodInvocation *context)
+static gboolean
+impl_Cal_addTimezone (EGdbusCal *object, GDBusMethodInvocation *invocation, const gchar *tz, EDataCal *cal)
 {
-	e_cal_backend_add_timezone (cal->priv->backend, cal, context, tz);
+	e_cal_backend_add_timezone (cal->priv->backend, cal, invocation, tz);
+
+	return TRUE;
 }
 
 /* EDataCal::setDefaultTimezone method */
-static void
-impl_Cal_setDefaultTimezone (EDataCal *cal,
-			     const gchar *tz,
-			     DBusGMethodInvocation *context)
+static gboolean
+impl_Cal_setDefaultTimezone (EGdbusCal *object, GDBusMethodInvocation *invocation, const gchar *tz, EDataCal *cal)
+{
+	e_cal_backend_set_default_zone (cal->priv->backend, cal, invocation, tz);
+
+	return TRUE;
+}
+
+/* free returned pointer with g_free() */
+static gchar **
+create_str_array_from_glist (GList *lst)
 {
-	e_cal_backend_set_default_zone (cal->priv->backend, cal, context, tz);
+	gchar **seq;
+	GList *l;
+	gint i;
+
+	seq = g_new0 (gchar *, g_list_length (lst) + 1);
+	for (l = lst, i = 0; l; l = l->next, i++) {
+		seq[i] = l->data;
+	}
+
+	return seq;
+}
+
+/* free returned pointer with g_free() */
+static gchar **
+create_str_array_from_gslist (GSList *lst)
+{
+	gchar **seq;
+	GSList *l;
+	gint i;
+
+	seq = g_new0 (gchar *, g_slist_length (lst) + 1);
+	for (l = lst, i = 0; l; l = l->next, i++) {
+		seq[i] = l->data;
+	}
+
+	return seq;
 }
 
 /**
@@ -585,7 +568,7 @@ e_data_cal_notify_read_only (EDataCal *cal, GError *error, gboolean read_only)
 		e_data_cal_notify_error (cal, error->message);
 		g_error_free (error);
 	} else {
-		g_signal_emit (cal, signals[READ_ONLY], 0, read_only);
+		e_gdbus_cal_emit_readonly (cal->priv->gdbus_object, read_only);
 	}
 }
 
@@ -600,13 +583,13 @@ e_data_cal_notify_read_only (EDataCal *cal, GError *error, gboolean read_only)
 void
 e_data_cal_notify_cal_address (EDataCal *cal, EServerMethodContext context, GError *error, const gchar *address)
 {
-	DBusGMethodInvocation *method = context;
+	GDBusMethodInvocation *invocation = context;
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_cal_return_error (method, error, _("Cannot retrieve calendar address: %s"));
+		data_cal_return_error (invocation, error, _("Cannot retrieve calendar address: %s"));
 		g_error_free (error);
 	} else
-		dbus_g_method_return (method, address ? address : "");
+		e_gdbus_cal_complete_get_cal_address (cal->priv->gdbus_object, invocation, address ? address : "");
 }
 
 /**
@@ -620,13 +603,13 @@ e_data_cal_notify_cal_address (EDataCal *cal, EServerMethodContext context, GErr
 void
 e_data_cal_notify_alarm_email_address (EDataCal *cal, EServerMethodContext context, GError *error, const gchar *address)
 {
-	DBusGMethodInvocation *method = context;
+	GDBusMethodInvocation *invocation = context;
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_cal_return_error (method, error, _("Cannot retrieve calendar alarm e-mail address: %s"));
+		data_cal_return_error (invocation, error, _("Cannot retrieve calendar alarm e-mail address: %s"));
 		g_error_free (error);
 	} else
-		dbus_g_method_return (method, address ? address : "");
+		e_gdbus_cal_complete_get_alarm_email_address (cal->priv->gdbus_object, invocation, address ? address : "");
 }
 
 /**
@@ -640,13 +623,13 @@ e_data_cal_notify_alarm_email_address (EDataCal *cal, EServerMethodContext conte
 void
 e_data_cal_notify_ldap_attribute (EDataCal *cal, EServerMethodContext context, GError *error, const gchar *attribute)
 {
-	DBusGMethodInvocation *method = context;
+	GDBusMethodInvocation *invocation = context;
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_cal_return_error (method, error, _("Cannot retrieve calendar's ldap attribute: %s"));
+		data_cal_return_error (invocation, error, _("Cannot retrieve calendar's ldap attribute: %s"));
 		g_error_free (error);
 	} else
-		dbus_g_method_return (method, attribute ? attribute : "");
+		e_gdbus_cal_complete_get_ldap_attribute (cal->priv->gdbus_object, invocation, attribute ? attribute : "");
 }
 
 /**
@@ -660,13 +643,13 @@ e_data_cal_notify_ldap_attribute (EDataCal *cal, EServerMethodContext context, G
 void
 e_data_cal_notify_static_capabilities (EDataCal *cal, EServerMethodContext context, GError *error, const gchar *capabilities)
 {
-	DBusGMethodInvocation *method = context;
+	GDBusMethodInvocation *invocation = context;
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_cal_return_error (method, error, _("Cannot retrieve calendar scheduling information: %s"));
+		data_cal_return_error (invocation, error, _("Cannot retrieve calendar scheduling information: %s"));
 		g_error_free (error);
 	} else
-		dbus_g_method_return (method, capabilities ? capabilities : "");
+		e_gdbus_cal_complete_get_scheduling_information (cal->priv->gdbus_object, invocation, capabilities ? capabilities : "");
 }
 
 /**
@@ -679,13 +662,13 @@ e_data_cal_notify_static_capabilities (EDataCal *cal, EServerMethodContext conte
 void
 e_data_cal_notify_open (EDataCal *cal, EServerMethodContext context, GError *error)
 {
-	DBusGMethodInvocation *method = context;
+	GDBusMethodInvocation *invocation = context;
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_cal_return_error (method, error, _("Cannot open calendar: %s"));
+		data_cal_return_error (invocation, error, _("Cannot open calendar: %s"));
 		g_error_free (error);
 	} else
-		dbus_g_method_return (method);
+		e_gdbus_cal_complete_open (cal->priv->gdbus_object, invocation);
 }
 
 /**
@@ -700,13 +683,13 @@ e_data_cal_notify_open (EDataCal *cal, EServerMethodContext context, GError *err
 void
 e_data_cal_notify_refresh (EDataCal *cal, EServerMethodContext context, GError *error)
 {
-	DBusGMethodInvocation *method = context;
+	GDBusMethodInvocation *invocation = context;
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_cal_return_error (method, error, _("Cannot refresh calendar: %s"));
+		data_cal_return_error (invocation, error, _("Cannot refresh calendar: %s"));
 		g_error_free (error);
 	} else
-		dbus_g_method_return (method);
+		e_gdbus_cal_complete_refresh (cal->priv->gdbus_object, invocation);
 }
 
 /**
@@ -719,13 +702,13 @@ e_data_cal_notify_refresh (EDataCal *cal, EServerMethodContext context, GError *
 void
 e_data_cal_notify_remove (EDataCal *cal, EServerMethodContext context, GError *error)
 {
-	DBusGMethodInvocation *method = context;
+	GDBusMethodInvocation *invocation = context;
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_cal_return_error (method, error, _("Cannot remove calendar: %s"));
+		data_cal_return_error (invocation, error, _("Cannot remove calendar: %s"));
 		g_error_free (error);
 	} else
-		dbus_g_method_return (method);
+		e_gdbus_cal_complete_remove (cal->priv->gdbus_object, invocation);
 }
 
 /**
@@ -740,14 +723,14 @@ e_data_cal_notify_remove (EDataCal *cal, EServerMethodContext context, GError *e
 e_data_cal_notify_object_created (EDataCal *cal, EServerMethodContext context, GError *error,
 				  const gchar *uid, const gchar *object)
 {
-	DBusGMethodInvocation *method = context;
+	GDBusMethodInvocation *invocation = context;
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_cal_return_error (method, error, _("Cannot create calendar object: %s"));
+		data_cal_return_error (invocation, error, _("Cannot create calendar object: %s"));
 		g_error_free (error);
 	} else {
 		e_cal_backend_notify_object_created (cal->priv->backend, object);
-		dbus_g_method_return (method, uid ? uid : "");
+		e_gdbus_cal_complete_create_object (cal->priv->gdbus_object, invocation, uid ? uid : "");
 	}
 }
 
@@ -764,14 +747,14 @@ void
 e_data_cal_notify_object_modified (EDataCal *cal, EServerMethodContext context, GError *error,
 				   const gchar *old_object, const gchar *object)
 {
-	DBusGMethodInvocation *method = context;
+	GDBusMethodInvocation *invocation = context;
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_cal_return_error (method, error, _("Cannot modify calendar object: %s"));
+		data_cal_return_error (invocation, error, _("Cannot modify calendar object: %s"));
 		g_error_free (error);
 	} else {
 		e_cal_backend_notify_object_modified (cal->priv->backend, old_object, object);
-		dbus_g_method_return (method);
+		e_gdbus_cal_complete_modify_object (cal->priv->gdbus_object, invocation);
 	}
 }
 
@@ -790,14 +773,14 @@ void
 e_data_cal_notify_object_removed (EDataCal *cal, EServerMethodContext context, GError *error,
 				  const ECalComponentId *id, const gchar *old_object, const gchar *object)
 {
-	DBusGMethodInvocation *method = context;
+	GDBusMethodInvocation *invocation = context;
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_cal_return_error (method, error, _("Cannot remove calendar object: %s"));
+		data_cal_return_error (invocation, error, _("Cannot remove calendar object: %s"));
 		g_error_free (error);
 	} else {
 		e_cal_backend_notify_object_removed (cal->priv->backend, id, old_object, object);
-		dbus_g_method_return (method);
+		e_gdbus_cal_complete_remove_object (cal->priv->gdbus_object, invocation);
 	}
 }
 
@@ -811,13 +794,13 @@ e_data_cal_notify_object_removed (EDataCal *cal, EServerMethodContext context, G
 void
 e_data_cal_notify_objects_received (EDataCal *cal, EServerMethodContext context, GError *error)
 {
-	DBusGMethodInvocation *method = context;
+	GDBusMethodInvocation *invocation = context;
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_cal_return_error (method, error, _("Cannot receive calendar objects: %s"));
+		data_cal_return_error (invocation, error, _("Cannot receive calendar objects: %s"));
 		g_error_free (error);
 	} else
-		dbus_g_method_return (method);
+		e_gdbus_cal_complete_receive_objects (cal->priv->gdbus_object, invocation);
 }
 
 /**
@@ -830,13 +813,13 @@ e_data_cal_notify_objects_received (EDataCal *cal, EServerMethodContext context,
 void
 e_data_cal_notify_alarm_discarded (EDataCal *cal, EServerMethodContext context, GError *error)
 {
-	DBusGMethodInvocation *method = context;
+	GDBusMethodInvocation *invocation = context;
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_cal_return_error (method, error, _("Cannot discard calendar alarm: %s"));
+		data_cal_return_error (invocation, error, _("Cannot discard calendar alarm: %s"));
 		g_error_free (error);
 	} else
-		dbus_g_method_return (method);
+		e_gdbus_cal_complete_discard_alarm (cal->priv->gdbus_object, invocation);
 }
 
 /**
@@ -851,29 +834,17 @@ e_data_cal_notify_alarm_discarded (EDataCal *cal, EServerMethodContext context,
 void
 e_data_cal_notify_objects_sent (EDataCal *cal, EServerMethodContext context, GError *error, GList *users, const gchar *calobj)
 {
-	DBusGMethodInvocation *method = context;
+	GDBusMethodInvocation *invocation = context;
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_cal_return_error (method, error, _("Cannot send calendar objects: %s"));
+		data_cal_return_error (invocation, error, _("Cannot send calendar objects: %s"));
 		g_error_free (error);
 	} else {
-		gchar **users_array = NULL;
-
-		if (users) {
-			GList *l;
-			gchar **user;
-
-			users_array = g_new0 (gchar *, g_list_length (users)+1);
-			if (users_array)
-				for (l = users, user = users_array; l != NULL; l = l->next, user++)
-					*user = g_strdup (l->data);
-		}
-		else
-			users_array = g_new0 (gchar *, 1);
-
-		dbus_g_method_return (method, users_array, calobj ? calobj : "");
-		if (users_array)
-			g_strfreev (users_array);
+		gchar **users_array = create_str_array_from_glist (users);
+
+		e_gdbus_cal_complete_send_objects (cal->priv->gdbus_object, invocation, (const gchar * const *) users_array, calobj ? calobj : "");
+
+		g_free (users_array);
 	}
 }
 
@@ -888,13 +859,13 @@ e_data_cal_notify_objects_sent (EDataCal *cal, EServerMethodContext context, GEr
 void
 e_data_cal_notify_default_object (EDataCal *cal, EServerMethodContext context, GError *error, const gchar *object)
 {
-	DBusGMethodInvocation *method = context;
+	GDBusMethodInvocation *invocation = context;
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_cal_return_error (method, error, _("Cannot retrieve default calendar object path: %s"));
+		data_cal_return_error (invocation, error, _("Cannot retrieve default calendar object path: %s"));
 		g_error_free (error);
 	} else
-		dbus_g_method_return (method, object ? object : "");
+		e_gdbus_cal_complete_get_default_object (cal->priv->gdbus_object, invocation, object ? object : "");
 }
 
 /**
@@ -908,13 +879,13 @@ e_data_cal_notify_default_object (EDataCal *cal, EServerMethodContext context, G
 void
 e_data_cal_notify_object (EDataCal *cal, EServerMethodContext context, GError *error, const gchar *object)
 {
-	DBusGMethodInvocation *method = context;
+	GDBusMethodInvocation *invocation = context;
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_cal_return_error (method, error, _("Cannot retrieve calendar object path: %s"));
+		data_cal_return_error (invocation, error, _("Cannot retrieve calendar object path: %s"));
 		g_error_free (error);
 	} else
-		dbus_g_method_return (method, object ? object : "");
+		e_gdbus_cal_complete_get_object (cal->priv->gdbus_object, invocation, object ? object : "");
 }
 
 /**
@@ -928,22 +899,15 @@ e_data_cal_notify_object (EDataCal *cal, EServerMethodContext context, GError *e
 void
 e_data_cal_notify_object_list (EDataCal *cal, EServerMethodContext context, GError *error, GList *objects)
 {
-	DBusGMethodInvocation *method = context;
+	GDBusMethodInvocation *invocation = context;
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_cal_return_error (method, error, _("Cannot retrieve calendar object list: %s"));
+		data_cal_return_error (invocation, error, _("Cannot retrieve calendar object list: %s"));
 		g_error_free (error);
 	} else {
-		gchar **seq = NULL;
-		GList *l;
-		gint i;
+		gchar **seq = create_str_array_from_glist (objects);
 
-		seq = g_new0 (gchar *, g_list_length (objects)+1);
-		for (l = objects, i = 0; l; l = l->next, i++) {
-			seq[i] = l->data;
-		}
-
-		dbus_g_method_return (method, seq);
+		e_gdbus_cal_complete_get_object_list (cal->priv->gdbus_object, invocation, (const gchar * const *) seq);
 
 		g_free (seq);
 	}
@@ -959,22 +923,19 @@ e_data_cal_notify_object_list (EDataCal *cal, EServerMethodContext context, GErr
 void
 e_data_cal_notify_attachment_list (EDataCal *cal, EServerMethodContext context, GError *error, GSList *attachments)
 {
-	DBusGMethodInvocation *method = context;
+	GDBusMethodInvocation *invocation = context;
 	gchar **seq;
-	GSList *l;
-	gint i;
 
-	seq = g_new0 (gchar *, g_slist_length (attachments));
-	for (l = attachments, i = 0; l; l = l->next, i++) {
-		seq[i] = g_strdup (l->data);
-	}
+	seq = create_str_array_from_gslist (attachments);
 
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_cal_return_error (method, error, _("Could not retrieve attachment list: %s"));
+		data_cal_return_error (invocation, error, _("Could not retrieve attachment list: %s"));
 		g_error_free (error);
 	} else
-		dbus_g_method_return (method, seq);
+		e_gdbus_cal_complete_get_attachment_list (cal->priv->gdbus_object, invocation, (const gchar * const *) seq);
+
+	g_free (seq);
 }
 
 /**
@@ -992,13 +953,13 @@ e_data_cal_notify_query (EDataCal *cal, EServerMethodContext context, GError *er
 	 * Only have a seperate notify function to follow suit with the rest of this
 	 * file - it'd be much easier to just do the return in the above function
 	 */
-	DBusGMethodInvocation *method = context;
+	GDBusMethodInvocation *invocation = context;
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_cal_return_error (method, error, _("Could not complete calendar query: %s"));
+		data_cal_return_error (invocation, error, _("Could not complete calendar query: %s"));
 		g_error_free (error);
 	} else
-		dbus_g_method_return (method, query);
+		e_gdbus_cal_complete_get_query (cal->priv->gdbus_object, invocation, query);
 }
 
 /**
@@ -1012,13 +973,13 @@ e_data_cal_notify_query (EDataCal *cal, EServerMethodContext context, GError *er
 void
 e_data_cal_notify_timezone_requested (EDataCal *cal, EServerMethodContext context, GError *error, const gchar *object)
 {
-	DBusGMethodInvocation *method = context;
+	GDBusMethodInvocation *invocation = context;
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_cal_return_error (method, error, _("Could not retrieve calendar time zone: %s"));
+		data_cal_return_error (invocation, error, _("Could not retrieve calendar time zone: %s"));
 		g_error_free (error);
 	} else
-		dbus_g_method_return (method, object ? object : "");
+		e_gdbus_cal_complete_get_timezone (cal->priv->gdbus_object, invocation, object ? object : "");
 }
 
 /**
@@ -1032,13 +993,13 @@ e_data_cal_notify_timezone_requested (EDataCal *cal, EServerMethodContext contex
 void
 e_data_cal_notify_timezone_added (EDataCal *cal, EServerMethodContext context, GError *error, const gchar *tzid)
 {
-	DBusGMethodInvocation *method = context;
+	GDBusMethodInvocation *invocation = context;
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_cal_return_error (method, error, _("Could not add calendar time zone: %s"));
+		data_cal_return_error (invocation, error, _("Could not add calendar time zone: %s"));
 		g_error_free (error);
 	} else
-		dbus_g_method_return (method, tzid ? tzid : "");
+		e_gdbus_cal_complete_add_timezone (cal->priv->gdbus_object, invocation);
 }
 
 /**
@@ -1051,13 +1012,13 @@ e_data_cal_notify_timezone_added (EDataCal *cal, EServerMethodContext context, G
 void
 e_data_cal_notify_default_timezone_set (EDataCal *cal, EServerMethodContext context, GError *error)
 {
-	DBusGMethodInvocation *method = context;
+	GDBusMethodInvocation *invocation = context;
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_cal_return_error (method, error, _("Could not set default calendar time zone: %s"));
+		data_cal_return_error (invocation, error, _("Could not set default calendar time zone: %s"));
 		g_error_free (error);
 	} else
-		dbus_g_method_return (method);
+		e_gdbus_cal_complete_set_default_timezone (cal->priv->gdbus_object, invocation);
 }
 
 /**
@@ -1074,44 +1035,23 @@ void
 e_data_cal_notify_changes (EDataCal *cal, EServerMethodContext context, GError *error,
 			   GList *adds, GList *modifies, GList *deletes)
 {
-	DBusGMethodInvocation *method = context;
+	GDBusMethodInvocation *invocation = context;
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_cal_return_error (method, error, _("Cannot retrieve calendar changes: %s"));
+		data_cal_return_error (invocation, error, _("Cannot retrieve calendar changes: %s"));
 		g_error_free (error);
 	} else {
 		gchar **additions, **modifications, **removals;
-		GList *l;
-		gint i;
 
-		additions = NULL;
-		if (adds) {
-			additions = g_new0 (gchar *, g_list_length (adds) + 1);
-			if (additions)
-				for (i = 0, l = adds; l; i++, l = l->next)
-					additions[i] = g_strdup (l->data);
-		}
-
-		modifications = NULL;
-		if (modifies) {
-			modifications = g_new0 (gchar *, g_list_length (modifies) + 1);
-			if (modifications)
-				for (i = 0, l = modifies; l; i++, l = l->next)
-					modifications[i] = g_strdup (l->data);
-		}
-
-		removals = NULL;
-		if (deletes) {
-			removals = g_new0 (gchar *, g_list_length (deletes) + 1);
-			if (removals)
-				for (i = 0, l = deletes; l; i++, l = l->next)
-					removals[i] = g_strdup (l->data);
-		}
-
-		dbus_g_method_return (method, additions, modifications, removals);
-		if (additions) g_strfreev (additions);
-		if (modifications) g_strfreev (modifications);
-		if (removals) g_strfreev (removals);
+		additions = create_str_array_from_glist (adds);
+		modifications = create_str_array_from_glist (modifies);
+		removals = create_str_array_from_glist (deletes);
+
+		e_gdbus_cal_complete_get_changes (cal->priv->gdbus_object, invocation, (const gchar * const *) additions, (const gchar * const *) modifications, (const gchar * const *) removals);
+
+		g_free (additions);
+		g_free (modifications);
+		g_free (removals);
 	}
 }
 
@@ -1126,23 +1066,19 @@ e_data_cal_notify_changes (EDataCal *cal, EServerMethodContext context, GError *
 void
 e_data_cal_notify_free_busy (EDataCal *cal, EServerMethodContext context, GError *error, GList *freebusy)
 {
-	DBusGMethodInvocation *method = context;
+	GDBusMethodInvocation *invocation = context;
 	if (error) {
 		/* Translators: The '%s' is replaced with a detailed error message */
-		data_cal_return_error (method, error, _("Cannot retrieve calendar free/busy list: %s"));
+		data_cal_return_error (invocation, error, _("Cannot retrieve calendar free/busy list: %s"));
 		g_error_free (error);
 	} else {
 		gchar **seq;
-		GList *l;
-		gint i;
 
-		seq = g_new0 (gchar *, g_list_length (freebusy) + 1);
-		for (i = 0, l = freebusy; l; i++, l = l->next) {
-			seq[i] = g_strdup (l->data);
-		}
+		seq = create_str_array_from_glist (freebusy);
+
+		e_gdbus_cal_complete_get_free_busy (cal->priv->gdbus_object, invocation, (const gchar * const *) seq);
 
-		dbus_g_method_return (method, seq);
-		g_strfreev (seq);
+		g_free (seq);
 	}
 }
 
@@ -1162,7 +1098,7 @@ e_data_cal_notify_mode (EDataCal *cal,
 	g_return_if_fail (cal != NULL);
 	g_return_if_fail (E_IS_DATA_CAL (cal));
 
-	g_signal_emit (cal, signals[MODE], 0, mode);
+	e_gdbus_cal_emit_mode (cal->priv->gdbus_object, mode);
 }
 
 /**
@@ -1177,7 +1113,7 @@ e_data_cal_notify_auth_required (EDataCal *cal)
 	g_return_if_fail (cal != NULL);
 	g_return_if_fail (E_IS_DATA_CAL (cal));
 
-	g_signal_emit (cal, signals[AUTH_REQUIRED], 0);
+	e_gdbus_cal_emit_auth_required (cal->priv->gdbus_object);
 }
 
 /**
@@ -1193,5 +1129,97 @@ e_data_cal_notify_error (EDataCal *cal, const gchar *message)
 	g_return_if_fail (cal != NULL);
 	g_return_if_fail (E_IS_DATA_CAL (cal));
 
-	g_signal_emit (cal, signals[BACKEND_ERROR], 0, message);
+	e_gdbus_cal_emit_backend_error (cal->priv->gdbus_object, message);
+}
+
+/* Instance init */
+static void
+e_data_cal_init (EDataCal *ecal)
+{
+	EGdbusCal *gdbus_object;
+
+	ecal->priv = E_DATA_CAL_GET_PRIVATE (ecal);
+
+	ecal->priv->gdbus_object = e_gdbus_cal_stub_new ();
+
+	gdbus_object = ecal->priv->gdbus_object;
+	g_signal_connect (gdbus_object, "handle-get-uri", G_CALLBACK (impl_Cal_getUri), ecal);
+	g_signal_connect (gdbus_object, "handle-get-cache-dir", G_CALLBACK (impl_Cal_getCacheDir), ecal);
+	g_signal_connect (gdbus_object, "handle-open", G_CALLBACK (impl_Cal_open), ecal);
+	g_signal_connect (gdbus_object, "handle-refresh", G_CALLBACK (impl_Cal_refresh), ecal);
+	g_signal_connect (gdbus_object, "handle-close", G_CALLBACK (impl_Cal_close), ecal);
+	g_signal_connect (gdbus_object, "handle-remove", G_CALLBACK (impl_Cal_remove), ecal);
+	g_signal_connect (gdbus_object, "handle-is-read-only", G_CALLBACK (impl_Cal_isReadOnly), ecal);
+	g_signal_connect (gdbus_object, "handle-get-cal-address", G_CALLBACK (impl_Cal_getCalAddress), ecal);
+	g_signal_connect (gdbus_object, "handle-get-alarm-email-address", G_CALLBACK (impl_Cal_getAlarmEmailAddress), ecal);
+	g_signal_connect (gdbus_object, "handle-get-ldap-attribute", G_CALLBACK (impl_Cal_getLdapAttribute), ecal);
+	g_signal_connect (gdbus_object, "handle-get-scheduling-information", G_CALLBACK (impl_Cal_getSchedulingInformation), ecal);
+	g_signal_connect (gdbus_object, "handle-set-mode", G_CALLBACK (impl_Cal_setMode), ecal);
+	g_signal_connect (gdbus_object, "handle-get-default-object", G_CALLBACK (impl_Cal_getDefaultObject), ecal);
+	g_signal_connect (gdbus_object, "handle-get-object", G_CALLBACK (impl_Cal_getObject), ecal);
+	g_signal_connect (gdbus_object, "handle-get-object-list", G_CALLBACK (impl_Cal_getObjectList), ecal);
+	g_signal_connect (gdbus_object, "handle-get-changes", G_CALLBACK (impl_Cal_getChanges), ecal);
+	g_signal_connect (gdbus_object, "handle-get-free-busy", G_CALLBACK (impl_Cal_getFreeBusy), ecal);
+	g_signal_connect (gdbus_object, "handle-discard-alarm", G_CALLBACK (impl_Cal_discardAlarm), ecal);
+	g_signal_connect (gdbus_object, "handle-create-object", G_CALLBACK (impl_Cal_createObject), ecal);
+	g_signal_connect (gdbus_object, "handle-modify-object", G_CALLBACK (impl_Cal_modifyObject), ecal);
+	g_signal_connect (gdbus_object, "handle-remove-object", G_CALLBACK (impl_Cal_removeObject), ecal);
+	g_signal_connect (gdbus_object, "handle-receive-objects", G_CALLBACK (impl_Cal_receiveObjects), ecal);
+	g_signal_connect (gdbus_object, "handle-send-objects", G_CALLBACK (impl_Cal_sendObjects), ecal);
+	g_signal_connect (gdbus_object, "handle-get-attachment-list", G_CALLBACK (impl_Cal_getAttachmentList), ecal);
+	g_signal_connect (gdbus_object, "handle-get-query", G_CALLBACK (impl_Cal_getQuery), ecal);
+	g_signal_connect (gdbus_object, "handle-get-timezone", G_CALLBACK (impl_Cal_getTimezone), ecal);
+	g_signal_connect (gdbus_object, "handle-add-timezone", G_CALLBACK (impl_Cal_addTimezone), ecal);
+	g_signal_connect (gdbus_object, "handle-set-default-timezone", G_CALLBACK (impl_Cal_setDefaultTimezone), ecal);
+}
+
+static void
+e_data_cal_finalize (GObject *object)
+{
+	EDataCal *cal = E_DATA_CAL (object);
+
+	g_return_if_fail (cal != NULL);
+
+	g_object_unref (cal->priv->gdbus_object);
+
+	if (G_OBJECT_CLASS (e_data_cal_parent_class)->finalize)
+		G_OBJECT_CLASS (e_data_cal_parent_class)->finalize (object);
+}
+
+/* Class init */
+static void
+e_data_cal_class_init (EDataCalClass *klass)
+{
+	GObjectClass *object_class;
+
+	g_type_class_add_private (klass, sizeof (EDataCalPrivate));
+
+	object_class = G_OBJECT_CLASS (klass);
+	object_class->finalize = e_data_cal_finalize;
+}
+
+EDataCal *
+e_data_cal_new (ECalBackend *backend, ESource *source)
+{
+	EDataCal *cal;
+	cal = g_object_new (E_TYPE_DATA_CAL, NULL);
+	cal->priv->backend = backend;
+	cal->priv->source = source;
+	return cal;
+}
+
+/**
+ * e_data_cal_register_gdbus_object:
+ *
+ * Registers GDBus object of this EDataCal.
+ **/
+guint
+e_data_cal_register_gdbus_object (EDataCal *cal, GDBusConnection *connection, const gchar *object_path, GError **error)
+{
+	g_return_val_if_fail (cal != NULL, 0);
+	g_return_val_if_fail (E_IS_DATA_CAL (cal), 0);
+	g_return_val_if_fail (connection != NULL, 0);
+	g_return_val_if_fail (object_path != NULL, 0);
+
+	return e_gdbus_cal_register_object (cal->priv->gdbus_object, connection, object_path, error);
 }
diff --git a/calendar/libedata-cal/e-data-cal.h b/calendar/libedata-cal/e-data-cal.h
index 81b9940..10eefcf 100644
--- a/calendar/libedata-cal/e-data-cal.h
+++ b/calendar/libedata-cal/e-data-cal.h
@@ -24,7 +24,7 @@
 #define E_DATA_CAL_H
 
 #include <glib-object.h>
-#include <dbus/dbus-glib.h>
+#include <gio/gio.h>
 #include <libedata-cal/e-data-cal-common.h>
 #include <libedata-cal/e-data-cal-view.h>
 #include <libedata-cal/e-data-cal-types.h>
@@ -100,6 +100,8 @@ GType e_data_cal_get_type (void);
 
 EDataCal *e_data_cal_new (ECalBackend *backend, ESource *source);
 
+guint e_data_cal_register_gdbus_object (EDataCal *cal, GDBusConnection *connection, const gchar *object_path, GError **error);
+
 ECalBackend *e_data_cal_get_backend (EDataCal *cal);
 ESource* e_data_cal_get_source (EDataCal *cal);
 
diff --git a/calendar/libegdbus/Makefile.am b/calendar/libegdbus/Makefile.am
new file mode 100644
index 0000000..b314368
--- /dev/null
+++ b/calendar/libegdbus/Makefile.am
@@ -0,0 +1,38 @@
+GDBUS_XML_FILES =				\
+	../libedata-cal/e-data-cal-factory.xml	\
+	../libedata-cal/e-data-cal-view.xml	\
+	../libedata-cal/e-data-cal.xml
+
+gdbus-files: $(GDBUS_XML_FILES)
+	gdbus-codegen --namespace=EGdbus --strip-prefix=org.gnome.evolution.dataserver.calendar --output-prefix=e-gdbus $(GDBUS_XML_FILES)
+	rm e-gdbus-bindings.h
+	rm e-gdbus-bindings.stamp
+
+# The library
+noinst_LTLIBRARIES = libegdbus-cal.la
+
+libegdbus_cal_la_CPPFLAGS =			\
+	$(AM_CPPFLAGS)				\
+	-DG_LOG_DOMAIN=\"libegdbus-cal\"	\
+	-I$(top_srcdir)/calendar		\
+	$(GNOME_PLATFORM_CFLAGS)
+
+libegdbus_cal_la_SOURCES =			\
+	e-gdbus-egdbuscal.h			\
+	e-gdbus-egdbuscal.c			\
+	e-gdbus-egdbuscalfactory.h		\
+	e-gdbus-egdbuscalfactory.c		\
+	e-gdbus-egdbuscalview.h			\
+	e-gdbus-egdbuscalview.c			\
+	e-gdbus-marshallers.h			\
+	e-gdbus-marshallers.c			\
+	e-gdbus-typemappers.h
+
+libegdbus_cal_la_LIBADD =			\
+	$(GNOME_PLATFORM_LIBS)
+
+libegdbus_cal_la_LDFLAGS = $(NO_UNDEFINED)
+
+EXTRA_DIST = e-gdbus-marshallers.list
+
+-include $(top_srcdir)/git.mk
diff --git a/calendar/libegdbus/e-gdbus-egdbuscal.c b/calendar/libegdbus/e-gdbus-egdbuscal.c
new file mode 100644
index 0000000..ff85a77
--- /dev/null
+++ b/calendar/libegdbus/e-gdbus-egdbuscal.c
@@ -0,0 +1,7289 @@
+/* File:       e-gdbus-egdbuscal.c
+ *
+ * GType name: EGdbusCal
+ * D-Bus name: org.gnome.evolution.dataserver.calendar.Cal
+ *
+ * Generated by GDBus Binding Tool 0.1. DO NOT EDIT.
+ */
+
+/**
+ * SECTION:e-gdbus-egdbuscal
+ * @title: EGdbusCal
+ * @short_description: Wraps the org.gnome.evolution.dataserver.calendar.Cal D-Bus interface
+ * @include: gio/gio.h
+ *
+ * The abstract #EGdbusCal interface type wraps the <literal>org.gnome.evolution.dataserver.calendar.Cal</literal> D-Bus interface. Two concrete implementations of this type are included: #EGdbusCalProxy and #EGdbusCalStub.
+ *
+ * The generated proxy type #EGdbusCalProxy is typically used with the generated constructors e_gdbus_cal_proxy_new(), e_gdbus_cal_proxy_new_sync() and e_gdbus_cal_proxy_new_for_bus(), e_gdbus_cal_proxy_new_for_bus_sync().
+ *
+ * The generated stub type #EGdbusCalStub takes care of handling properties, method invocations and signal emissions. Simply use e_gdbus_cal_stub_new(), set some properties and connect to any of the handle-* signals to handle method invocations. Finally use e_gdbus_cal_register_object() to export the object on a #GDBusConnection.
+ * |[
+ * /<!-- -->* You can also use g_object_new() with E_GDBUS_TYPE_CAL_STUB
+ *  * to set properties at construction time.
+ *  *<!-- -->/
+ * object = e_gdbus_cal_stub_new ();
+ * e_gdbus_cal_set_&lt;property_name&gt; (object, &lt;value_for_property&gt;);
+ * [...]
+ *
+ * g_signal_connect (object,
+ *                   "handle-&lt;method-name&gt;",
+ *                   G_CALLBACK (on_handle_&lt;method_name&gt;),
+ *                   some_user_data);
+ * [...]
+ *
+ * error = NULL;
+ * id = e_gdbus_cal_register_object (object,
+ *                                   connection,
+ *                                   "/path/of/object",
+ *                                   &error);
+ * ]|
+ *
+ * You don't <emphasis>have</emphasis> to use the generated stub type to export
+ * objects. Any type implementing the #EGdbusCal interface may be used with
+ * e_gdbus_cal_register_object().
+ *
+ * Once exported, you can make the exported object emit D-Bus signals by simply
+ * emitting the corresponding GType signals. For better type-safety, you can use,
+ * the provided e_gdbus_cal_emit_*() helpers.
+ *
+ * For property changes, #GObject::notify signal emissions on exported objects 
+ * will be intercepted and queued. In an idle handler, the queued notifications
+ * are processed and a single <literal>PropertiesChanged</literal> signal (on the
+ * <literal>org.freedesktop.DBus.Properties</literal> interface) will be emitted
+ * for all the properties that changed (possibly containing several properties).
+ * Use e_gdbus_cal_drain_notify() to drain the queue immediately.
+ */
+
+#include "e-gdbus-egdbuscal.h"
+#include "e-gdbus-typemappers.h"
+#include "e-gdbus-marshallers.h"
+
+typedef EGdbusCalIface EGdbusCalInterface;
+G_DEFINE_INTERFACE (EGdbusCal, e_gdbus_cal, G_TYPE_OBJECT);
+
+
+enum
+{
+  _0_SIGNAL,
+  __AUTH_REQUIRED_SIGNAL,
+  __BACKEND_ERROR_SIGNAL,
+  __READONLY_SIGNAL,
+  __MODE_SIGNAL,
+  __GET_URI_METHOD,
+  __GET_CACHE_DIR_METHOD,
+  __OPEN_METHOD,
+  __REFRESH_METHOD,
+  __CLOSE_METHOD,
+  __REMOVE_METHOD,
+  __IS_READ_ONLY_METHOD,
+  __GET_CAL_ADDRESS_METHOD,
+  __GET_ALARM_EMAIL_ADDRESS_METHOD,
+  __GET_LDAP_ATTRIBUTE_METHOD,
+  __GET_SCHEDULING_INFORMATION_METHOD,
+  __SET_MODE_METHOD,
+  __GET_DEFAULT_OBJECT_METHOD,
+  __GET_OBJECT_METHOD,
+  __GET_OBJECT_LIST_METHOD,
+  __GET_CHANGES_METHOD,
+  __GET_FREE_BUSY_METHOD,
+  __DISCARD_ALARM_METHOD,
+  __CREATE_OBJECT_METHOD,
+  __MODIFY_OBJECT_METHOD,
+  __REMOVE_OBJECT_METHOD,
+  __RECEIVE_OBJECTS_METHOD,
+  __SEND_OBJECTS_METHOD,
+  __GET_ATTACHMENT_LIST_METHOD,
+  __GET_QUERY_METHOD,
+  __GET_TIMEZONE_METHOD,
+  __ADD_TIMEZONE_METHOD,
+  __SET_DEFAULT_TIMEZONE_METHOD,
+  __LAST_SIGNAL
+};
+
+static guint signals[__LAST_SIGNAL] = {0};
+
+
+enum
+{
+  PROP_0,
+};
+
+/* ------------------------------------------------------------------------- */
+
+/* Various lookup tables */
+
+static GHashTable *_method_name_to_id = NULL;
+static GHashTable *_signal_name_to_id = NULL;
+static GHashTable *_property_name_to_id = NULL;
+static GHashTable *_property_gname_to_name = NULL;
+static GHashTable *_property_name_to_gname = NULL;
+
+
+static guint
+lookup_method_id_from_method_name (const gchar *method_name)
+{
+  return GPOINTER_TO_UINT (g_hash_table_lookup (_method_name_to_id, method_name));
+}
+
+static guint
+lookup_signal_id_from_signal_name (const gchar *signal_name)
+{
+  return GPOINTER_TO_UINT (g_hash_table_lookup (_signal_name_to_id, signal_name));
+}
+
+static guint
+lookup_property_id_from_property_name (const gchar *property_name)
+{
+  return GPOINTER_TO_UINT (g_hash_table_lookup (_property_name_to_id, property_name));
+}
+
+static const gchar *
+lookup_property_name_from_property_gname (const gchar *property_gname)
+{
+  return g_hash_table_lookup (_property_gname_to_name, property_gname);
+}
+
+static const gchar *
+lookup_property_gname_from_property_name (const gchar *property_name)
+{
+  return g_hash_table_lookup (_property_name_to_gname, property_name);
+}
+
+/* ------------------------------------------------------------------------- */
+static gboolean
+signal_emission_hook_cb_auth_required (GSignalInvocationHint *ihint,
+                         guint                  n_param_values,
+                         const GValue          *param_values,
+                         gpointer               user_data)
+{
+  GObject *object;
+  GDBusConnection *connection;
+  const gchar *path;
+  GVariant *params;
+
+  if (n_param_values < 1 || !G_VALUE_HOLDS (&param_values[0], G_TYPE_OBJECT))
+    goto out;
+  object = g_value_get_object (&param_values[0]);
+  path = g_object_get_data (object, "gdbus-codegen-path");
+  connection = g_object_get_data (object, "gdbus-codegen-connection");
+  if (connection == NULL || path == NULL)
+    goto out;
+
+  params = NULL;
+
+  g_dbus_connection_emit_signal (connection,
+                                 NULL,
+                                 path,
+                                 "org.gnome.evolution.dataserver.calendar.Cal",
+                                 "auth_required",
+                                 params,
+                                 NULL);
+out:
+  return TRUE;
+}
+
+static gboolean
+signal_emission_hook_cb_backend_error (GSignalInvocationHint *ihint,
+                         guint                  n_param_values,
+                         const GValue          *param_values,
+                         gpointer               user_data)
+{
+  GObject *object;
+  GDBusConnection *connection;
+  const gchar *path;
+  GVariant *params;
+  GVariant *item;
+  GVariantBuilder *builder;
+
+  if (n_param_values < 1 || !G_VALUE_HOLDS (&param_values[0], G_TYPE_OBJECT))
+    goto out;
+  object = g_value_get_object (&param_values[0]);
+  path = g_object_get_data (object, "gdbus-codegen-path");
+  connection = g_object_get_data (object, "gdbus-codegen-connection");
+  if (connection == NULL || path == NULL)
+    goto out;
+
+  builder = g_variant_builder_new (G_VARIANT_TYPE_TUPLE);
+  g_assert_cmpint (n_param_values - 1, ==, 1);
+  param_values++;
+  item = g_variant_new ("s", g_value_get_string (param_values));
+  g_variant_builder_add_value (builder, item);
+  param_values++;
+  params = g_variant_builder_end (builder);
+  g_variant_builder_unref (builder);
+
+  g_dbus_connection_emit_signal (connection,
+                                 NULL,
+                                 path,
+                                 "org.gnome.evolution.dataserver.calendar.Cal",
+                                 "backend_error",
+                                 params,
+                                 NULL);
+out:
+  return TRUE;
+}
+
+static gboolean
+signal_emission_hook_cb_readonly (GSignalInvocationHint *ihint,
+                         guint                  n_param_values,
+                         const GValue          *param_values,
+                         gpointer               user_data)
+{
+  GObject *object;
+  GDBusConnection *connection;
+  const gchar *path;
+  GVariant *params;
+  GVariant *item;
+  GVariantBuilder *builder;
+
+  if (n_param_values < 1 || !G_VALUE_HOLDS (&param_values[0], G_TYPE_OBJECT))
+    goto out;
+  object = g_value_get_object (&param_values[0]);
+  path = g_object_get_data (object, "gdbus-codegen-path");
+  connection = g_object_get_data (object, "gdbus-codegen-connection");
+  if (connection == NULL || path == NULL)
+    goto out;
+
+  builder = g_variant_builder_new (G_VARIANT_TYPE_TUPLE);
+  g_assert_cmpint (n_param_values - 1, ==, 1);
+  param_values++;
+  item = g_variant_new_boolean (g_value_get_boolean (param_values));
+  g_variant_builder_add_value (builder, item);
+  param_values++;
+  params = g_variant_builder_end (builder);
+  g_variant_builder_unref (builder);
+
+  g_dbus_connection_emit_signal (connection,
+                                 NULL,
+                                 path,
+                                 "org.gnome.evolution.dataserver.calendar.Cal",
+                                 "readonly",
+                                 params,
+                                 NULL);
+out:
+  return TRUE;
+}
+
+static gboolean
+signal_emission_hook_cb_mode (GSignalInvocationHint *ihint,
+                         guint                  n_param_values,
+                         const GValue          *param_values,
+                         gpointer               user_data)
+{
+  GObject *object;
+  GDBusConnection *connection;
+  const gchar *path;
+  GVariant *params;
+  GVariant *item;
+  GVariantBuilder *builder;
+
+  if (n_param_values < 1 || !G_VALUE_HOLDS (&param_values[0], G_TYPE_OBJECT))
+    goto out;
+  object = g_value_get_object (&param_values[0]);
+  path = g_object_get_data (object, "gdbus-codegen-path");
+  connection = g_object_get_data (object, "gdbus-codegen-connection");
+  if (connection == NULL || path == NULL)
+    goto out;
+
+  builder = g_variant_builder_new (G_VARIANT_TYPE_TUPLE);
+  g_assert_cmpint (n_param_values - 1, ==, 1);
+  param_values++;
+  item = g_variant_new_int32 (g_value_get_int (param_values));
+  g_variant_builder_add_value (builder, item);
+  param_values++;
+  params = g_variant_builder_end (builder);
+  g_variant_builder_unref (builder);
+
+  g_dbus_connection_emit_signal (connection,
+                                 NULL,
+                                 path,
+                                 "org.gnome.evolution.dataserver.calendar.Cal",
+                                 "mode",
+                                 params,
+                                 NULL);
+out:
+  return TRUE;
+}
+
+static void
+e_gdbus_cal_default_init (EGdbusCalIface *iface)
+{
+
+  /* Build lookup structures */
+  _method_name_to_id = g_hash_table_new (g_str_hash, g_str_equal);
+  _signal_name_to_id = g_hash_table_new (g_str_hash, g_str_equal);
+  _property_name_to_id = g_hash_table_new (g_str_hash, g_str_equal);
+  _property_gname_to_name = g_hash_table_new (g_str_hash, g_str_equal);
+  _property_name_to_gname = g_hash_table_new (g_str_hash, g_str_equal);
+  g_hash_table_insert (_method_name_to_id, (gpointer) "getUri", GUINT_TO_POINTER (__GET_URI_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "getCacheDir", GUINT_TO_POINTER (__GET_CACHE_DIR_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "open", GUINT_TO_POINTER (__OPEN_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "refresh", GUINT_TO_POINTER (__REFRESH_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "close", GUINT_TO_POINTER (__CLOSE_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "remove", GUINT_TO_POINTER (__REMOVE_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "isReadOnly", GUINT_TO_POINTER (__IS_READ_ONLY_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "getCalAddress", GUINT_TO_POINTER (__GET_CAL_ADDRESS_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "getAlarmEmailAddress", GUINT_TO_POINTER (__GET_ALARM_EMAIL_ADDRESS_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "getLdapAttribute", GUINT_TO_POINTER (__GET_LDAP_ATTRIBUTE_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "getSchedulingInformation", GUINT_TO_POINTER (__GET_SCHEDULING_INFORMATION_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "setMode", GUINT_TO_POINTER (__SET_MODE_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "getDefaultObject", GUINT_TO_POINTER (__GET_DEFAULT_OBJECT_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "getObject", GUINT_TO_POINTER (__GET_OBJECT_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "getObjectList", GUINT_TO_POINTER (__GET_OBJECT_LIST_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "getChanges", GUINT_TO_POINTER (__GET_CHANGES_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "getFreeBusy", GUINT_TO_POINTER (__GET_FREE_BUSY_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "discardAlarm", GUINT_TO_POINTER (__DISCARD_ALARM_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "createObject", GUINT_TO_POINTER (__CREATE_OBJECT_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "modifyObject", GUINT_TO_POINTER (__MODIFY_OBJECT_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "removeObject", GUINT_TO_POINTER (__REMOVE_OBJECT_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "receiveObjects", GUINT_TO_POINTER (__RECEIVE_OBJECTS_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "sendObjects", GUINT_TO_POINTER (__SEND_OBJECTS_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "getAttachmentList", GUINT_TO_POINTER (__GET_ATTACHMENT_LIST_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "getQuery", GUINT_TO_POINTER (__GET_QUERY_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "getTimezone", GUINT_TO_POINTER (__GET_TIMEZONE_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "addTimezone", GUINT_TO_POINTER (__ADD_TIMEZONE_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "setDefaultTimezone", GUINT_TO_POINTER (__SET_DEFAULT_TIMEZONE_METHOD));
+  g_hash_table_insert (_signal_name_to_id, (gpointer) "auth_required", GUINT_TO_POINTER (__AUTH_REQUIRED_SIGNAL));
+  g_hash_table_insert (_signal_name_to_id, (gpointer) "backend_error", GUINT_TO_POINTER (__BACKEND_ERROR_SIGNAL));
+  g_hash_table_insert (_signal_name_to_id, (gpointer) "readonly", GUINT_TO_POINTER (__READONLY_SIGNAL));
+  g_hash_table_insert (_signal_name_to_id, (gpointer) "mode", GUINT_TO_POINTER (__MODE_SIGNAL));
+
+  /* GObject signals definitions for D-Bus signals: */
+  /**
+   * EGdbusCal::auth-required:
+   * @object: The object emitting the signal.
+   *
+   * Represents the D-Bus signal <literal>auth_required</literal>.
+   *
+   * On proxies, connect to this signal to get notified whenever the remote
+   * object instances emits the signal (similar to how the
+   * #GDBusProxy::g-signal works). The signal is emitted in the
+   * thread-default main loop of the thread that the proxy was created in.
+   *
+   * On exported objects, emitting this signal causes the actual D-Bus signal to be emitted. You can use e_gdbus_cal_emit_auth_required() to do this.
+   */  signals[__AUTH_REQUIRED_SIGNAL] =
+    g_signal_new ("auth-required",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, auth_required),
+                  NULL,
+                  NULL,
+                  g_cclosure_marshal_VOID__VOID,
+                  G_TYPE_NONE,
+                  0);
+  g_signal_add_emission_hook (signals[__AUTH_REQUIRED_SIGNAL],
+                              0,
+                              signal_emission_hook_cb_auth_required,
+                              (gpointer) "auth_required",
+                              NULL);
+
+  /**
+   * EGdbusCal::backend-error:
+   * @object: The object emitting the signal.
+   * @error: Parameter.
+   *
+   * Represents the D-Bus signal <literal>backend_error</literal>.
+   *
+   * On proxies, connect to this signal to get notified whenever the remote
+   * object instances emits the signal (similar to how the
+   * #GDBusProxy::g-signal works). The signal is emitted in the
+   * thread-default main loop of the thread that the proxy was created in.
+   *
+   * On exported objects, emitting this signal causes the actual D-Bus signal to be emitted. You can use e_gdbus_cal_emit_backend_error() to do this.
+   */  signals[__BACKEND_ERROR_SIGNAL] =
+    g_signal_new ("backend-error",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, backend_error),
+                  NULL,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_VOID__STRING,
+                  G_TYPE_NONE,
+                  1,
+                  G_TYPE_STRING);
+  g_signal_add_emission_hook (signals[__BACKEND_ERROR_SIGNAL],
+                              0,
+                              signal_emission_hook_cb_backend_error,
+                              (gpointer) "backend_error",
+                              NULL);
+
+  /**
+   * EGdbusCal::readonly:
+   * @object: The object emitting the signal.
+   * @is_readonly: Parameter.
+   *
+   * Represents the D-Bus signal <literal>readonly</literal>.
+   *
+   * On proxies, connect to this signal to get notified whenever the remote
+   * object instances emits the signal (similar to how the
+   * #GDBusProxy::g-signal works). The signal is emitted in the
+   * thread-default main loop of the thread that the proxy was created in.
+   *
+   * On exported objects, emitting this signal causes the actual D-Bus signal to be emitted. You can use e_gdbus_cal_emit_readonly() to do this.
+   */  signals[__READONLY_SIGNAL] =
+    g_signal_new ("readonly",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, readonly),
+                  NULL,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_VOID__BOOLEAN,
+                  G_TYPE_NONE,
+                  1,
+                  G_TYPE_BOOLEAN);
+  g_signal_add_emission_hook (signals[__READONLY_SIGNAL],
+                              0,
+                              signal_emission_hook_cb_readonly,
+                              (gpointer) "readonly",
+                              NULL);
+
+  /**
+   * EGdbusCal::mode:
+   * @object: The object emitting the signal.
+   * @mode: Parameter.
+   *
+   * Represents the D-Bus signal <literal>mode</literal>.
+   *
+   * On proxies, connect to this signal to get notified whenever the remote
+   * object instances emits the signal (similar to how the
+   * #GDBusProxy::g-signal works). The signal is emitted in the
+   * thread-default main loop of the thread that the proxy was created in.
+   *
+   * On exported objects, emitting this signal causes the actual D-Bus signal to be emitted. You can use e_gdbus_cal_emit_mode() to do this.
+   */  signals[__MODE_SIGNAL] =
+    g_signal_new ("mode",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, mode),
+                  NULL,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_VOID__INT,
+                  G_TYPE_NONE,
+                  1,
+                  G_TYPE_INT);
+  g_signal_add_emission_hook (signals[__MODE_SIGNAL],
+                              0,
+                              signal_emission_hook_cb_mode,
+                              (gpointer) "mode",
+                              NULL);
+
+
+  /* GObject signals definitions for D-Bus methods: */
+  /**
+   * EGdbusCal::handle-get-uri:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>getUri</literal> D-Bus method on @object. Use e_gdbus_cal_complete_get_uri() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__GET_URI_METHOD] =
+    g_signal_new ("handle-get-uri",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, handle_get_uri),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT,
+                  G_TYPE_BOOLEAN,
+                  1,
+                  G_TYPE_DBUS_METHOD_INVOCATION);
+  /**
+   * EGdbusCal::handle-get-cache-dir:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>getCacheDir</literal> D-Bus method on @object. Use e_gdbus_cal_complete_get_cache_dir() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__GET_CACHE_DIR_METHOD] =
+    g_signal_new ("handle-get-cache-dir",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, handle_get_cache_dir),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT,
+                  G_TYPE_BOOLEAN,
+                  1,
+                  G_TYPE_DBUS_METHOD_INVOCATION);
+  /**
+   * EGdbusCal::handle-open:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   * @only_if_exists: Parameter.
+   * @username: Parameter.
+   * @password: Parameter.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>open</literal> D-Bus method on @object. Use e_gdbus_cal_complete_open() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__OPEN_METHOD] =
+    g_signal_new ("handle-open",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, handle_open),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_BOOLEAN_STRING_STRING,
+                  G_TYPE_BOOLEAN,
+                  4,
+                  G_TYPE_DBUS_METHOD_INVOCATION,
+                  G_TYPE_BOOLEAN,
+                  G_TYPE_STRING,
+                  G_TYPE_STRING);
+  /**
+   * EGdbusCal::handle-refresh:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>refresh</literal> D-Bus method on @object. Use e_gdbus_cal_complete_refresh() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__REFRESH_METHOD] =
+    g_signal_new ("handle-refresh",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, handle_refresh),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT,
+                  G_TYPE_BOOLEAN,
+                  1,
+                  G_TYPE_DBUS_METHOD_INVOCATION);
+  /**
+   * EGdbusCal::handle-close:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>close</literal> D-Bus method on @object. Use e_gdbus_cal_complete_close() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__CLOSE_METHOD] =
+    g_signal_new ("handle-close",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, handle_close),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT,
+                  G_TYPE_BOOLEAN,
+                  1,
+                  G_TYPE_DBUS_METHOD_INVOCATION);
+  /**
+   * EGdbusCal::handle-remove:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>remove</literal> D-Bus method on @object. Use e_gdbus_cal_complete_remove() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__REMOVE_METHOD] =
+    g_signal_new ("handle-remove",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, handle_remove),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT,
+                  G_TYPE_BOOLEAN,
+                  1,
+                  G_TYPE_DBUS_METHOD_INVOCATION);
+  /**
+   * EGdbusCal::handle-is-read-only:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>isReadOnly</literal> D-Bus method on @object. Use e_gdbus_cal_complete_is_read_only() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__IS_READ_ONLY_METHOD] =
+    g_signal_new ("handle-is-read-only",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, handle_is_read_only),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT,
+                  G_TYPE_BOOLEAN,
+                  1,
+                  G_TYPE_DBUS_METHOD_INVOCATION);
+  /**
+   * EGdbusCal::handle-get-cal-address:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>getCalAddress</literal> D-Bus method on @object. Use e_gdbus_cal_complete_get_cal_address() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__GET_CAL_ADDRESS_METHOD] =
+    g_signal_new ("handle-get-cal-address",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, handle_get_cal_address),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT,
+                  G_TYPE_BOOLEAN,
+                  1,
+                  G_TYPE_DBUS_METHOD_INVOCATION);
+  /**
+   * EGdbusCal::handle-get-alarm-email-address:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>getAlarmEmailAddress</literal> D-Bus method on @object. Use e_gdbus_cal_complete_get_alarm_email_address() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__GET_ALARM_EMAIL_ADDRESS_METHOD] =
+    g_signal_new ("handle-get-alarm-email-address",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, handle_get_alarm_email_address),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT,
+                  G_TYPE_BOOLEAN,
+                  1,
+                  G_TYPE_DBUS_METHOD_INVOCATION);
+  /**
+   * EGdbusCal::handle-get-ldap-attribute:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>getLdapAttribute</literal> D-Bus method on @object. Use e_gdbus_cal_complete_get_ldap_attribute() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__GET_LDAP_ATTRIBUTE_METHOD] =
+    g_signal_new ("handle-get-ldap-attribute",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, handle_get_ldap_attribute),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT,
+                  G_TYPE_BOOLEAN,
+                  1,
+                  G_TYPE_DBUS_METHOD_INVOCATION);
+  /**
+   * EGdbusCal::handle-get-scheduling-information:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>getSchedulingInformation</literal> D-Bus method on @object. Use e_gdbus_cal_complete_get_scheduling_information() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__GET_SCHEDULING_INFORMATION_METHOD] =
+    g_signal_new ("handle-get-scheduling-information",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, handle_get_scheduling_information),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT,
+                  G_TYPE_BOOLEAN,
+                  1,
+                  G_TYPE_DBUS_METHOD_INVOCATION);
+  /**
+   * EGdbusCal::handle-set-mode:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   * @mode: Parameter.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>setMode</literal> D-Bus method on @object. Use e_gdbus_cal_complete_set_mode() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__SET_MODE_METHOD] =
+    g_signal_new ("handle-set-mode",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, handle_set_mode),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_UINT,
+                  G_TYPE_BOOLEAN,
+                  2,
+                  G_TYPE_DBUS_METHOD_INVOCATION,
+                  G_TYPE_UINT);
+  /**
+   * EGdbusCal::handle-get-default-object:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>getDefaultObject</literal> D-Bus method on @object. Use e_gdbus_cal_complete_get_default_object() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__GET_DEFAULT_OBJECT_METHOD] =
+    g_signal_new ("handle-get-default-object",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, handle_get_default_object),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT,
+                  G_TYPE_BOOLEAN,
+                  1,
+                  G_TYPE_DBUS_METHOD_INVOCATION);
+  /**
+   * EGdbusCal::handle-get-object:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   * @uid: Parameter.
+   * @rid: Parameter.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>getObject</literal> D-Bus method on @object. Use e_gdbus_cal_complete_get_object() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__GET_OBJECT_METHOD] =
+    g_signal_new ("handle-get-object",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, handle_get_object),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING_STRING,
+                  G_TYPE_BOOLEAN,
+                  3,
+                  G_TYPE_DBUS_METHOD_INVOCATION,
+                  G_TYPE_STRING,
+                  G_TYPE_STRING);
+  /**
+   * EGdbusCal::handle-get-object-list:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   * @sexp: Parameter.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>getObjectList</literal> D-Bus method on @object. Use e_gdbus_cal_complete_get_object_list() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__GET_OBJECT_LIST_METHOD] =
+    g_signal_new ("handle-get-object-list",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, handle_get_object_list),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING,
+                  G_TYPE_BOOLEAN,
+                  2,
+                  G_TYPE_DBUS_METHOD_INVOCATION,
+                  G_TYPE_STRING);
+  /**
+   * EGdbusCal::handle-get-changes:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   * @change_id: Parameter.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>getChanges</literal> D-Bus method on @object. Use e_gdbus_cal_complete_get_changes() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__GET_CHANGES_METHOD] =
+    g_signal_new ("handle-get-changes",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, handle_get_changes),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING,
+                  G_TYPE_BOOLEAN,
+                  2,
+                  G_TYPE_DBUS_METHOD_INVOCATION,
+                  G_TYPE_STRING);
+  /**
+   * EGdbusCal::handle-get-free-busy:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   * @user_list: Parameter.
+   * @start: Parameter.
+   * @end: Parameter.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>getFreeBusy</literal> D-Bus method on @object. Use e_gdbus_cal_complete_get_free_busy() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__GET_FREE_BUSY_METHOD] =
+    g_signal_new ("handle-get-free-busy",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, handle_get_free_busy),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_BOXED_UINT_UINT,
+                  G_TYPE_BOOLEAN,
+                  4,
+                  G_TYPE_DBUS_METHOD_INVOCATION,
+                  G_TYPE_STRV,
+                  G_TYPE_UINT,
+                  G_TYPE_UINT);
+  /**
+   * EGdbusCal::handle-discard-alarm:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   * @uid: Parameter.
+   * @auid: Parameter.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>discardAlarm</literal> D-Bus method on @object. Use e_gdbus_cal_complete_discard_alarm() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__DISCARD_ALARM_METHOD] =
+    g_signal_new ("handle-discard-alarm",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, handle_discard_alarm),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING_STRING,
+                  G_TYPE_BOOLEAN,
+                  3,
+                  G_TYPE_DBUS_METHOD_INVOCATION,
+                  G_TYPE_STRING,
+                  G_TYPE_STRING);
+  /**
+   * EGdbusCal::handle-create-object:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   * @calobj: Parameter.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>createObject</literal> D-Bus method on @object. Use e_gdbus_cal_complete_create_object() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__CREATE_OBJECT_METHOD] =
+    g_signal_new ("handle-create-object",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, handle_create_object),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING,
+                  G_TYPE_BOOLEAN,
+                  2,
+                  G_TYPE_DBUS_METHOD_INVOCATION,
+                  G_TYPE_STRING);
+  /**
+   * EGdbusCal::handle-modify-object:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   * @calobj: Parameter.
+   * @mod: Parameter.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>modifyObject</literal> D-Bus method on @object. Use e_gdbus_cal_complete_modify_object() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__MODIFY_OBJECT_METHOD] =
+    g_signal_new ("handle-modify-object",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, handle_modify_object),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING_UINT,
+                  G_TYPE_BOOLEAN,
+                  3,
+                  G_TYPE_DBUS_METHOD_INVOCATION,
+                  G_TYPE_STRING,
+                  G_TYPE_UINT);
+  /**
+   * EGdbusCal::handle-remove-object:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   * @uid: Parameter.
+   * @rid: Parameter.
+   * @mod: Parameter.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>removeObject</literal> D-Bus method on @object. Use e_gdbus_cal_complete_remove_object() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__REMOVE_OBJECT_METHOD] =
+    g_signal_new ("handle-remove-object",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, handle_remove_object),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING_STRING_UINT,
+                  G_TYPE_BOOLEAN,
+                  4,
+                  G_TYPE_DBUS_METHOD_INVOCATION,
+                  G_TYPE_STRING,
+                  G_TYPE_STRING,
+                  G_TYPE_UINT);
+  /**
+   * EGdbusCal::handle-receive-objects:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   * @calobj: Parameter.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>receiveObjects</literal> D-Bus method on @object. Use e_gdbus_cal_complete_receive_objects() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__RECEIVE_OBJECTS_METHOD] =
+    g_signal_new ("handle-receive-objects",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, handle_receive_objects),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING,
+                  G_TYPE_BOOLEAN,
+                  2,
+                  G_TYPE_DBUS_METHOD_INVOCATION,
+                  G_TYPE_STRING);
+  /**
+   * EGdbusCal::handle-send-objects:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   * @calobj: Parameter.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>sendObjects</literal> D-Bus method on @object. Use e_gdbus_cal_complete_send_objects() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__SEND_OBJECTS_METHOD] =
+    g_signal_new ("handle-send-objects",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, handle_send_objects),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING,
+                  G_TYPE_BOOLEAN,
+                  2,
+                  G_TYPE_DBUS_METHOD_INVOCATION,
+                  G_TYPE_STRING);
+  /**
+   * EGdbusCal::handle-get-attachment-list:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   * @uid: Parameter.
+   * @rid: Parameter.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>getAttachmentList</literal> D-Bus method on @object. Use e_gdbus_cal_complete_get_attachment_list() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__GET_ATTACHMENT_LIST_METHOD] =
+    g_signal_new ("handle-get-attachment-list",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, handle_get_attachment_list),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING_STRING,
+                  G_TYPE_BOOLEAN,
+                  3,
+                  G_TYPE_DBUS_METHOD_INVOCATION,
+                  G_TYPE_STRING,
+                  G_TYPE_STRING);
+  /**
+   * EGdbusCal::handle-get-query:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   * @sexp: Parameter.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>getQuery</literal> D-Bus method on @object. Use e_gdbus_cal_complete_get_query() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__GET_QUERY_METHOD] =
+    g_signal_new ("handle-get-query",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, handle_get_query),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING,
+                  G_TYPE_BOOLEAN,
+                  2,
+                  G_TYPE_DBUS_METHOD_INVOCATION,
+                  G_TYPE_STRING);
+  /**
+   * EGdbusCal::handle-get-timezone:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   * @tzid: Parameter.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>getTimezone</literal> D-Bus method on @object. Use e_gdbus_cal_complete_get_timezone() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__GET_TIMEZONE_METHOD] =
+    g_signal_new ("handle-get-timezone",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, handle_get_timezone),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING,
+                  G_TYPE_BOOLEAN,
+                  2,
+                  G_TYPE_DBUS_METHOD_INVOCATION,
+                  G_TYPE_STRING);
+  /**
+   * EGdbusCal::handle-add-timezone:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   * @tz: Parameter.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>addTimezone</literal> D-Bus method on @object. Use e_gdbus_cal_complete_add_timezone() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__ADD_TIMEZONE_METHOD] =
+    g_signal_new ("handle-add-timezone",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, handle_add_timezone),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING,
+                  G_TYPE_BOOLEAN,
+                  2,
+                  G_TYPE_DBUS_METHOD_INVOCATION,
+                  G_TYPE_STRING);
+  /**
+   * EGdbusCal::handle-set-default-timezone:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   * @tz: Parameter.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>setDefaultTimezone</literal> D-Bus method on @object. Use e_gdbus_cal_complete_set_default_timezone() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__SET_DEFAULT_TIMEZONE_METHOD] =
+    g_signal_new ("handle-set-default-timezone",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalIface, handle_set_default_timezone),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING,
+                  G_TYPE_BOOLEAN,
+                  2,
+                  G_TYPE_DBUS_METHOD_INVOCATION,
+                  G_TYPE_STRING);
+
+  /* GObject property definitions for D-Bus properties: */
+}
+
+
+/* C Bindings for properties */
+
+/**
+ * e_gdbus_cal_call_get_uri:
+ * @proxy: A #EGdbusCal.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.getUri</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_call_get_uri_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_call_get_uri_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_call_get_uri (
+        EGdbusCal *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = NULL;
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "getUri",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_call_get_uri_finish:
+ * @proxy: A #EGdbusCal.
+ * @out_str_uri_copy: Return location for out parameter or %NULL. Free with g_free().
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_call_get_uri().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.Cal.getUri</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_get_uri_finish (
+        EGdbusCal *proxy,
+        gchar **out_str_uri_copy,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(s)",
+                   out_str_uri_copy);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_call_get_uri_sync:
+ * @proxy: A #EGdbusCal.
+ * @out_str_uri_copy: Return location for out parameter or %NULL. Free with g_free().
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.getUri</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_call_get_uri() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_get_uri_sync (
+        EGdbusCal *proxy,
+        gchar **out_str_uri_copy,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = NULL;
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "getUri",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(s)",
+                   out_str_uri_copy);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_call_get_cache_dir:
+ * @proxy: A #EGdbusCal.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.getCacheDir</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_call_get_cache_dir_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_call_get_cache_dir_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_call_get_cache_dir (
+        EGdbusCal *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = NULL;
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "getCacheDir",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_call_get_cache_dir_finish:
+ * @proxy: A #EGdbusCal.
+ * @out_dirname: Return location for out parameter or %NULL. Free with g_free().
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_call_get_cache_dir().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.Cal.getCacheDir</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_get_cache_dir_finish (
+        EGdbusCal *proxy,
+        gchar **out_dirname,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(s)",
+                   out_dirname);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_call_get_cache_dir_sync:
+ * @proxy: A #EGdbusCal.
+ * @out_dirname: Return location for out parameter or %NULL. Free with g_free().
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.getCacheDir</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_call_get_cache_dir() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_get_cache_dir_sync (
+        EGdbusCal *proxy,
+        gchar **out_dirname,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = NULL;
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "getCacheDir",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(s)",
+                   out_dirname);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_call_open:
+ * @proxy: A #EGdbusCal.
+ * @in_only_if_exists: Method parameter.
+ * @in_username: Method parameter.
+ * @in_password: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.open</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_call_open_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_call_open_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_call_open (
+        EGdbusCal *proxy,
+        gboolean in_only_if_exists,
+        const gchar *in_username,
+        const gchar *in_password,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(bss)",
+                           in_only_if_exists,
+                           in_username,
+                           in_password);
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "open",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_call_open_finish:
+ * @proxy: A #EGdbusCal.
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_call_open().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.Cal.open</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_open_finish (
+        EGdbusCal *proxy,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_call_open_sync:
+ * @proxy: A #EGdbusCal.
+ * @in_only_if_exists: Method parameter.
+ * @in_username: Method parameter.
+ * @in_password: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.open</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_call_open() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_open_sync (
+        EGdbusCal *proxy,
+        gboolean in_only_if_exists,
+        const gchar *in_username,
+        const gchar *in_password,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = g_variant_new ("(bss)",
+                           in_only_if_exists,
+                           in_username,
+                           in_password);
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "open",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_call_refresh:
+ * @proxy: A #EGdbusCal.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.refresh</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_call_refresh_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_call_refresh_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_call_refresh (
+        EGdbusCal *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = NULL;
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "refresh",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_call_refresh_finish:
+ * @proxy: A #EGdbusCal.
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_call_refresh().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.Cal.refresh</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_refresh_finish (
+        EGdbusCal *proxy,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_call_refresh_sync:
+ * @proxy: A #EGdbusCal.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.refresh</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_call_refresh() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_refresh_sync (
+        EGdbusCal *proxy,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = NULL;
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "refresh",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_call_close:
+ * @proxy: A #EGdbusCal.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.close</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_call_close_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_call_close_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_call_close (
+        EGdbusCal *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = NULL;
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "close",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_call_close_finish:
+ * @proxy: A #EGdbusCal.
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_call_close().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.Cal.close</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_close_finish (
+        EGdbusCal *proxy,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_call_close_sync:
+ * @proxy: A #EGdbusCal.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.close</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_call_close() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_close_sync (
+        EGdbusCal *proxy,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = NULL;
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "close",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_call_remove:
+ * @proxy: A #EGdbusCal.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.remove</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_call_remove_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_call_remove_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_call_remove (
+        EGdbusCal *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = NULL;
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "remove",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_call_remove_finish:
+ * @proxy: A #EGdbusCal.
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_call_remove().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.Cal.remove</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_remove_finish (
+        EGdbusCal *proxy,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_call_remove_sync:
+ * @proxy: A #EGdbusCal.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.remove</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_call_remove() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_remove_sync (
+        EGdbusCal *proxy,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = NULL;
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "remove",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_call_is_read_only:
+ * @proxy: A #EGdbusCal.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.isReadOnly</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_call_is_read_only_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_call_is_read_only_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_call_is_read_only (
+        EGdbusCal *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = NULL;
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "isReadOnly",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_call_is_read_only_finish:
+ * @proxy: A #EGdbusCal.
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_call_is_read_only().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.Cal.isReadOnly</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_is_read_only_finish (
+        EGdbusCal *proxy,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_call_is_read_only_sync:
+ * @proxy: A #EGdbusCal.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.isReadOnly</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_call_is_read_only() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_is_read_only_sync (
+        EGdbusCal *proxy,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = NULL;
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "isReadOnly",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_call_get_cal_address:
+ * @proxy: A #EGdbusCal.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.getCalAddress</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_call_get_cal_address_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_call_get_cal_address_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_call_get_cal_address (
+        EGdbusCal *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = NULL;
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "getCalAddress",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_call_get_cal_address_finish:
+ * @proxy: A #EGdbusCal.
+ * @out_address: Return location for out parameter or %NULL. Free with g_free().
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_call_get_cal_address().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.Cal.getCalAddress</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_get_cal_address_finish (
+        EGdbusCal *proxy,
+        gchar **out_address,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(s)",
+                   out_address);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_call_get_cal_address_sync:
+ * @proxy: A #EGdbusCal.
+ * @out_address: Return location for out parameter or %NULL. Free with g_free().
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.getCalAddress</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_call_get_cal_address() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_get_cal_address_sync (
+        EGdbusCal *proxy,
+        gchar **out_address,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = NULL;
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "getCalAddress",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(s)",
+                   out_address);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_call_get_alarm_email_address:
+ * @proxy: A #EGdbusCal.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.getAlarmEmailAddress</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_call_get_alarm_email_address_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_call_get_alarm_email_address_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_call_get_alarm_email_address (
+        EGdbusCal *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = NULL;
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "getAlarmEmailAddress",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_call_get_alarm_email_address_finish:
+ * @proxy: A #EGdbusCal.
+ * @out_address: Return location for out parameter or %NULL. Free with g_free().
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_call_get_alarm_email_address().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.Cal.getAlarmEmailAddress</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_get_alarm_email_address_finish (
+        EGdbusCal *proxy,
+        gchar **out_address,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(s)",
+                   out_address);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_call_get_alarm_email_address_sync:
+ * @proxy: A #EGdbusCal.
+ * @out_address: Return location for out parameter or %NULL. Free with g_free().
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.getAlarmEmailAddress</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_call_get_alarm_email_address() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_get_alarm_email_address_sync (
+        EGdbusCal *proxy,
+        gchar **out_address,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = NULL;
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "getAlarmEmailAddress",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(s)",
+                   out_address);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_call_get_ldap_attribute:
+ * @proxy: A #EGdbusCal.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.getLdapAttribute</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_call_get_ldap_attribute_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_call_get_ldap_attribute_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_call_get_ldap_attribute (
+        EGdbusCal *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = NULL;
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "getLdapAttribute",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_call_get_ldap_attribute_finish:
+ * @proxy: A #EGdbusCal.
+ * @out_address: Return location for out parameter or %NULL. Free with g_free().
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_call_get_ldap_attribute().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.Cal.getLdapAttribute</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_get_ldap_attribute_finish (
+        EGdbusCal *proxy,
+        gchar **out_address,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(s)",
+                   out_address);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_call_get_ldap_attribute_sync:
+ * @proxy: A #EGdbusCal.
+ * @out_address: Return location for out parameter or %NULL. Free with g_free().
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.getLdapAttribute</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_call_get_ldap_attribute() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_get_ldap_attribute_sync (
+        EGdbusCal *proxy,
+        gchar **out_address,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = NULL;
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "getLdapAttribute",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(s)",
+                   out_address);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_call_get_scheduling_information:
+ * @proxy: A #EGdbusCal.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.getSchedulingInformation</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_call_get_scheduling_information_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_call_get_scheduling_information_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_call_get_scheduling_information (
+        EGdbusCal *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = NULL;
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "getSchedulingInformation",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_call_get_scheduling_information_finish:
+ * @proxy: A #EGdbusCal.
+ * @out_capabilities: Return location for out parameter or %NULL. Free with g_free().
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_call_get_scheduling_information().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.Cal.getSchedulingInformation</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_get_scheduling_information_finish (
+        EGdbusCal *proxy,
+        gchar **out_capabilities,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(s)",
+                   out_capabilities);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_call_get_scheduling_information_sync:
+ * @proxy: A #EGdbusCal.
+ * @out_capabilities: Return location for out parameter or %NULL. Free with g_free().
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.getSchedulingInformation</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_call_get_scheduling_information() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_get_scheduling_information_sync (
+        EGdbusCal *proxy,
+        gchar **out_capabilities,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = NULL;
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "getSchedulingInformation",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(s)",
+                   out_capabilities);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_call_set_mode:
+ * @proxy: A #EGdbusCal.
+ * @in_mode: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.setMode</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_call_set_mode_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_call_set_mode_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_call_set_mode (
+        EGdbusCal *proxy,
+        guint in_mode,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(u)",
+                           in_mode);
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "setMode",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_call_set_mode_finish:
+ * @proxy: A #EGdbusCal.
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_call_set_mode().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.Cal.setMode</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_set_mode_finish (
+        EGdbusCal *proxy,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_call_set_mode_sync:
+ * @proxy: A #EGdbusCal.
+ * @in_mode: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.setMode</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_call_set_mode() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_set_mode_sync (
+        EGdbusCal *proxy,
+        guint in_mode,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = g_variant_new ("(u)",
+                           in_mode);
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "setMode",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_call_get_default_object:
+ * @proxy: A #EGdbusCal.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.getDefaultObject</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_call_get_default_object_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_call_get_default_object_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_call_get_default_object (
+        EGdbusCal *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = NULL;
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "getDefaultObject",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_call_get_default_object_finish:
+ * @proxy: A #EGdbusCal.
+ * @out_object: Return location for out parameter or %NULL. Free with g_free().
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_call_get_default_object().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.Cal.getDefaultObject</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_get_default_object_finish (
+        EGdbusCal *proxy,
+        gchar **out_object,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(s)",
+                   out_object);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_call_get_default_object_sync:
+ * @proxy: A #EGdbusCal.
+ * @out_object: Return location for out parameter or %NULL. Free with g_free().
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.getDefaultObject</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_call_get_default_object() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_get_default_object_sync (
+        EGdbusCal *proxy,
+        gchar **out_object,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = NULL;
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "getDefaultObject",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(s)",
+                   out_object);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_call_get_object:
+ * @proxy: A #EGdbusCal.
+ * @in_uid: Method parameter.
+ * @in_rid: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.getObject</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_call_get_object_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_call_get_object_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_call_get_object (
+        EGdbusCal *proxy,
+        const gchar *in_uid,
+        const gchar *in_rid,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(ss)",
+                           in_uid,
+                           in_rid);
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "getObject",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_call_get_object_finish:
+ * @proxy: A #EGdbusCal.
+ * @out_object: Return location for out parameter or %NULL. Free with g_free().
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_call_get_object().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.Cal.getObject</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_get_object_finish (
+        EGdbusCal *proxy,
+        gchar **out_object,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(s)",
+                   out_object);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_call_get_object_sync:
+ * @proxy: A #EGdbusCal.
+ * @in_uid: Method parameter.
+ * @in_rid: Method parameter.
+ * @out_object: Return location for out parameter or %NULL. Free with g_free().
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.getObject</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_call_get_object() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_get_object_sync (
+        EGdbusCal *proxy,
+        const gchar *in_uid,
+        const gchar *in_rid,
+        gchar **out_object,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = g_variant_new ("(ss)",
+                           in_uid,
+                           in_rid);
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "getObject",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(s)",
+                   out_object);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_call_get_object_list:
+ * @proxy: A #EGdbusCal.
+ * @in_sexp: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.getObjectList</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_call_get_object_list_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_call_get_object_list_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_call_get_object_list (
+        EGdbusCal *proxy,
+        const gchar *in_sexp,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(s)",
+                           in_sexp);
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "getObjectList",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_call_get_object_list_finish:
+ * @proxy: A #EGdbusCal.
+ * @out_objects: Return location for out parameter or %NULL. Free with g_strfreev().
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_call_get_object_list().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.Cal.getObjectList</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_get_object_list_finish (
+        EGdbusCal *proxy,
+        gchar ***out_objects,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(^as)",
+                   out_objects);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_call_get_object_list_sync:
+ * @proxy: A #EGdbusCal.
+ * @in_sexp: Method parameter.
+ * @out_objects: Return location for out parameter or %NULL. Free with g_strfreev().
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.getObjectList</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_call_get_object_list() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_get_object_list_sync (
+        EGdbusCal *proxy,
+        const gchar *in_sexp,
+        gchar ***out_objects,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = g_variant_new ("(s)",
+                           in_sexp);
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "getObjectList",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(^as)",
+                   out_objects);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_call_get_changes:
+ * @proxy: A #EGdbusCal.
+ * @in_change_id: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.getChanges</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_call_get_changes_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_call_get_changes_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_call_get_changes (
+        EGdbusCal *proxy,
+        const gchar *in_change_id,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(s)",
+                           in_change_id);
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "getChanges",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_call_get_changes_finish:
+ * @proxy: A #EGdbusCal.
+ * @out_additions: Return location for out parameter or %NULL. Free with g_strfreev().
+ * @out_modifications: Return location for out parameter or %NULL. Free with g_strfreev().
+ * @out_removals: Return location for out parameter or %NULL. Free with g_strfreev().
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_call_get_changes().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.Cal.getChanges</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_get_changes_finish (
+        EGdbusCal *proxy,
+        gchar ***out_additions,
+        gchar ***out_modifications,
+        gchar ***out_removals,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(^as^as^as)",
+                   out_additions,
+                   out_modifications,
+                   out_removals);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_call_get_changes_sync:
+ * @proxy: A #EGdbusCal.
+ * @in_change_id: Method parameter.
+ * @out_additions: Return location for out parameter or %NULL. Free with g_strfreev().
+ * @out_modifications: Return location for out parameter or %NULL. Free with g_strfreev().
+ * @out_removals: Return location for out parameter or %NULL. Free with g_strfreev().
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.getChanges</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_call_get_changes() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_get_changes_sync (
+        EGdbusCal *proxy,
+        const gchar *in_change_id,
+        gchar ***out_additions,
+        gchar ***out_modifications,
+        gchar ***out_removals,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = g_variant_new ("(s)",
+                           in_change_id);
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "getChanges",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(^as^as^as)",
+                   out_additions,
+                   out_modifications,
+                   out_removals);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_call_get_free_busy:
+ * @proxy: A #EGdbusCal.
+ * @in_user_list: Method parameter.
+ * @in_start: Method parameter.
+ * @in_end: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.getFreeBusy</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_call_get_free_busy_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_call_get_free_busy_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_call_get_free_busy (
+        EGdbusCal *proxy,
+        const gchar* const *in_user_list,
+        guint in_start,
+        guint in_end,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(^asuu)",
+                           in_user_list,
+                           in_start,
+                           in_end);
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "getFreeBusy",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_call_get_free_busy_finish:
+ * @proxy: A #EGdbusCal.
+ * @out_freebusy: Return location for out parameter or %NULL. Free with g_strfreev().
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_call_get_free_busy().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.Cal.getFreeBusy</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_get_free_busy_finish (
+        EGdbusCal *proxy,
+        gchar ***out_freebusy,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(^as)",
+                   out_freebusy);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_call_get_free_busy_sync:
+ * @proxy: A #EGdbusCal.
+ * @in_user_list: Method parameter.
+ * @in_start: Method parameter.
+ * @in_end: Method parameter.
+ * @out_freebusy: Return location for out parameter or %NULL. Free with g_strfreev().
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.getFreeBusy</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_call_get_free_busy() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_get_free_busy_sync (
+        EGdbusCal *proxy,
+        const gchar* const *in_user_list,
+        guint in_start,
+        guint in_end,
+        gchar ***out_freebusy,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = g_variant_new ("(^asuu)",
+                           in_user_list,
+                           in_start,
+                           in_end);
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "getFreeBusy",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(^as)",
+                   out_freebusy);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_call_discard_alarm:
+ * @proxy: A #EGdbusCal.
+ * @in_uid: Method parameter.
+ * @in_auid: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.discardAlarm</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_call_discard_alarm_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_call_discard_alarm_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_call_discard_alarm (
+        EGdbusCal *proxy,
+        const gchar *in_uid,
+        const gchar *in_auid,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(ss)",
+                           in_uid,
+                           in_auid);
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "discardAlarm",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_call_discard_alarm_finish:
+ * @proxy: A #EGdbusCal.
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_call_discard_alarm().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.Cal.discardAlarm</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_discard_alarm_finish (
+        EGdbusCal *proxy,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_call_discard_alarm_sync:
+ * @proxy: A #EGdbusCal.
+ * @in_uid: Method parameter.
+ * @in_auid: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.discardAlarm</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_call_discard_alarm() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_discard_alarm_sync (
+        EGdbusCal *proxy,
+        const gchar *in_uid,
+        const gchar *in_auid,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = g_variant_new ("(ss)",
+                           in_uid,
+                           in_auid);
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "discardAlarm",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_call_create_object:
+ * @proxy: A #EGdbusCal.
+ * @in_calobj: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.createObject</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_call_create_object_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_call_create_object_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_call_create_object (
+        EGdbusCal *proxy,
+        const gchar *in_calobj,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(s)",
+                           in_calobj);
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "createObject",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_call_create_object_finish:
+ * @proxy: A #EGdbusCal.
+ * @out_uid: Return location for out parameter or %NULL. Free with g_free().
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_call_create_object().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.Cal.createObject</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_create_object_finish (
+        EGdbusCal *proxy,
+        gchar **out_uid,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(s)",
+                   out_uid);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_call_create_object_sync:
+ * @proxy: A #EGdbusCal.
+ * @in_calobj: Method parameter.
+ * @out_uid: Return location for out parameter or %NULL. Free with g_free().
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.createObject</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_call_create_object() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_create_object_sync (
+        EGdbusCal *proxy,
+        const gchar *in_calobj,
+        gchar **out_uid,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = g_variant_new ("(s)",
+                           in_calobj);
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "createObject",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(s)",
+                   out_uid);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_call_modify_object:
+ * @proxy: A #EGdbusCal.
+ * @in_calobj: Method parameter.
+ * @in_mod: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.modifyObject</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_call_modify_object_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_call_modify_object_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_call_modify_object (
+        EGdbusCal *proxy,
+        const gchar *in_calobj,
+        guint in_mod,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(su)",
+                           in_calobj,
+                           in_mod);
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "modifyObject",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_call_modify_object_finish:
+ * @proxy: A #EGdbusCal.
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_call_modify_object().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.Cal.modifyObject</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_modify_object_finish (
+        EGdbusCal *proxy,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_call_modify_object_sync:
+ * @proxy: A #EGdbusCal.
+ * @in_calobj: Method parameter.
+ * @in_mod: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.modifyObject</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_call_modify_object() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_modify_object_sync (
+        EGdbusCal *proxy,
+        const gchar *in_calobj,
+        guint in_mod,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = g_variant_new ("(su)",
+                           in_calobj,
+                           in_mod);
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "modifyObject",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_call_remove_object:
+ * @proxy: A #EGdbusCal.
+ * @in_uid: Method parameter.
+ * @in_rid: Method parameter.
+ * @in_mod: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.removeObject</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_call_remove_object_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_call_remove_object_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_call_remove_object (
+        EGdbusCal *proxy,
+        const gchar *in_uid,
+        const gchar *in_rid,
+        guint in_mod,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(ssu)",
+                           in_uid,
+                           in_rid,
+                           in_mod);
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "removeObject",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_call_remove_object_finish:
+ * @proxy: A #EGdbusCal.
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_call_remove_object().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.Cal.removeObject</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_remove_object_finish (
+        EGdbusCal *proxy,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_call_remove_object_sync:
+ * @proxy: A #EGdbusCal.
+ * @in_uid: Method parameter.
+ * @in_rid: Method parameter.
+ * @in_mod: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.removeObject</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_call_remove_object() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_remove_object_sync (
+        EGdbusCal *proxy,
+        const gchar *in_uid,
+        const gchar *in_rid,
+        guint in_mod,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = g_variant_new ("(ssu)",
+                           in_uid,
+                           in_rid,
+                           in_mod);
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "removeObject",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_call_receive_objects:
+ * @proxy: A #EGdbusCal.
+ * @in_calobj: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.receiveObjects</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_call_receive_objects_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_call_receive_objects_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_call_receive_objects (
+        EGdbusCal *proxy,
+        const gchar *in_calobj,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(s)",
+                           in_calobj);
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "receiveObjects",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_call_receive_objects_finish:
+ * @proxy: A #EGdbusCal.
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_call_receive_objects().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.Cal.receiveObjects</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_receive_objects_finish (
+        EGdbusCal *proxy,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_call_receive_objects_sync:
+ * @proxy: A #EGdbusCal.
+ * @in_calobj: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.receiveObjects</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_call_receive_objects() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_receive_objects_sync (
+        EGdbusCal *proxy,
+        const gchar *in_calobj,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = g_variant_new ("(s)",
+                           in_calobj);
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "receiveObjects",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_call_send_objects:
+ * @proxy: A #EGdbusCal.
+ * @in_calobj: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.sendObjects</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_call_send_objects_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_call_send_objects_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_call_send_objects (
+        EGdbusCal *proxy,
+        const gchar *in_calobj,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(s)",
+                           in_calobj);
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "sendObjects",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_call_send_objects_finish:
+ * @proxy: A #EGdbusCal.
+ * @out_users: Return location for out parameter or %NULL. Free with g_strfreev().
+ * @out_calobj: Return location for out parameter or %NULL. Free with g_free().
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_call_send_objects().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.Cal.sendObjects</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_send_objects_finish (
+        EGdbusCal *proxy,
+        gchar ***out_users,
+        gchar **out_calobj,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(^ass)",
+                   out_users,
+                   out_calobj);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_call_send_objects_sync:
+ * @proxy: A #EGdbusCal.
+ * @in_calobj: Method parameter.
+ * @out_users: Return location for out parameter or %NULL. Free with g_strfreev().
+ * @out_calobj: Return location for out parameter or %NULL. Free with g_free().
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.sendObjects</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_call_send_objects() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_send_objects_sync (
+        EGdbusCal *proxy,
+        const gchar *in_calobj,
+        gchar ***out_users,
+        gchar **out_calobj,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = g_variant_new ("(s)",
+                           in_calobj);
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "sendObjects",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(^ass)",
+                   out_users,
+                   out_calobj);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_call_get_attachment_list:
+ * @proxy: A #EGdbusCal.
+ * @in_uid: Method parameter.
+ * @in_rid: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.getAttachmentList</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_call_get_attachment_list_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_call_get_attachment_list_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_call_get_attachment_list (
+        EGdbusCal *proxy,
+        const gchar *in_uid,
+        const gchar *in_rid,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(ss)",
+                           in_uid,
+                           in_rid);
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "getAttachmentList",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_call_get_attachment_list_finish:
+ * @proxy: A #EGdbusCal.
+ * @out_attachments: Return location for out parameter or %NULL. Free with g_strfreev().
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_call_get_attachment_list().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.Cal.getAttachmentList</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_get_attachment_list_finish (
+        EGdbusCal *proxy,
+        gchar ***out_attachments,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(^as)",
+                   out_attachments);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_call_get_attachment_list_sync:
+ * @proxy: A #EGdbusCal.
+ * @in_uid: Method parameter.
+ * @in_rid: Method parameter.
+ * @out_attachments: Return location for out parameter or %NULL. Free with g_strfreev().
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.getAttachmentList</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_call_get_attachment_list() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_get_attachment_list_sync (
+        EGdbusCal *proxy,
+        const gchar *in_uid,
+        const gchar *in_rid,
+        gchar ***out_attachments,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = g_variant_new ("(ss)",
+                           in_uid,
+                           in_rid);
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "getAttachmentList",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(^as)",
+                   out_attachments);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_call_get_query:
+ * @proxy: A #EGdbusCal.
+ * @in_sexp: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.getQuery</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_call_get_query_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_call_get_query_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_call_get_query (
+        EGdbusCal *proxy,
+        const gchar *in_sexp,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(s)",
+                           in_sexp);
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "getQuery",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_call_get_query_finish:
+ * @proxy: A #EGdbusCal.
+ * @out_query: Return location for out parameter or %NULL. Free with g_free().
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_call_get_query().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.Cal.getQuery</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_get_query_finish (
+        EGdbusCal *proxy,
+        gchar **out_query,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(o)",
+                   out_query);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_call_get_query_sync:
+ * @proxy: A #EGdbusCal.
+ * @in_sexp: Method parameter.
+ * @out_query: Return location for out parameter or %NULL. Free with g_free().
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.getQuery</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_call_get_query() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_get_query_sync (
+        EGdbusCal *proxy,
+        const gchar *in_sexp,
+        gchar **out_query,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = g_variant_new ("(s)",
+                           in_sexp);
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "getQuery",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(o)",
+                   out_query);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_call_get_timezone:
+ * @proxy: A #EGdbusCal.
+ * @in_tzid: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.getTimezone</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_call_get_timezone_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_call_get_timezone_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_call_get_timezone (
+        EGdbusCal *proxy,
+        const gchar *in_tzid,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(s)",
+                           in_tzid);
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "getTimezone",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_call_get_timezone_finish:
+ * @proxy: A #EGdbusCal.
+ * @out_object: Return location for out parameter or %NULL. Free with g_free().
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_call_get_timezone().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.Cal.getTimezone</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_get_timezone_finish (
+        EGdbusCal *proxy,
+        gchar **out_object,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(s)",
+                   out_object);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_call_get_timezone_sync:
+ * @proxy: A #EGdbusCal.
+ * @in_tzid: Method parameter.
+ * @out_object: Return location for out parameter or %NULL. Free with g_free().
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.getTimezone</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_call_get_timezone() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_get_timezone_sync (
+        EGdbusCal *proxy,
+        const gchar *in_tzid,
+        gchar **out_object,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = g_variant_new ("(s)",
+                           in_tzid);
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "getTimezone",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(s)",
+                   out_object);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_call_add_timezone:
+ * @proxy: A #EGdbusCal.
+ * @in_tz: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.addTimezone</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_call_add_timezone_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_call_add_timezone_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_call_add_timezone (
+        EGdbusCal *proxy,
+        const gchar *in_tz,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(s)",
+                           in_tz);
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "addTimezone",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_call_add_timezone_finish:
+ * @proxy: A #EGdbusCal.
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_call_add_timezone().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.Cal.addTimezone</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_add_timezone_finish (
+        EGdbusCal *proxy,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_call_add_timezone_sync:
+ * @proxy: A #EGdbusCal.
+ * @in_tz: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.addTimezone</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_call_add_timezone() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_add_timezone_sync (
+        EGdbusCal *proxy,
+        const gchar *in_tz,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = g_variant_new ("(s)",
+                           in_tz);
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "addTimezone",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_call_set_default_timezone:
+ * @proxy: A #EGdbusCal.
+ * @in_tz: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.setDefaultTimezone</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_call_set_default_timezone_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_call_set_default_timezone_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_call_set_default_timezone (
+        EGdbusCal *proxy,
+        const gchar *in_tz,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(s)",
+                           in_tz);
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "setDefaultTimezone",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_call_set_default_timezone_finish:
+ * @proxy: A #EGdbusCal.
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_call_set_default_timezone().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.Cal.setDefaultTimezone</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_set_default_timezone_finish (
+        EGdbusCal *proxy,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_call_set_default_timezone_sync:
+ * @proxy: A #EGdbusCal.
+ * @in_tz: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.Cal.setDefaultTimezone</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_call_set_default_timezone() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_call_set_default_timezone_sync (
+        EGdbusCal *proxy,
+        const gchar *in_tz,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = g_variant_new ("(s)",
+                           in_tz);
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "setDefaultTimezone",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_complete_get_uri:
+ * @object: A #EGdbusCal.
+ * @invocation: A #GDBusMethodInvocation.
+ * @out_str_uri_copy: Value to return.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.Cal.getUri</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_complete_get_uri (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_str_uri_copy)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(s)",
+                           out_str_uri_copy);
+  g_dbus_method_invocation_return_value (invocation, _params);
+}
+
+
+/**
+ * e_gdbus_cal_complete_get_cache_dir:
+ * @object: A #EGdbusCal.
+ * @invocation: A #GDBusMethodInvocation.
+ * @out_dirname: Value to return.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.Cal.getCacheDir</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_complete_get_cache_dir (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_dirname)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(s)",
+                           out_dirname);
+  g_dbus_method_invocation_return_value (invocation, _params);
+}
+
+
+/**
+ * e_gdbus_cal_complete_open:
+ * @object: A #EGdbusCal.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.Cal.open</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_complete_open (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation, NULL);
+}
+
+
+/**
+ * e_gdbus_cal_complete_refresh:
+ * @object: A #EGdbusCal.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.Cal.refresh</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_complete_refresh (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation, NULL);
+}
+
+
+/**
+ * e_gdbus_cal_complete_close:
+ * @object: A #EGdbusCal.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.Cal.close</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_complete_close (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation, NULL);
+}
+
+
+/**
+ * e_gdbus_cal_complete_remove:
+ * @object: A #EGdbusCal.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.Cal.remove</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_complete_remove (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation, NULL);
+}
+
+
+/**
+ * e_gdbus_cal_complete_is_read_only:
+ * @object: A #EGdbusCal.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.Cal.isReadOnly</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_complete_is_read_only (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation, NULL);
+}
+
+
+/**
+ * e_gdbus_cal_complete_get_cal_address:
+ * @object: A #EGdbusCal.
+ * @invocation: A #GDBusMethodInvocation.
+ * @out_address: Value to return.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.Cal.getCalAddress</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_complete_get_cal_address (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_address)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(s)",
+                           out_address);
+  g_dbus_method_invocation_return_value (invocation, _params);
+}
+
+
+/**
+ * e_gdbus_cal_complete_get_alarm_email_address:
+ * @object: A #EGdbusCal.
+ * @invocation: A #GDBusMethodInvocation.
+ * @out_address: Value to return.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.Cal.getAlarmEmailAddress</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_complete_get_alarm_email_address (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_address)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(s)",
+                           out_address);
+  g_dbus_method_invocation_return_value (invocation, _params);
+}
+
+
+/**
+ * e_gdbus_cal_complete_get_ldap_attribute:
+ * @object: A #EGdbusCal.
+ * @invocation: A #GDBusMethodInvocation.
+ * @out_address: Value to return.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.Cal.getLdapAttribute</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_complete_get_ldap_attribute (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_address)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(s)",
+                           out_address);
+  g_dbus_method_invocation_return_value (invocation, _params);
+}
+
+
+/**
+ * e_gdbus_cal_complete_get_scheduling_information:
+ * @object: A #EGdbusCal.
+ * @invocation: A #GDBusMethodInvocation.
+ * @out_capabilities: Value to return.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.Cal.getSchedulingInformation</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_complete_get_scheduling_information (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_capabilities)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(s)",
+                           out_capabilities);
+  g_dbus_method_invocation_return_value (invocation, _params);
+}
+
+
+/**
+ * e_gdbus_cal_complete_set_mode:
+ * @object: A #EGdbusCal.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.Cal.setMode</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_complete_set_mode (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation, NULL);
+}
+
+
+/**
+ * e_gdbus_cal_complete_get_default_object:
+ * @object: A #EGdbusCal.
+ * @invocation: A #GDBusMethodInvocation.
+ * @out_object: Value to return.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.Cal.getDefaultObject</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_complete_get_default_object (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_object)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(s)",
+                           out_object);
+  g_dbus_method_invocation_return_value (invocation, _params);
+}
+
+
+/**
+ * e_gdbus_cal_complete_get_object:
+ * @object: A #EGdbusCal.
+ * @invocation: A #GDBusMethodInvocation.
+ * @out_object: Value to return.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.Cal.getObject</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_complete_get_object (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_object)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(s)",
+                           out_object);
+  g_dbus_method_invocation_return_value (invocation, _params);
+}
+
+
+/**
+ * e_gdbus_cal_complete_get_object_list:
+ * @object: A #EGdbusCal.
+ * @invocation: A #GDBusMethodInvocation.
+ * @out_objects: Value to return.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.Cal.getObjectList</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_complete_get_object_list (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar* const *out_objects)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(^as)",
+                           out_objects);
+  g_dbus_method_invocation_return_value (invocation, _params);
+}
+
+
+/**
+ * e_gdbus_cal_complete_get_changes:
+ * @object: A #EGdbusCal.
+ * @invocation: A #GDBusMethodInvocation.
+ * @out_additions: Value to return.
+ * @out_modifications: Value to return.
+ * @out_removals: Value to return.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.Cal.getChanges</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_complete_get_changes (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar* const *out_additions,
+        const gchar* const *out_modifications,
+        const gchar* const *out_removals)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(^as^as^as)",
+                           out_additions,
+                           out_modifications,
+                           out_removals);
+  g_dbus_method_invocation_return_value (invocation, _params);
+}
+
+
+/**
+ * e_gdbus_cal_complete_get_free_busy:
+ * @object: A #EGdbusCal.
+ * @invocation: A #GDBusMethodInvocation.
+ * @out_freebusy: Value to return.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.Cal.getFreeBusy</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_complete_get_free_busy (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar* const *out_freebusy)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(^as)",
+                           out_freebusy);
+  g_dbus_method_invocation_return_value (invocation, _params);
+}
+
+
+/**
+ * e_gdbus_cal_complete_discard_alarm:
+ * @object: A #EGdbusCal.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.Cal.discardAlarm</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_complete_discard_alarm (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation, NULL);
+}
+
+
+/**
+ * e_gdbus_cal_complete_create_object:
+ * @object: A #EGdbusCal.
+ * @invocation: A #GDBusMethodInvocation.
+ * @out_uid: Value to return.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.Cal.createObject</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_complete_create_object (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_uid)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(s)",
+                           out_uid);
+  g_dbus_method_invocation_return_value (invocation, _params);
+}
+
+
+/**
+ * e_gdbus_cal_complete_modify_object:
+ * @object: A #EGdbusCal.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.Cal.modifyObject</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_complete_modify_object (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation, NULL);
+}
+
+
+/**
+ * e_gdbus_cal_complete_remove_object:
+ * @object: A #EGdbusCal.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.Cal.removeObject</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_complete_remove_object (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation, NULL);
+}
+
+
+/**
+ * e_gdbus_cal_complete_receive_objects:
+ * @object: A #EGdbusCal.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.Cal.receiveObjects</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_complete_receive_objects (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation, NULL);
+}
+
+
+/**
+ * e_gdbus_cal_complete_send_objects:
+ * @object: A #EGdbusCal.
+ * @invocation: A #GDBusMethodInvocation.
+ * @out_users: Value to return.
+ * @out_calobj: Value to return.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.Cal.sendObjects</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_complete_send_objects (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar* const *out_users,
+        const gchar *out_calobj)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(^ass)",
+                           out_users,
+                           out_calobj);
+  g_dbus_method_invocation_return_value (invocation, _params);
+}
+
+
+/**
+ * e_gdbus_cal_complete_get_attachment_list:
+ * @object: A #EGdbusCal.
+ * @invocation: A #GDBusMethodInvocation.
+ * @out_attachments: Value to return.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.Cal.getAttachmentList</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_complete_get_attachment_list (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar* const *out_attachments)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(^as)",
+                           out_attachments);
+  g_dbus_method_invocation_return_value (invocation, _params);
+}
+
+
+/**
+ * e_gdbus_cal_complete_get_query:
+ * @object: A #EGdbusCal.
+ * @invocation: A #GDBusMethodInvocation.
+ * @out_query: Value to return.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.Cal.getQuery</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_complete_get_query (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_query)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(o)",
+                           out_query);
+  g_dbus_method_invocation_return_value (invocation, _params);
+}
+
+
+/**
+ * e_gdbus_cal_complete_get_timezone:
+ * @object: A #EGdbusCal.
+ * @invocation: A #GDBusMethodInvocation.
+ * @out_object: Value to return.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.Cal.getTimezone</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_complete_get_timezone (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_object)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(s)",
+                           out_object);
+  g_dbus_method_invocation_return_value (invocation, _params);
+}
+
+
+/**
+ * e_gdbus_cal_complete_add_timezone:
+ * @object: A #EGdbusCal.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.Cal.addTimezone</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_complete_add_timezone (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation, NULL);
+}
+
+
+/**
+ * e_gdbus_cal_complete_set_default_timezone:
+ * @object: A #EGdbusCal.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.Cal.setDefaultTimezone</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_complete_set_default_timezone (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation, NULL);
+}
+
+
+/**
+ * e_gdbus_cal_emit_auth_required:
+ * @object: A #EGdbusCal.
+ *
+ * Emits the <literal>org.gnome.evolution.dataserver.calendar.Cal.auth_required</literal>
+ * D-Bus signal.
+ */
+void e_gdbus_cal_emit_auth_required (
+        EGdbusCal *object)
+{
+  g_signal_emit (object, signals[__AUTH_REQUIRED_SIGNAL], 0);
+}
+
+
+/**
+ * e_gdbus_cal_emit_backend_error:
+ * @object: A #EGdbusCal.
+ * @arg_error: Signal parameter.
+ *
+ * Emits the <literal>org.gnome.evolution.dataserver.calendar.Cal.backend_error</literal>
+ * D-Bus signal.
+ */
+void e_gdbus_cal_emit_backend_error (
+        EGdbusCal *object,
+        const gchar *arg_error)
+{
+  g_signal_emit (object, signals[__BACKEND_ERROR_SIGNAL], 0, arg_error);
+}
+
+
+/**
+ * e_gdbus_cal_emit_readonly:
+ * @object: A #EGdbusCal.
+ * @arg_is_readonly: Signal parameter.
+ *
+ * Emits the <literal>org.gnome.evolution.dataserver.calendar.Cal.readonly</literal>
+ * D-Bus signal.
+ */
+void e_gdbus_cal_emit_readonly (
+        EGdbusCal *object,
+        gboolean arg_is_readonly)
+{
+  g_signal_emit (object, signals[__READONLY_SIGNAL], 0, arg_is_readonly);
+}
+
+
+/**
+ * e_gdbus_cal_emit_mode:
+ * @object: A #EGdbusCal.
+ * @arg_mode: Signal parameter.
+ *
+ * Emits the <literal>org.gnome.evolution.dataserver.calendar.Cal.mode</literal>
+ * D-Bus signal.
+ */
+void e_gdbus_cal_emit_mode (
+        EGdbusCal *object,
+        gint arg_mode)
+{
+  g_signal_emit (object, signals[__MODE_SIGNAL], 0, arg_mode);
+}
+
+
+static const GDBusSignalInfo e_gdbus_cal_signal_auth_required =
+{
+  -1,
+  (gchar *) "auth_required",
+  (GDBusArgInfo **) NULL,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_cal_signal_backend_error_error =
+{
+  -1,
+  (gchar *) "error",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_signal_backend_error_arg_pointers[] =
+{
+  &e_gdbus_cal_signal_backend_error_error,
+  NULL
+};
+
+static const GDBusSignalInfo e_gdbus_cal_signal_backend_error =
+{
+  -1,
+  (gchar *) "backend_error",
+  (GDBusArgInfo **) &e_gdbus_cal_signal_backend_error_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_cal_signal_readonly_is_readonly =
+{
+  -1,
+  (gchar *) "is_readonly",
+  (gchar *) "b",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_signal_readonly_arg_pointers[] =
+{
+  &e_gdbus_cal_signal_readonly_is_readonly,
+  NULL
+};
+
+static const GDBusSignalInfo e_gdbus_cal_signal_readonly =
+{
+  -1,
+  (gchar *) "readonly",
+  (GDBusArgInfo **) &e_gdbus_cal_signal_readonly_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_cal_signal_mode_mode =
+{
+  -1,
+  (gchar *) "mode",
+  (gchar *) "i",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_signal_mode_arg_pointers[] =
+{
+  &e_gdbus_cal_signal_mode_mode,
+  NULL
+};
+
+static const GDBusSignalInfo e_gdbus_cal_signal_mode =
+{
+  -1,
+  (gchar *) "mode",
+  (GDBusArgInfo **) &e_gdbus_cal_signal_mode_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusSignalInfo * const e_gdbus_cal_signal_info_pointers[] =
+{
+  &e_gdbus_cal_signal_auth_required,
+  &e_gdbus_cal_signal_backend_error,
+  &e_gdbus_cal_signal_readonly,
+  &e_gdbus_cal_signal_mode,
+  NULL
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_out_getUri_str_uri_copy =
+{
+  -1,
+  (gchar *) "str_uri_copy",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_out_getUri_arg_pointers[] =
+{
+  &e_gdbus_cal_method_out_getUri_str_uri_copy,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_cal_method_getUri =
+{
+  -1,
+  (gchar *) "getUri",
+  (GDBusArgInfo **) NULL,
+  (GDBusArgInfo **) &e_gdbus_cal_method_out_getUri_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_out_getCacheDir_dirname =
+{
+  -1,
+  (gchar *) "dirname",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_out_getCacheDir_arg_pointers[] =
+{
+  &e_gdbus_cal_method_out_getCacheDir_dirname,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_cal_method_getCacheDir =
+{
+  -1,
+  (gchar *) "getCacheDir",
+  (GDBusArgInfo **) NULL,
+  (GDBusArgInfo **) &e_gdbus_cal_method_out_getCacheDir_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_in_open_only_if_exists =
+{
+  -1,
+  (gchar *) "only_if_exists",
+  (gchar *) "b",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo e_gdbus_cal_method_in_open_username =
+{
+  -1,
+  (gchar *) "username",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo e_gdbus_cal_method_in_open_password =
+{
+  -1,
+  (gchar *) "password",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_in_open_arg_pointers[] =
+{
+  &e_gdbus_cal_method_in_open_only_if_exists,
+  &e_gdbus_cal_method_in_open_username,
+  &e_gdbus_cal_method_in_open_password,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_cal_method_open =
+{
+  -1,
+  (gchar *) "open",
+  (GDBusArgInfo **) &e_gdbus_cal_method_in_open_arg_pointers,
+  (GDBusArgInfo **) NULL,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusMethodInfo e_gdbus_cal_method_refresh =
+{
+  -1,
+  (gchar *) "refresh",
+  (GDBusArgInfo **) NULL,
+  (GDBusArgInfo **) NULL,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusMethodInfo e_gdbus_cal_method_close =
+{
+  -1,
+  (gchar *) "close",
+  (GDBusArgInfo **) NULL,
+  (GDBusArgInfo **) NULL,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusMethodInfo e_gdbus_cal_method_remove =
+{
+  -1,
+  (gchar *) "remove",
+  (GDBusArgInfo **) NULL,
+  (GDBusArgInfo **) NULL,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusMethodInfo e_gdbus_cal_method_isReadOnly =
+{
+  -1,
+  (gchar *) "isReadOnly",
+  (GDBusArgInfo **) NULL,
+  (GDBusArgInfo **) NULL,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_out_getCalAddress_address =
+{
+  -1,
+  (gchar *) "address",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_out_getCalAddress_arg_pointers[] =
+{
+  &e_gdbus_cal_method_out_getCalAddress_address,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_cal_method_getCalAddress =
+{
+  -1,
+  (gchar *) "getCalAddress",
+  (GDBusArgInfo **) NULL,
+  (GDBusArgInfo **) &e_gdbus_cal_method_out_getCalAddress_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_out_getAlarmEmailAddress_address =
+{
+  -1,
+  (gchar *) "address",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_out_getAlarmEmailAddress_arg_pointers[] =
+{
+  &e_gdbus_cal_method_out_getAlarmEmailAddress_address,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_cal_method_getAlarmEmailAddress =
+{
+  -1,
+  (gchar *) "getAlarmEmailAddress",
+  (GDBusArgInfo **) NULL,
+  (GDBusArgInfo **) &e_gdbus_cal_method_out_getAlarmEmailAddress_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_out_getLdapAttribute_address =
+{
+  -1,
+  (gchar *) "address",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_out_getLdapAttribute_arg_pointers[] =
+{
+  &e_gdbus_cal_method_out_getLdapAttribute_address,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_cal_method_getLdapAttribute =
+{
+  -1,
+  (gchar *) "getLdapAttribute",
+  (GDBusArgInfo **) NULL,
+  (GDBusArgInfo **) &e_gdbus_cal_method_out_getLdapAttribute_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_out_getSchedulingInformation_capabilities =
+{
+  -1,
+  (gchar *) "capabilities",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_out_getSchedulingInformation_arg_pointers[] =
+{
+  &e_gdbus_cal_method_out_getSchedulingInformation_capabilities,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_cal_method_getSchedulingInformation =
+{
+  -1,
+  (gchar *) "getSchedulingInformation",
+  (GDBusArgInfo **) NULL,
+  (GDBusArgInfo **) &e_gdbus_cal_method_out_getSchedulingInformation_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_in_setMode_mode =
+{
+  -1,
+  (gchar *) "mode",
+  (gchar *) "u",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_in_setMode_arg_pointers[] =
+{
+  &e_gdbus_cal_method_in_setMode_mode,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_cal_method_setMode =
+{
+  -1,
+  (gchar *) "setMode",
+  (GDBusArgInfo **) &e_gdbus_cal_method_in_setMode_arg_pointers,
+  (GDBusArgInfo **) NULL,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_out_getDefaultObject_object =
+{
+  -1,
+  (gchar *) "object",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_out_getDefaultObject_arg_pointers[] =
+{
+  &e_gdbus_cal_method_out_getDefaultObject_object,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_cal_method_getDefaultObject =
+{
+  -1,
+  (gchar *) "getDefaultObject",
+  (GDBusArgInfo **) NULL,
+  (GDBusArgInfo **) &e_gdbus_cal_method_out_getDefaultObject_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_in_getObject_uid =
+{
+  -1,
+  (gchar *) "uid",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo e_gdbus_cal_method_in_getObject_rid =
+{
+  -1,
+  (gchar *) "rid",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_in_getObject_arg_pointers[] =
+{
+  &e_gdbus_cal_method_in_getObject_uid,
+  &e_gdbus_cal_method_in_getObject_rid,
+  NULL
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_out_getObject_object =
+{
+  -1,
+  (gchar *) "object",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_out_getObject_arg_pointers[] =
+{
+  &e_gdbus_cal_method_out_getObject_object,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_cal_method_getObject =
+{
+  -1,
+  (gchar *) "getObject",
+  (GDBusArgInfo **) &e_gdbus_cal_method_in_getObject_arg_pointers,
+  (GDBusArgInfo **) &e_gdbus_cal_method_out_getObject_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_in_getObjectList_sexp =
+{
+  -1,
+  (gchar *) "sexp",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_in_getObjectList_arg_pointers[] =
+{
+  &e_gdbus_cal_method_in_getObjectList_sexp,
+  NULL
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_out_getObjectList_objects =
+{
+  -1,
+  (gchar *) "objects",
+  (gchar *) "as",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_out_getObjectList_arg_pointers[] =
+{
+  &e_gdbus_cal_method_out_getObjectList_objects,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_cal_method_getObjectList =
+{
+  -1,
+  (gchar *) "getObjectList",
+  (GDBusArgInfo **) &e_gdbus_cal_method_in_getObjectList_arg_pointers,
+  (GDBusArgInfo **) &e_gdbus_cal_method_out_getObjectList_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_in_getChanges_change_id =
+{
+  -1,
+  (gchar *) "change_id",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_in_getChanges_arg_pointers[] =
+{
+  &e_gdbus_cal_method_in_getChanges_change_id,
+  NULL
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_out_getChanges_additions =
+{
+  -1,
+  (gchar *) "additions",
+  (gchar *) "as",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo e_gdbus_cal_method_out_getChanges_modifications =
+{
+  -1,
+  (gchar *) "modifications",
+  (gchar *) "as",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo e_gdbus_cal_method_out_getChanges_removals =
+{
+  -1,
+  (gchar *) "removals",
+  (gchar *) "as",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_out_getChanges_arg_pointers[] =
+{
+  &e_gdbus_cal_method_out_getChanges_additions,
+  &e_gdbus_cal_method_out_getChanges_modifications,
+  &e_gdbus_cal_method_out_getChanges_removals,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_cal_method_getChanges =
+{
+  -1,
+  (gchar *) "getChanges",
+  (GDBusArgInfo **) &e_gdbus_cal_method_in_getChanges_arg_pointers,
+  (GDBusArgInfo **) &e_gdbus_cal_method_out_getChanges_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_in_getFreeBusy_user_list =
+{
+  -1,
+  (gchar *) "user_list",
+  (gchar *) "as",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo e_gdbus_cal_method_in_getFreeBusy_start =
+{
+  -1,
+  (gchar *) "start",
+  (gchar *) "u",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo e_gdbus_cal_method_in_getFreeBusy_end =
+{
+  -1,
+  (gchar *) "end",
+  (gchar *) "u",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_in_getFreeBusy_arg_pointers[] =
+{
+  &e_gdbus_cal_method_in_getFreeBusy_user_list,
+  &e_gdbus_cal_method_in_getFreeBusy_start,
+  &e_gdbus_cal_method_in_getFreeBusy_end,
+  NULL
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_out_getFreeBusy_freebusy =
+{
+  -1,
+  (gchar *) "freebusy",
+  (gchar *) "as",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_out_getFreeBusy_arg_pointers[] =
+{
+  &e_gdbus_cal_method_out_getFreeBusy_freebusy,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_cal_method_getFreeBusy =
+{
+  -1,
+  (gchar *) "getFreeBusy",
+  (GDBusArgInfo **) &e_gdbus_cal_method_in_getFreeBusy_arg_pointers,
+  (GDBusArgInfo **) &e_gdbus_cal_method_out_getFreeBusy_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_in_discardAlarm_uid =
+{
+  -1,
+  (gchar *) "uid",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo e_gdbus_cal_method_in_discardAlarm_auid =
+{
+  -1,
+  (gchar *) "auid",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_in_discardAlarm_arg_pointers[] =
+{
+  &e_gdbus_cal_method_in_discardAlarm_uid,
+  &e_gdbus_cal_method_in_discardAlarm_auid,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_cal_method_discardAlarm =
+{
+  -1,
+  (gchar *) "discardAlarm",
+  (GDBusArgInfo **) &e_gdbus_cal_method_in_discardAlarm_arg_pointers,
+  (GDBusArgInfo **) NULL,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_in_createObject_calobj =
+{
+  -1,
+  (gchar *) "calobj",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_in_createObject_arg_pointers[] =
+{
+  &e_gdbus_cal_method_in_createObject_calobj,
+  NULL
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_out_createObject_uid =
+{
+  -1,
+  (gchar *) "uid",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_out_createObject_arg_pointers[] =
+{
+  &e_gdbus_cal_method_out_createObject_uid,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_cal_method_createObject =
+{
+  -1,
+  (gchar *) "createObject",
+  (GDBusArgInfo **) &e_gdbus_cal_method_in_createObject_arg_pointers,
+  (GDBusArgInfo **) &e_gdbus_cal_method_out_createObject_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_in_modifyObject_calobj =
+{
+  -1,
+  (gchar *) "calobj",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo e_gdbus_cal_method_in_modifyObject_mod =
+{
+  -1,
+  (gchar *) "mod",
+  (gchar *) "u",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_in_modifyObject_arg_pointers[] =
+{
+  &e_gdbus_cal_method_in_modifyObject_calobj,
+  &e_gdbus_cal_method_in_modifyObject_mod,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_cal_method_modifyObject =
+{
+  -1,
+  (gchar *) "modifyObject",
+  (GDBusArgInfo **) &e_gdbus_cal_method_in_modifyObject_arg_pointers,
+  (GDBusArgInfo **) NULL,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_in_removeObject_uid =
+{
+  -1,
+  (gchar *) "uid",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo e_gdbus_cal_method_in_removeObject_rid =
+{
+  -1,
+  (gchar *) "rid",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo e_gdbus_cal_method_in_removeObject_mod =
+{
+  -1,
+  (gchar *) "mod",
+  (gchar *) "u",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_in_removeObject_arg_pointers[] =
+{
+  &e_gdbus_cal_method_in_removeObject_uid,
+  &e_gdbus_cal_method_in_removeObject_rid,
+  &e_gdbus_cal_method_in_removeObject_mod,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_cal_method_removeObject =
+{
+  -1,
+  (gchar *) "removeObject",
+  (GDBusArgInfo **) &e_gdbus_cal_method_in_removeObject_arg_pointers,
+  (GDBusArgInfo **) NULL,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_in_receiveObjects_calobj =
+{
+  -1,
+  (gchar *) "calobj",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_in_receiveObjects_arg_pointers[] =
+{
+  &e_gdbus_cal_method_in_receiveObjects_calobj,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_cal_method_receiveObjects =
+{
+  -1,
+  (gchar *) "receiveObjects",
+  (GDBusArgInfo **) &e_gdbus_cal_method_in_receiveObjects_arg_pointers,
+  (GDBusArgInfo **) NULL,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_in_sendObjects_calobj =
+{
+  -1,
+  (gchar *) "calobj",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_in_sendObjects_arg_pointers[] =
+{
+  &e_gdbus_cal_method_in_sendObjects_calobj,
+  NULL
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_out_sendObjects_users =
+{
+  -1,
+  (gchar *) "users",
+  (gchar *) "as",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo e_gdbus_cal_method_out_sendObjects_calobj =
+{
+  -1,
+  (gchar *) "calobj",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_out_sendObjects_arg_pointers[] =
+{
+  &e_gdbus_cal_method_out_sendObjects_users,
+  &e_gdbus_cal_method_out_sendObjects_calobj,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_cal_method_sendObjects =
+{
+  -1,
+  (gchar *) "sendObjects",
+  (GDBusArgInfo **) &e_gdbus_cal_method_in_sendObjects_arg_pointers,
+  (GDBusArgInfo **) &e_gdbus_cal_method_out_sendObjects_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_in_getAttachmentList_uid =
+{
+  -1,
+  (gchar *) "uid",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo e_gdbus_cal_method_in_getAttachmentList_rid =
+{
+  -1,
+  (gchar *) "rid",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_in_getAttachmentList_arg_pointers[] =
+{
+  &e_gdbus_cal_method_in_getAttachmentList_uid,
+  &e_gdbus_cal_method_in_getAttachmentList_rid,
+  NULL
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_out_getAttachmentList_attachments =
+{
+  -1,
+  (gchar *) "attachments",
+  (gchar *) "as",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_out_getAttachmentList_arg_pointers[] =
+{
+  &e_gdbus_cal_method_out_getAttachmentList_attachments,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_cal_method_getAttachmentList =
+{
+  -1,
+  (gchar *) "getAttachmentList",
+  (GDBusArgInfo **) &e_gdbus_cal_method_in_getAttachmentList_arg_pointers,
+  (GDBusArgInfo **) &e_gdbus_cal_method_out_getAttachmentList_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_in_getQuery_sexp =
+{
+  -1,
+  (gchar *) "sexp",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_in_getQuery_arg_pointers[] =
+{
+  &e_gdbus_cal_method_in_getQuery_sexp,
+  NULL
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_out_getQuery_query =
+{
+  -1,
+  (gchar *) "query",
+  (gchar *) "o",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_out_getQuery_arg_pointers[] =
+{
+  &e_gdbus_cal_method_out_getQuery_query,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_cal_method_getQuery =
+{
+  -1,
+  (gchar *) "getQuery",
+  (GDBusArgInfo **) &e_gdbus_cal_method_in_getQuery_arg_pointers,
+  (GDBusArgInfo **) &e_gdbus_cal_method_out_getQuery_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_in_getTimezone_tzid =
+{
+  -1,
+  (gchar *) "tzid",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_in_getTimezone_arg_pointers[] =
+{
+  &e_gdbus_cal_method_in_getTimezone_tzid,
+  NULL
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_out_getTimezone_object =
+{
+  -1,
+  (gchar *) "object",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_out_getTimezone_arg_pointers[] =
+{
+  &e_gdbus_cal_method_out_getTimezone_object,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_cal_method_getTimezone =
+{
+  -1,
+  (gchar *) "getTimezone",
+  (GDBusArgInfo **) &e_gdbus_cal_method_in_getTimezone_arg_pointers,
+  (GDBusArgInfo **) &e_gdbus_cal_method_out_getTimezone_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_in_addTimezone_tz =
+{
+  -1,
+  (gchar *) "tz",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_in_addTimezone_arg_pointers[] =
+{
+  &e_gdbus_cal_method_in_addTimezone_tz,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_cal_method_addTimezone =
+{
+  -1,
+  (gchar *) "addTimezone",
+  (GDBusArgInfo **) &e_gdbus_cal_method_in_addTimezone_arg_pointers,
+  (GDBusArgInfo **) NULL,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_cal_method_in_setDefaultTimezone_tz =
+{
+  -1,
+  (gchar *) "tz",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_method_in_setDefaultTimezone_arg_pointers[] =
+{
+  &e_gdbus_cal_method_in_setDefaultTimezone_tz,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_cal_method_setDefaultTimezone =
+{
+  -1,
+  (gchar *) "setDefaultTimezone",
+  (GDBusArgInfo **) &e_gdbus_cal_method_in_setDefaultTimezone_arg_pointers,
+  (GDBusArgInfo **) NULL,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusMethodInfo * const e_gdbus_cal_method_info_pointers[] =
+{
+  &e_gdbus_cal_method_getUri,
+  &e_gdbus_cal_method_getCacheDir,
+  &e_gdbus_cal_method_open,
+  &e_gdbus_cal_method_refresh,
+  &e_gdbus_cal_method_close,
+  &e_gdbus_cal_method_remove,
+  &e_gdbus_cal_method_isReadOnly,
+  &e_gdbus_cal_method_getCalAddress,
+  &e_gdbus_cal_method_getAlarmEmailAddress,
+  &e_gdbus_cal_method_getLdapAttribute,
+  &e_gdbus_cal_method_getSchedulingInformation,
+  &e_gdbus_cal_method_setMode,
+  &e_gdbus_cal_method_getDefaultObject,
+  &e_gdbus_cal_method_getObject,
+  &e_gdbus_cal_method_getObjectList,
+  &e_gdbus_cal_method_getChanges,
+  &e_gdbus_cal_method_getFreeBusy,
+  &e_gdbus_cal_method_discardAlarm,
+  &e_gdbus_cal_method_createObject,
+  &e_gdbus_cal_method_modifyObject,
+  &e_gdbus_cal_method_removeObject,
+  &e_gdbus_cal_method_receiveObjects,
+  &e_gdbus_cal_method_sendObjects,
+  &e_gdbus_cal_method_getAttachmentList,
+  &e_gdbus_cal_method_getQuery,
+  &e_gdbus_cal_method_getTimezone,
+  &e_gdbus_cal_method_addTimezone,
+  &e_gdbus_cal_method_setDefaultTimezone,
+  NULL
+};
+
+static const GDBusInterfaceInfo _e_gdbus_cal_interface_info =
+{
+  -1,
+  (gchar *) "org.gnome.evolution.dataserver.calendar.Cal",
+  (GDBusMethodInfo **) &e_gdbus_cal_method_info_pointers,
+  (GDBusSignalInfo **) &e_gdbus_cal_signal_info_pointers,
+  (GDBusPropertyInfo **) NULL,
+};
+
+static void
+handle_method_call (GDBusConnection       *connection,
+                    const gchar           *sender,
+                    const gchar           *object_path,
+                    const gchar           *interface_name,
+                    const gchar           *method_name,
+                    GVariant              *parameters,
+                    GDBusMethodInvocation *invocation,
+                    gpointer               user_data)
+{
+  guint method_id;
+  method_id = lookup_method_id_from_method_name (method_name);
+  switch (method_id)
+    {
+    case __GET_URI_METHOD:
+      {
+        EGdbusCal *object = E_GDBUS_CAL (user_data);
+        gboolean handled;
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __GET_CACHE_DIR_METHOD:
+      {
+        EGdbusCal *object = E_GDBUS_CAL (user_data);
+        gboolean handled;
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __OPEN_METHOD:
+      {
+        EGdbusCal *object = E_GDBUS_CAL (user_data);
+        gboolean handled;
+        gboolean arg_only_if_exists;
+        const gchar *arg_username;
+        const gchar *arg_password;
+        g_variant_get (parameters,
+                       "(b&s&s)",
+                       &arg_only_if_exists,
+                       &arg_username,
+                       &arg_password);
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, arg_only_if_exists, arg_username, arg_password, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __REFRESH_METHOD:
+      {
+        EGdbusCal *object = E_GDBUS_CAL (user_data);
+        gboolean handled;
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __CLOSE_METHOD:
+      {
+        EGdbusCal *object = E_GDBUS_CAL (user_data);
+        gboolean handled;
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __REMOVE_METHOD:
+      {
+        EGdbusCal *object = E_GDBUS_CAL (user_data);
+        gboolean handled;
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __IS_READ_ONLY_METHOD:
+      {
+        EGdbusCal *object = E_GDBUS_CAL (user_data);
+        gboolean handled;
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __GET_CAL_ADDRESS_METHOD:
+      {
+        EGdbusCal *object = E_GDBUS_CAL (user_data);
+        gboolean handled;
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __GET_ALARM_EMAIL_ADDRESS_METHOD:
+      {
+        EGdbusCal *object = E_GDBUS_CAL (user_data);
+        gboolean handled;
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __GET_LDAP_ATTRIBUTE_METHOD:
+      {
+        EGdbusCal *object = E_GDBUS_CAL (user_data);
+        gboolean handled;
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __GET_SCHEDULING_INFORMATION_METHOD:
+      {
+        EGdbusCal *object = E_GDBUS_CAL (user_data);
+        gboolean handled;
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __SET_MODE_METHOD:
+      {
+        EGdbusCal *object = E_GDBUS_CAL (user_data);
+        gboolean handled;
+        guint arg_mode;
+        g_variant_get (parameters,
+                       "(u)",
+                       &arg_mode);
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, arg_mode, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __GET_DEFAULT_OBJECT_METHOD:
+      {
+        EGdbusCal *object = E_GDBUS_CAL (user_data);
+        gboolean handled;
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __GET_OBJECT_METHOD:
+      {
+        EGdbusCal *object = E_GDBUS_CAL (user_data);
+        gboolean handled;
+        const gchar *arg_uid;
+        const gchar *arg_rid;
+        g_variant_get (parameters,
+                       "(&s&s)",
+                       &arg_uid,
+                       &arg_rid);
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, arg_uid, arg_rid, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __GET_OBJECT_LIST_METHOD:
+      {
+        EGdbusCal *object = E_GDBUS_CAL (user_data);
+        gboolean handled;
+        const gchar *arg_sexp;
+        g_variant_get (parameters,
+                       "(&s)",
+                       &arg_sexp);
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, arg_sexp, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __GET_CHANGES_METHOD:
+      {
+        EGdbusCal *object = E_GDBUS_CAL (user_data);
+        gboolean handled;
+        const gchar *arg_change_id;
+        g_variant_get (parameters,
+                       "(&s)",
+                       &arg_change_id);
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, arg_change_id, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __GET_FREE_BUSY_METHOD:
+      {
+        EGdbusCal *object = E_GDBUS_CAL (user_data);
+        gboolean handled;
+        const gchar* const *arg_user_list;
+        guint arg_start;
+        guint arg_end;
+        g_variant_get (parameters,
+                       "(^a&suu)",
+                       &arg_user_list,
+                       &arg_start,
+                       &arg_end);
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, arg_user_list, arg_start, arg_end, &handled);
+        g_free ((gpointer) arg_user_list);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __DISCARD_ALARM_METHOD:
+      {
+        EGdbusCal *object = E_GDBUS_CAL (user_data);
+        gboolean handled;
+        const gchar *arg_uid;
+        const gchar *arg_auid;
+        g_variant_get (parameters,
+                       "(&s&s)",
+                       &arg_uid,
+                       &arg_auid);
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, arg_uid, arg_auid, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __CREATE_OBJECT_METHOD:
+      {
+        EGdbusCal *object = E_GDBUS_CAL (user_data);
+        gboolean handled;
+        const gchar *arg_calobj;
+        g_variant_get (parameters,
+                       "(&s)",
+                       &arg_calobj);
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, arg_calobj, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __MODIFY_OBJECT_METHOD:
+      {
+        EGdbusCal *object = E_GDBUS_CAL (user_data);
+        gboolean handled;
+        const gchar *arg_calobj;
+        guint arg_mod;
+        g_variant_get (parameters,
+                       "(&su)",
+                       &arg_calobj,
+                       &arg_mod);
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, arg_calobj, arg_mod, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __REMOVE_OBJECT_METHOD:
+      {
+        EGdbusCal *object = E_GDBUS_CAL (user_data);
+        gboolean handled;
+        const gchar *arg_uid;
+        const gchar *arg_rid;
+        guint arg_mod;
+        g_variant_get (parameters,
+                       "(&s&su)",
+                       &arg_uid,
+                       &arg_rid,
+                       &arg_mod);
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, arg_uid, arg_rid, arg_mod, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __RECEIVE_OBJECTS_METHOD:
+      {
+        EGdbusCal *object = E_GDBUS_CAL (user_data);
+        gboolean handled;
+        const gchar *arg_calobj;
+        g_variant_get (parameters,
+                       "(&s)",
+                       &arg_calobj);
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, arg_calobj, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __SEND_OBJECTS_METHOD:
+      {
+        EGdbusCal *object = E_GDBUS_CAL (user_data);
+        gboolean handled;
+        const gchar *arg_calobj;
+        g_variant_get (parameters,
+                       "(&s)",
+                       &arg_calobj);
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, arg_calobj, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __GET_ATTACHMENT_LIST_METHOD:
+      {
+        EGdbusCal *object = E_GDBUS_CAL (user_data);
+        gboolean handled;
+        const gchar *arg_uid;
+        const gchar *arg_rid;
+        g_variant_get (parameters,
+                       "(&s&s)",
+                       &arg_uid,
+                       &arg_rid);
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, arg_uid, arg_rid, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __GET_QUERY_METHOD:
+      {
+        EGdbusCal *object = E_GDBUS_CAL (user_data);
+        gboolean handled;
+        const gchar *arg_sexp;
+        g_variant_get (parameters,
+                       "(&s)",
+                       &arg_sexp);
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, arg_sexp, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __GET_TIMEZONE_METHOD:
+      {
+        EGdbusCal *object = E_GDBUS_CAL (user_data);
+        gboolean handled;
+        const gchar *arg_tzid;
+        g_variant_get (parameters,
+                       "(&s)",
+                       &arg_tzid);
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, arg_tzid, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __ADD_TIMEZONE_METHOD:
+      {
+        EGdbusCal *object = E_GDBUS_CAL (user_data);
+        gboolean handled;
+        const gchar *arg_tz;
+        g_variant_get (parameters,
+                       "(&s)",
+                       &arg_tz);
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, arg_tz, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __SET_DEFAULT_TIMEZONE_METHOD:
+      {
+        EGdbusCal *object = E_GDBUS_CAL (user_data);
+        gboolean handled;
+        const gchar *arg_tz;
+        g_variant_get (parameters,
+                       "(&s)",
+                       &arg_tz);
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, arg_tz, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    default:
+not_implemented:
+      g_dbus_method_invocation_return_error (invocation,
+                                             G_DBUS_ERROR,
+                                             G_DBUS_ERROR_NOT_SUPPORTED,
+                                             "Method `%s' is not implemented",
+                                             method_name);
+      break;
+    }
+};
+
+static GVariant *
+get_property (GDBusConnection  *connection,
+              const gchar      *sender,
+              const gchar      *object_path,
+              const gchar      *interface_name,
+              const gchar      *property_name,
+              GError          **error,
+              gpointer          user_data)
+{
+  GVariant *ret;
+  guint prop_id;
+  prop_id = lookup_property_id_from_property_name (property_name);
+  ret = NULL;
+  switch (prop_id)
+    {
+    default:
+      g_set_error (error,
+                   G_DBUS_ERROR,
+                   G_DBUS_ERROR_NOT_SUPPORTED,
+                   "This implementation does not support property `%s'",
+                   property_name);
+      break;
+    }
+
+  return ret;
+};
+
+static gboolean
+set_property (GDBusConnection  *connection,
+              const gchar      *sender,
+              const gchar      *object_path,
+              const gchar      *interface_name,
+              const gchar      *property_name,
+              GVariant         *value,
+              GError          **error,
+              gpointer          user_data)
+{
+  gboolean ret;
+  guint prop_id;
+  prop_id = lookup_property_id_from_property_name (property_name);
+  ret = TRUE;
+  switch (prop_id)
+    {
+    default:
+      g_set_error (error,
+                   G_DBUS_ERROR,
+                   G_DBUS_ERROR_NOT_SUPPORTED,
+                   "This implementation does not support property `%s'",
+                   property_name);
+      ret = FALSE;
+      break;
+    }
+
+  return ret;
+};
+
+static const GDBusInterfaceVTable e_gdbus_cal_interface_vtable =
+{
+  handle_method_call,
+  get_property,
+  set_property,
+};
+
+static gboolean
+emit_notifications_in_idle (gpointer user_data)
+{
+  GObject *object = G_OBJECT (user_data);
+  GDBusConnection *connection;
+  const gchar *path;
+  GHashTable *notification_queue;
+  GHashTableIter iter;
+  const gchar *property_name;
+  GVariant *value;
+  GVariantBuilder *builder;
+  GVariantBuilder *invalidated_builder;
+  GHashTable *pvc;
+  gboolean has_changes;
+
+  notification_queue = g_object_get_data (object, "gdbus-codegen-notification-queue");
+  path = g_object_get_data (object, "gdbus-codegen-path");
+  connection = g_object_get_data (object, "gdbus-codegen-connection");
+  pvc = g_object_get_data (object, "gdbus-codegen-pvc");
+  g_assert (notification_queue != NULL && path != NULL && connection != NULL && pvc != NULL);
+
+  builder = g_variant_builder_new (G_VARIANT_TYPE_ARRAY);
+  invalidated_builder = g_variant_builder_new (G_VARIANT_TYPE ("as"));
+  g_hash_table_iter_init (&iter, notification_queue);
+  has_changes = FALSE;
+  while (g_hash_table_iter_next (&iter, (gpointer) &property_name, (gpointer) &value))
+    {
+      GVariant *cached_value;
+      cached_value = g_hash_table_lookup (pvc, property_name);
+      if (cached_value == NULL || !g_variant_equal (cached_value, value))
+        {
+          g_hash_table_insert (pvc, (gpointer) property_name, (gpointer) g_variant_ref (value));
+          g_variant_builder_add (builder, "{sv}", property_name, value);
+          has_changes = TRUE;
+        }
+    }
+
+  if (has_changes)
+    {
+      g_dbus_connection_emit_signal (connection,
+                                     NULL,
+                                     path,
+                                     "org.freedesktop.DBus.Properties",
+                                     "PropertiesChanged",
+                                     g_variant_new ("(sa{sv}as)",
+                                                    "org.gnome.evolution.dataserver.calendar.Cal",
+                                                    builder,
+                                                    invalidated_builder),
+                                     NULL);
+    }
+  else
+    {
+      g_variant_builder_unref (builder);
+      g_variant_builder_unref (invalidated_builder);
+    }
+
+  g_hash_table_remove_all (notification_queue);
+  g_object_set_data (object, "gdbus-codegen-notification-idle-id", GUINT_TO_POINTER (0));
+  return FALSE;
+}
+
+static void
+queue_notification (GObject     *object,
+                    const gchar *property_name,
+                    GVariant    *value)
+{
+  GHashTable *notification_queue;
+  guint idle_id;
+  notification_queue = g_object_get_data (object, "gdbus-codegen-notification-queue");
+  if (notification_queue == NULL)
+    {
+      notification_queue = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) g_variant_unref);
+      g_object_set_data_full (object, "gdbus-codegen-notification-queue", notification_queue, (GDestroyNotify) g_hash_table_unref);
+    }
+  g_hash_table_insert (notification_queue, (gpointer) property_name, (gpointer) value); /* adopts value */
+  idle_id = GPOINTER_TO_UINT (g_object_get_data (object, "gdbus-codegen-notification-idle-id"));
+  if (idle_id == 0)
+    {
+      GSource *idle_source;
+      idle_source = g_idle_source_new ();
+      g_source_set_priority (idle_source, G_PRIORITY_DEFAULT);
+      g_source_set_callback (idle_source,
+                             emit_notifications_in_idle,
+                             g_object_ref (object),
+                             (GDestroyNotify) g_object_unref);
+      idle_id = g_source_attach (idle_source, g_main_context_get_thread_default ());
+      g_source_unref (idle_source);
+      g_object_set_data (object, "gdbus-codegen-notification-idle-id", GUINT_TO_POINTER (idle_id));
+    }
+}
+
+/**
+ * e_gdbus_cal_drain_notify:
+ * @object: A #EGdbusCal that is exported.
+ *
+ * If @object has queued notifications, empty the queue forcing
+ * the <literal>PropertiesChanged</literal> signal to be emitted.
+ * See <xref linkend="EGdbusCal.description"/> for more background information.
+ */
+void
+e_gdbus_cal_drain_notify (EGdbusCal *object)
+{
+  gint idle_id;
+  idle_id = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (object), "gdbus-codegen-notification-idle-id"));
+  if (idle_id > 0)
+    {
+      emit_notifications_in_idle (object);
+      g_source_remove (idle_id);
+    }
+}
+
+static void
+on_notify (GObject    *object,
+           GParamSpec *pspec,
+           gpointer    user_data)
+{
+  GDBusConnection *connection;
+  const gchar *path;
+  GVariant *value;
+  const gchar *property_name;
+  guint prop_id;
+
+  path = g_object_get_data (object, "gdbus-codegen-path");
+  connection = g_object_get_data (object, "gdbus-codegen-connection");
+  if (connection == NULL || path == NULL)
+    goto out;
+
+  property_name = lookup_property_name_from_property_gname (pspec->name);
+  if (property_name == NULL)
+    goto out;
+  prop_id = lookup_property_id_from_property_name (property_name);
+
+  value = NULL;
+  switch (prop_id)
+    {
+  }
+
+  if (value != NULL && property_name != NULL)
+    {
+      queue_notification (object, property_name, g_variant_ref_sink (value));
+    }
+out:
+  ;
+}
+
+static void
+on_object_unregistered (GObject *object)
+{
+  gint idle_id;
+  idle_id = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (object), "gdbus-codegen-notification-idle-id"));
+  if (idle_id > 0)
+    {
+      g_source_remove (idle_id);
+    }
+  g_object_set_data (G_OBJECT (object), "gdbus-codegen-path", NULL);
+  g_object_set_data (G_OBJECT (object), "gdbus-codegen-connection", NULL);
+  g_signal_handlers_disconnect_by_func (object, on_notify, NULL);
+}
+
+/**
+ * e_gdbus_cal_register_object:
+ * @object: An instance of a #GObject<!-- -->-derived type implementing the #EGdbusCal interface.
+ * @connection: A #GDBusConnection.
+ * @object_path: The object to register the object at.
+ * @error: Return location for error or %NULL.
+ *
+ * Registers @object at @object_path on @connection.
+ *
+ * See <xref linkend="EGdbusCal.description"/>
+ * for how properties, methods and signals are handled.
+ *
+ * Returns: 0 if @error is set, otherwise a registration id (never 0) that can be used with g_dbus_connection_unregister_object().
+ */
+guint
+e_gdbus_cal_register_object (EGdbusCal *object,
+           GDBusConnection *connection,
+           const gchar *object_path,
+           GError **error)
+{
+  G_GNUC_UNUSED GVariant *value;
+  GHashTable *pvc;
+
+  pvc = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) g_variant_unref);
+
+  g_object_set_data_full (G_OBJECT (object), "gdbus-codegen-path", (gpointer) g_strdup (object_path), g_free);
+  g_object_set_data (G_OBJECT (object), "gdbus-codegen-connection", (gpointer) connection);
+  g_object_set_data_full (G_OBJECT (object), "gdbus-codegen-pvc", (gpointer) pvc, (GDestroyNotify) g_hash_table_unref);
+  g_signal_connect (object, "notify", G_CALLBACK (on_notify), NULL);
+  return g_dbus_connection_register_object (connection,
+          object_path,
+          &_e_gdbus_cal_interface_info,
+          &e_gdbus_cal_interface_vtable,
+          object,
+          (GDestroyNotify) on_object_unregistered,
+          error);
+}
+
+/**
+ * e_gdbus_cal_interface_info:
+ *
+ * Gets interface description for the <literal>org.gnome.evolution.dataserver.calendar.Cal</literal> D-Bus interface.
+ *
+ * Returns: A #GDBusInterfaceInfo. Do not free, the object is statically allocated.
+ */
+const GDBusInterfaceInfo *
+e_gdbus_cal_interface_info (void)
+{
+  return &_e_gdbus_cal_interface_info;
+}
+
+
+/* ---------------------------------------------------------------------- */
+
+static void proxy_iface_init (EGdbusCalIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (EGdbusCalProxy, e_gdbus_cal_proxy, G_TYPE_DBUS_PROXY,
+                         G_IMPLEMENT_INTERFACE (E_GDBUS_TYPE_CAL, proxy_iface_init));
+
+static void
+e_gdbus_cal_proxy_init (EGdbusCalProxy *proxy)
+{
+  g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy),
+                                   (GDBusInterfaceInfo *) &_e_gdbus_cal_interface_info);
+}
+
+static void
+g_signal (GDBusProxy  *proxy,
+          const gchar *sender_name,
+          const gchar *signal_name,
+          GVariant    *parameters)
+{
+  guint signal_id;
+  signal_id = lookup_signal_id_from_signal_name (signal_name);
+  switch (signal_id)
+    {
+    case __AUTH_REQUIRED_SIGNAL:
+      {
+        g_signal_emit (proxy,
+                       signals[signal_id],
+                       0);
+      }
+      break;
+
+    case __BACKEND_ERROR_SIGNAL:
+      {
+        const gchar *arg_error;
+        g_variant_get (parameters,
+                       "(&s)",
+                       &arg_error);
+        g_signal_emit (proxy,
+                       signals[signal_id],
+                       0, arg_error);
+      }
+      break;
+
+    case __READONLY_SIGNAL:
+      {
+        gboolean arg_is_readonly;
+        g_variant_get (parameters,
+                       "(b)",
+                       &arg_is_readonly);
+        g_signal_emit (proxy,
+                       signals[signal_id],
+                       0, arg_is_readonly);
+      }
+      break;
+
+    case __MODE_SIGNAL:
+      {
+        gint arg_mode;
+        g_variant_get (parameters,
+                       "(i)",
+                       &arg_mode);
+        g_signal_emit (proxy,
+                       signals[signal_id],
+                       0, arg_mode);
+      }
+      break;
+
+    }
+}
+
+static void
+e_gdbus_cal_proxy_get_property (GObject      *object,
+                       guint         prop_id,
+                       GValue       *value,
+                       GParamSpec   *pspec)
+{
+  G_GNUC_UNUSED GVariant *cached;
+  switch (prop_id)
+    {
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+property_set_cb (GDBusProxy   *proxy,
+                 GAsyncResult *res,
+                 gpointer      user_data)
+{
+  const gchar *property_name = user_data;
+  GError *error;
+  GVariant *result;
+
+  error = NULL;
+  result = g_dbus_proxy_call_finish (proxy, res, &error);
+  if (result == NULL)
+    {
+      g_warning ("Error setting property `%s': %s", property_name, error->message);
+      g_error_free (error);
+    }
+  else
+    {
+      g_variant_unref (result);
+    }
+}
+
+static void
+e_gdbus_cal_proxy_set_property (GObject      *object,
+                       guint         prop_id,
+                       const GValue *value,
+                       GParamSpec   *pspec)
+{
+  GVariant *new_value;
+  const gchar *property_name;
+  new_value = NULL;
+  property_name = NULL;
+  switch (prop_id)
+    {
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+
+  if (new_value != NULL)
+    {
+      g_variant_ref_sink (new_value);
+      g_dbus_proxy_call (G_DBUS_PROXY (object),
+                         "org.freedesktop.DBus.Properties.Set",
+                         g_variant_new ("(ssv)",
+                                        "org.gnome.evolution.dataserver.calendar.Cal",
+                                        property_name,
+                                        new_value),
+                         G_DBUS_CALL_FLAGS_NONE,
+                         -1,
+                         NULL,
+                         (GAsyncReadyCallback) property_set_cb,
+                         (gpointer) property_name);
+      g_variant_unref (new_value);
+    }
+
+}
+
+static void
+g_properties_changed (GDBusProxy         *proxy,
+                      GVariant           *changed_properties,
+                      const gchar* const *invalidated_properties)
+{
+  guint n;
+  const gchar *key;
+  GVariantIter *iter;
+  const gchar *gname;
+
+  g_variant_get (changed_properties, "a{sv}", &iter);
+  while (g_variant_iter_next (iter, "{&sv}", &key, NULL))
+    {
+      gname = lookup_property_gname_from_property_name (key);
+      if (gname != NULL)
+        g_object_notify (G_OBJECT (proxy), gname);
+    }
+
+  for (n = 0; invalidated_properties[n] != NULL; n++)
+    {
+      gname = lookup_property_gname_from_property_name (invalidated_properties[n]);
+      if (gname != NULL)
+        g_object_notify (G_OBJECT (proxy), gname);
+    }
+
+}
+
+static void
+e_gdbus_cal_proxy_class_init (EGdbusCalProxyClass *klass)
+{
+  GObjectClass *gobject_class;
+  GDBusProxyClass *proxy_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->get_property = e_gdbus_cal_proxy_get_property;
+  gobject_class->set_property = e_gdbus_cal_proxy_set_property;
+
+  proxy_class = G_DBUS_PROXY_CLASS (klass);
+  proxy_class->g_signal = g_signal;
+  proxy_class->g_properties_changed = g_properties_changed;
+
+}
+
+static void
+proxy_iface_init (EGdbusCalIface *iface)
+{
+}
+
+
+/**
+ * e_gdbus_cal_proxy_new:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags used when constructing the proxy.
+ * @name: A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: Callback function to invoke when the proxy is ready.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like g_dbus_proxy_new() but returns a #EGdbusCalProxy.
+ *
+ * This is a failable asynchronous constructor - when the proxy is ready, callback will be invoked and you can use e_gdbus_cal_proxy_new_finish() to get the result.
+ */
+void e_gdbus_cal_proxy_new (GDBusConnection     *connection,
+                   GDBusProxyFlags      flags,
+                   const gchar         *name,
+                   const gchar         *object_path,
+                   GCancellable        *cancellable,
+                   GAsyncReadyCallback  callback,
+                   gpointer             user_data)
+{
+  g_async_initable_new_async (E_GDBUS_TYPE_CAL_PROXY,
+                              G_PRIORITY_DEFAULT,
+                              cancellable,
+                              callback,
+                              user_data,
+                              "g-flags", flags,
+                              "g-name", name,
+                              "g-connection", connection,
+                              "g-object-path", object_path,
+                              "g-interface-name", "org.gnome.evolution.dataserver.calendar.Cal",
+                              NULL);
+}
+
+/**
+ * e_gdbus_cal_proxy_new_finish:
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback function passed to e_gdbus_cal_proxy_new().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes creating a #EGdbusCalProxy.
+ *
+ * Returns: A #EGdbusCalProxy or %NULL if @error is set. Free with g_object_unref().
+ */
+EGdbusCal *e_gdbus_cal_proxy_new_finish (GAsyncResult  *res,
+                        GError       **error)
+{
+  GObject *object;
+  GObject *source_object;
+  source_object = g_async_result_get_source_object (res);
+  g_assert (source_object != NULL);
+  object = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object),
+                                        res,
+                                        error);
+  g_object_unref (source_object);
+  if (object != NULL)
+    return E_GDBUS_CAL (object);
+  else
+    return NULL;
+}
+
+/**
+ * e_gdbus_cal_proxy_new_sync:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags used when constructing the proxy.
+ * @name: A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Like g_dbus_proxy_new_sync() but returns a #EGdbusCalProxy.
+ *
+ * This is a synchronous failable constructor. See e_gdbus_cal_proxy_new() and e_gdbus_cal_proxy_new_finish() for the asynchronous version.
+ *
+ * Returns: A #EGdbusCalProxy or %NULL if error is set. Free with g_object_unref().
+ */
+EGdbusCal *e_gdbus_cal_proxy_new_sync (GDBusConnection     *connection,
+                       GDBusProxyFlags      flags,
+                       const gchar         *name,
+                       const gchar         *object_path,
+                       GCancellable        *cancellable,
+                       GError             **error)
+{
+  GInitable *initable;
+  initable = g_initable_new (E_GDBUS_TYPE_CAL_PROXY,
+                             cancellable,
+                             error,
+                             "g-flags", flags,
+                             "g-name", name,
+                             "g-connection", connection,
+                             "g-object-path", object_path,
+                             "g-interface-name", "org.gnome.evolution.dataserver.calendar.Cal",
+                             NULL);
+  if (initable != NULL)
+    return E_GDBUS_CAL (initable);
+  else
+    return NULL;
+}
+
+
+/**
+ * e_gdbus_cal_proxy_new_for_bus:
+ * @bus_type: A #GBusType.
+ * @flags: Flags used when constructing the proxy.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: Callback function to invoke when the proxy is ready.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like g_dbus_proxy_new_for_bus() but returns a #EGdbusCalProxy.
+ *
+ * This is a failable asynchronous constructor - when the proxy is ready, callback will be invoked and you can use e_gdbus_cal_proxy_new_for_bus_finish() to get the result.
+ */
+void e_gdbus_cal_proxy_new_for_bus (GBusType             bus_type,
+                           GDBusProxyFlags      flags,
+                           const gchar         *name,
+                           const gchar         *object_path,
+                           GCancellable        *cancellable,
+                           GAsyncReadyCallback  callback,
+                           gpointer             user_data)
+{
+  g_async_initable_new_async (E_GDBUS_TYPE_CAL_PROXY,
+                              G_PRIORITY_DEFAULT,
+                              cancellable,
+                              callback,
+                              user_data,
+                              "g-flags", flags,
+                              "g-name", name,
+                              "g-bus-type", bus_type,
+                              "g-object-path", object_path,
+                              "g-interface-name", "org.gnome.evolution.dataserver.calendar.Cal",
+                              NULL);
+}
+
+/**
+ * e_gdbus_cal_proxy_new_for_bus_finish:
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback function passed to e_gdbus_cal_proxy_new_for_bus().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes creating a #EGdbusCalProxy.
+ *
+ * Returns: A #EGdbusCalProxy or %NULL if @error is set. Free with g_object_unref().
+ */
+EGdbusCal *e_gdbus_cal_proxy_new_for_bus_finish (GAsyncResult  *res,
+                                GError       **error)
+{
+  GObject *object;
+  GObject *source_object;
+  source_object = g_async_result_get_source_object (res);
+  g_assert (source_object != NULL);
+  object = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object),
+                                        res,
+                                        error);
+  g_object_unref (source_object);
+  if (object != NULL)
+    return E_GDBUS_CAL (object);
+  else
+    return NULL;
+}
+
+/**
+ * e_gdbus_cal_proxy_new_for_bus_sync:
+ * @bus_type: A #GBusType.
+ * @flags: Flags used when constructing the proxy.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Like g_dbus_proxy_new_for_bus_sync() but returns a #EGdbusCalProxy.
+ *
+ * This is a synchronous failable constructor. See e_gdbus_cal_proxy_new_for_bus() and e_gdbus_cal_proxy_new_for_bus_finish() for the asynchronous version.
+ *
+ * Returns: A #EGdbusCalProxy or %NULL if error is set. Free with g_object_unref().
+ */
+EGdbusCal *e_gdbus_cal_proxy_new_for_bus_sync (GBusType             bus_type,
+                               GDBusProxyFlags      flags,
+                               const gchar         *name,
+                               const gchar         *object_path,
+                               GCancellable        *cancellable,
+                               GError             **error)
+{
+  GInitable *initable;
+  initable = g_initable_new (E_GDBUS_TYPE_CAL_PROXY,
+                             cancellable,
+                             error,
+                             "g-flags", flags,
+                             "g-name", name,
+                             "g-bus-type", bus_type,
+                             "g-object-path", object_path,
+                             "g-interface-name", "org.gnome.evolution.dataserver.calendar.Cal",
+                             NULL);
+  if (initable != NULL)
+    return E_GDBUS_CAL (initable);
+  else
+    return NULL;
+}
+
+
+/* ---------------------------------------------------------------------- */
+
+struct _EGdbusCalStubPrivate
+{
+  gint foo;
+};
+
+static void stub_iface_init (EGdbusCalIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (EGdbusCalStub, e_gdbus_cal_stub, G_TYPE_OBJECT,
+                         G_IMPLEMENT_INTERFACE (E_GDBUS_TYPE_CAL, stub_iface_init));
+
+static void
+e_gdbus_cal_stub_finalize (GObject *object)
+{
+  G_GNUC_UNUSED EGdbusCalStub *stub = (EGdbusCalStub *) object;
+  if (G_OBJECT_CLASS (e_gdbus_cal_stub_parent_class)->finalize != NULL)
+    G_OBJECT_CLASS (e_gdbus_cal_stub_parent_class)->finalize (object);
+}
+
+static void
+e_gdbus_cal_stub_get_property (GObject      *object,
+                      guint         prop_id,
+                      GValue       *value,
+                      GParamSpec   *pspec)
+{
+  G_GNUC_UNUSED static gchar **strv_of_len_zero = {NULL};
+  G_GNUC_UNUSED EGdbusCalStub *stub = (EGdbusCalStub *) object;
+  switch (prop_id)
+    {
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+e_gdbus_cal_stub_set_property (GObject      *object,
+                      guint         prop_id,
+                      const GValue *value,
+                      GParamSpec   *pspec)
+{
+  G_GNUC_UNUSED EGdbusCalStub *stub = (EGdbusCalStub *) object;
+  switch (prop_id)
+    {
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+e_gdbus_cal_stub_init (EGdbusCalStub *stub)
+{
+  stub->priv = G_TYPE_INSTANCE_GET_PRIVATE (stub, E_GDBUS_TYPE_CAL_STUB, EGdbusCalStubPrivate);
+}
+
+static void
+e_gdbus_cal_stub_class_init (EGdbusCalStubClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize     = e_gdbus_cal_stub_finalize;
+  gobject_class->get_property = e_gdbus_cal_stub_get_property;
+  gobject_class->set_property = e_gdbus_cal_stub_set_property;
+  g_type_class_add_private (klass, sizeof (EGdbusCalStubPrivate));
+}
+
+static void
+stub_iface_init (EGdbusCalIface *iface)
+{
+}
+
+/**
+ * e_gdbus_cal_stub_new:
+ *
+ * Creates a new stub object that can be exported via e_gdbus_cal_register_object().
+ *
+ * Returns: A #EGdbusCalStub instance. Free with g_object_unref().
+ */
+EGdbusCal *
+e_gdbus_cal_stub_new (void)
+{
+  return E_GDBUS_CAL (g_object_new (E_GDBUS_TYPE_CAL_STUB, NULL));
+}
diff --git a/calendar/libegdbus/e-gdbus-egdbuscal.h b/calendar/libegdbus/e-gdbus-egdbuscal.h
new file mode 100644
index 0000000..f69cbd3
--- /dev/null
+++ b/calendar/libegdbus/e-gdbus-egdbuscal.h
@@ -0,0 +1,1077 @@
+/* File:       e-gdbus-egdbuscal.h
+ *
+ * GType name: EGdbusCal
+ * D-Bus name: org.gnome.evolution.dataserver.calendar.Cal
+ *
+ * Generated by GDBus Binding Tool 0.1. DO NOT EDIT.
+ */
+
+#ifndef __E_GDBUS_E_GDBUS_CAL_H__
+#define __E_GDBUS_E_GDBUS_CAL_H__
+
+#include <gio/gio.h>
+
+#include "e-gdbus-typemappers.h"
+G_BEGIN_DECLS
+
+#define E_GDBUS_TYPE_CAL         (e_gdbus_cal_get_type ())
+#define E_GDBUS_CAL(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), E_GDBUS_TYPE_CAL, EGdbusCal))
+#define E_GDBUS_IS_CAL(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_GDBUS_TYPE_CAL))
+#define E_GDBUS_CAL_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE((o), E_GDBUS_TYPE_CAL, EGdbusCalIface))
+
+/**
+ * EGdbusCal:
+ *
+ * Opaque type representing a proxy or an exported object.
+ */
+typedef struct _EGdbusCal EGdbusCal; /* Dummy typedef */
+/**
+ * EGdbusCalIface:
+ * @parent_iface: The parent interface.
+ * @auth_required: Handler for the #EGdbusCal::auth-required signal.
+ * @backend_error: Handler for the #EGdbusCal::backend-error signal.
+ * @readonly: Handler for the #EGdbusCal::readonly signal.
+ * @mode: Handler for the #EGdbusCal::mode signal.
+ * @handle_get_uri: Handler for the #EGdbusCal::handle-get-uri signal.
+ * @handle_get_cache_dir: Handler for the #EGdbusCal::handle-get-cache-dir signal.
+ * @handle_open: Handler for the #EGdbusCal::handle-open signal.
+ * @handle_refresh: Handler for the #EGdbusCal::handle-refresh signal.
+ * @handle_close: Handler for the #EGdbusCal::handle-close signal.
+ * @handle_remove: Handler for the #EGdbusCal::handle-remove signal.
+ * @handle_is_read_only: Handler for the #EGdbusCal::handle-is-read-only signal.
+ * @handle_get_cal_address: Handler for the #EGdbusCal::handle-get-cal-address signal.
+ * @handle_get_alarm_email_address: Handler for the #EGdbusCal::handle-get-alarm-email-address signal.
+ * @handle_get_ldap_attribute: Handler for the #EGdbusCal::handle-get-ldap-attribute signal.
+ * @handle_get_scheduling_information: Handler for the #EGdbusCal::handle-get-scheduling-information signal.
+ * @handle_set_mode: Handler for the #EGdbusCal::handle-set-mode signal.
+ * @handle_get_default_object: Handler for the #EGdbusCal::handle-get-default-object signal.
+ * @handle_get_object: Handler for the #EGdbusCal::handle-get-object signal.
+ * @handle_get_object_list: Handler for the #EGdbusCal::handle-get-object-list signal.
+ * @handle_get_changes: Handler for the #EGdbusCal::handle-get-changes signal.
+ * @handle_get_free_busy: Handler for the #EGdbusCal::handle-get-free-busy signal.
+ * @handle_discard_alarm: Handler for the #EGdbusCal::handle-discard-alarm signal.
+ * @handle_create_object: Handler for the #EGdbusCal::handle-create-object signal.
+ * @handle_modify_object: Handler for the #EGdbusCal::handle-modify-object signal.
+ * @handle_remove_object: Handler for the #EGdbusCal::handle-remove-object signal.
+ * @handle_receive_objects: Handler for the #EGdbusCal::handle-receive-objects signal.
+ * @handle_send_objects: Handler for the #EGdbusCal::handle-send-objects signal.
+ * @handle_get_attachment_list: Handler for the #EGdbusCal::handle-get-attachment-list signal.
+ * @handle_get_query: Handler for the #EGdbusCal::handle-get-query signal.
+ * @handle_get_timezone: Handler for the #EGdbusCal::handle-get-timezone signal.
+ * @handle_add_timezone: Handler for the #EGdbusCal::handle-add-timezone signal.
+ * @handle_set_default_timezone: Handler for the #EGdbusCal::handle-set-default-timezone signal.
+ *
+ * Virtual table.
+ */
+typedef struct _EGdbusCalIface EGdbusCalIface;
+
+GType e_gdbus_cal_get_type (void) G_GNUC_CONST;
+
+/* ---------------------------------------------------------------------- */
+
+typedef struct _EGdbusCalProxy EGdbusCalProxy;
+typedef struct _EGdbusCalProxyClass EGdbusCalProxyClass;
+
+/**
+ * EGdbusCalProxyPrivate:
+ *
+ * The #EGdbusCalProxyPrivate structure contains only private data.
+ */
+typedef struct _EGdbusCalProxyPrivate EGdbusCalProxyPrivate;
+
+/**
+ * EGdbusCalProxy:
+ *
+ * The #EGdbusCalProxy structure contains only private data and
+ * should only be accessed using the provided API.
+ */
+struct _EGdbusCalProxy
+{
+  GDBusProxy parent_instance;
+  EGdbusCalProxyPrivate *priv;
+};
+
+/**
+ * EGdbusCalProxyClass:
+ *
+ * Class structure for #EGdbusCalProxy.
+ */
+struct _EGdbusCalProxyClass
+{
+  GDBusProxyClass parent_class;
+};
+
+#define E_GDBUS_TYPE_CAL_PROXY (e_gdbus_cal_proxy_get_type ())
+GType e_gdbus_cal_proxy_get_type (void) G_GNUC_CONST;
+
+void e_gdbus_cal_proxy_new (GDBusConnection     *connection,
+                   GDBusProxyFlags      flags,
+                   const gchar         *name,
+                   const gchar         *object_path,
+                   GCancellable        *cancellable,
+                   GAsyncReadyCallback  callback,
+                   gpointer             user_data);
+EGdbusCal *e_gdbus_cal_proxy_new_finish (GAsyncResult  *res,
+                        GError       **error);
+EGdbusCal *e_gdbus_cal_proxy_new_sync (GDBusConnection     *connection,
+                       GDBusProxyFlags      flags,
+                       const gchar         *name,
+                       const gchar         *object_path,
+                       GCancellable        *cancellable,
+                       GError             **error);
+
+void e_gdbus_cal_proxy_new_for_bus (GBusType             bus_type,
+                           GDBusProxyFlags      flags,
+                           const gchar         *name,
+                           const gchar         *object_path,
+                           GCancellable        *cancellable,
+                           GAsyncReadyCallback  callback,
+                           gpointer             user_data);
+EGdbusCal *e_gdbus_cal_proxy_new_for_bus_finish (GAsyncResult  *res,
+                                 GError       **error);
+EGdbusCal *e_gdbus_cal_proxy_new_for_bus_sync (GBusType             bus_type,
+                               GDBusProxyFlags      flags,
+                               const gchar         *name,
+                               const gchar         *object_path,
+                               GCancellable        *cancellable,
+                               GError             **error);
+
+/* ---------------------------------------------------------------------- */
+
+typedef struct _EGdbusCalStub EGdbusCalStub;
+typedef struct _EGdbusCalStubClass EGdbusCalStubClass;
+
+/**
+ * EGdbusCalStubPrivate:
+ *
+ * The #EGdbusCalStubPrivate structure contains only private data.
+ */
+typedef struct _EGdbusCalStubPrivate EGdbusCalStubPrivate;
+
+/**
+ * EGdbusCalStub:
+ *
+ * The #EGdbusCalStub structure contains only private data and
+ * should only be accessed using the provided API.
+ */
+struct _EGdbusCalStub
+{
+  GObject parent_instance;
+  EGdbusCalStubPrivate *priv;
+};
+
+/**
+ * EGdbusCalStubClass:
+ *
+ * Class structure for #EGdbusCalStub.
+ */
+struct _EGdbusCalStubClass
+{
+  GObjectClass parent_class;
+};
+
+#define E_GDBUS_TYPE_CAL_STUB (e_gdbus_cal_stub_get_type ())
+GType e_gdbus_cal_stub_get_type (void) G_GNUC_CONST;
+
+EGdbusCal *e_gdbus_cal_stub_new (void);
+
+
+guint e_gdbus_cal_register_object (EGdbusCal *object,
+                    GDBusConnection *connection,
+                    const gchar *object_path,
+                    GError **error);
+
+void e_gdbus_cal_drain_notify (EGdbusCal *object);
+
+
+const GDBusInterfaceInfo *e_gdbus_cal_interface_info (void) G_GNUC_CONST;
+
+struct _EGdbusCalIface
+{
+  GTypeInterface parent_iface;
+
+  /* Signal handlers for receiving D-Bus signals: */
+  void (*auth_required) (
+        EGdbusCal *object);
+  void (*backend_error) (
+        EGdbusCal *object,
+        const gchar *arg_error);
+  void (*readonly) (
+        EGdbusCal *object,
+        gboolean arg_is_readonly);
+  void (*mode) (
+        EGdbusCal *object,
+        gint arg_mode);
+
+  /* Signal handlers for handling D-Bus method calls: */
+  gboolean (*handle_get_uri) (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation);
+  gboolean (*handle_get_cache_dir) (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation);
+  gboolean (*handle_open) (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        gboolean in_only_if_exists,
+        const gchar *in_username,
+        const gchar *in_password);
+  gboolean (*handle_refresh) (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation);
+  gboolean (*handle_close) (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation);
+  gboolean (*handle_remove) (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation);
+  gboolean (*handle_is_read_only) (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation);
+  gboolean (*handle_get_cal_address) (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation);
+  gboolean (*handle_get_alarm_email_address) (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation);
+  gboolean (*handle_get_ldap_attribute) (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation);
+  gboolean (*handle_get_scheduling_information) (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation);
+  gboolean (*handle_set_mode) (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        guint in_mode);
+  gboolean (*handle_get_default_object) (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation);
+  gboolean (*handle_get_object) (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *in_uid,
+        const gchar *in_rid);
+  gboolean (*handle_get_object_list) (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *in_sexp);
+  gboolean (*handle_get_changes) (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *in_change_id);
+  gboolean (*handle_get_free_busy) (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar* const *in_user_list,
+        guint in_start,
+        guint in_end);
+  gboolean (*handle_discard_alarm) (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *in_uid,
+        const gchar *in_auid);
+  gboolean (*handle_create_object) (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *in_calobj);
+  gboolean (*handle_modify_object) (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *in_calobj,
+        guint in_mod);
+  gboolean (*handle_remove_object) (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *in_uid,
+        const gchar *in_rid,
+        guint in_mod);
+  gboolean (*handle_receive_objects) (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *in_calobj);
+  gboolean (*handle_send_objects) (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *in_calobj);
+  gboolean (*handle_get_attachment_list) (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *in_uid,
+        const gchar *in_rid);
+  gboolean (*handle_get_query) (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *in_sexp);
+  gboolean (*handle_get_timezone) (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *in_tzid);
+  gboolean (*handle_add_timezone) (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *in_tz);
+  gboolean (*handle_set_default_timezone) (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *in_tz);
+};
+
+/* C Bindings for properties */
+
+
+/* D-Bus Methods */
+void e_gdbus_cal_call_get_uri (
+        EGdbusCal *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_call_get_uri_finish (
+        EGdbusCal *proxy,
+        gchar **out_str_uri_copy,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_call_get_uri_sync (
+        EGdbusCal *proxy,
+        gchar **out_str_uri_copy,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_cal_call_get_cache_dir (
+        EGdbusCal *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_call_get_cache_dir_finish (
+        EGdbusCal *proxy,
+        gchar **out_dirname,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_call_get_cache_dir_sync (
+        EGdbusCal *proxy,
+        gchar **out_dirname,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_cal_call_open (
+        EGdbusCal *proxy,
+        gboolean in_only_if_exists,
+        const gchar *in_username,
+        const gchar *in_password,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_call_open_finish (
+        EGdbusCal *proxy,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_call_open_sync (
+        EGdbusCal *proxy,
+        gboolean in_only_if_exists,
+        const gchar *in_username,
+        const gchar *in_password,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_cal_call_refresh (
+        EGdbusCal *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_call_refresh_finish (
+        EGdbusCal *proxy,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_call_refresh_sync (
+        EGdbusCal *proxy,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_cal_call_close (
+        EGdbusCal *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_call_close_finish (
+        EGdbusCal *proxy,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_call_close_sync (
+        EGdbusCal *proxy,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_cal_call_remove (
+        EGdbusCal *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_call_remove_finish (
+        EGdbusCal *proxy,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_call_remove_sync (
+        EGdbusCal *proxy,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_cal_call_is_read_only (
+        EGdbusCal *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_call_is_read_only_finish (
+        EGdbusCal *proxy,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_call_is_read_only_sync (
+        EGdbusCal *proxy,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_cal_call_get_cal_address (
+        EGdbusCal *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_call_get_cal_address_finish (
+        EGdbusCal *proxy,
+        gchar **out_address,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_call_get_cal_address_sync (
+        EGdbusCal *proxy,
+        gchar **out_address,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_cal_call_get_alarm_email_address (
+        EGdbusCal *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_call_get_alarm_email_address_finish (
+        EGdbusCal *proxy,
+        gchar **out_address,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_call_get_alarm_email_address_sync (
+        EGdbusCal *proxy,
+        gchar **out_address,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_cal_call_get_ldap_attribute (
+        EGdbusCal *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_call_get_ldap_attribute_finish (
+        EGdbusCal *proxy,
+        gchar **out_address,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_call_get_ldap_attribute_sync (
+        EGdbusCal *proxy,
+        gchar **out_address,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_cal_call_get_scheduling_information (
+        EGdbusCal *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_call_get_scheduling_information_finish (
+        EGdbusCal *proxy,
+        gchar **out_capabilities,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_call_get_scheduling_information_sync (
+        EGdbusCal *proxy,
+        gchar **out_capabilities,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_cal_call_set_mode (
+        EGdbusCal *proxy,
+        guint in_mode,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_call_set_mode_finish (
+        EGdbusCal *proxy,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_call_set_mode_sync (
+        EGdbusCal *proxy,
+        guint in_mode,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_cal_call_get_default_object (
+        EGdbusCal *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_call_get_default_object_finish (
+        EGdbusCal *proxy,
+        gchar **out_object,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_call_get_default_object_sync (
+        EGdbusCal *proxy,
+        gchar **out_object,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_cal_call_get_object (
+        EGdbusCal *proxy,
+        const gchar *in_uid,
+        const gchar *in_rid,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_call_get_object_finish (
+        EGdbusCal *proxy,
+        gchar **out_object,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_call_get_object_sync (
+        EGdbusCal *proxy,
+        const gchar *in_uid,
+        const gchar *in_rid,
+        gchar **out_object,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_cal_call_get_object_list (
+        EGdbusCal *proxy,
+        const gchar *in_sexp,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_call_get_object_list_finish (
+        EGdbusCal *proxy,
+        gchar ***out_objects,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_call_get_object_list_sync (
+        EGdbusCal *proxy,
+        const gchar *in_sexp,
+        gchar ***out_objects,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_cal_call_get_changes (
+        EGdbusCal *proxy,
+        const gchar *in_change_id,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_call_get_changes_finish (
+        EGdbusCal *proxy,
+        gchar ***out_additions,
+        gchar ***out_modifications,
+        gchar ***out_removals,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_call_get_changes_sync (
+        EGdbusCal *proxy,
+        const gchar *in_change_id,
+        gchar ***out_additions,
+        gchar ***out_modifications,
+        gchar ***out_removals,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_cal_call_get_free_busy (
+        EGdbusCal *proxy,
+        const gchar* const *in_user_list,
+        guint in_start,
+        guint in_end,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_call_get_free_busy_finish (
+        EGdbusCal *proxy,
+        gchar ***out_freebusy,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_call_get_free_busy_sync (
+        EGdbusCal *proxy,
+        const gchar* const *in_user_list,
+        guint in_start,
+        guint in_end,
+        gchar ***out_freebusy,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_cal_call_discard_alarm (
+        EGdbusCal *proxy,
+        const gchar *in_uid,
+        const gchar *in_auid,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_call_discard_alarm_finish (
+        EGdbusCal *proxy,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_call_discard_alarm_sync (
+        EGdbusCal *proxy,
+        const gchar *in_uid,
+        const gchar *in_auid,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_cal_call_create_object (
+        EGdbusCal *proxy,
+        const gchar *in_calobj,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_call_create_object_finish (
+        EGdbusCal *proxy,
+        gchar **out_uid,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_call_create_object_sync (
+        EGdbusCal *proxy,
+        const gchar *in_calobj,
+        gchar **out_uid,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_cal_call_modify_object (
+        EGdbusCal *proxy,
+        const gchar *in_calobj,
+        guint in_mod,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_call_modify_object_finish (
+        EGdbusCal *proxy,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_call_modify_object_sync (
+        EGdbusCal *proxy,
+        const gchar *in_calobj,
+        guint in_mod,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_cal_call_remove_object (
+        EGdbusCal *proxy,
+        const gchar *in_uid,
+        const gchar *in_rid,
+        guint in_mod,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_call_remove_object_finish (
+        EGdbusCal *proxy,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_call_remove_object_sync (
+        EGdbusCal *proxy,
+        const gchar *in_uid,
+        const gchar *in_rid,
+        guint in_mod,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_cal_call_receive_objects (
+        EGdbusCal *proxy,
+        const gchar *in_calobj,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_call_receive_objects_finish (
+        EGdbusCal *proxy,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_call_receive_objects_sync (
+        EGdbusCal *proxy,
+        const gchar *in_calobj,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_cal_call_send_objects (
+        EGdbusCal *proxy,
+        const gchar *in_calobj,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_call_send_objects_finish (
+        EGdbusCal *proxy,
+        gchar ***out_users,
+        gchar **out_calobj,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_call_send_objects_sync (
+        EGdbusCal *proxy,
+        const gchar *in_calobj,
+        gchar ***out_users,
+        gchar **out_calobj,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_cal_call_get_attachment_list (
+        EGdbusCal *proxy,
+        const gchar *in_uid,
+        const gchar *in_rid,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_call_get_attachment_list_finish (
+        EGdbusCal *proxy,
+        gchar ***out_attachments,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_call_get_attachment_list_sync (
+        EGdbusCal *proxy,
+        const gchar *in_uid,
+        const gchar *in_rid,
+        gchar ***out_attachments,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_cal_call_get_query (
+        EGdbusCal *proxy,
+        const gchar *in_sexp,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_call_get_query_finish (
+        EGdbusCal *proxy,
+        gchar **out_query,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_call_get_query_sync (
+        EGdbusCal *proxy,
+        const gchar *in_sexp,
+        gchar **out_query,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_cal_call_get_timezone (
+        EGdbusCal *proxy,
+        const gchar *in_tzid,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_call_get_timezone_finish (
+        EGdbusCal *proxy,
+        gchar **out_object,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_call_get_timezone_sync (
+        EGdbusCal *proxy,
+        const gchar *in_tzid,
+        gchar **out_object,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_cal_call_add_timezone (
+        EGdbusCal *proxy,
+        const gchar *in_tz,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_call_add_timezone_finish (
+        EGdbusCal *proxy,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_call_add_timezone_sync (
+        EGdbusCal *proxy,
+        const gchar *in_tz,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_cal_call_set_default_timezone (
+        EGdbusCal *proxy,
+        const gchar *in_tz,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_call_set_default_timezone_finish (
+        EGdbusCal *proxy,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_call_set_default_timezone_sync (
+        EGdbusCal *proxy,
+        const gchar *in_tz,
+        GCancellable *cancellable,
+        GError **error);
+
+
+
+/* D-Bus Methods Completion Helpers */
+void e_gdbus_cal_complete_get_uri (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_str_uri_copy);
+
+
+void e_gdbus_cal_complete_get_cache_dir (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_dirname);
+
+
+void e_gdbus_cal_complete_open (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation);
+
+
+void e_gdbus_cal_complete_refresh (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation);
+
+
+void e_gdbus_cal_complete_close (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation);
+
+
+void e_gdbus_cal_complete_remove (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation);
+
+
+void e_gdbus_cal_complete_is_read_only (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation);
+
+
+void e_gdbus_cal_complete_get_cal_address (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_address);
+
+
+void e_gdbus_cal_complete_get_alarm_email_address (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_address);
+
+
+void e_gdbus_cal_complete_get_ldap_attribute (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_address);
+
+
+void e_gdbus_cal_complete_get_scheduling_information (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_capabilities);
+
+
+void e_gdbus_cal_complete_set_mode (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation);
+
+
+void e_gdbus_cal_complete_get_default_object (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_object);
+
+
+void e_gdbus_cal_complete_get_object (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_object);
+
+
+void e_gdbus_cal_complete_get_object_list (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar* const *out_objects);
+
+
+void e_gdbus_cal_complete_get_changes (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar* const *out_additions,
+        const gchar* const *out_modifications,
+        const gchar* const *out_removals);
+
+
+void e_gdbus_cal_complete_get_free_busy (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar* const *out_freebusy);
+
+
+void e_gdbus_cal_complete_discard_alarm (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation);
+
+
+void e_gdbus_cal_complete_create_object (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_uid);
+
+
+void e_gdbus_cal_complete_modify_object (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation);
+
+
+void e_gdbus_cal_complete_remove_object (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation);
+
+
+void e_gdbus_cal_complete_receive_objects (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation);
+
+
+void e_gdbus_cal_complete_send_objects (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar* const *out_users,
+        const gchar *out_calobj);
+
+
+void e_gdbus_cal_complete_get_attachment_list (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar* const *out_attachments);
+
+
+void e_gdbus_cal_complete_get_query (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_query);
+
+
+void e_gdbus_cal_complete_get_timezone (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_object);
+
+
+void e_gdbus_cal_complete_add_timezone (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation);
+
+
+void e_gdbus_cal_complete_set_default_timezone (
+        EGdbusCal *object,
+        GDBusMethodInvocation *invocation);
+
+
+
+/* D-Bus Signal Emission Helpers */
+void e_gdbus_cal_emit_auth_required (
+        EGdbusCal *object);
+
+
+void e_gdbus_cal_emit_backend_error (
+        EGdbusCal *object,
+        const gchar *arg_error);
+
+
+void e_gdbus_cal_emit_readonly (
+        EGdbusCal *object,
+        gboolean arg_is_readonly);
+
+
+void e_gdbus_cal_emit_mode (
+        EGdbusCal *object,
+        gint arg_mode);
+
+
+
+G_END_DECLS
+
+#endif /* __E_GDBUS_E_GDBUS_CAL_H__ */
diff --git a/calendar/libegdbus/e-gdbus-egdbuscalfactory.c b/calendar/libegdbus/e-gdbus-egdbuscalfactory.c
new file mode 100644
index 0000000..97a7683
--- /dev/null
+++ b/calendar/libegdbus/e-gdbus-egdbuscalfactory.c
@@ -0,0 +1,1138 @@
+/* File:       e-gdbus-egdbuscalfactory.c
+ *
+ * GType name: EGdbusCalFactory
+ * D-Bus name: org.gnome.evolution.dataserver.calendar.CalFactory
+ *
+ * Generated by GDBus Binding Tool 0.1. DO NOT EDIT.
+ */
+
+/**
+ * SECTION:e-gdbus-egdbuscalfactory
+ * @title: EGdbusCalFactory
+ * @short_description: Wraps the org.gnome.evolution.dataserver.calendar.CalFactory D-Bus interface
+ * @include: gio/gio.h
+ *
+ * The abstract #EGdbusCalFactory interface type wraps the <literal>org.gnome.evolution.dataserver.calendar.CalFactory</literal> D-Bus interface. Two concrete implementations of this type are included: #EGdbusCalFactoryProxy and #EGdbusCalFactoryStub.
+ *
+ * The generated proxy type #EGdbusCalFactoryProxy is typically used with the generated constructors e_gdbus_cal_factory_proxy_new(), e_gdbus_cal_factory_proxy_new_sync() and e_gdbus_cal_factory_proxy_new_for_bus(), e_gdbus_cal_factory_proxy_new_for_bus_sync().
+ *
+ * The generated stub type #EGdbusCalFactoryStub takes care of handling properties, method invocations and signal emissions. Simply use e_gdbus_cal_factory_stub_new(), set some properties and connect to any of the handle-* signals to handle method invocations. Finally use e_gdbus_cal_factory_register_object() to export the object on a #GDBusConnection.
+ * |[
+ * /<!-- -->* You can also use g_object_new() with E_GDBUS_TYPE_CAL_FACTORY_STUB
+ *  * to set properties at construction time.
+ *  *<!-- -->/
+ * object = e_gdbus_cal_factory_stub_new ();
+ * e_gdbus_cal_factory_set_&lt;property_name&gt; (object, &lt;value_for_property&gt;);
+ * [...]
+ *
+ * g_signal_connect (object,
+ *                   "handle-&lt;method-name&gt;",
+ *                   G_CALLBACK (on_handle_&lt;method_name&gt;),
+ *                   some_user_data);
+ * [...]
+ *
+ * error = NULL;
+ * id = e_gdbus_cal_factory_register_object (object,
+ *                                           connection,
+ *                                           "/path/of/object",
+ *                                           &error);
+ * ]|
+ *
+ * You don't <emphasis>have</emphasis> to use the generated stub type to export
+ * objects. Any type implementing the #EGdbusCalFactory interface may be used with
+ * e_gdbus_cal_factory_register_object().
+ *
+ * Once exported, you can make the exported object emit D-Bus signals by simply
+ * emitting the corresponding GType signals. For better type-safety, you can use,
+ * the provided e_gdbus_cal_factory_emit_*() helpers.
+ *
+ * For property changes, #GObject::notify signal emissions on exported objects 
+ * will be intercepted and queued. In an idle handler, the queued notifications
+ * are processed and a single <literal>PropertiesChanged</literal> signal (on the
+ * <literal>org.freedesktop.DBus.Properties</literal> interface) will be emitted
+ * for all the properties that changed (possibly containing several properties).
+ * Use e_gdbus_cal_factory_drain_notify() to drain the queue immediately.
+ */
+
+#include "e-gdbus-egdbuscalfactory.h"
+#include "e-gdbus-typemappers.h"
+#include "e-gdbus-marshallers.h"
+
+typedef EGdbusCalFactoryIface EGdbusCalFactoryInterface;
+G_DEFINE_INTERFACE (EGdbusCalFactory, e_gdbus_cal_factory, G_TYPE_OBJECT);
+
+
+enum
+{
+  _0_SIGNAL,
+  __GET_CAL_METHOD,
+  __LAST_SIGNAL
+};
+
+static guint signals[__LAST_SIGNAL] = {0};
+
+
+enum
+{
+  PROP_0,
+};
+
+/* ------------------------------------------------------------------------- */
+
+/* Various lookup tables */
+
+static GHashTable *_method_name_to_id = NULL;
+static GHashTable *_signal_name_to_id = NULL;
+static GHashTable *_property_name_to_id = NULL;
+static GHashTable *_property_gname_to_name = NULL;
+static GHashTable *_property_name_to_gname = NULL;
+
+
+static guint
+lookup_method_id_from_method_name (const gchar *method_name)
+{
+  return GPOINTER_TO_UINT (g_hash_table_lookup (_method_name_to_id, method_name));
+}
+
+static guint
+lookup_signal_id_from_signal_name (const gchar *signal_name)
+{
+  return GPOINTER_TO_UINT (g_hash_table_lookup (_signal_name_to_id, signal_name));
+}
+
+static guint
+lookup_property_id_from_property_name (const gchar *property_name)
+{
+  return GPOINTER_TO_UINT (g_hash_table_lookup (_property_name_to_id, property_name));
+}
+
+static const gchar *
+lookup_property_name_from_property_gname (const gchar *property_gname)
+{
+  return g_hash_table_lookup (_property_gname_to_name, property_gname);
+}
+
+static const gchar *
+lookup_property_gname_from_property_name (const gchar *property_name)
+{
+  return g_hash_table_lookup (_property_name_to_gname, property_name);
+}
+
+/* ------------------------------------------------------------------------- */
+static void
+e_gdbus_cal_factory_default_init (EGdbusCalFactoryIface *iface)
+{
+
+  /* Build lookup structures */
+  _method_name_to_id = g_hash_table_new (g_str_hash, g_str_equal);
+  _signal_name_to_id = g_hash_table_new (g_str_hash, g_str_equal);
+  _property_name_to_id = g_hash_table_new (g_str_hash, g_str_equal);
+  _property_gname_to_name = g_hash_table_new (g_str_hash, g_str_equal);
+  _property_name_to_gname = g_hash_table_new (g_str_hash, g_str_equal);
+  g_hash_table_insert (_method_name_to_id, (gpointer) "getCal", GUINT_TO_POINTER (__GET_CAL_METHOD));
+
+  /* GObject signals definitions for D-Bus signals: */
+
+  /* GObject signals definitions for D-Bus methods: */
+  /**
+   * EGdbusCalFactory::handle-get-cal:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   * @source: Parameter.
+   * @type: Parameter.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>getCal</literal> D-Bus method on @object. Use e_gdbus_cal_factory_complete_get_cal() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_factory_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__GET_CAL_METHOD] =
+    g_signal_new ("handle-get-cal",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalFactoryIface, handle_get_cal),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING_UINT,
+                  G_TYPE_BOOLEAN,
+                  3,
+                  G_TYPE_DBUS_METHOD_INVOCATION,
+                  G_TYPE_STRING,
+                  G_TYPE_UINT);
+
+  /* GObject property definitions for D-Bus properties: */
+}
+
+
+/* C Bindings for properties */
+
+/**
+ * e_gdbus_cal_factory_call_get_cal:
+ * @proxy: A #EGdbusCalFactory.
+ * @in_source: Method parameter.
+ * @in_type: Method parameter.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.CalFactory.getCal</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_factory_call_get_cal_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_factory_call_get_cal_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_factory_call_get_cal (
+        EGdbusCalFactory *proxy,
+        const gchar *in_source,
+        guint in_type,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(su)",
+                           in_source,
+                           in_type);
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "getCal",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_factory_call_get_cal_finish:
+ * @proxy: A #EGdbusCalFactory.
+ * @out_path: Return location for out parameter or %NULL. Free with g_free().
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_factory_call_get_cal().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.CalFactory.getCal</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_factory_call_get_cal_finish (
+        EGdbusCalFactory *proxy,
+        gchar **out_path,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(o)",
+                   out_path);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_factory_call_get_cal_sync:
+ * @proxy: A #EGdbusCalFactory.
+ * @in_source: Method parameter.
+ * @in_type: Method parameter.
+ * @out_path: Return location for out parameter or %NULL. Free with g_free().
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.CalFactory.getCal</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_factory_call_get_cal() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_factory_call_get_cal_sync (
+        EGdbusCalFactory *proxy,
+        const gchar *in_source,
+        guint in_type,
+        gchar **out_path,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = g_variant_new ("(su)",
+                           in_source,
+                           in_type);
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "getCal",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  {
+    g_variant_get (_result,
+                   "(o)",
+                   out_path);
+  }
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_factory_complete_get_cal:
+ * @object: A #EGdbusCalFactory.
+ * @invocation: A #GDBusMethodInvocation.
+ * @out_path: Value to return.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.CalFactory.getCal</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_factory_complete_get_cal (
+        EGdbusCalFactory *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_path)
+{
+  GVariant *_params;
+  _params = g_variant_new ("(o)",
+                           out_path);
+  g_dbus_method_invocation_return_value (invocation, _params);
+}
+
+
+static const GDBusArgInfo e_gdbus_cal_factory_method_in_getCal_source =
+{
+  -1,
+  (gchar *) "source",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo e_gdbus_cal_factory_method_in_getCal_type =
+{
+  -1,
+  (gchar *) "type",
+  (gchar *) "u",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_factory_method_in_getCal_arg_pointers[] =
+{
+  &e_gdbus_cal_factory_method_in_getCal_source,
+  &e_gdbus_cal_factory_method_in_getCal_type,
+  NULL
+};
+
+static const GDBusArgInfo e_gdbus_cal_factory_method_out_getCal_path =
+{
+  -1,
+  (gchar *) "path",
+  (gchar *) "o",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_factory_method_out_getCal_arg_pointers[] =
+{
+  &e_gdbus_cal_factory_method_out_getCal_path,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_cal_factory_method_getCal =
+{
+  -1,
+  (gchar *) "getCal",
+  (GDBusArgInfo **) &e_gdbus_cal_factory_method_in_getCal_arg_pointers,
+  (GDBusArgInfo **) &e_gdbus_cal_factory_method_out_getCal_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusMethodInfo * const e_gdbus_cal_factory_method_info_pointers[] =
+{
+  &e_gdbus_cal_factory_method_getCal,
+  NULL
+};
+
+static const GDBusInterfaceInfo _e_gdbus_cal_factory_interface_info =
+{
+  -1,
+  (gchar *) "org.gnome.evolution.dataserver.calendar.CalFactory",
+  (GDBusMethodInfo **) &e_gdbus_cal_factory_method_info_pointers,
+  (GDBusSignalInfo **) NULL,
+  (GDBusPropertyInfo **) NULL,
+};
+
+static void
+handle_method_call (GDBusConnection       *connection,
+                    const gchar           *sender,
+                    const gchar           *object_path,
+                    const gchar           *interface_name,
+                    const gchar           *method_name,
+                    GVariant              *parameters,
+                    GDBusMethodInvocation *invocation,
+                    gpointer               user_data)
+{
+  guint method_id;
+  method_id = lookup_method_id_from_method_name (method_name);
+  switch (method_id)
+    {
+    case __GET_CAL_METHOD:
+      {
+        EGdbusCalFactory *object = E_GDBUS_CAL_FACTORY (user_data);
+        gboolean handled;
+        const gchar *arg_source;
+        guint arg_type;
+        g_variant_get (parameters,
+                       "(&su)",
+                       &arg_source,
+                       &arg_type);
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, arg_source, arg_type, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    default:
+not_implemented:
+      g_dbus_method_invocation_return_error (invocation,
+                                             G_DBUS_ERROR,
+                                             G_DBUS_ERROR_NOT_SUPPORTED,
+                                             "Method `%s' is not implemented",
+                                             method_name);
+      break;
+    }
+};
+
+static GVariant *
+get_property (GDBusConnection  *connection,
+              const gchar      *sender,
+              const gchar      *object_path,
+              const gchar      *interface_name,
+              const gchar      *property_name,
+              GError          **error,
+              gpointer          user_data)
+{
+  GVariant *ret;
+  guint prop_id;
+  prop_id = lookup_property_id_from_property_name (property_name);
+  ret = NULL;
+  switch (prop_id)
+    {
+    default:
+      g_set_error (error,
+                   G_DBUS_ERROR,
+                   G_DBUS_ERROR_NOT_SUPPORTED,
+                   "This implementation does not support property `%s'",
+                   property_name);
+      break;
+    }
+
+  return ret;
+};
+
+static gboolean
+set_property (GDBusConnection  *connection,
+              const gchar      *sender,
+              const gchar      *object_path,
+              const gchar      *interface_name,
+              const gchar      *property_name,
+              GVariant         *value,
+              GError          **error,
+              gpointer          user_data)
+{
+  gboolean ret;
+  guint prop_id;
+  prop_id = lookup_property_id_from_property_name (property_name);
+  ret = TRUE;
+  switch (prop_id)
+    {
+    default:
+      g_set_error (error,
+                   G_DBUS_ERROR,
+                   G_DBUS_ERROR_NOT_SUPPORTED,
+                   "This implementation does not support property `%s'",
+                   property_name);
+      ret = FALSE;
+      break;
+    }
+
+  return ret;
+};
+
+static const GDBusInterfaceVTable e_gdbus_cal_factory_interface_vtable =
+{
+  handle_method_call,
+  get_property,
+  set_property,
+};
+
+static gboolean
+emit_notifications_in_idle (gpointer user_data)
+{
+  GObject *object = G_OBJECT (user_data);
+  GDBusConnection *connection;
+  const gchar *path;
+  GHashTable *notification_queue;
+  GHashTableIter iter;
+  const gchar *property_name;
+  GVariant *value;
+  GVariantBuilder *builder;
+  GVariantBuilder *invalidated_builder;
+  GHashTable *pvc;
+  gboolean has_changes;
+
+  notification_queue = g_object_get_data (object, "gdbus-codegen-notification-queue");
+  path = g_object_get_data (object, "gdbus-codegen-path");
+  connection = g_object_get_data (object, "gdbus-codegen-connection");
+  pvc = g_object_get_data (object, "gdbus-codegen-pvc");
+  g_assert (notification_queue != NULL && path != NULL && connection != NULL && pvc != NULL);
+
+  builder = g_variant_builder_new (G_VARIANT_TYPE_ARRAY);
+  invalidated_builder = g_variant_builder_new (G_VARIANT_TYPE ("as"));
+  g_hash_table_iter_init (&iter, notification_queue);
+  has_changes = FALSE;
+  while (g_hash_table_iter_next (&iter, (gpointer) &property_name, (gpointer) &value))
+    {
+      GVariant *cached_value;
+      cached_value = g_hash_table_lookup (pvc, property_name);
+      if (cached_value == NULL || !g_variant_equal (cached_value, value))
+        {
+          g_hash_table_insert (pvc, (gpointer) property_name, (gpointer) g_variant_ref (value));
+          g_variant_builder_add (builder, "{sv}", property_name, value);
+          has_changes = TRUE;
+        }
+    }
+
+  if (has_changes)
+    {
+      g_dbus_connection_emit_signal (connection,
+                                     NULL,
+                                     path,
+                                     "org.freedesktop.DBus.Properties",
+                                     "PropertiesChanged",
+                                     g_variant_new ("(sa{sv}as)",
+                                                    "org.gnome.evolution.dataserver.calendar.CalFactory",
+                                                    builder,
+                                                    invalidated_builder),
+                                     NULL);
+    }
+  else
+    {
+      g_variant_builder_unref (builder);
+      g_variant_builder_unref (invalidated_builder);
+    }
+
+  g_hash_table_remove_all (notification_queue);
+  g_object_set_data (object, "gdbus-codegen-notification-idle-id", GUINT_TO_POINTER (0));
+  return FALSE;
+}
+
+static void
+queue_notification (GObject     *object,
+                    const gchar *property_name,
+                    GVariant    *value)
+{
+  GHashTable *notification_queue;
+  guint idle_id;
+  notification_queue = g_object_get_data (object, "gdbus-codegen-notification-queue");
+  if (notification_queue == NULL)
+    {
+      notification_queue = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) g_variant_unref);
+      g_object_set_data_full (object, "gdbus-codegen-notification-queue", notification_queue, (GDestroyNotify) g_hash_table_unref);
+    }
+  g_hash_table_insert (notification_queue, (gpointer) property_name, (gpointer) value); /* adopts value */
+  idle_id = GPOINTER_TO_UINT (g_object_get_data (object, "gdbus-codegen-notification-idle-id"));
+  if (idle_id == 0)
+    {
+      GSource *idle_source;
+      idle_source = g_idle_source_new ();
+      g_source_set_priority (idle_source, G_PRIORITY_DEFAULT);
+      g_source_set_callback (idle_source,
+                             emit_notifications_in_idle,
+                             g_object_ref (object),
+                             (GDestroyNotify) g_object_unref);
+      idle_id = g_source_attach (idle_source, g_main_context_get_thread_default ());
+      g_source_unref (idle_source);
+      g_object_set_data (object, "gdbus-codegen-notification-idle-id", GUINT_TO_POINTER (idle_id));
+    }
+}
+
+/**
+ * e_gdbus_cal_factory_drain_notify:
+ * @object: A #EGdbusCalFactory that is exported.
+ *
+ * If @object has queued notifications, empty the queue forcing
+ * the <literal>PropertiesChanged</literal> signal to be emitted.
+ * See <xref linkend="EGdbusCalFactory.description"/> for more background information.
+ */
+void
+e_gdbus_cal_factory_drain_notify (EGdbusCalFactory *object)
+{
+  gint idle_id;
+  idle_id = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (object), "gdbus-codegen-notification-idle-id"));
+  if (idle_id > 0)
+    {
+      emit_notifications_in_idle (object);
+      g_source_remove (idle_id);
+    }
+}
+
+static void
+on_notify (GObject    *object,
+           GParamSpec *pspec,
+           gpointer    user_data)
+{
+  GDBusConnection *connection;
+  const gchar *path;
+  GVariant *value;
+  const gchar *property_name;
+  guint prop_id;
+
+  path = g_object_get_data (object, "gdbus-codegen-path");
+  connection = g_object_get_data (object, "gdbus-codegen-connection");
+  if (connection == NULL || path == NULL)
+    goto out;
+
+  property_name = lookup_property_name_from_property_gname (pspec->name);
+  if (property_name == NULL)
+    goto out;
+  prop_id = lookup_property_id_from_property_name (property_name);
+
+  value = NULL;
+  switch (prop_id)
+    {
+  }
+
+  if (value != NULL && property_name != NULL)
+    {
+      queue_notification (object, property_name, g_variant_ref_sink (value));
+    }
+out:
+  ;
+}
+
+static void
+on_object_unregistered (GObject *object)
+{
+  gint idle_id;
+  idle_id = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (object), "gdbus-codegen-notification-idle-id"));
+  if (idle_id > 0)
+    {
+      g_source_remove (idle_id);
+    }
+  g_object_set_data (G_OBJECT (object), "gdbus-codegen-path", NULL);
+  g_object_set_data (G_OBJECT (object), "gdbus-codegen-connection", NULL);
+  g_signal_handlers_disconnect_by_func (object, on_notify, NULL);
+}
+
+/**
+ * e_gdbus_cal_factory_register_object:
+ * @object: An instance of a #GObject<!-- -->-derived type implementing the #EGdbusCalFactory interface.
+ * @connection: A #GDBusConnection.
+ * @object_path: The object to register the object at.
+ * @error: Return location for error or %NULL.
+ *
+ * Registers @object at @object_path on @connection.
+ *
+ * See <xref linkend="EGdbusCalFactory.description"/>
+ * for how properties, methods and signals are handled.
+ *
+ * Returns: 0 if @error is set, otherwise a registration id (never 0) that can be used with g_dbus_connection_unregister_object().
+ */
+guint
+e_gdbus_cal_factory_register_object (EGdbusCalFactory *object,
+           GDBusConnection *connection,
+           const gchar *object_path,
+           GError **error)
+{
+  G_GNUC_UNUSED GVariant *value;
+  GHashTable *pvc;
+
+  pvc = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) g_variant_unref);
+
+  g_object_set_data_full (G_OBJECT (object), "gdbus-codegen-path", (gpointer) g_strdup (object_path), g_free);
+  g_object_set_data (G_OBJECT (object), "gdbus-codegen-connection", (gpointer) connection);
+  g_object_set_data_full (G_OBJECT (object), "gdbus-codegen-pvc", (gpointer) pvc, (GDestroyNotify) g_hash_table_unref);
+  g_signal_connect (object, "notify", G_CALLBACK (on_notify), NULL);
+  return g_dbus_connection_register_object (connection,
+          object_path,
+          &_e_gdbus_cal_factory_interface_info,
+          &e_gdbus_cal_factory_interface_vtable,
+          object,
+          (GDestroyNotify) on_object_unregistered,
+          error);
+}
+
+/**
+ * e_gdbus_cal_factory_interface_info:
+ *
+ * Gets interface description for the <literal>org.gnome.evolution.dataserver.calendar.CalFactory</literal> D-Bus interface.
+ *
+ * Returns: A #GDBusInterfaceInfo. Do not free, the object is statically allocated.
+ */
+const GDBusInterfaceInfo *
+e_gdbus_cal_factory_interface_info (void)
+{
+  return &_e_gdbus_cal_factory_interface_info;
+}
+
+
+/* ---------------------------------------------------------------------- */
+
+static void proxy_iface_init (EGdbusCalFactoryIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (EGdbusCalFactoryProxy, e_gdbus_cal_factory_proxy, G_TYPE_DBUS_PROXY,
+                         G_IMPLEMENT_INTERFACE (E_GDBUS_TYPE_CAL_FACTORY, proxy_iface_init));
+
+static void
+e_gdbus_cal_factory_proxy_init (EGdbusCalFactoryProxy *proxy)
+{
+  g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy),
+                                   (GDBusInterfaceInfo *) &_e_gdbus_cal_factory_interface_info);
+}
+
+static void
+g_signal (GDBusProxy  *proxy,
+          const gchar *sender_name,
+          const gchar *signal_name,
+          GVariant    *parameters)
+{
+  guint signal_id;
+  signal_id = lookup_signal_id_from_signal_name (signal_name);
+  switch (signal_id)
+    {
+    }
+}
+
+static void
+e_gdbus_cal_factory_proxy_get_property (GObject      *object,
+                       guint         prop_id,
+                       GValue       *value,
+                       GParamSpec   *pspec)
+{
+  G_GNUC_UNUSED GVariant *cached;
+  switch (prop_id)
+    {
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+property_set_cb (GDBusProxy   *proxy,
+                 GAsyncResult *res,
+                 gpointer      user_data)
+{
+  const gchar *property_name = user_data;
+  GError *error;
+  GVariant *result;
+
+  error = NULL;
+  result = g_dbus_proxy_call_finish (proxy, res, &error);
+  if (result == NULL)
+    {
+      g_warning ("Error setting property `%s': %s", property_name, error->message);
+      g_error_free (error);
+    }
+  else
+    {
+      g_variant_unref (result);
+    }
+}
+
+static void
+e_gdbus_cal_factory_proxy_set_property (GObject      *object,
+                       guint         prop_id,
+                       const GValue *value,
+                       GParamSpec   *pspec)
+{
+  GVariant *new_value;
+  const gchar *property_name;
+  new_value = NULL;
+  property_name = NULL;
+  switch (prop_id)
+    {
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+
+  if (new_value != NULL)
+    {
+      g_variant_ref_sink (new_value);
+      g_dbus_proxy_call (G_DBUS_PROXY (object),
+                         "org.freedesktop.DBus.Properties.Set",
+                         g_variant_new ("(ssv)",
+                                        "org.gnome.evolution.dataserver.calendar.CalFactory",
+                                        property_name,
+                                        new_value),
+                         G_DBUS_CALL_FLAGS_NONE,
+                         -1,
+                         NULL,
+                         (GAsyncReadyCallback) property_set_cb,
+                         (gpointer) property_name);
+      g_variant_unref (new_value);
+    }
+
+}
+
+static void
+g_properties_changed (GDBusProxy         *proxy,
+                      GVariant           *changed_properties,
+                      const gchar* const *invalidated_properties)
+{
+  guint n;
+  const gchar *key;
+  GVariantIter *iter;
+  const gchar *gname;
+
+  g_variant_get (changed_properties, "a{sv}", &iter);
+  while (g_variant_iter_next (iter, "{&sv}", &key, NULL))
+    {
+      gname = lookup_property_gname_from_property_name (key);
+      if (gname != NULL)
+        g_object_notify (G_OBJECT (proxy), gname);
+    }
+
+  for (n = 0; invalidated_properties[n] != NULL; n++)
+    {
+      gname = lookup_property_gname_from_property_name (invalidated_properties[n]);
+      if (gname != NULL)
+        g_object_notify (G_OBJECT (proxy), gname);
+    }
+
+}
+
+static void
+e_gdbus_cal_factory_proxy_class_init (EGdbusCalFactoryProxyClass *klass)
+{
+  GObjectClass *gobject_class;
+  GDBusProxyClass *proxy_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->get_property = e_gdbus_cal_factory_proxy_get_property;
+  gobject_class->set_property = e_gdbus_cal_factory_proxy_set_property;
+
+  proxy_class = G_DBUS_PROXY_CLASS (klass);
+  proxy_class->g_signal = g_signal;
+  proxy_class->g_properties_changed = g_properties_changed;
+
+}
+
+static void
+proxy_iface_init (EGdbusCalFactoryIface *iface)
+{
+}
+
+
+/**
+ * e_gdbus_cal_factory_proxy_new:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags used when constructing the proxy.
+ * @name: A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: Callback function to invoke when the proxy is ready.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like g_dbus_proxy_new() but returns a #EGdbusCalFactoryProxy.
+ *
+ * This is a failable asynchronous constructor - when the proxy is ready, callback will be invoked and you can use e_gdbus_cal_factory_proxy_new_finish() to get the result.
+ */
+void e_gdbus_cal_factory_proxy_new (GDBusConnection     *connection,
+                   GDBusProxyFlags      flags,
+                   const gchar         *name,
+                   const gchar         *object_path,
+                   GCancellable        *cancellable,
+                   GAsyncReadyCallback  callback,
+                   gpointer             user_data)
+{
+  g_async_initable_new_async (E_GDBUS_TYPE_CAL_FACTORY_PROXY,
+                              G_PRIORITY_DEFAULT,
+                              cancellable,
+                              callback,
+                              user_data,
+                              "g-flags", flags,
+                              "g-name", name,
+                              "g-connection", connection,
+                              "g-object-path", object_path,
+                              "g-interface-name", "org.gnome.evolution.dataserver.calendar.CalFactory",
+                              NULL);
+}
+
+/**
+ * e_gdbus_cal_factory_proxy_new_finish:
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback function passed to e_gdbus_cal_factory_proxy_new().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes creating a #EGdbusCalFactoryProxy.
+ *
+ * Returns: A #EGdbusCalFactoryProxy or %NULL if @error is set. Free with g_object_unref().
+ */
+EGdbusCalFactory *e_gdbus_cal_factory_proxy_new_finish (GAsyncResult  *res,
+                        GError       **error)
+{
+  GObject *object;
+  GObject *source_object;
+  source_object = g_async_result_get_source_object (res);
+  g_assert (source_object != NULL);
+  object = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object),
+                                        res,
+                                        error);
+  g_object_unref (source_object);
+  if (object != NULL)
+    return E_GDBUS_CAL_FACTORY (object);
+  else
+    return NULL;
+}
+
+/**
+ * e_gdbus_cal_factory_proxy_new_sync:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags used when constructing the proxy.
+ * @name: A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Like g_dbus_proxy_new_sync() but returns a #EGdbusCalFactoryProxy.
+ *
+ * This is a synchronous failable constructor. See e_gdbus_cal_factory_proxy_new() and e_gdbus_cal_factory_proxy_new_finish() for the asynchronous version.
+ *
+ * Returns: A #EGdbusCalFactoryProxy or %NULL if error is set. Free with g_object_unref().
+ */
+EGdbusCalFactory *e_gdbus_cal_factory_proxy_new_sync (GDBusConnection     *connection,
+                       GDBusProxyFlags      flags,
+                       const gchar         *name,
+                       const gchar         *object_path,
+                       GCancellable        *cancellable,
+                       GError             **error)
+{
+  GInitable *initable;
+  initable = g_initable_new (E_GDBUS_TYPE_CAL_FACTORY_PROXY,
+                             cancellable,
+                             error,
+                             "g-flags", flags,
+                             "g-name", name,
+                             "g-connection", connection,
+                             "g-object-path", object_path,
+                             "g-interface-name", "org.gnome.evolution.dataserver.calendar.CalFactory",
+                             NULL);
+  if (initable != NULL)
+    return E_GDBUS_CAL_FACTORY (initable);
+  else
+    return NULL;
+}
+
+
+/**
+ * e_gdbus_cal_factory_proxy_new_for_bus:
+ * @bus_type: A #GBusType.
+ * @flags: Flags used when constructing the proxy.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: Callback function to invoke when the proxy is ready.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like g_dbus_proxy_new_for_bus() but returns a #EGdbusCalFactoryProxy.
+ *
+ * This is a failable asynchronous constructor - when the proxy is ready, callback will be invoked and you can use e_gdbus_cal_factory_proxy_new_for_bus_finish() to get the result.
+ */
+void e_gdbus_cal_factory_proxy_new_for_bus (GBusType             bus_type,
+                           GDBusProxyFlags      flags,
+                           const gchar         *name,
+                           const gchar         *object_path,
+                           GCancellable        *cancellable,
+                           GAsyncReadyCallback  callback,
+                           gpointer             user_data)
+{
+  g_async_initable_new_async (E_GDBUS_TYPE_CAL_FACTORY_PROXY,
+                              G_PRIORITY_DEFAULT,
+                              cancellable,
+                              callback,
+                              user_data,
+                              "g-flags", flags,
+                              "g-name", name,
+                              "g-bus-type", bus_type,
+                              "g-object-path", object_path,
+                              "g-interface-name", "org.gnome.evolution.dataserver.calendar.CalFactory",
+                              NULL);
+}
+
+/**
+ * e_gdbus_cal_factory_proxy_new_for_bus_finish:
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback function passed to e_gdbus_cal_factory_proxy_new_for_bus().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes creating a #EGdbusCalFactoryProxy.
+ *
+ * Returns: A #EGdbusCalFactoryProxy or %NULL if @error is set. Free with g_object_unref().
+ */
+EGdbusCalFactory *e_gdbus_cal_factory_proxy_new_for_bus_finish (GAsyncResult  *res,
+                                GError       **error)
+{
+  GObject *object;
+  GObject *source_object;
+  source_object = g_async_result_get_source_object (res);
+  g_assert (source_object != NULL);
+  object = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object),
+                                        res,
+                                        error);
+  g_object_unref (source_object);
+  if (object != NULL)
+    return E_GDBUS_CAL_FACTORY (object);
+  else
+    return NULL;
+}
+
+/**
+ * e_gdbus_cal_factory_proxy_new_for_bus_sync:
+ * @bus_type: A #GBusType.
+ * @flags: Flags used when constructing the proxy.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Like g_dbus_proxy_new_for_bus_sync() but returns a #EGdbusCalFactoryProxy.
+ *
+ * This is a synchronous failable constructor. See e_gdbus_cal_factory_proxy_new_for_bus() and e_gdbus_cal_factory_proxy_new_for_bus_finish() for the asynchronous version.
+ *
+ * Returns: A #EGdbusCalFactoryProxy or %NULL if error is set. Free with g_object_unref().
+ */
+EGdbusCalFactory *e_gdbus_cal_factory_proxy_new_for_bus_sync (GBusType             bus_type,
+                               GDBusProxyFlags      flags,
+                               const gchar         *name,
+                               const gchar         *object_path,
+                               GCancellable        *cancellable,
+                               GError             **error)
+{
+  GInitable *initable;
+  initable = g_initable_new (E_GDBUS_TYPE_CAL_FACTORY_PROXY,
+                             cancellable,
+                             error,
+                             "g-flags", flags,
+                             "g-name", name,
+                             "g-bus-type", bus_type,
+                             "g-object-path", object_path,
+                             "g-interface-name", "org.gnome.evolution.dataserver.calendar.CalFactory",
+                             NULL);
+  if (initable != NULL)
+    return E_GDBUS_CAL_FACTORY (initable);
+  else
+    return NULL;
+}
+
+
+/* ---------------------------------------------------------------------- */
+
+struct _EGdbusCalFactoryStubPrivate
+{
+  gint foo;
+};
+
+static void stub_iface_init (EGdbusCalFactoryIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (EGdbusCalFactoryStub, e_gdbus_cal_factory_stub, G_TYPE_OBJECT,
+                         G_IMPLEMENT_INTERFACE (E_GDBUS_TYPE_CAL_FACTORY, stub_iface_init));
+
+static void
+e_gdbus_cal_factory_stub_finalize (GObject *object)
+{
+  G_GNUC_UNUSED EGdbusCalFactoryStub *stub = (EGdbusCalFactoryStub *) object;
+  if (G_OBJECT_CLASS (e_gdbus_cal_factory_stub_parent_class)->finalize != NULL)
+    G_OBJECT_CLASS (e_gdbus_cal_factory_stub_parent_class)->finalize (object);
+}
+
+static void
+e_gdbus_cal_factory_stub_get_property (GObject      *object,
+                      guint         prop_id,
+                      GValue       *value,
+                      GParamSpec   *pspec)
+{
+  G_GNUC_UNUSED static gchar **strv_of_len_zero = {NULL};
+  G_GNUC_UNUSED EGdbusCalFactoryStub *stub = (EGdbusCalFactoryStub *) object;
+  switch (prop_id)
+    {
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+e_gdbus_cal_factory_stub_set_property (GObject      *object,
+                      guint         prop_id,
+                      const GValue *value,
+                      GParamSpec   *pspec)
+{
+  G_GNUC_UNUSED EGdbusCalFactoryStub *stub = (EGdbusCalFactoryStub *) object;
+  switch (prop_id)
+    {
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+e_gdbus_cal_factory_stub_init (EGdbusCalFactoryStub *stub)
+{
+  stub->priv = G_TYPE_INSTANCE_GET_PRIVATE (stub, E_GDBUS_TYPE_CAL_FACTORY_STUB, EGdbusCalFactoryStubPrivate);
+}
+
+static void
+e_gdbus_cal_factory_stub_class_init (EGdbusCalFactoryStubClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize     = e_gdbus_cal_factory_stub_finalize;
+  gobject_class->get_property = e_gdbus_cal_factory_stub_get_property;
+  gobject_class->set_property = e_gdbus_cal_factory_stub_set_property;
+  g_type_class_add_private (klass, sizeof (EGdbusCalFactoryStubPrivate));
+}
+
+static void
+stub_iface_init (EGdbusCalFactoryIface *iface)
+{
+}
+
+/**
+ * e_gdbus_cal_factory_stub_new:
+ *
+ * Creates a new stub object that can be exported via e_gdbus_cal_factory_register_object().
+ *
+ * Returns: A #EGdbusCalFactoryStub instance. Free with g_object_unref().
+ */
+EGdbusCalFactory *
+e_gdbus_cal_factory_stub_new (void)
+{
+  return E_GDBUS_CAL_FACTORY (g_object_new (E_GDBUS_TYPE_CAL_FACTORY_STUB, NULL));
+}
diff --git a/calendar/libegdbus/e-gdbus-egdbuscalfactory.h b/calendar/libegdbus/e-gdbus-egdbuscalfactory.h
new file mode 100644
index 0000000..5649ef7
--- /dev/null
+++ b/calendar/libegdbus/e-gdbus-egdbuscalfactory.h
@@ -0,0 +1,212 @@
+/* File:       e-gdbus-egdbuscalfactory.h
+ *
+ * GType name: EGdbusCalFactory
+ * D-Bus name: org.gnome.evolution.dataserver.calendar.CalFactory
+ *
+ * Generated by GDBus Binding Tool 0.1. DO NOT EDIT.
+ */
+
+#ifndef __E_GDBUS_E_GDBUS_CAL_FACTORY_H__
+#define __E_GDBUS_E_GDBUS_CAL_FACTORY_H__
+
+#include <gio/gio.h>
+
+#include "e-gdbus-typemappers.h"
+G_BEGIN_DECLS
+
+#define E_GDBUS_TYPE_CAL_FACTORY         (e_gdbus_cal_factory_get_type ())
+#define E_GDBUS_CAL_FACTORY(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), E_GDBUS_TYPE_CAL_FACTORY, EGdbusCalFactory))
+#define E_GDBUS_IS_CAL_FACTORY(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_GDBUS_TYPE_CAL_FACTORY))
+#define E_GDBUS_CAL_FACTORY_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE((o), E_GDBUS_TYPE_CAL_FACTORY, EGdbusCalFactoryIface))
+
+/**
+ * EGdbusCalFactory:
+ *
+ * Opaque type representing a proxy or an exported object.
+ */
+typedef struct _EGdbusCalFactory EGdbusCalFactory; /* Dummy typedef */
+/**
+ * EGdbusCalFactoryIface:
+ * @parent_iface: The parent interface.
+ * @handle_get_cal: Handler for the #EGdbusCalFactory::handle-get-cal signal.
+ *
+ * Virtual table.
+ */
+typedef struct _EGdbusCalFactoryIface EGdbusCalFactoryIface;
+
+GType e_gdbus_cal_factory_get_type (void) G_GNUC_CONST;
+
+/* ---------------------------------------------------------------------- */
+
+typedef struct _EGdbusCalFactoryProxy EGdbusCalFactoryProxy;
+typedef struct _EGdbusCalFactoryProxyClass EGdbusCalFactoryProxyClass;
+
+/**
+ * EGdbusCalFactoryProxyPrivate:
+ *
+ * The #EGdbusCalFactoryProxyPrivate structure contains only private data.
+ */
+typedef struct _EGdbusCalFactoryProxyPrivate EGdbusCalFactoryProxyPrivate;
+
+/**
+ * EGdbusCalFactoryProxy:
+ *
+ * The #EGdbusCalFactoryProxy structure contains only private data and
+ * should only be accessed using the provided API.
+ */
+struct _EGdbusCalFactoryProxy
+{
+  GDBusProxy parent_instance;
+  EGdbusCalFactoryProxyPrivate *priv;
+};
+
+/**
+ * EGdbusCalFactoryProxyClass:
+ *
+ * Class structure for #EGdbusCalFactoryProxy.
+ */
+struct _EGdbusCalFactoryProxyClass
+{
+  GDBusProxyClass parent_class;
+};
+
+#define E_GDBUS_TYPE_CAL_FACTORY_PROXY (e_gdbus_cal_factory_proxy_get_type ())
+GType e_gdbus_cal_factory_proxy_get_type (void) G_GNUC_CONST;
+
+void e_gdbus_cal_factory_proxy_new (GDBusConnection     *connection,
+                   GDBusProxyFlags      flags,
+                   const gchar         *name,
+                   const gchar         *object_path,
+                   GCancellable        *cancellable,
+                   GAsyncReadyCallback  callback,
+                   gpointer             user_data);
+EGdbusCalFactory *e_gdbus_cal_factory_proxy_new_finish (GAsyncResult  *res,
+                        GError       **error);
+EGdbusCalFactory *e_gdbus_cal_factory_proxy_new_sync (GDBusConnection     *connection,
+                       GDBusProxyFlags      flags,
+                       const gchar         *name,
+                       const gchar         *object_path,
+                       GCancellable        *cancellable,
+                       GError             **error);
+
+void e_gdbus_cal_factory_proxy_new_for_bus (GBusType             bus_type,
+                           GDBusProxyFlags      flags,
+                           const gchar         *name,
+                           const gchar         *object_path,
+                           GCancellable        *cancellable,
+                           GAsyncReadyCallback  callback,
+                           gpointer             user_data);
+EGdbusCalFactory *e_gdbus_cal_factory_proxy_new_for_bus_finish (GAsyncResult  *res,
+                                 GError       **error);
+EGdbusCalFactory *e_gdbus_cal_factory_proxy_new_for_bus_sync (GBusType             bus_type,
+                               GDBusProxyFlags      flags,
+                               const gchar         *name,
+                               const gchar         *object_path,
+                               GCancellable        *cancellable,
+                               GError             **error);
+
+/* ---------------------------------------------------------------------- */
+
+typedef struct _EGdbusCalFactoryStub EGdbusCalFactoryStub;
+typedef struct _EGdbusCalFactoryStubClass EGdbusCalFactoryStubClass;
+
+/**
+ * EGdbusCalFactoryStubPrivate:
+ *
+ * The #EGdbusCalFactoryStubPrivate structure contains only private data.
+ */
+typedef struct _EGdbusCalFactoryStubPrivate EGdbusCalFactoryStubPrivate;
+
+/**
+ * EGdbusCalFactoryStub:
+ *
+ * The #EGdbusCalFactoryStub structure contains only private data and
+ * should only be accessed using the provided API.
+ */
+struct _EGdbusCalFactoryStub
+{
+  GObject parent_instance;
+  EGdbusCalFactoryStubPrivate *priv;
+};
+
+/**
+ * EGdbusCalFactoryStubClass:
+ *
+ * Class structure for #EGdbusCalFactoryStub.
+ */
+struct _EGdbusCalFactoryStubClass
+{
+  GObjectClass parent_class;
+};
+
+#define E_GDBUS_TYPE_CAL_FACTORY_STUB (e_gdbus_cal_factory_stub_get_type ())
+GType e_gdbus_cal_factory_stub_get_type (void) G_GNUC_CONST;
+
+EGdbusCalFactory *e_gdbus_cal_factory_stub_new (void);
+
+
+guint e_gdbus_cal_factory_register_object (EGdbusCalFactory *object,
+                    GDBusConnection *connection,
+                    const gchar *object_path,
+                    GError **error);
+
+void e_gdbus_cal_factory_drain_notify (EGdbusCalFactory *object);
+
+
+const GDBusInterfaceInfo *e_gdbus_cal_factory_interface_info (void) G_GNUC_CONST;
+
+struct _EGdbusCalFactoryIface
+{
+  GTypeInterface parent_iface;
+
+  /* Signal handlers for receiving D-Bus signals: */
+
+  /* Signal handlers for handling D-Bus method calls: */
+  gboolean (*handle_get_cal) (
+        EGdbusCalFactory *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *in_source,
+        guint in_type);
+};
+
+/* C Bindings for properties */
+
+
+/* D-Bus Methods */
+void e_gdbus_cal_factory_call_get_cal (
+        EGdbusCalFactory *proxy,
+        const gchar *in_source,
+        guint in_type,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_factory_call_get_cal_finish (
+        EGdbusCalFactory *proxy,
+        gchar **out_path,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_factory_call_get_cal_sync (
+        EGdbusCalFactory *proxy,
+        const gchar *in_source,
+        guint in_type,
+        gchar **out_path,
+        GCancellable *cancellable,
+        GError **error);
+
+
+
+/* D-Bus Methods Completion Helpers */
+void e_gdbus_cal_factory_complete_get_cal (
+        EGdbusCalFactory *object,
+        GDBusMethodInvocation *invocation,
+        const gchar *out_path);
+
+
+
+/* D-Bus Signal Emission Helpers */
+
+G_END_DECLS
+
+#endif /* __E_GDBUS_E_GDBUS_CAL_FACTORY_H__ */
diff --git a/calendar/libegdbus/e-gdbus-egdbuscalview.c b/calendar/libegdbus/e-gdbus-egdbuscalview.c
new file mode 100644
index 0000000..c725c42
--- /dev/null
+++ b/calendar/libegdbus/e-gdbus-egdbuscalview.c
@@ -0,0 +1,1890 @@
+/* File:       e-gdbus-egdbuscalview.c
+ *
+ * GType name: EGdbusCalView
+ * D-Bus name: org.gnome.evolution.dataserver.calendar.CalView
+ *
+ * Generated by GDBus Binding Tool 0.1. DO NOT EDIT.
+ */
+
+/**
+ * SECTION:e-gdbus-egdbuscalview
+ * @title: EGdbusCalView
+ * @short_description: Wraps the org.gnome.evolution.dataserver.calendar.CalView D-Bus interface
+ * @include: gio/gio.h
+ *
+ * The abstract #EGdbusCalView interface type wraps the <literal>org.gnome.evolution.dataserver.calendar.CalView</literal> D-Bus interface. Two concrete implementations of this type are included: #EGdbusCalViewProxy and #EGdbusCalViewStub.
+ *
+ * The generated proxy type #EGdbusCalViewProxy is typically used with the generated constructors e_gdbus_cal_view_proxy_new(), e_gdbus_cal_view_proxy_new_sync() and e_gdbus_cal_view_proxy_new_for_bus(), e_gdbus_cal_view_proxy_new_for_bus_sync().
+ *
+ * The generated stub type #EGdbusCalViewStub takes care of handling properties, method invocations and signal emissions. Simply use e_gdbus_cal_view_stub_new(), set some properties and connect to any of the handle-* signals to handle method invocations. Finally use e_gdbus_cal_view_register_object() to export the object on a #GDBusConnection.
+ * |[
+ * /<!-- -->* You can also use g_object_new() with E_GDBUS_TYPE_CAL_VIEW_STUB
+ *  * to set properties at construction time.
+ *  *<!-- -->/
+ * object = e_gdbus_cal_view_stub_new ();
+ * e_gdbus_cal_view_set_&lt;property_name&gt; (object, &lt;value_for_property&gt;);
+ * [...]
+ *
+ * g_signal_connect (object,
+ *                   "handle-&lt;method-name&gt;",
+ *                   G_CALLBACK (on_handle_&lt;method_name&gt;),
+ *                   some_user_data);
+ * [...]
+ *
+ * error = NULL;
+ * id = e_gdbus_cal_view_register_object (object,
+ *                                        connection,
+ *                                        "/path/of/object",
+ *                                        &error);
+ * ]|
+ *
+ * You don't <emphasis>have</emphasis> to use the generated stub type to export
+ * objects. Any type implementing the #EGdbusCalView interface may be used with
+ * e_gdbus_cal_view_register_object().
+ *
+ * Once exported, you can make the exported object emit D-Bus signals by simply
+ * emitting the corresponding GType signals. For better type-safety, you can use,
+ * the provided e_gdbus_cal_view_emit_*() helpers.
+ *
+ * For property changes, #GObject::notify signal emissions on exported objects 
+ * will be intercepted and queued. In an idle handler, the queued notifications
+ * are processed and a single <literal>PropertiesChanged</literal> signal (on the
+ * <literal>org.freedesktop.DBus.Properties</literal> interface) will be emitted
+ * for all the properties that changed (possibly containing several properties).
+ * Use e_gdbus_cal_view_drain_notify() to drain the queue immediately.
+ */
+
+#include "e-gdbus-egdbuscalview.h"
+#include "e-gdbus-typemappers.h"
+#include "e-gdbus-marshallers.h"
+
+typedef EGdbusCalViewIface EGdbusCalViewInterface;
+G_DEFINE_INTERFACE (EGdbusCalView, e_gdbus_cal_view, G_TYPE_OBJECT);
+
+
+enum
+{
+  _0_SIGNAL,
+  __OBJECTS_ADDED_SIGNAL,
+  __OBJECTS_MODIFIED_SIGNAL,
+  __OBJECTS_REMOVED_SIGNAL,
+  __PROGRESS_SIGNAL,
+  __DONE_SIGNAL,
+  __START_METHOD,
+  __STOP_METHOD,
+  __LAST_SIGNAL
+};
+
+static guint signals[__LAST_SIGNAL] = {0};
+
+
+enum
+{
+  PROP_0,
+};
+
+/* ------------------------------------------------------------------------- */
+
+/* Various lookup tables */
+
+static GHashTable *_method_name_to_id = NULL;
+static GHashTable *_signal_name_to_id = NULL;
+static GHashTable *_property_name_to_id = NULL;
+static GHashTable *_property_gname_to_name = NULL;
+static GHashTable *_property_name_to_gname = NULL;
+
+
+static guint
+lookup_method_id_from_method_name (const gchar *method_name)
+{
+  return GPOINTER_TO_UINT (g_hash_table_lookup (_method_name_to_id, method_name));
+}
+
+static guint
+lookup_signal_id_from_signal_name (const gchar *signal_name)
+{
+  return GPOINTER_TO_UINT (g_hash_table_lookup (_signal_name_to_id, signal_name));
+}
+
+static guint
+lookup_property_id_from_property_name (const gchar *property_name)
+{
+  return GPOINTER_TO_UINT (g_hash_table_lookup (_property_name_to_id, property_name));
+}
+
+static const gchar *
+lookup_property_name_from_property_gname (const gchar *property_gname)
+{
+  return g_hash_table_lookup (_property_gname_to_name, property_gname);
+}
+
+static const gchar *
+lookup_property_gname_from_property_name (const gchar *property_name)
+{
+  return g_hash_table_lookup (_property_name_to_gname, property_name);
+}
+
+/* ------------------------------------------------------------------------- */
+static gboolean
+signal_emission_hook_cb_objects_added (GSignalInvocationHint *ihint,
+                         guint                  n_param_values,
+                         const GValue          *param_values,
+                         gpointer               user_data)
+{
+  GObject *object;
+  GDBusConnection *connection;
+  const gchar *path;
+  GVariant *params;
+  GVariant *item;
+  GVariantBuilder *builder;
+
+  if (n_param_values < 1 || !G_VALUE_HOLDS (&param_values[0], G_TYPE_OBJECT))
+    goto out;
+  object = g_value_get_object (&param_values[0]);
+  path = g_object_get_data (object, "gdbus-codegen-path");
+  connection = g_object_get_data (object, "gdbus-codegen-connection");
+  if (connection == NULL || path == NULL)
+    goto out;
+
+  builder = g_variant_builder_new (G_VARIANT_TYPE_TUPLE);
+  g_assert_cmpint (n_param_values - 1, ==, 1);
+  param_values++;
+  item = g_variant_new ("^as", g_value_get_boxed (param_values));
+  g_variant_builder_add_value (builder, item);
+  param_values++;
+  params = g_variant_builder_end (builder);
+  g_variant_builder_unref (builder);
+
+  g_dbus_connection_emit_signal (connection,
+                                 NULL,
+                                 path,
+                                 "org.gnome.evolution.dataserver.calendar.CalView",
+                                 "ObjectsAdded",
+                                 params,
+                                 NULL);
+out:
+  return TRUE;
+}
+
+static gboolean
+signal_emission_hook_cb_objects_modified (GSignalInvocationHint *ihint,
+                         guint                  n_param_values,
+                         const GValue          *param_values,
+                         gpointer               user_data)
+{
+  GObject *object;
+  GDBusConnection *connection;
+  const gchar *path;
+  GVariant *params;
+  GVariant *item;
+  GVariantBuilder *builder;
+
+  if (n_param_values < 1 || !G_VALUE_HOLDS (&param_values[0], G_TYPE_OBJECT))
+    goto out;
+  object = g_value_get_object (&param_values[0]);
+  path = g_object_get_data (object, "gdbus-codegen-path");
+  connection = g_object_get_data (object, "gdbus-codegen-connection");
+  if (connection == NULL || path == NULL)
+    goto out;
+
+  builder = g_variant_builder_new (G_VARIANT_TYPE_TUPLE);
+  g_assert_cmpint (n_param_values - 1, ==, 1);
+  param_values++;
+  item = g_variant_new ("^as", g_value_get_boxed (param_values));
+  g_variant_builder_add_value (builder, item);
+  param_values++;
+  params = g_variant_builder_end (builder);
+  g_variant_builder_unref (builder);
+
+  g_dbus_connection_emit_signal (connection,
+                                 NULL,
+                                 path,
+                                 "org.gnome.evolution.dataserver.calendar.CalView",
+                                 "ObjectsModified",
+                                 params,
+                                 NULL);
+out:
+  return TRUE;
+}
+
+static gboolean
+signal_emission_hook_cb_objects_removed (GSignalInvocationHint *ihint,
+                         guint                  n_param_values,
+                         const GValue          *param_values,
+                         gpointer               user_data)
+{
+  GObject *object;
+  GDBusConnection *connection;
+  const gchar *path;
+  GVariant *params;
+  GVariant *item;
+  GVariantBuilder *builder;
+
+  if (n_param_values < 1 || !G_VALUE_HOLDS (&param_values[0], G_TYPE_OBJECT))
+    goto out;
+  object = g_value_get_object (&param_values[0]);
+  path = g_object_get_data (object, "gdbus-codegen-path");
+  connection = g_object_get_data (object, "gdbus-codegen-connection");
+  if (connection == NULL || path == NULL)
+    goto out;
+
+  builder = g_variant_builder_new (G_VARIANT_TYPE_TUPLE);
+  g_assert_cmpint (n_param_values - 1, ==, 1);
+  param_values++;
+  item = g_variant_new ("^as", g_value_get_boxed (param_values));
+  g_variant_builder_add_value (builder, item);
+  param_values++;
+  params = g_variant_builder_end (builder);
+  g_variant_builder_unref (builder);
+
+  g_dbus_connection_emit_signal (connection,
+                                 NULL,
+                                 path,
+                                 "org.gnome.evolution.dataserver.calendar.CalView",
+                                 "ObjectsRemoved",
+                                 params,
+                                 NULL);
+out:
+  return TRUE;
+}
+
+static gboolean
+signal_emission_hook_cb_progress (GSignalInvocationHint *ihint,
+                         guint                  n_param_values,
+                         const GValue          *param_values,
+                         gpointer               user_data)
+{
+  GObject *object;
+  GDBusConnection *connection;
+  const gchar *path;
+  GVariant *params;
+  GVariant *item;
+  GVariantBuilder *builder;
+
+  if (n_param_values < 1 || !G_VALUE_HOLDS (&param_values[0], G_TYPE_OBJECT))
+    goto out;
+  object = g_value_get_object (&param_values[0]);
+  path = g_object_get_data (object, "gdbus-codegen-path");
+  connection = g_object_get_data (object, "gdbus-codegen-connection");
+  if (connection == NULL || path == NULL)
+    goto out;
+
+  builder = g_variant_builder_new (G_VARIANT_TYPE_TUPLE);
+  g_assert_cmpint (n_param_values - 1, ==, 2);
+  param_values++;
+  item = g_variant_new ("s", g_value_get_string (param_values));
+  g_variant_builder_add_value (builder, item);
+  param_values++;
+  item = g_variant_new_uint32 (g_value_get_uint (param_values));
+  g_variant_builder_add_value (builder, item);
+  param_values++;
+  params = g_variant_builder_end (builder);
+  g_variant_builder_unref (builder);
+
+  g_dbus_connection_emit_signal (connection,
+                                 NULL,
+                                 path,
+                                 "org.gnome.evolution.dataserver.calendar.CalView",
+                                 "Progress",
+                                 params,
+                                 NULL);
+out:
+  return TRUE;
+}
+
+static gboolean
+signal_emission_hook_cb_done (GSignalInvocationHint *ihint,
+                         guint                  n_param_values,
+                         const GValue          *param_values,
+                         gpointer               user_data)
+{
+  GObject *object;
+  GDBusConnection *connection;
+  const gchar *path;
+  GVariant *params;
+  GVariant *item;
+  GVariantBuilder *builder;
+
+  if (n_param_values < 1 || !G_VALUE_HOLDS (&param_values[0], G_TYPE_OBJECT))
+    goto out;
+  object = g_value_get_object (&param_values[0]);
+  path = g_object_get_data (object, "gdbus-codegen-path");
+  connection = g_object_get_data (object, "gdbus-codegen-connection");
+  if (connection == NULL || path == NULL)
+    goto out;
+
+  builder = g_variant_builder_new (G_VARIANT_TYPE_TUPLE);
+  g_assert_cmpint (n_param_values - 1, ==, 2);
+  param_values++;
+  item = g_variant_new_uint32 (g_value_get_uint (param_values));
+  g_variant_builder_add_value (builder, item);
+  param_values++;
+  item = g_variant_new ("s", g_value_get_string (param_values));
+  g_variant_builder_add_value (builder, item);
+  param_values++;
+  params = g_variant_builder_end (builder);
+  g_variant_builder_unref (builder);
+
+  g_dbus_connection_emit_signal (connection,
+                                 NULL,
+                                 path,
+                                 "org.gnome.evolution.dataserver.calendar.CalView",
+                                 "Done",
+                                 params,
+                                 NULL);
+out:
+  return TRUE;
+}
+
+static void
+e_gdbus_cal_view_default_init (EGdbusCalViewIface *iface)
+{
+
+  /* Build lookup structures */
+  _method_name_to_id = g_hash_table_new (g_str_hash, g_str_equal);
+  _signal_name_to_id = g_hash_table_new (g_str_hash, g_str_equal);
+  _property_name_to_id = g_hash_table_new (g_str_hash, g_str_equal);
+  _property_gname_to_name = g_hash_table_new (g_str_hash, g_str_equal);
+  _property_name_to_gname = g_hash_table_new (g_str_hash, g_str_equal);
+  g_hash_table_insert (_method_name_to_id, (gpointer) "start", GUINT_TO_POINTER (__START_METHOD));
+  g_hash_table_insert (_method_name_to_id, (gpointer) "stop", GUINT_TO_POINTER (__STOP_METHOD));
+  g_hash_table_insert (_signal_name_to_id, (gpointer) "ObjectsAdded", GUINT_TO_POINTER (__OBJECTS_ADDED_SIGNAL));
+  g_hash_table_insert (_signal_name_to_id, (gpointer) "ObjectsModified", GUINT_TO_POINTER (__OBJECTS_MODIFIED_SIGNAL));
+  g_hash_table_insert (_signal_name_to_id, (gpointer) "ObjectsRemoved", GUINT_TO_POINTER (__OBJECTS_REMOVED_SIGNAL));
+  g_hash_table_insert (_signal_name_to_id, (gpointer) "Progress", GUINT_TO_POINTER (__PROGRESS_SIGNAL));
+  g_hash_table_insert (_signal_name_to_id, (gpointer) "Done", GUINT_TO_POINTER (__DONE_SIGNAL));
+
+  /* GObject signals definitions for D-Bus signals: */
+  /**
+   * EGdbusCalView::objects-added:
+   * @object: The object emitting the signal.
+   * @objects: Parameter.
+   *
+   * Represents the D-Bus signal <literal>ObjectsAdded</literal>.
+   *
+   * On proxies, connect to this signal to get notified whenever the remote
+   * object instances emits the signal (similar to how the
+   * #GDBusProxy::g-signal works). The signal is emitted in the
+   * thread-default main loop of the thread that the proxy was created in.
+   *
+   * On exported objects, emitting this signal causes the actual D-Bus signal to be emitted. You can use e_gdbus_cal_view_emit_objects_added() to do this.
+   */  signals[__OBJECTS_ADDED_SIGNAL] =
+    g_signal_new ("objects-added",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalViewIface, objects_added),
+                  NULL,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_VOID__BOXED,
+                  G_TYPE_NONE,
+                  1,
+                  G_TYPE_STRV);
+  g_signal_add_emission_hook (signals[__OBJECTS_ADDED_SIGNAL],
+                              0,
+                              signal_emission_hook_cb_objects_added,
+                              (gpointer) "ObjectsAdded",
+                              NULL);
+
+  /**
+   * EGdbusCalView::objects-modified:
+   * @object: The object emitting the signal.
+   * @objects: Parameter.
+   *
+   * Represents the D-Bus signal <literal>ObjectsModified</literal>.
+   *
+   * On proxies, connect to this signal to get notified whenever the remote
+   * object instances emits the signal (similar to how the
+   * #GDBusProxy::g-signal works). The signal is emitted in the
+   * thread-default main loop of the thread that the proxy was created in.
+   *
+   * On exported objects, emitting this signal causes the actual D-Bus signal to be emitted. You can use e_gdbus_cal_view_emit_objects_modified() to do this.
+   */  signals[__OBJECTS_MODIFIED_SIGNAL] =
+    g_signal_new ("objects-modified",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalViewIface, objects_modified),
+                  NULL,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_VOID__BOXED,
+                  G_TYPE_NONE,
+                  1,
+                  G_TYPE_STRV);
+  g_signal_add_emission_hook (signals[__OBJECTS_MODIFIED_SIGNAL],
+                              0,
+                              signal_emission_hook_cb_objects_modified,
+                              (gpointer) "ObjectsModified",
+                              NULL);
+
+  /**
+   * EGdbusCalView::objects-removed:
+   * @object: The object emitting the signal.
+   * @ids: Parameter.
+   *
+   * Represents the D-Bus signal <literal>ObjectsRemoved</literal>.
+   *
+   * On proxies, connect to this signal to get notified whenever the remote
+   * object instances emits the signal (similar to how the
+   * #GDBusProxy::g-signal works). The signal is emitted in the
+   * thread-default main loop of the thread that the proxy was created in.
+   *
+   * On exported objects, emitting this signal causes the actual D-Bus signal to be emitted. You can use e_gdbus_cal_view_emit_objects_removed() to do this.
+   */  signals[__OBJECTS_REMOVED_SIGNAL] =
+    g_signal_new ("objects-removed",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalViewIface, objects_removed),
+                  NULL,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_VOID__BOXED,
+                  G_TYPE_NONE,
+                  1,
+                  G_TYPE_STRV);
+  g_signal_add_emission_hook (signals[__OBJECTS_REMOVED_SIGNAL],
+                              0,
+                              signal_emission_hook_cb_objects_removed,
+                              (gpointer) "ObjectsRemoved",
+                              NULL);
+
+  /**
+   * EGdbusCalView::progress:
+   * @object: The object emitting the signal.
+   * @message: Parameter.
+   * @progress: Parameter.
+   *
+   * Represents the D-Bus signal <literal>Progress</literal>.
+   *
+   * On proxies, connect to this signal to get notified whenever the remote
+   * object instances emits the signal (similar to how the
+   * #GDBusProxy::g-signal works). The signal is emitted in the
+   * thread-default main loop of the thread that the proxy was created in.
+   *
+   * On exported objects, emitting this signal causes the actual D-Bus signal to be emitted. You can use e_gdbus_cal_view_emit_progress() to do this.
+   */  signals[__PROGRESS_SIGNAL] =
+    g_signal_new ("progress",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalViewIface, progress),
+                  NULL,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_VOID__STRING_UINT,
+                  G_TYPE_NONE,
+                  2,
+                  G_TYPE_STRING,
+                  G_TYPE_UINT);
+  g_signal_add_emission_hook (signals[__PROGRESS_SIGNAL],
+                              0,
+                              signal_emission_hook_cb_progress,
+                              (gpointer) "Progress",
+                              NULL);
+
+  /**
+   * EGdbusCalView::done:
+   * @object: The object emitting the signal.
+   * @status: Parameter.
+   * @message: Parameter.
+   *
+   * Represents the D-Bus signal <literal>Done</literal>.
+   *
+   * On proxies, connect to this signal to get notified whenever the remote
+   * object instances emits the signal (similar to how the
+   * #GDBusProxy::g-signal works). The signal is emitted in the
+   * thread-default main loop of the thread that the proxy was created in.
+   *
+   * On exported objects, emitting this signal causes the actual D-Bus signal to be emitted. You can use e_gdbus_cal_view_emit_done() to do this.
+   */  signals[__DONE_SIGNAL] =
+    g_signal_new ("done",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalViewIface, done),
+                  NULL,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_VOID__UINT_STRING,
+                  G_TYPE_NONE,
+                  2,
+                  G_TYPE_UINT,
+                  G_TYPE_STRING);
+  g_signal_add_emission_hook (signals[__DONE_SIGNAL],
+                              0,
+                              signal_emission_hook_cb_done,
+                              (gpointer) "Done",
+                              NULL);
+
+
+  /* GObject signals definitions for D-Bus methods: */
+  /**
+   * EGdbusCalView::handle-start:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>start</literal> D-Bus method on @object. Use e_gdbus_cal_view_complete_start() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_view_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__START_METHOD] =
+    g_signal_new ("handle-start",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalViewIface, handle_start),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT,
+                  G_TYPE_BOOLEAN,
+                  1,
+                  G_TYPE_DBUS_METHOD_INVOCATION);
+  /**
+   * EGdbusCalView::handle-stop:
+   * @object: The exported object emitting the signal.
+   * @invocation: A #GDBusMethodInvocation object that can be used to return a value or error.
+   *
+   * On exported objects, this signal is emitted when a remote process (identified by @invocation) invokes the <literal>stop</literal> D-Bus method on @object. Use e_gdbus_cal_view_complete_stop() to return a value or g_dbus_method_invocation_return_error() to return an error.
+   *
+   * The signal is emitted in the thread-default main loop of the thread that e_gdbus_cal_view_register_object() was called from.
+   *
+   * On proxies, this signal is never emitted.
+   *
+   * Returns: %TRUE if you want to handle the method call (will stop further handlers from being called), %FALSE otherwise.
+   */
+  signals[__STOP_METHOD] =
+    g_signal_new ("handle-stop",
+                  G_TYPE_FROM_INTERFACE (iface),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (EGdbusCalViewIface, handle_stop),
+                  g_signal_accumulator_true_handled,
+                  NULL,
+                  _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT,
+                  G_TYPE_BOOLEAN,
+                  1,
+                  G_TYPE_DBUS_METHOD_INVOCATION);
+
+  /* GObject property definitions for D-Bus properties: */
+}
+
+
+/* C Bindings for properties */
+
+/**
+ * e_gdbus_cal_view_call_start:
+ * @proxy: A #EGdbusCalView.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.CalView.start</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_view_call_start_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_view_call_start_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_view_call_start (
+        EGdbusCalView *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = NULL;
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "start",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_view_call_start_finish:
+ * @proxy: A #EGdbusCalView.
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_view_call_start().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.CalView.start</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_view_call_start_finish (
+        EGdbusCalView *proxy,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_view_call_start_sync:
+ * @proxy: A #EGdbusCalView.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.CalView.start</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_view_call_start() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_view_call_start_sync (
+        EGdbusCalView *proxy,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = NULL;
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "start",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_view_call_stop:
+ * @proxy: A #EGdbusCalView.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL if you don't care about the result of the method invocation.
+ * @user_data: Data to pass to @callback.
+ *
+ * Invokes the <literal>org.gnome.evolution.dataserver.calendar.CalView.stop</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * This is an asynchronous method. When the operation is finished,
+ * callback will be invoked in the thread-default main loop of the
+ * thread you are calling this method from. You can then call
+ * e_gdbus_cal_view_call_stop_finish() to get the result of the operation.
+ *
+ * See e_gdbus_cal_view_call_stop_sync() for the synchronous version of this method.
+ */
+void e_gdbus_cal_view_call_stop (
+        EGdbusCalView *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data)
+{
+  GVariant *_params;
+  _params = NULL;
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+                     "stop",
+                     _params,
+                     G_DBUS_CALL_FLAGS_NONE,
+                     -1,
+                     cancellable,
+                     callback,
+                     user_data);
+}
+
+/**
+ * e_gdbus_cal_view_call_stop_finish:
+ * @proxy: A #EGdbusCalView.
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback passed to e_gdbus_cal_view_call_stop().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes invoking the <literal>org.gnome.evolution.dataserver.calendar.CalView.stop</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_view_call_stop_finish (
+        EGdbusCalView *proxy,
+        GAsyncResult *res,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_result;
+  _result = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+/**
+ * e_gdbus_cal_view_call_stop_sync:
+ * @proxy: A #EGdbusCalView.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <literal>org.gnome.evolution.dataserver.calendar.CalView.stop</literal>
+ * D-Bus method on the remote object represented by @proxy.
+ *
+ * The calling thread is blocked until a reply is received. See
+ * e_gdbus_cal_view_call_stop() for the asynchronous version of this method.
+ *
+ * Returns: %TRUE if the call succeeded, %FALSE if @error is set.
+ */
+gboolean e_gdbus_cal_view_call_stop_sync (
+        EGdbusCalView *proxy,
+        GCancellable *cancellable,
+        GError **error)
+{
+  gboolean _ret = FALSE;
+  GVariant *_params;
+  GVariant *_result;
+  _params = NULL;
+  _result = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+                                   "stop",
+                                   _params,
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   cancellable,
+                                   error);
+  if (_result == NULL)
+    goto _out;
+  g_variant_unref (_result);
+  _ret = TRUE;
+_out:
+  return _ret;
+}
+
+
+/**
+ * e_gdbus_cal_view_complete_start:
+ * @object: A #EGdbusCalView.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.CalView.start</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_view_complete_start (
+        EGdbusCalView *object,
+        GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation, NULL);
+}
+
+
+/**
+ * e_gdbus_cal_view_complete_stop:
+ * @object: A #EGdbusCalView.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Completes handling the <literal>org.gnome.evolution.dataserver.calendar.CalView.stop</literal>
+ * D-Bus method invocation by returning a value.
+ *
+ * If you want to return an error, use g_dbus_method_invocation_return_error()
+ * or similar instead.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void e_gdbus_cal_view_complete_stop (
+        EGdbusCalView *object,
+        GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation, NULL);
+}
+
+
+/**
+ * e_gdbus_cal_view_emit_objects_added:
+ * @object: A #EGdbusCalView.
+ * @arg_objects: Signal parameter.
+ *
+ * Emits the <literal>org.gnome.evolution.dataserver.calendar.CalView.ObjectsAdded</literal>
+ * D-Bus signal.
+ */
+void e_gdbus_cal_view_emit_objects_added (
+        EGdbusCalView *object,
+        const gchar* const *arg_objects)
+{
+  g_signal_emit (object, signals[__OBJECTS_ADDED_SIGNAL], 0, arg_objects);
+}
+
+
+/**
+ * e_gdbus_cal_view_emit_objects_modified:
+ * @object: A #EGdbusCalView.
+ * @arg_objects: Signal parameter.
+ *
+ * Emits the <literal>org.gnome.evolution.dataserver.calendar.CalView.ObjectsModified</literal>
+ * D-Bus signal.
+ */
+void e_gdbus_cal_view_emit_objects_modified (
+        EGdbusCalView *object,
+        const gchar* const *arg_objects)
+{
+  g_signal_emit (object, signals[__OBJECTS_MODIFIED_SIGNAL], 0, arg_objects);
+}
+
+
+/**
+ * e_gdbus_cal_view_emit_objects_removed:
+ * @object: A #EGdbusCalView.
+ * @arg_ids: Signal parameter.
+ *
+ * Emits the <literal>org.gnome.evolution.dataserver.calendar.CalView.ObjectsRemoved</literal>
+ * D-Bus signal.
+ */
+void e_gdbus_cal_view_emit_objects_removed (
+        EGdbusCalView *object,
+        const gchar* const *arg_ids)
+{
+  g_signal_emit (object, signals[__OBJECTS_REMOVED_SIGNAL], 0, arg_ids);
+}
+
+
+/**
+ * e_gdbus_cal_view_emit_progress:
+ * @object: A #EGdbusCalView.
+ * @arg_message: Signal parameter.
+ * @arg_progress: Signal parameter.
+ *
+ * Emits the <literal>org.gnome.evolution.dataserver.calendar.CalView.Progress</literal>
+ * D-Bus signal.
+ */
+void e_gdbus_cal_view_emit_progress (
+        EGdbusCalView *object,
+        const gchar *arg_message,
+        guint arg_progress)
+{
+  g_signal_emit (object, signals[__PROGRESS_SIGNAL], 0, arg_message, arg_progress);
+}
+
+
+/**
+ * e_gdbus_cal_view_emit_done:
+ * @object: A #EGdbusCalView.
+ * @arg_status: Signal parameter.
+ * @arg_message: Signal parameter.
+ *
+ * Emits the <literal>org.gnome.evolution.dataserver.calendar.CalView.Done</literal>
+ * D-Bus signal.
+ */
+void e_gdbus_cal_view_emit_done (
+        EGdbusCalView *object,
+        guint arg_status,
+        const gchar *arg_message)
+{
+  g_signal_emit (object, signals[__DONE_SIGNAL], 0, arg_status, arg_message);
+}
+
+
+static const GDBusArgInfo e_gdbus_cal_view_signal_ObjectsAdded_objects =
+{
+  -1,
+  (gchar *) "objects",
+  (gchar *) "as",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_view_signal_ObjectsAdded_arg_pointers[] =
+{
+  &e_gdbus_cal_view_signal_ObjectsAdded_objects,
+  NULL
+};
+
+static const GDBusSignalInfo e_gdbus_cal_view_signal_ObjectsAdded =
+{
+  -1,
+  (gchar *) "ObjectsAdded",
+  (GDBusArgInfo **) &e_gdbus_cal_view_signal_ObjectsAdded_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_cal_view_signal_ObjectsModified_objects =
+{
+  -1,
+  (gchar *) "objects",
+  (gchar *) "as",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_view_signal_ObjectsModified_arg_pointers[] =
+{
+  &e_gdbus_cal_view_signal_ObjectsModified_objects,
+  NULL
+};
+
+static const GDBusSignalInfo e_gdbus_cal_view_signal_ObjectsModified =
+{
+  -1,
+  (gchar *) "ObjectsModified",
+  (GDBusArgInfo **) &e_gdbus_cal_view_signal_ObjectsModified_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_cal_view_signal_ObjectsRemoved_ids =
+{
+  -1,
+  (gchar *) "ids",
+  (gchar *) "as",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_view_signal_ObjectsRemoved_arg_pointers[] =
+{
+  &e_gdbus_cal_view_signal_ObjectsRemoved_ids,
+  NULL
+};
+
+static const GDBusSignalInfo e_gdbus_cal_view_signal_ObjectsRemoved =
+{
+  -1,
+  (gchar *) "ObjectsRemoved",
+  (GDBusArgInfo **) &e_gdbus_cal_view_signal_ObjectsRemoved_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_cal_view_signal_Progress_message =
+{
+  -1,
+  (gchar *) "message",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo e_gdbus_cal_view_signal_Progress_progress =
+{
+  -1,
+  (gchar *) "progress",
+  (gchar *) "u",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_view_signal_Progress_arg_pointers[] =
+{
+  &e_gdbus_cal_view_signal_Progress_message,
+  &e_gdbus_cal_view_signal_Progress_progress,
+  NULL
+};
+
+static const GDBusSignalInfo e_gdbus_cal_view_signal_Progress =
+{
+  -1,
+  (gchar *) "Progress",
+  (GDBusArgInfo **) &e_gdbus_cal_view_signal_Progress_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusArgInfo e_gdbus_cal_view_signal_Done_status =
+{
+  -1,
+  (gchar *) "status",
+  (gchar *) "u",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo e_gdbus_cal_view_signal_Done_message =
+{
+  -1,
+  (gchar *) "message",
+  (gchar *) "s",
+  (GDBusAnnotationInfo **) NULL,
+};
+static const GDBusArgInfo * const e_gdbus_cal_view_signal_Done_arg_pointers[] =
+{
+  &e_gdbus_cal_view_signal_Done_status,
+  &e_gdbus_cal_view_signal_Done_message,
+  NULL
+};
+
+static const GDBusSignalInfo e_gdbus_cal_view_signal_Done =
+{
+  -1,
+  (gchar *) "Done",
+  (GDBusArgInfo **) &e_gdbus_cal_view_signal_Done_arg_pointers,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusSignalInfo * const e_gdbus_cal_view_signal_info_pointers[] =
+{
+  &e_gdbus_cal_view_signal_ObjectsAdded,
+  &e_gdbus_cal_view_signal_ObjectsModified,
+  &e_gdbus_cal_view_signal_ObjectsRemoved,
+  &e_gdbus_cal_view_signal_Progress,
+  &e_gdbus_cal_view_signal_Done,
+  NULL
+};
+
+static const GDBusMethodInfo e_gdbus_cal_view_method_start =
+{
+  -1,
+  (gchar *) "start",
+  (GDBusArgInfo **) NULL,
+  (GDBusArgInfo **) NULL,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusMethodInfo e_gdbus_cal_view_method_stop =
+{
+  -1,
+  (gchar *) "stop",
+  (GDBusArgInfo **) NULL,
+  (GDBusArgInfo **) NULL,
+  (GDBusAnnotationInfo **) NULL,
+};
+
+static const GDBusMethodInfo * const e_gdbus_cal_view_method_info_pointers[] =
+{
+  &e_gdbus_cal_view_method_start,
+  &e_gdbus_cal_view_method_stop,
+  NULL
+};
+
+static const GDBusInterfaceInfo _e_gdbus_cal_view_interface_info =
+{
+  -1,
+  (gchar *) "org.gnome.evolution.dataserver.calendar.CalView",
+  (GDBusMethodInfo **) &e_gdbus_cal_view_method_info_pointers,
+  (GDBusSignalInfo **) &e_gdbus_cal_view_signal_info_pointers,
+  (GDBusPropertyInfo **) NULL,
+};
+
+static void
+handle_method_call (GDBusConnection       *connection,
+                    const gchar           *sender,
+                    const gchar           *object_path,
+                    const gchar           *interface_name,
+                    const gchar           *method_name,
+                    GVariant              *parameters,
+                    GDBusMethodInvocation *invocation,
+                    gpointer               user_data)
+{
+  guint method_id;
+  method_id = lookup_method_id_from_method_name (method_name);
+  switch (method_id)
+    {
+    case __START_METHOD:
+      {
+        EGdbusCalView *object = E_GDBUS_CAL_VIEW (user_data);
+        gboolean handled;
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    case __STOP_METHOD:
+      {
+        EGdbusCalView *object = E_GDBUS_CAL_VIEW (user_data);
+        gboolean handled;
+        g_signal_emit (object,
+                       signals[method_id],
+                       0, invocation, &handled);
+        if (!handled)
+          goto not_implemented;
+      }
+      break;
+
+    default:
+not_implemented:
+      g_dbus_method_invocation_return_error (invocation,
+                                             G_DBUS_ERROR,
+                                             G_DBUS_ERROR_NOT_SUPPORTED,
+                                             "Method `%s' is not implemented",
+                                             method_name);
+      break;
+    }
+};
+
+static GVariant *
+get_property (GDBusConnection  *connection,
+              const gchar      *sender,
+              const gchar      *object_path,
+              const gchar      *interface_name,
+              const gchar      *property_name,
+              GError          **error,
+              gpointer          user_data)
+{
+  GVariant *ret;
+  guint prop_id;
+  prop_id = lookup_property_id_from_property_name (property_name);
+  ret = NULL;
+  switch (prop_id)
+    {
+    default:
+      g_set_error (error,
+                   G_DBUS_ERROR,
+                   G_DBUS_ERROR_NOT_SUPPORTED,
+                   "This implementation does not support property `%s'",
+                   property_name);
+      break;
+    }
+
+  return ret;
+};
+
+static gboolean
+set_property (GDBusConnection  *connection,
+              const gchar      *sender,
+              const gchar      *object_path,
+              const gchar      *interface_name,
+              const gchar      *property_name,
+              GVariant         *value,
+              GError          **error,
+              gpointer          user_data)
+{
+  gboolean ret;
+  guint prop_id;
+  prop_id = lookup_property_id_from_property_name (property_name);
+  ret = TRUE;
+  switch (prop_id)
+    {
+    default:
+      g_set_error (error,
+                   G_DBUS_ERROR,
+                   G_DBUS_ERROR_NOT_SUPPORTED,
+                   "This implementation does not support property `%s'",
+                   property_name);
+      ret = FALSE;
+      break;
+    }
+
+  return ret;
+};
+
+static const GDBusInterfaceVTable e_gdbus_cal_view_interface_vtable =
+{
+  handle_method_call,
+  get_property,
+  set_property,
+};
+
+static gboolean
+emit_notifications_in_idle (gpointer user_data)
+{
+  GObject *object = G_OBJECT (user_data);
+  GDBusConnection *connection;
+  const gchar *path;
+  GHashTable *notification_queue;
+  GHashTableIter iter;
+  const gchar *property_name;
+  GVariant *value;
+  GVariantBuilder *builder;
+  GVariantBuilder *invalidated_builder;
+  GHashTable *pvc;
+  gboolean has_changes;
+
+  notification_queue = g_object_get_data (object, "gdbus-codegen-notification-queue");
+  path = g_object_get_data (object, "gdbus-codegen-path");
+  connection = g_object_get_data (object, "gdbus-codegen-connection");
+  pvc = g_object_get_data (object, "gdbus-codegen-pvc");
+  g_assert (notification_queue != NULL && path != NULL && connection != NULL && pvc != NULL);
+
+  builder = g_variant_builder_new (G_VARIANT_TYPE_ARRAY);
+  invalidated_builder = g_variant_builder_new (G_VARIANT_TYPE ("as"));
+  g_hash_table_iter_init (&iter, notification_queue);
+  has_changes = FALSE;
+  while (g_hash_table_iter_next (&iter, (gpointer) &property_name, (gpointer) &value))
+    {
+      GVariant *cached_value;
+      cached_value = g_hash_table_lookup (pvc, property_name);
+      if (cached_value == NULL || !g_variant_equal (cached_value, value))
+        {
+          g_hash_table_insert (pvc, (gpointer) property_name, (gpointer) g_variant_ref (value));
+          g_variant_builder_add (builder, "{sv}", property_name, value);
+          has_changes = TRUE;
+        }
+    }
+
+  if (has_changes)
+    {
+      g_dbus_connection_emit_signal (connection,
+                                     NULL,
+                                     path,
+                                     "org.freedesktop.DBus.Properties",
+                                     "PropertiesChanged",
+                                     g_variant_new ("(sa{sv}as)",
+                                                    "org.gnome.evolution.dataserver.calendar.CalView",
+                                                    builder,
+                                                    invalidated_builder),
+                                     NULL);
+    }
+  else
+    {
+      g_variant_builder_unref (builder);
+      g_variant_builder_unref (invalidated_builder);
+    }
+
+  g_hash_table_remove_all (notification_queue);
+  g_object_set_data (object, "gdbus-codegen-notification-idle-id", GUINT_TO_POINTER (0));
+  return FALSE;
+}
+
+static void
+queue_notification (GObject     *object,
+                    const gchar *property_name,
+                    GVariant    *value)
+{
+  GHashTable *notification_queue;
+  guint idle_id;
+  notification_queue = g_object_get_data (object, "gdbus-codegen-notification-queue");
+  if (notification_queue == NULL)
+    {
+      notification_queue = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) g_variant_unref);
+      g_object_set_data_full (object, "gdbus-codegen-notification-queue", notification_queue, (GDestroyNotify) g_hash_table_unref);
+    }
+  g_hash_table_insert (notification_queue, (gpointer) property_name, (gpointer) value); /* adopts value */
+  idle_id = GPOINTER_TO_UINT (g_object_get_data (object, "gdbus-codegen-notification-idle-id"));
+  if (idle_id == 0)
+    {
+      GSource *idle_source;
+      idle_source = g_idle_source_new ();
+      g_source_set_priority (idle_source, G_PRIORITY_DEFAULT);
+      g_source_set_callback (idle_source,
+                             emit_notifications_in_idle,
+                             g_object_ref (object),
+                             (GDestroyNotify) g_object_unref);
+      idle_id = g_source_attach (idle_source, g_main_context_get_thread_default ());
+      g_source_unref (idle_source);
+      g_object_set_data (object, "gdbus-codegen-notification-idle-id", GUINT_TO_POINTER (idle_id));
+    }
+}
+
+/**
+ * e_gdbus_cal_view_drain_notify:
+ * @object: A #EGdbusCalView that is exported.
+ *
+ * If @object has queued notifications, empty the queue forcing
+ * the <literal>PropertiesChanged</literal> signal to be emitted.
+ * See <xref linkend="EGdbusCalView.description"/> for more background information.
+ */
+void
+e_gdbus_cal_view_drain_notify (EGdbusCalView *object)
+{
+  gint idle_id;
+  idle_id = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (object), "gdbus-codegen-notification-idle-id"));
+  if (idle_id > 0)
+    {
+      emit_notifications_in_idle (object);
+      g_source_remove (idle_id);
+    }
+}
+
+static void
+on_notify (GObject    *object,
+           GParamSpec *pspec,
+           gpointer    user_data)
+{
+  GDBusConnection *connection;
+  const gchar *path;
+  GVariant *value;
+  const gchar *property_name;
+  guint prop_id;
+
+  path = g_object_get_data (object, "gdbus-codegen-path");
+  connection = g_object_get_data (object, "gdbus-codegen-connection");
+  if (connection == NULL || path == NULL)
+    goto out;
+
+  property_name = lookup_property_name_from_property_gname (pspec->name);
+  if (property_name == NULL)
+    goto out;
+  prop_id = lookup_property_id_from_property_name (property_name);
+
+  value = NULL;
+  switch (prop_id)
+    {
+  }
+
+  if (value != NULL && property_name != NULL)
+    {
+      queue_notification (object, property_name, g_variant_ref_sink (value));
+    }
+out:
+  ;
+}
+
+static void
+on_object_unregistered (GObject *object)
+{
+  gint idle_id;
+  idle_id = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (object), "gdbus-codegen-notification-idle-id"));
+  if (idle_id > 0)
+    {
+      g_source_remove (idle_id);
+    }
+  g_object_set_data (G_OBJECT (object), "gdbus-codegen-path", NULL);
+  g_object_set_data (G_OBJECT (object), "gdbus-codegen-connection", NULL);
+  g_signal_handlers_disconnect_by_func (object, on_notify, NULL);
+}
+
+/**
+ * e_gdbus_cal_view_register_object:
+ * @object: An instance of a #GObject<!-- -->-derived type implementing the #EGdbusCalView interface.
+ * @connection: A #GDBusConnection.
+ * @object_path: The object to register the object at.
+ * @error: Return location for error or %NULL.
+ *
+ * Registers @object at @object_path on @connection.
+ *
+ * See <xref linkend="EGdbusCalView.description"/>
+ * for how properties, methods and signals are handled.
+ *
+ * Returns: 0 if @error is set, otherwise a registration id (never 0) that can be used with g_dbus_connection_unregister_object().
+ */
+guint
+e_gdbus_cal_view_register_object (EGdbusCalView *object,
+           GDBusConnection *connection,
+           const gchar *object_path,
+           GError **error)
+{
+  G_GNUC_UNUSED GVariant *value;
+  GHashTable *pvc;
+
+  pvc = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) g_variant_unref);
+
+  g_object_set_data_full (G_OBJECT (object), "gdbus-codegen-path", (gpointer) g_strdup (object_path), g_free);
+  g_object_set_data (G_OBJECT (object), "gdbus-codegen-connection", (gpointer) connection);
+  g_object_set_data_full (G_OBJECT (object), "gdbus-codegen-pvc", (gpointer) pvc, (GDestroyNotify) g_hash_table_unref);
+  g_signal_connect (object, "notify", G_CALLBACK (on_notify), NULL);
+  return g_dbus_connection_register_object (connection,
+          object_path,
+          &_e_gdbus_cal_view_interface_info,
+          &e_gdbus_cal_view_interface_vtable,
+          object,
+          (GDestroyNotify) on_object_unregistered,
+          error);
+}
+
+/**
+ * e_gdbus_cal_view_interface_info:
+ *
+ * Gets interface description for the <literal>org.gnome.evolution.dataserver.calendar.CalView</literal> D-Bus interface.
+ *
+ * Returns: A #GDBusInterfaceInfo. Do not free, the object is statically allocated.
+ */
+const GDBusInterfaceInfo *
+e_gdbus_cal_view_interface_info (void)
+{
+  return &_e_gdbus_cal_view_interface_info;
+}
+
+
+/* ---------------------------------------------------------------------- */
+
+static void proxy_iface_init (EGdbusCalViewIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (EGdbusCalViewProxy, e_gdbus_cal_view_proxy, G_TYPE_DBUS_PROXY,
+                         G_IMPLEMENT_INTERFACE (E_GDBUS_TYPE_CAL_VIEW, proxy_iface_init));
+
+static void
+e_gdbus_cal_view_proxy_init (EGdbusCalViewProxy *proxy)
+{
+  g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy),
+                                   (GDBusInterfaceInfo *) &_e_gdbus_cal_view_interface_info);
+}
+
+static void
+g_signal (GDBusProxy  *proxy,
+          const gchar *sender_name,
+          const gchar *signal_name,
+          GVariant    *parameters)
+{
+  guint signal_id;
+  signal_id = lookup_signal_id_from_signal_name (signal_name);
+  switch (signal_id)
+    {
+    case __OBJECTS_ADDED_SIGNAL:
+      {
+        const gchar* const *arg_objects;
+        g_variant_get (parameters,
+                       "(^a&s)",
+                       &arg_objects);
+        g_signal_emit (proxy,
+                       signals[signal_id],
+                       0, arg_objects);
+        g_free ((gpointer) arg_objects);
+      }
+      break;
+
+    case __OBJECTS_MODIFIED_SIGNAL:
+      {
+        const gchar* const *arg_objects;
+        g_variant_get (parameters,
+                       "(^a&s)",
+                       &arg_objects);
+        g_signal_emit (proxy,
+                       signals[signal_id],
+                       0, arg_objects);
+        g_free ((gpointer) arg_objects);
+      }
+      break;
+
+    case __OBJECTS_REMOVED_SIGNAL:
+      {
+        const gchar* const *arg_ids;
+        g_variant_get (parameters,
+                       "(^a&s)",
+                       &arg_ids);
+        g_signal_emit (proxy,
+                       signals[signal_id],
+                       0, arg_ids);
+        g_free ((gpointer) arg_ids);
+      }
+      break;
+
+    case __PROGRESS_SIGNAL:
+      {
+        const gchar *arg_message;
+        guint arg_progress;
+        g_variant_get (parameters,
+                       "(&su)",
+                       &arg_message,
+                       &arg_progress);
+        g_signal_emit (proxy,
+                       signals[signal_id],
+                       0, arg_message, arg_progress);
+      }
+      break;
+
+    case __DONE_SIGNAL:
+      {
+        guint arg_status;
+        const gchar *arg_message;
+        g_variant_get (parameters,
+                       "(u&s)",
+                       &arg_status,
+                       &arg_message);
+        g_signal_emit (proxy,
+                       signals[signal_id],
+                       0, arg_status, arg_message);
+      }
+      break;
+
+    }
+}
+
+static void
+e_gdbus_cal_view_proxy_get_property (GObject      *object,
+                       guint         prop_id,
+                       GValue       *value,
+                       GParamSpec   *pspec)
+{
+  G_GNUC_UNUSED GVariant *cached;
+  switch (prop_id)
+    {
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+property_set_cb (GDBusProxy   *proxy,
+                 GAsyncResult *res,
+                 gpointer      user_data)
+{
+  const gchar *property_name = user_data;
+  GError *error;
+  GVariant *result;
+
+  error = NULL;
+  result = g_dbus_proxy_call_finish (proxy, res, &error);
+  if (result == NULL)
+    {
+      g_warning ("Error setting property `%s': %s", property_name, error->message);
+      g_error_free (error);
+    }
+  else
+    {
+      g_variant_unref (result);
+    }
+}
+
+static void
+e_gdbus_cal_view_proxy_set_property (GObject      *object,
+                       guint         prop_id,
+                       const GValue *value,
+                       GParamSpec   *pspec)
+{
+  GVariant *new_value;
+  const gchar *property_name;
+  new_value = NULL;
+  property_name = NULL;
+  switch (prop_id)
+    {
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+
+  if (new_value != NULL)
+    {
+      g_variant_ref_sink (new_value);
+      g_dbus_proxy_call (G_DBUS_PROXY (object),
+                         "org.freedesktop.DBus.Properties.Set",
+                         g_variant_new ("(ssv)",
+                                        "org.gnome.evolution.dataserver.calendar.CalView",
+                                        property_name,
+                                        new_value),
+                         G_DBUS_CALL_FLAGS_NONE,
+                         -1,
+                         NULL,
+                         (GAsyncReadyCallback) property_set_cb,
+                         (gpointer) property_name);
+      g_variant_unref (new_value);
+    }
+
+}
+
+static void
+g_properties_changed (GDBusProxy         *proxy,
+                      GVariant           *changed_properties,
+                      const gchar* const *invalidated_properties)
+{
+  guint n;
+  const gchar *key;
+  GVariantIter *iter;
+  const gchar *gname;
+
+  g_variant_get (changed_properties, "a{sv}", &iter);
+  while (g_variant_iter_next (iter, "{&sv}", &key, NULL))
+    {
+      gname = lookup_property_gname_from_property_name (key);
+      if (gname != NULL)
+        g_object_notify (G_OBJECT (proxy), gname);
+    }
+
+  for (n = 0; invalidated_properties[n] != NULL; n++)
+    {
+      gname = lookup_property_gname_from_property_name (invalidated_properties[n]);
+      if (gname != NULL)
+        g_object_notify (G_OBJECT (proxy), gname);
+    }
+
+}
+
+static void
+e_gdbus_cal_view_proxy_class_init (EGdbusCalViewProxyClass *klass)
+{
+  GObjectClass *gobject_class;
+  GDBusProxyClass *proxy_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->get_property = e_gdbus_cal_view_proxy_get_property;
+  gobject_class->set_property = e_gdbus_cal_view_proxy_set_property;
+
+  proxy_class = G_DBUS_PROXY_CLASS (klass);
+  proxy_class->g_signal = g_signal;
+  proxy_class->g_properties_changed = g_properties_changed;
+
+}
+
+static void
+proxy_iface_init (EGdbusCalViewIface *iface)
+{
+}
+
+
+/**
+ * e_gdbus_cal_view_proxy_new:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags used when constructing the proxy.
+ * @name: A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: Callback function to invoke when the proxy is ready.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like g_dbus_proxy_new() but returns a #EGdbusCalViewProxy.
+ *
+ * This is a failable asynchronous constructor - when the proxy is ready, callback will be invoked and you can use e_gdbus_cal_view_proxy_new_finish() to get the result.
+ */
+void e_gdbus_cal_view_proxy_new (GDBusConnection     *connection,
+                   GDBusProxyFlags      flags,
+                   const gchar         *name,
+                   const gchar         *object_path,
+                   GCancellable        *cancellable,
+                   GAsyncReadyCallback  callback,
+                   gpointer             user_data)
+{
+  g_async_initable_new_async (E_GDBUS_TYPE_CAL_VIEW_PROXY,
+                              G_PRIORITY_DEFAULT,
+                              cancellable,
+                              callback,
+                              user_data,
+                              "g-flags", flags,
+                              "g-name", name,
+                              "g-connection", connection,
+                              "g-object-path", object_path,
+                              "g-interface-name", "org.gnome.evolution.dataserver.calendar.CalView",
+                              NULL);
+}
+
+/**
+ * e_gdbus_cal_view_proxy_new_finish:
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback function passed to e_gdbus_cal_view_proxy_new().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes creating a #EGdbusCalViewProxy.
+ *
+ * Returns: A #EGdbusCalViewProxy or %NULL if @error is set. Free with g_object_unref().
+ */
+EGdbusCalView *e_gdbus_cal_view_proxy_new_finish (GAsyncResult  *res,
+                        GError       **error)
+{
+  GObject *object;
+  GObject *source_object;
+  source_object = g_async_result_get_source_object (res);
+  g_assert (source_object != NULL);
+  object = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object),
+                                        res,
+                                        error);
+  g_object_unref (source_object);
+  if (object != NULL)
+    return E_GDBUS_CAL_VIEW (object);
+  else
+    return NULL;
+}
+
+/**
+ * e_gdbus_cal_view_proxy_new_sync:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags used when constructing the proxy.
+ * @name: A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Like g_dbus_proxy_new_sync() but returns a #EGdbusCalViewProxy.
+ *
+ * This is a synchronous failable constructor. See e_gdbus_cal_view_proxy_new() and e_gdbus_cal_view_proxy_new_finish() for the asynchronous version.
+ *
+ * Returns: A #EGdbusCalViewProxy or %NULL if error is set. Free with g_object_unref().
+ */
+EGdbusCalView *e_gdbus_cal_view_proxy_new_sync (GDBusConnection     *connection,
+                       GDBusProxyFlags      flags,
+                       const gchar         *name,
+                       const gchar         *object_path,
+                       GCancellable        *cancellable,
+                       GError             **error)
+{
+  GInitable *initable;
+  initable = g_initable_new (E_GDBUS_TYPE_CAL_VIEW_PROXY,
+                             cancellable,
+                             error,
+                             "g-flags", flags,
+                             "g-name", name,
+                             "g-connection", connection,
+                             "g-object-path", object_path,
+                             "g-interface-name", "org.gnome.evolution.dataserver.calendar.CalView",
+                             NULL);
+  if (initable != NULL)
+    return E_GDBUS_CAL_VIEW (initable);
+  else
+    return NULL;
+}
+
+
+/**
+ * e_gdbus_cal_view_proxy_new_for_bus:
+ * @bus_type: A #GBusType.
+ * @flags: Flags used when constructing the proxy.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: A #GCancellable or %NULL.
+ * @callback: Callback function to invoke when the proxy is ready.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like g_dbus_proxy_new_for_bus() but returns a #EGdbusCalViewProxy.
+ *
+ * This is a failable asynchronous constructor - when the proxy is ready, callback will be invoked and you can use e_gdbus_cal_view_proxy_new_for_bus_finish() to get the result.
+ */
+void e_gdbus_cal_view_proxy_new_for_bus (GBusType             bus_type,
+                           GDBusProxyFlags      flags,
+                           const gchar         *name,
+                           const gchar         *object_path,
+                           GCancellable        *cancellable,
+                           GAsyncReadyCallback  callback,
+                           gpointer             user_data)
+{
+  g_async_initable_new_async (E_GDBUS_TYPE_CAL_VIEW_PROXY,
+                              G_PRIORITY_DEFAULT,
+                              cancellable,
+                              callback,
+                              user_data,
+                              "g-flags", flags,
+                              "g-name", name,
+                              "g-bus-type", bus_type,
+                              "g-object-path", object_path,
+                              "g-interface-name", "org.gnome.evolution.dataserver.calendar.CalView",
+                              NULL);
+}
+
+/**
+ * e_gdbus_cal_view_proxy_new_for_bus_finish:
+ * @res: A #GAsyncResult obtained from the #GAsyncReadyCallback function passed to e_gdbus_cal_view_proxy_new_for_bus().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes creating a #EGdbusCalViewProxy.
+ *
+ * Returns: A #EGdbusCalViewProxy or %NULL if @error is set. Free with g_object_unref().
+ */
+EGdbusCalView *e_gdbus_cal_view_proxy_new_for_bus_finish (GAsyncResult  *res,
+                                GError       **error)
+{
+  GObject *object;
+  GObject *source_object;
+  source_object = g_async_result_get_source_object (res);
+  g_assert (source_object != NULL);
+  object = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object),
+                                        res,
+                                        error);
+  g_object_unref (source_object);
+  if (object != NULL)
+    return E_GDBUS_CAL_VIEW (object);
+  else
+    return NULL;
+}
+
+/**
+ * e_gdbus_cal_view_proxy_new_for_bus_sync:
+ * @bus_type: A #GBusType.
+ * @flags: Flags used when constructing the proxy.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Like g_dbus_proxy_new_for_bus_sync() but returns a #EGdbusCalViewProxy.
+ *
+ * This is a synchronous failable constructor. See e_gdbus_cal_view_proxy_new_for_bus() and e_gdbus_cal_view_proxy_new_for_bus_finish() for the asynchronous version.
+ *
+ * Returns: A #EGdbusCalViewProxy or %NULL if error is set. Free with g_object_unref().
+ */
+EGdbusCalView *e_gdbus_cal_view_proxy_new_for_bus_sync (GBusType             bus_type,
+                               GDBusProxyFlags      flags,
+                               const gchar         *name,
+                               const gchar         *object_path,
+                               GCancellable        *cancellable,
+                               GError             **error)
+{
+  GInitable *initable;
+  initable = g_initable_new (E_GDBUS_TYPE_CAL_VIEW_PROXY,
+                             cancellable,
+                             error,
+                             "g-flags", flags,
+                             "g-name", name,
+                             "g-bus-type", bus_type,
+                             "g-object-path", object_path,
+                             "g-interface-name", "org.gnome.evolution.dataserver.calendar.CalView",
+                             NULL);
+  if (initable != NULL)
+    return E_GDBUS_CAL_VIEW (initable);
+  else
+    return NULL;
+}
+
+
+/* ---------------------------------------------------------------------- */
+
+struct _EGdbusCalViewStubPrivate
+{
+  gint foo;
+};
+
+static void stub_iface_init (EGdbusCalViewIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (EGdbusCalViewStub, e_gdbus_cal_view_stub, G_TYPE_OBJECT,
+                         G_IMPLEMENT_INTERFACE (E_GDBUS_TYPE_CAL_VIEW, stub_iface_init));
+
+static void
+e_gdbus_cal_view_stub_finalize (GObject *object)
+{
+  G_GNUC_UNUSED EGdbusCalViewStub *stub = (EGdbusCalViewStub *) object;
+  if (G_OBJECT_CLASS (e_gdbus_cal_view_stub_parent_class)->finalize != NULL)
+    G_OBJECT_CLASS (e_gdbus_cal_view_stub_parent_class)->finalize (object);
+}
+
+static void
+e_gdbus_cal_view_stub_get_property (GObject      *object,
+                      guint         prop_id,
+                      GValue       *value,
+                      GParamSpec   *pspec)
+{
+  G_GNUC_UNUSED static gchar **strv_of_len_zero = {NULL};
+  G_GNUC_UNUSED EGdbusCalViewStub *stub = (EGdbusCalViewStub *) object;
+  switch (prop_id)
+    {
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+e_gdbus_cal_view_stub_set_property (GObject      *object,
+                      guint         prop_id,
+                      const GValue *value,
+                      GParamSpec   *pspec)
+{
+  G_GNUC_UNUSED EGdbusCalViewStub *stub = (EGdbusCalViewStub *) object;
+  switch (prop_id)
+    {
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+e_gdbus_cal_view_stub_init (EGdbusCalViewStub *stub)
+{
+  stub->priv = G_TYPE_INSTANCE_GET_PRIVATE (stub, E_GDBUS_TYPE_CAL_VIEW_STUB, EGdbusCalViewStubPrivate);
+}
+
+static void
+e_gdbus_cal_view_stub_class_init (EGdbusCalViewStubClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize     = e_gdbus_cal_view_stub_finalize;
+  gobject_class->get_property = e_gdbus_cal_view_stub_get_property;
+  gobject_class->set_property = e_gdbus_cal_view_stub_set_property;
+  g_type_class_add_private (klass, sizeof (EGdbusCalViewStubPrivate));
+}
+
+static void
+stub_iface_init (EGdbusCalViewIface *iface)
+{
+}
+
+/**
+ * e_gdbus_cal_view_stub_new:
+ *
+ * Creates a new stub object that can be exported via e_gdbus_cal_view_register_object().
+ *
+ * Returns: A #EGdbusCalViewStub instance. Free with g_object_unref().
+ */
+EGdbusCalView *
+e_gdbus_cal_view_stub_new (void)
+{
+  return E_GDBUS_CAL_VIEW (g_object_new (E_GDBUS_TYPE_CAL_VIEW_STUB, NULL));
+}
diff --git a/calendar/libegdbus/e-gdbus-egdbuscalview.h b/calendar/libegdbus/e-gdbus-egdbuscalview.h
new file mode 100644
index 0000000..2af1be1
--- /dev/null
+++ b/calendar/libegdbus/e-gdbus-egdbuscalview.h
@@ -0,0 +1,278 @@
+/* File:       e-gdbus-egdbuscalview.h
+ *
+ * GType name: EGdbusCalView
+ * D-Bus name: org.gnome.evolution.dataserver.calendar.CalView
+ *
+ * Generated by GDBus Binding Tool 0.1. DO NOT EDIT.
+ */
+
+#ifndef __E_GDBUS_E_GDBUS_CAL_VIEW_H__
+#define __E_GDBUS_E_GDBUS_CAL_VIEW_H__
+
+#include <gio/gio.h>
+
+#include "e-gdbus-typemappers.h"
+G_BEGIN_DECLS
+
+#define E_GDBUS_TYPE_CAL_VIEW         (e_gdbus_cal_view_get_type ())
+#define E_GDBUS_CAL_VIEW(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), E_GDBUS_TYPE_CAL_VIEW, EGdbusCalView))
+#define E_GDBUS_IS_CAL_VIEW(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_GDBUS_TYPE_CAL_VIEW))
+#define E_GDBUS_CAL_VIEW_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE((o), E_GDBUS_TYPE_CAL_VIEW, EGdbusCalViewIface))
+
+/**
+ * EGdbusCalView:
+ *
+ * Opaque type representing a proxy or an exported object.
+ */
+typedef struct _EGdbusCalView EGdbusCalView; /* Dummy typedef */
+/**
+ * EGdbusCalViewIface:
+ * @parent_iface: The parent interface.
+ * @objects_added: Handler for the #EGdbusCalView::objects-added signal.
+ * @objects_modified: Handler for the #EGdbusCalView::objects-modified signal.
+ * @objects_removed: Handler for the #EGdbusCalView::objects-removed signal.
+ * @progress: Handler for the #EGdbusCalView::progress signal.
+ * @done: Handler for the #EGdbusCalView::done signal.
+ * @handle_start: Handler for the #EGdbusCalView::handle-start signal.
+ * @handle_stop: Handler for the #EGdbusCalView::handle-stop signal.
+ *
+ * Virtual table.
+ */
+typedef struct _EGdbusCalViewIface EGdbusCalViewIface;
+
+GType e_gdbus_cal_view_get_type (void) G_GNUC_CONST;
+
+/* ---------------------------------------------------------------------- */
+
+typedef struct _EGdbusCalViewProxy EGdbusCalViewProxy;
+typedef struct _EGdbusCalViewProxyClass EGdbusCalViewProxyClass;
+
+/**
+ * EGdbusCalViewProxyPrivate:
+ *
+ * The #EGdbusCalViewProxyPrivate structure contains only private data.
+ */
+typedef struct _EGdbusCalViewProxyPrivate EGdbusCalViewProxyPrivate;
+
+/**
+ * EGdbusCalViewProxy:
+ *
+ * The #EGdbusCalViewProxy structure contains only private data and
+ * should only be accessed using the provided API.
+ */
+struct _EGdbusCalViewProxy
+{
+  GDBusProxy parent_instance;
+  EGdbusCalViewProxyPrivate *priv;
+};
+
+/**
+ * EGdbusCalViewProxyClass:
+ *
+ * Class structure for #EGdbusCalViewProxy.
+ */
+struct _EGdbusCalViewProxyClass
+{
+  GDBusProxyClass parent_class;
+};
+
+#define E_GDBUS_TYPE_CAL_VIEW_PROXY (e_gdbus_cal_view_proxy_get_type ())
+GType e_gdbus_cal_view_proxy_get_type (void) G_GNUC_CONST;
+
+void e_gdbus_cal_view_proxy_new (GDBusConnection     *connection,
+                   GDBusProxyFlags      flags,
+                   const gchar         *name,
+                   const gchar         *object_path,
+                   GCancellable        *cancellable,
+                   GAsyncReadyCallback  callback,
+                   gpointer             user_data);
+EGdbusCalView *e_gdbus_cal_view_proxy_new_finish (GAsyncResult  *res,
+                        GError       **error);
+EGdbusCalView *e_gdbus_cal_view_proxy_new_sync (GDBusConnection     *connection,
+                       GDBusProxyFlags      flags,
+                       const gchar         *name,
+                       const gchar         *object_path,
+                       GCancellable        *cancellable,
+                       GError             **error);
+
+void e_gdbus_cal_view_proxy_new_for_bus (GBusType             bus_type,
+                           GDBusProxyFlags      flags,
+                           const gchar         *name,
+                           const gchar         *object_path,
+                           GCancellable        *cancellable,
+                           GAsyncReadyCallback  callback,
+                           gpointer             user_data);
+EGdbusCalView *e_gdbus_cal_view_proxy_new_for_bus_finish (GAsyncResult  *res,
+                                 GError       **error);
+EGdbusCalView *e_gdbus_cal_view_proxy_new_for_bus_sync (GBusType             bus_type,
+                               GDBusProxyFlags      flags,
+                               const gchar         *name,
+                               const gchar         *object_path,
+                               GCancellable        *cancellable,
+                               GError             **error);
+
+/* ---------------------------------------------------------------------- */
+
+typedef struct _EGdbusCalViewStub EGdbusCalViewStub;
+typedef struct _EGdbusCalViewStubClass EGdbusCalViewStubClass;
+
+/**
+ * EGdbusCalViewStubPrivate:
+ *
+ * The #EGdbusCalViewStubPrivate structure contains only private data.
+ */
+typedef struct _EGdbusCalViewStubPrivate EGdbusCalViewStubPrivate;
+
+/**
+ * EGdbusCalViewStub:
+ *
+ * The #EGdbusCalViewStub structure contains only private data and
+ * should only be accessed using the provided API.
+ */
+struct _EGdbusCalViewStub
+{
+  GObject parent_instance;
+  EGdbusCalViewStubPrivate *priv;
+};
+
+/**
+ * EGdbusCalViewStubClass:
+ *
+ * Class structure for #EGdbusCalViewStub.
+ */
+struct _EGdbusCalViewStubClass
+{
+  GObjectClass parent_class;
+};
+
+#define E_GDBUS_TYPE_CAL_VIEW_STUB (e_gdbus_cal_view_stub_get_type ())
+GType e_gdbus_cal_view_stub_get_type (void) G_GNUC_CONST;
+
+EGdbusCalView *e_gdbus_cal_view_stub_new (void);
+
+
+guint e_gdbus_cal_view_register_object (EGdbusCalView *object,
+                    GDBusConnection *connection,
+                    const gchar *object_path,
+                    GError **error);
+
+void e_gdbus_cal_view_drain_notify (EGdbusCalView *object);
+
+
+const GDBusInterfaceInfo *e_gdbus_cal_view_interface_info (void) G_GNUC_CONST;
+
+struct _EGdbusCalViewIface
+{
+  GTypeInterface parent_iface;
+
+  /* Signal handlers for receiving D-Bus signals: */
+  void (*objects_added) (
+        EGdbusCalView *object,
+        const gchar* const *arg_objects);
+  void (*objects_modified) (
+        EGdbusCalView *object,
+        const gchar* const *arg_objects);
+  void (*objects_removed) (
+        EGdbusCalView *object,
+        const gchar* const *arg_ids);
+  void (*progress) (
+        EGdbusCalView *object,
+        const gchar *arg_message,
+        guint arg_progress);
+  void (*done) (
+        EGdbusCalView *object,
+        guint arg_status,
+        const gchar *arg_message);
+
+  /* Signal handlers for handling D-Bus method calls: */
+  gboolean (*handle_start) (
+        EGdbusCalView *object,
+        GDBusMethodInvocation *invocation);
+  gboolean (*handle_stop) (
+        EGdbusCalView *object,
+        GDBusMethodInvocation *invocation);
+};
+
+/* C Bindings for properties */
+
+
+/* D-Bus Methods */
+void e_gdbus_cal_view_call_start (
+        EGdbusCalView *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_view_call_start_finish (
+        EGdbusCalView *proxy,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_view_call_start_sync (
+        EGdbusCalView *proxy,
+        GCancellable *cancellable,
+        GError **error);
+
+
+void e_gdbus_cal_view_call_stop (
+        EGdbusCalView *proxy,
+        GCancellable *cancellable,
+        GAsyncReadyCallback callback,
+        gpointer user_data);
+
+gboolean e_gdbus_cal_view_call_stop_finish (
+        EGdbusCalView *proxy,
+        GAsyncResult *res,
+        GError **error);
+
+gboolean e_gdbus_cal_view_call_stop_sync (
+        EGdbusCalView *proxy,
+        GCancellable *cancellable,
+        GError **error);
+
+
+
+/* D-Bus Methods Completion Helpers */
+void e_gdbus_cal_view_complete_start (
+        EGdbusCalView *object,
+        GDBusMethodInvocation *invocation);
+
+
+void e_gdbus_cal_view_complete_stop (
+        EGdbusCalView *object,
+        GDBusMethodInvocation *invocation);
+
+
+
+/* D-Bus Signal Emission Helpers */
+void e_gdbus_cal_view_emit_objects_added (
+        EGdbusCalView *object,
+        const gchar* const *arg_objects);
+
+
+void e_gdbus_cal_view_emit_objects_modified (
+        EGdbusCalView *object,
+        const gchar* const *arg_objects);
+
+
+void e_gdbus_cal_view_emit_objects_removed (
+        EGdbusCalView *object,
+        const gchar* const *arg_ids);
+
+
+void e_gdbus_cal_view_emit_progress (
+        EGdbusCalView *object,
+        const gchar *arg_message,
+        guint arg_progress);
+
+
+void e_gdbus_cal_view_emit_done (
+        EGdbusCalView *object,
+        guint arg_status,
+        const gchar *arg_message);
+
+
+
+G_END_DECLS
+
+#endif /* __E_GDBUS_E_GDBUS_CAL_VIEW_H__ */
diff --git a/calendar/libegdbus/e-gdbus-marshallers.c b/calendar/libegdbus/e-gdbus-marshallers.c
new file mode 100644
index 0000000..3e2ccb0
--- /dev/null
+++ b/calendar/libegdbus/e-gdbus-marshallers.c
@@ -0,0 +1,476 @@
+#include "e-gdbus-marshallers.h"
+
+#include	<glib-object.h>
+
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v)  g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v)     g_value_get_char (v)
+#define g_marshal_value_peek_uchar(v)    g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v)      g_value_get_int (v)
+#define g_marshal_value_peek_uint(v)     g_value_get_uint (v)
+#define g_marshal_value_peek_long(v)     g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v)    g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v)    g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v)   g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v)     g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v)    g_value_get_flags (v)
+#define g_marshal_value_peek_float(v)    g_value_get_float (v)
+#define g_marshal_value_peek_double(v)   g_value_get_double (v)
+#define g_marshal_value_peek_string(v)   (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v)    g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v)    g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v)  g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v)   g_value_get_object (v)
+#define g_marshal_value_peek_variant(v)  g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ *          Do not access GValues directly in your code. Instead, use the
+ *          g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v)  (v)->data[0].v_int
+#define g_marshal_value_peek_char(v)     (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v)    (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v)      (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v)     (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v)     (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v)    (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v)    (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v)   (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v)     (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v)    (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v)    (v)->data[0].v_float
+#define g_marshal_value_peek_double(v)   (v)->data[0].v_double
+#define g_marshal_value_peek_string(v)   (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v)    (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v)    (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v)  (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v)   (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v)  (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+/* BOOLEAN:OBJECT,STRING,UINT (e-gdbus-marshallers.list:1) */
+void
+_e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING_UINT (GClosure     *closure,
+                                                                GValue       *return_value G_GNUC_UNUSED,
+                                                                guint         n_param_values,
+                                                                const GValue *param_values,
+                                                                gpointer      invocation_hint G_GNUC_UNUSED,
+                                                                gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__OBJECT_STRING_UINT) (gpointer     data1,
+                                                                gpointer     arg_1,
+                                                                gpointer     arg_2,
+                                                                guint        arg_3,
+                                                                gpointer     data2);
+  register GMarshalFunc_BOOLEAN__OBJECT_STRING_UINT callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 4);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__OBJECT_STRING_UINT) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_object (param_values + 1),
+                       g_marshal_value_peek_string (param_values + 2),
+                       g_marshal_value_peek_uint (param_values + 3),
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+/* VOID:BOXED (e-gdbus-marshallers.list:2) */
+
+/* VOID:STRING,UINT (e-gdbus-marshallers.list:3) */
+void
+_e_gdbus_gdbus_cclosure_marshaller_VOID__STRING_UINT (GClosure     *closure,
+                                                      GValue       *return_value G_GNUC_UNUSED,
+                                                      guint         n_param_values,
+                                                      const GValue *param_values,
+                                                      gpointer      invocation_hint G_GNUC_UNUSED,
+                                                      gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__STRING_UINT) (gpointer     data1,
+                                                  gpointer     arg_1,
+                                                  guint        arg_2,
+                                                  gpointer     data2);
+  register GMarshalFunc_VOID__STRING_UINT callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__STRING_UINT) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_marshal_value_peek_string (param_values + 1),
+            g_marshal_value_peek_uint (param_values + 2),
+            data2);
+}
+
+/* VOID:UINT,STRING (e-gdbus-marshallers.list:4) */
+void
+_e_gdbus_gdbus_cclosure_marshaller_VOID__UINT_STRING (GClosure     *closure,
+                                                      GValue       *return_value G_GNUC_UNUSED,
+                                                      guint         n_param_values,
+                                                      const GValue *param_values,
+                                                      gpointer      invocation_hint G_GNUC_UNUSED,
+                                                      gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__UINT_STRING) (gpointer     data1,
+                                                  guint        arg_1,
+                                                  gpointer     arg_2,
+                                                  gpointer     data2);
+  register GMarshalFunc_VOID__UINT_STRING callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__UINT_STRING) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_marshal_value_peek_uint (param_values + 1),
+            g_marshal_value_peek_string (param_values + 2),
+            data2);
+}
+
+/* BOOLEAN:OBJECT (e-gdbus-marshallers.list:5) */
+void
+_e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT (GClosure     *closure,
+                                                    GValue       *return_value G_GNUC_UNUSED,
+                                                    guint         n_param_values,
+                                                    const GValue *param_values,
+                                                    gpointer      invocation_hint G_GNUC_UNUSED,
+                                                    gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__OBJECT) (gpointer     data1,
+                                                    gpointer     arg_1,
+                                                    gpointer     data2);
+  register GMarshalFunc_BOOLEAN__OBJECT callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 2);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__OBJECT) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_object (param_values + 1),
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+/* VOID:STRING (e-gdbus-marshallers.list:6) */
+
+/* VOID:BOOLEAN (e-gdbus-marshallers.list:7) */
+
+/* VOID:INT (e-gdbus-marshallers.list:8) */
+
+/* BOOLEAN:OBJECT,BOOLEAN,STRING,STRING (e-gdbus-marshallers.list:9) */
+void
+_e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_BOOLEAN_STRING_STRING (GClosure     *closure,
+                                                                          GValue       *return_value G_GNUC_UNUSED,
+                                                                          guint         n_param_values,
+                                                                          const GValue *param_values,
+                                                                          gpointer      invocation_hint G_GNUC_UNUSED,
+                                                                          gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__OBJECT_BOOLEAN_STRING_STRING) (gpointer     data1,
+                                                                          gpointer     arg_1,
+                                                                          gboolean     arg_2,
+                                                                          gpointer     arg_3,
+                                                                          gpointer     arg_4,
+                                                                          gpointer     data2);
+  register GMarshalFunc_BOOLEAN__OBJECT_BOOLEAN_STRING_STRING callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 5);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__OBJECT_BOOLEAN_STRING_STRING) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_object (param_values + 1),
+                       g_marshal_value_peek_boolean (param_values + 2),
+                       g_marshal_value_peek_string (param_values + 3),
+                       g_marshal_value_peek_string (param_values + 4),
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+/* BOOLEAN:OBJECT,UINT (e-gdbus-marshallers.list:10) */
+void
+_e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_UINT (GClosure     *closure,
+                                                         GValue       *return_value G_GNUC_UNUSED,
+                                                         guint         n_param_values,
+                                                         const GValue *param_values,
+                                                         gpointer      invocation_hint G_GNUC_UNUSED,
+                                                         gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__OBJECT_UINT) (gpointer     data1,
+                                                         gpointer     arg_1,
+                                                         guint        arg_2,
+                                                         gpointer     data2);
+  register GMarshalFunc_BOOLEAN__OBJECT_UINT callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__OBJECT_UINT) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_object (param_values + 1),
+                       g_marshal_value_peek_uint (param_values + 2),
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+/* BOOLEAN:OBJECT,STRING,STRING (e-gdbus-marshallers.list:11) */
+void
+_e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING_STRING (GClosure     *closure,
+                                                                  GValue       *return_value G_GNUC_UNUSED,
+                                                                  guint         n_param_values,
+                                                                  const GValue *param_values,
+                                                                  gpointer      invocation_hint G_GNUC_UNUSED,
+                                                                  gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__OBJECT_STRING_STRING) (gpointer     data1,
+                                                                  gpointer     arg_1,
+                                                                  gpointer     arg_2,
+                                                                  gpointer     arg_3,
+                                                                  gpointer     data2);
+  register GMarshalFunc_BOOLEAN__OBJECT_STRING_STRING callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 4);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__OBJECT_STRING_STRING) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_object (param_values + 1),
+                       g_marshal_value_peek_string (param_values + 2),
+                       g_marshal_value_peek_string (param_values + 3),
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+/* BOOLEAN:OBJECT,STRING (e-gdbus-marshallers.list:12) */
+void
+_e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING (GClosure     *closure,
+                                                           GValue       *return_value G_GNUC_UNUSED,
+                                                           guint         n_param_values,
+                                                           const GValue *param_values,
+                                                           gpointer      invocation_hint G_GNUC_UNUSED,
+                                                           gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__OBJECT_STRING) (gpointer     data1,
+                                                           gpointer     arg_1,
+                                                           gpointer     arg_2,
+                                                           gpointer     data2);
+  register GMarshalFunc_BOOLEAN__OBJECT_STRING callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__OBJECT_STRING) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_object (param_values + 1),
+                       g_marshal_value_peek_string (param_values + 2),
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+/* BOOLEAN:OBJECT,BOXED,UINT,UINT (e-gdbus-marshallers.list:13) */
+void
+_e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_BOXED_UINT_UINT (GClosure     *closure,
+                                                                    GValue       *return_value G_GNUC_UNUSED,
+                                                                    guint         n_param_values,
+                                                                    const GValue *param_values,
+                                                                    gpointer      invocation_hint G_GNUC_UNUSED,
+                                                                    gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__OBJECT_BOXED_UINT_UINT) (gpointer     data1,
+                                                                    gpointer     arg_1,
+                                                                    gpointer     arg_2,
+                                                                    guint        arg_3,
+                                                                    guint        arg_4,
+                                                                    gpointer     data2);
+  register GMarshalFunc_BOOLEAN__OBJECT_BOXED_UINT_UINT callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 5);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__OBJECT_BOXED_UINT_UINT) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_object (param_values + 1),
+                       g_marshal_value_peek_boxed (param_values + 2),
+                       g_marshal_value_peek_uint (param_values + 3),
+                       g_marshal_value_peek_uint (param_values + 4),
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+/* BOOLEAN:OBJECT,STRING,STRING,UINT (e-gdbus-marshallers.list:14) */
+void
+_e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING_STRING_UINT (GClosure     *closure,
+                                                                       GValue       *return_value G_GNUC_UNUSED,
+                                                                       guint         n_param_values,
+                                                                       const GValue *param_values,
+                                                                       gpointer      invocation_hint G_GNUC_UNUSED,
+                                                                       gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__OBJECT_STRING_STRING_UINT) (gpointer     data1,
+                                                                       gpointer     arg_1,
+                                                                       gpointer     arg_2,
+                                                                       gpointer     arg_3,
+                                                                       guint        arg_4,
+                                                                       gpointer     data2);
+  register GMarshalFunc_BOOLEAN__OBJECT_STRING_STRING_UINT callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 5);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__OBJECT_STRING_STRING_UINT) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_object (param_values + 1),
+                       g_marshal_value_peek_string (param_values + 2),
+                       g_marshal_value_peek_string (param_values + 3),
+                       g_marshal_value_peek_uint (param_values + 4),
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
diff --git a/calendar/libegdbus/e-gdbus-marshallers.h b/calendar/libegdbus/e-gdbus-marshallers.h
new file mode 100644
index 0000000..1c1bc52
--- /dev/null
+++ b/calendar/libegdbus/e-gdbus-marshallers.h
@@ -0,0 +1,104 @@
+
+#ifndef ___e_gdbus_gdbus_cclosure_marshaller_MARSHAL_H__
+#define ___e_gdbus_gdbus_cclosure_marshaller_MARSHAL_H__
+
+#include	<glib-object.h>
+
+G_BEGIN_DECLS
+
+/* BOOLEAN:OBJECT,STRING,UINT (e-gdbus-marshallers.list:1) */
+extern void _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING_UINT (GClosure     *closure,
+                                                                            GValue       *return_value,
+                                                                            guint         n_param_values,
+                                                                            const GValue *param_values,
+                                                                            gpointer      invocation_hint,
+                                                                            gpointer      marshal_data);
+
+/* VOID:BOXED (e-gdbus-marshallers.list:2) */
+#define _e_gdbus_gdbus_cclosure_marshaller_VOID__BOXED	g_cclosure_marshal_VOID__BOXED
+
+/* VOID:STRING,UINT (e-gdbus-marshallers.list:3) */
+extern void _e_gdbus_gdbus_cclosure_marshaller_VOID__STRING_UINT (GClosure     *closure,
+                                                                  GValue       *return_value,
+                                                                  guint         n_param_values,
+                                                                  const GValue *param_values,
+                                                                  gpointer      invocation_hint,
+                                                                  gpointer      marshal_data);
+
+/* VOID:UINT,STRING (e-gdbus-marshallers.list:4) */
+extern void _e_gdbus_gdbus_cclosure_marshaller_VOID__UINT_STRING (GClosure     *closure,
+                                                                  GValue       *return_value,
+                                                                  guint         n_param_values,
+                                                                  const GValue *param_values,
+                                                                  gpointer      invocation_hint,
+                                                                  gpointer      marshal_data);
+
+/* BOOLEAN:OBJECT (e-gdbus-marshallers.list:5) */
+extern void _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT (GClosure     *closure,
+                                                                GValue       *return_value,
+                                                                guint         n_param_values,
+                                                                const GValue *param_values,
+                                                                gpointer      invocation_hint,
+                                                                gpointer      marshal_data);
+
+/* VOID:STRING (e-gdbus-marshallers.list:6) */
+#define _e_gdbus_gdbus_cclosure_marshaller_VOID__STRING	g_cclosure_marshal_VOID__STRING
+
+/* VOID:BOOLEAN (e-gdbus-marshallers.list:7) */
+#define _e_gdbus_gdbus_cclosure_marshaller_VOID__BOOLEAN	g_cclosure_marshal_VOID__BOOLEAN
+
+/* VOID:INT (e-gdbus-marshallers.list:8) */
+#define _e_gdbus_gdbus_cclosure_marshaller_VOID__INT	g_cclosure_marshal_VOID__INT
+
+/* BOOLEAN:OBJECT,BOOLEAN,STRING,STRING (e-gdbus-marshallers.list:9) */
+extern void _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_BOOLEAN_STRING_STRING (GClosure     *closure,
+                                                                                      GValue       *return_value,
+                                                                                      guint         n_param_values,
+                                                                                      const GValue *param_values,
+                                                                                      gpointer      invocation_hint,
+                                                                                      gpointer      marshal_data);
+
+/* BOOLEAN:OBJECT,UINT (e-gdbus-marshallers.list:10) */
+extern void _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_UINT (GClosure     *closure,
+                                                                     GValue       *return_value,
+                                                                     guint         n_param_values,
+                                                                     const GValue *param_values,
+                                                                     gpointer      invocation_hint,
+                                                                     gpointer      marshal_data);
+
+/* BOOLEAN:OBJECT,STRING,STRING (e-gdbus-marshallers.list:11) */
+extern void _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING_STRING (GClosure     *closure,
+                                                                              GValue       *return_value,
+                                                                              guint         n_param_values,
+                                                                              const GValue *param_values,
+                                                                              gpointer      invocation_hint,
+                                                                              gpointer      marshal_data);
+
+/* BOOLEAN:OBJECT,STRING (e-gdbus-marshallers.list:12) */
+extern void _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING (GClosure     *closure,
+                                                                       GValue       *return_value,
+                                                                       guint         n_param_values,
+                                                                       const GValue *param_values,
+                                                                       gpointer      invocation_hint,
+                                                                       gpointer      marshal_data);
+
+/* BOOLEAN:OBJECT,BOXED,UINT,UINT (e-gdbus-marshallers.list:13) */
+extern void _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_BOXED_UINT_UINT (GClosure     *closure,
+                                                                                GValue       *return_value,
+                                                                                guint         n_param_values,
+                                                                                const GValue *param_values,
+                                                                                gpointer      invocation_hint,
+                                                                                gpointer      marshal_data);
+
+/* BOOLEAN:OBJECT,STRING,STRING,UINT (e-gdbus-marshallers.list:14) */
+extern void _e_gdbus_gdbus_cclosure_marshaller_BOOLEAN__OBJECT_STRING_STRING_UINT (GClosure     *closure,
+                                                                                   GValue       *return_value,
+                                                                                   guint         n_param_values,
+                                                                                   const GValue *param_values,
+                                                                                   gpointer      invocation_hint,
+                                                                                   gpointer      marshal_data);
+
+G_END_DECLS
+
+#endif /* ___e_gdbus_gdbus_cclosure_marshaller_MARSHAL_H__ */
+
diff --git a/calendar/libegdbus/e-gdbus-marshallers.list b/calendar/libegdbus/e-gdbus-marshallers.list
new file mode 100644
index 0000000..c133202
--- /dev/null
+++ b/calendar/libegdbus/e-gdbus-marshallers.list
@@ -0,0 +1,14 @@
+BOOLEAN:OBJECT,STRING,UINT
+VOID:BOXED
+VOID:STRING,UINT
+VOID:UINT,STRING
+BOOLEAN:OBJECT
+VOID:STRING
+VOID:BOOLEAN
+VOID:INT
+BOOLEAN:OBJECT,BOOLEAN,STRING,STRING
+BOOLEAN:OBJECT,UINT
+BOOLEAN:OBJECT,STRING,STRING
+BOOLEAN:OBJECT,STRING
+BOOLEAN:OBJECT,BOXED,UINT,UINT
+BOOLEAN:OBJECT,STRING,STRING,UINT
diff --git a/calendar/libegdbus/e-gdbus-typemappers.h b/calendar/libegdbus/e-gdbus-typemappers.h
new file mode 100644
index 0000000..d99ad9c
--- /dev/null
+++ b/calendar/libegdbus/e-gdbus-typemappers.h
@@ -0,0 +1,12 @@
+/* File:       e-gdbus-typemappers.h
+ *
+ * Generated by GDBus Binding Tool 0.1. DO NOT EDIT.
+ */
+
+#ifndef __E_GDBUS_TYPE_MAPPERS_H__
+#define __E_GDBUS_TYPE_MAPPERS_H__
+
+#include <gio/gio.h>
+
+
+#endif /* __E_GDBUS_TYPE_MAPPERS_H__ */
diff --git a/calendar/tests/ecal/ecal-test-utils.c b/calendar/tests/ecal/ecal-test-utils.c
index b40c128..bae6a6e 100644
--- a/calendar/tests/ecal/ecal-test-utils.c
+++ b/calendar/tests/ecal/ecal-test-utils.c
@@ -69,7 +69,6 @@ ecal_test_utils_cal_new_temp (gchar           **uri,
                               ECalSourceType   type)
 {
         ECal *cal;
-        GError *error = NULL;
         gchar *file_template;
         gchar *uri_result;
 
@@ -77,10 +76,9 @@ ecal_test_utils_cal_new_temp (gchar           **uri,
                         "ecal-test-XXXXXX/", NULL);
         g_mkstemp (file_template);
 
-        uri_result = g_filename_to_uri (file_template, NULL, &error);
+        uri_result = g_strconcat ("local:", file_template, NULL);
         if (!uri_result) {
-                g_error ("failed to convert %s to an URI: %s", file_template,
-                                error->message);
+                g_error ("failed to convert %s to a 'local:' URI", file_template);
         }
         g_free (file_template);
 
diff --git a/camel/Makefile.am b/camel/Makefile.am
index 9a687ce..6c7e4fb 100644
--- a/camel/Makefile.am
+++ b/camel/Makefile.am
@@ -43,8 +43,7 @@ libcamel_provider_1_2_la_CPPFLAGS = \
 	-DE_DATA_SERVER_PREFIX=\"$(prefix)\"			\
 	-DLOCALEDIR=\""$(localedir)"\"				\
 	-DCAMEL_COMPILATION					\
-	$(CAMEL_CFLAGS)						\
-	$(DBUS_GLIB_CFLAGS)
+	$(CAMEL_CFLAGS)
 
 libcamel_provider_1_2_la_SOURCES = 		\
 	camel-cipher-context.c			\
@@ -144,8 +143,7 @@ libcamel_provider_1_2_la_LIBADD =			\
 	libcamel-1.2.la				\
 	$(CAMEL_LIBS)				\
 	$(SOCKET_LIBS)				\
-	$(REGEX_LIBS)				\
-	$(DBUS_GLIB_LIBS)	
+	$(REGEX_LIBS)
 
 libcamel_1_2_la_CPPFLAGS = \
 	$(AM_CPPFLAGS)						\
diff --git a/camel/camel-sasl-gssapi.c b/camel/camel-sasl-gssapi.c
index d556300..f5a3202 100644
--- a/camel/camel-sasl-gssapi.c
+++ b/camel/camel-sasl-gssapi.c
@@ -62,9 +62,7 @@ extern gss_OID gss_nt_service_name;
 #endif
 
 #include <glib/gi18n-lib.h>
-
-#include <dbus/dbus.h>
-#include <dbus/dbus-glib-lowlevel.h>
+#include <gio/gio.h>
 
 #include "camel-net-utils.h"
 #include "camel-sasl-gssapi.h"
@@ -190,54 +188,52 @@ sasl_gssapi_finalize (GObject *object)
 static gboolean
 send_dbus_message (gchar *name)
 {
-	DBusMessage *message, *reply;
-	DBusError dbus_error;
 	gint success = FALSE;
-	DBusConnection *bus = NULL;
+	GError *error = NULL;
+	GDBusConnection *connection;
+	GDBusMessage *message, *reply;
+
+	connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
+	if (error) {
+		g_warning ("could not get system bus: %s\n", error->message);
+		g_error_free (error);
 
-	dbus_error_init (&dbus_error);
-	if (!(bus = dbus_bus_get (DBUS_BUS_SESSION, &dbus_error))) {
-		g_warning ("could not get system bus: %s\n", dbus_error.message);
-		dbus_error_free (&dbus_error);
 		return FALSE;
 	}
 
-	dbus_error_free (&dbus_error);
-
-	dbus_connection_setup_with_g_main (bus, NULL);
-	dbus_connection_set_exit_on_disconnect (bus, FALSE);
+	g_dbus_connection_set_exit_on_close (connection, FALSE);
 
 	/* Create a new message on the DBUS_INTERFACE */
-	if (!(message = dbus_message_new_method_call (DBUS_INTERFACE, DBUS_PATH, DBUS_INTERFACE, "acquireTgt"))) {
-		g_object_unref (bus);
+	message = g_dbus_message_new_method_call (DBUS_INTERFACE, DBUS_PATH, DBUS_INTERFACE, "acquireTgt");
+	if (!message) {
+		g_object_unref (connection);
 		return FALSE;
 	}
+
 	/* Appends the data as an argument to the message */
-	if (strchr(name, '\\'))
-		name = strchr(name, '\\');
-	dbus_message_append_args (message,
-				  DBUS_TYPE_STRING, &name,
-				  DBUS_TYPE_INVALID);
-	dbus_error_init(&dbus_error);
+	if (strchr (name, '\\'))
+		name = strchr (name, '\\');
+	g_dbus_message_set_body (message, g_variant_new ("(s)", name));
 
 	/* Sends the message: Have a 300 sec wait timeout  */
-	reply = dbus_connection_send_with_reply_and_block (bus, message, 300 * 1000, &dbus_error);
-
-	if (dbus_error_is_set(&dbus_error))
-		g_warning ("%s: %s\n", dbus_error.name, dbus_error.message);
-	dbus_error_free(&dbus_error);
-
-        if (reply)
-        {
-                dbus_error_init(&dbus_error);
-                dbus_message_get_args(reply, &dbus_error, DBUS_TYPE_BOOLEAN, &success, DBUS_TYPE_INVALID);
-                dbus_error_free(&dbus_error);
-                dbus_message_unref(reply);
+	reply = g_dbus_connection_send_message_with_reply_sync (connection, message, 300 * 1000, NULL, NULL, &error);
+
+	if (error) {
+		g_warning ("%s: %s\n", G_STRFUNC, error->message);
+		g_error_free (error);
+	}
+
+        if (reply) {
+		GVariant *body = g_dbus_message_get_body (reply);
+
+		success = body && g_variant_get_boolean (body);
+
+                g_object_unref (reply);
         }
 
 	/* Free the message */
-	dbus_message_unref (message);
-	dbus_connection_unref (bus);
+	g_object_unref (message);
+	g_object_unref (connection);
 
 	return success;
 }
diff --git a/configure.ac b/configure.ac
index bbfbfb5..788148c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -32,7 +32,7 @@ dnl Automake 1.11 - Silent Build Rules
 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
 
 dnl Required Package Versions
-m4_define([glib_minimum_version], [2.16.1])
+m4_define([glib_minimum_version], [2.25.11])
 m4_define([gconf_minimum_version], [2.0.0])		dnl XXX Just a Guess
 m4_define([libxml_minimum_version], [2.0.0])		dnl XXX Just a Guess
 m4_define([libsoup_minimum_version], [2.3.0])
@@ -40,7 +40,6 @@ m4_define([libgdata_minimum_version], [0.6.3])
 m4_define([gnome_keyring_minimum_version], [2.20.1])
 m4_define([sqlite_minimum_version], [3.5])
 m4_define([libical_minimum_version], [0.43])
-m4_define([dbus_glib_minimum_version], [0.6])
 
 dnl **********************************
 dnl Gtk-3 compatibility
@@ -1128,9 +1127,6 @@ else
 	msg_ldap="yes"
 fi
 
-DBUS_GLIB_REQUIRED=dbus_glib_minimum_version
-AC_SUBST(DBUS_GLIB_REQUIRED)
-
 dnl ******************************
 dnl GObject marshalling
 dnl ******************************
@@ -1146,18 +1142,6 @@ dnl ******************************
 
 AC_DEFINE(ENABLE_THREADS,1,[Required])
 
-dnl ******************************
-dnl DBus stuff
-dnl ******************************
-PKG_CHECK_MODULES(DBUS_GLIB, dbus-glib-1 >= dbus_glib_minimum_version)
-AC_SUBST(DBUS_GLIB_CFLAGS)
-AC_SUBST(DBUS_GLIB_LIBS)
-
-AC_PATH_PROG(DBUS_BINDING_TOOL, dbus-binding-tool, [no])
-if test "x$DBUS_BINDING_TOOL" = "xno"; then
-  AC_MSG_ERROR([You need dbus-binding-tools to build evolution-data-server])
-fi
-
 dnl ***********************
 dnl Gnome keyring support
 dnl ***********************
@@ -1216,7 +1200,7 @@ AC_SUBST(E_BACKEND_LIBS)
 dnl ******************************
 dnl evolution-addressbook flags
 dnl ******************************
-EVOLUTION_ADDRESSBOOK_DEPS="libxml-2.0 dbus-glib-1 gobject-2.0 gthread-2.0 gconf-2.0"
+EVOLUTION_ADDRESSBOOK_DEPS="libxml-2.0 gobject-2.0 gthread-2.0 gconf-2.0"
 
 EVO_SET_COMPILE_FLAGS(EVOLUTION_ADDRESSBOOK, $EVOLUTION_ADDRESSBOOK_DEPS)
 AC_SUBST(EVOLUTION_ADDRESSBOOK_CFLAGS)
@@ -1226,7 +1210,7 @@ dnl ******************************
 dnl evolution-calendar flags
 dnl ******************************
 if test "x${enable_calendar}" = "xyes"; then
-	EVOLUTION_CALENDAR_DEPS="libical >= libical_minimum_version libxml-2.0 dbus-glib-1 gio-2.0 gobject-2.0 gthread-2.0 gconf-2.0"
+	EVOLUTION_CALENDAR_DEPS="libical >= libical_minimum_version libxml-2.0 gio-2.0 gobject-2.0 gthread-2.0 gconf-2.0"
 
 dnl *****
 dnl libical.pc from libical-0.43 has a bug in it's CFlags.
@@ -1421,6 +1405,7 @@ addressbook/libebook/Makefile
 addressbook/libebook/libebook.pc
 addressbook/libedata-book/Makefile
 addressbook/libedata-book/libedata-book.pc
+addressbook/libegdbus/Makefile
 addressbook/backends/Makefile
 addressbook/backends/file/Makefile
 addressbook/backends/vcf/Makefile
@@ -1437,6 +1422,7 @@ calendar/libecal/Makefile
 calendar/libecal/libecal.pc
 calendar/libedata-cal/Makefile
 calendar/libedata-cal/libedata-cal.pc
+calendar/libegdbus/Makefile
 calendar/backends/Makefile
 calendar/backends/caldav/Makefile
 calendar/backends/file/Makefile



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]