[evolution-data-server/gnome-3-28] Address some of the compiler and static analyzers warnings



commit d3900f99b9479ece5c12459c9bd163793726911c
Author: Milan Crha <mcrha redhat com>
Date:   Thu May 17 15:45:03 2018 +0200

    Address some of the compiler and static analyzers warnings

 iconv-detect.c                                     |    8 +-
 .../backends/file/e-book-backend-file.c            |    7 +-
 .../libebook-contacts/e-address-western.c          |    2 +
 src/addressbook/libebook-contacts/e-name-western.c |    2 +-
 src/addressbook/libebook/e-book-client.c           |    5 +-
 src/addressbook/libebook/e-destination.c           |    6 +-
 src/addressbook/libedata-book/e-book-backend.c     |  115 +++++++---
 src/addressbook/libedata-book/e-book-cache.c       |    9 +-
 src/addressbook/libedata-book/e-book-sqlite.c      |    8 +
 src/addressbook/libedata-book/e-data-book-cursor.c |   72 +++---
 src/calendar/libecal/e-cal-recur.c                 |    7 +
 src/calendar/libedata-cal/e-cal-backend-store.c    |   16 ++
 src/calendar/libedata-cal/e-cal-backend-sync.c     |   28 +++
 src/calendar/libedata-cal/e-cal-backend.c          |   41 +++-
 src/calendar/libedata-cal/e-cal-cache.c            |    8 +-
 src/camel/camel-address.c                          |    7 +
 src/camel/camel-certdb.c                           |    4 +-
 src/camel/camel-cipher-context.c                   |    9 +-
 src/camel/camel-data-wrapper.c                     |   13 +-
 src/camel/camel-folder-summary.c                   |  249 ++++++++++++--------
 src/camel/camel-folder.c                           |   42 ++++-
 src/camel/camel-index.c                            |   14 +
 src/camel/camel-medium.c                           |    8 +
 src/camel/camel-mime-filter.c                      |    3 +
 src/camel/camel-mime-message.c                     |    4 +-
 src/camel/camel-mime-parser.c                      |   25 ++-
 src/camel/camel-mime-part.c                        |   17 +-
 src/camel/camel-multipart.c                        |    6 +
 src/camel/camel-object.c                           |    2 +
 src/camel/camel-offline-folder.c                   |    1 +
 src/camel/camel-provider.c                         |   12 +-
 src/camel/camel-sasl.c                             |   10 +-
 src/camel/camel-service.c                          |    8 +-
 src/camel/camel-session.c                          |   22 +-
 src/camel/camel-settings.c                         |    6 +
 src/camel/camel-sexp.c                             |   36 ++-
 src/camel/camel-store-summary.c                    |    7 +
 src/camel/camel-store.c                            |   34 +++-
 src/camel/camel-stream.c                           |    5 +
 src/camel/camel-vee-folder.c                       |   42 +++-
 src/camel/camel-vee-store.c                        |   18 +-
 src/camel/providers/imapx/camel-imapx-search.c     |    7 -
 src/camel/providers/imapx/camel-imapx-server.c     |   98 ++++++--
 src/camel/providers/local/camel-local-private.c    |   17 +-
 src/camel/providers/local/camel-local-store.c      |    2 +
 src/camel/providers/local/camel-maildir-folder.c   |    8 +-
 src/camel/providers/local/camel-maildir-store.c    |    1 +
 src/camel/providers/local/camel-mbox-summary.c     |    6 +-
 src/camel/providers/pop3/camel-pop3-folder.c       |    4 +-
 src/camel/providers/pop3/camel-pop3-store.c        |    4 +-
 src/camel/tests/lib/messages.c                     |    4 +-
 src/libebackend/e-backend-factory.c                |    4 +
 src/libebackend/e-backend.c                        |    3 +
 src/libebackend/e-cache.c                          |    2 +-
 src/libebackend/e-collection-backend-factory.c     |    6 +-
 src/libebackend/e-collection-backend.c             |    9 +
 src/libebackend/e-data-factory.c                   |   22 ++-
 src/libebackend/e-dbus-server.c                    |    8 +-
 src/libebackend/e-subprocess-factory.c             |   14 +-
 src/libebackend/e-user-prompter-server-extension.c |    5 +-
 src/libebackend/e-user-prompter-server-extension.h |    2 +-
 src/libebackend/e-user-prompter-server.c           |    1 +
 src/libebackend/e-user-prompter-server.h           |    2 +-
 src/libebackend/e-user-prompter.h                  |    1 -
 src/libedataserver/e-collator.c                    |    1 +
 src/libedataserver/e-extension.c                   |    2 +
 src/libedataserver/e-proxy.c                       |    7 +-
 src/libedataserver/e-sexp.c                        |   27 ++-
 .../e-source-credentials-provider-impl.c           |    6 +
 src/libedataserver/e-source-credentials-provider.c |    1 +
 src/libedataserver/e-source.c                      |   24 ++-
 src/libedataserver/e-webdav-session.c              |    8 +-
 src/libedataserverui/e-credentials-prompter-impl.c |    3 +
 src/libedataserverui/e-credentials-prompter.c      |   10 +-
 .../client/test-book-client-photo-is-uri.c         |   30 ++-
 tests/libedata-book/test-book-meta-backend.c       |   98 ++++++---
 tests/libedata-cal/test-cal-meta-backend.c         |  250 ++++++++++++--------
 77 files changed, 1162 insertions(+), 473 deletions(-)
---
diff --git a/iconv-detect.c b/iconv-detect.c
index e44ad94..8cb4673 100644
--- a/iconv-detect.c
+++ b/iconv-detect.c
@@ -50,8 +50,8 @@ enum {
 
 
 typedef struct {
-       char *charset;
-       char *format;
+       const char *charset;
+       const char *format;
        int id;
 } CharInfo;
 
@@ -90,8 +90,8 @@ static int num_iso10646_tests = sizeof (iso10646_tests) / sizeof (CharInfo);
 static int
 test_iconv (void)
 {
-       char *jp = "\x1B\x24\x42\x46\x7C\x4B\x5C\x38\x6C";
-       char *utf8 = "\xE6\x97\xA5\xE6\x9C\xAC\xE8\xAA\x9E";
+       char *jp = (char *) "\x1B\x24\x42\x46\x7C\x4B\x5C\x38\x6C";
+       const char *utf8 = "\xE6\x97\xA5\xE6\x9C\xAC\xE8\xAA\x9E";
        char *transbuf = malloc (10), *trans = transbuf;
        iconv_t cd;
        size_t jp_len = strlen (jp), utf8_len = 10;
diff --git a/src/addressbook/backends/file/e-book-backend-file.c 
b/src/addressbook/backends/file/e-book-backend-file.c
index a25e5c1..18efecb 100644
--- a/src/addressbook/backends/file/e-book-backend-file.c
+++ b/src/addressbook/backends/file/e-book-backend-file.c
@@ -953,9 +953,9 @@ uid_rev_fields (GHashTable *fields_of_interest)
 }
 
 static gpointer
-book_view_thread (gpointer data)
+book_view_thread (gpointer user_data)
 {
-       EDataBookView *book_view;
+       EDataBookView *book_view = user_data;
        FileBackendSearchClosure *closure;
        EBookBackendFile *bf;
        EBookBackendSExp *sexp;
@@ -965,9 +965,8 @@ book_view_thread (gpointer data)
        GError *local_error = NULL;
        gboolean meta_contact, success;
 
-       g_return_val_if_fail (E_IS_DATA_BOOK_VIEW (data), NULL);
+       g_return_val_if_fail (E_IS_DATA_BOOK_VIEW (book_view), NULL);
 
-       book_view = data;
        closure = get_closure (book_view);
        if (!closure) {
                g_warning (G_STRLOC ": NULL closure in book view thread");
diff --git a/src/addressbook/libebook-contacts/e-address-western.c 
b/src/addressbook/libebook-contacts/e-address-western.c
index 0618fcb..3dc5d72 100644
--- a/src/addressbook/libebook-contacts/e-address-western.c
+++ b/src/addressbook/libebook-contacts/e-address-western.c
@@ -357,6 +357,8 @@ e_address_western_parse (const gchar *in_address)
                lineindex++;
        }
 
+       lines[linecntr] = NULL;
+
        /* Convert the newlines at the end of each line (except the last,
         because it is already NULL terminated) to NULLs. */
        for (cntr = 0; cntr < (linecntr - 1); cntr++) {
diff --git a/src/addressbook/libebook-contacts/e-name-western.c 
b/src/addressbook/libebook-contacts/e-name-western.c
index 7c91d59..bf6decc 100644
--- a/src/addressbook/libebook-contacts/e-name-western.c
+++ b/src/addressbook/libebook-contacts/e-name-western.c
@@ -406,7 +406,7 @@ e_name_western_extract_nickname (ENameWestern *name,
        if (idxs->first_idx == -1)
                return;
 
-       if (idxs->middle_idx > idxs->first_idx)
+       if (idxs->middle_idx > idxs->first_idx && name->middle)
                nick = name->full + idxs->middle_idx + strlen (name->middle);
        else
                nick = name->full + idxs->first_idx + strlen (name->first);
diff --git a/src/addressbook/libebook/e-book-client.c b/src/addressbook/libebook/e-book-client.c
index 4ac3429..2c0557c 100644
--- a/src/addressbook/libebook/e-book-client.c
+++ b/src/addressbook/libebook/e-book-client.c
@@ -1997,8 +1997,9 @@ e_book_client_get_self (ESourceRegistry *registry,
                /* Don't care about errors because
                 * we'll create a new card on failure. */
                /* coverity[unchecked_value] */
-               e_book_client_get_contact_sync (
-                       book_client, uid, &contact, NULL, NULL);
+               if (!e_book_client_get_contact_sync (book_client, uid, &contact, NULL, NULL))
+                       contact = NULL;
+
                g_free (uid);
 
                if (contact != NULL) {
diff --git a/src/addressbook/libebook/e-destination.c b/src/addressbook/libebook/e-destination.c
index bbe4aef..9381599 100644
--- a/src/addressbook/libebook/e-destination.c
+++ b/src/addressbook/libebook/e-destination.c
@@ -467,7 +467,7 @@ e_destination_set_contact (EDestination *dest,
                                }
                                if (type != NONE && parent_dest) {
                                        gchar *id = NULL;
-                                       gint email_num = 0;
+                                       gint set_email_num = 0;
                                        EDestination *s_dest;
 
                                        s_dest = e_destination_new ();
@@ -482,7 +482,7 @@ e_destination_set_contact (EDestination *dest,
                                                        id = value ? g_strdup (value->data) : NULL;
                                                } else if (g_ascii_strcasecmp (param_name, 
EVC_X_DEST_EMAIL_NUM) == 0) {
                                                        value = e_vcard_attribute_param_get_values 
(param->data);
-                                                       email_num = value ? atoi (value->data) : -1;
+                                                       set_email_num = value ? atoi (value->data) : -1;
                                                } else if (!g_ascii_strcasecmp (param_name, 
EVC_X_DEST_HTML_MAIL)) {
                                                        value = e_vcard_attribute_param_get_values 
(param->data);
                                                        e_destination_set_html_mail_pref (s_dest, value ? 
!g_ascii_strcasecmp (value->data, "true") : FALSE);
@@ -519,7 +519,7 @@ e_destination_set_contact (EDestination *dest,
                                        }
 
                                        if (id) {
-                                               e_destination_set_contact_uid (s_dest, id, email_num);
+                                               e_destination_set_contact_uid (s_dest, id, set_email_num);
                                                g_free (id);
                                        }
 
diff --git a/src/addressbook/libedata-book/e-book-backend.c b/src/addressbook/libedata-book/e-book-backend.c
index 5ab1e91..44143ba 100644
--- a/src/addressbook/libedata-book/e-book-backend.c
+++ b/src/addressbook/libedata-book/e-book-backend.c
@@ -560,6 +560,7 @@ static void
 book_backend_constructed (GObject *object)
 {
        EBookBackend *backend;
+       EBookBackendClass *class;
        ESourceRegistry *registry;
        ESource *source;
        gint max_threads = -1;
@@ -569,13 +570,16 @@ book_backend_constructed (GObject *object)
        G_OBJECT_CLASS (e_book_backend_parent_class)->constructed (object);
 
        backend = E_BOOK_BACKEND (object);
+       class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
+
        registry = e_book_backend_get_registry (backend);
        source = e_backend_get_source (E_BACKEND (backend));
 
        /* If the backend specifies a serial dispatch queue, create
         * a thread pool with one exclusive thread.  The thread pool
         * will serialize operations for us. */
-       if (E_BOOK_BACKEND_GET_CLASS (backend)->use_serial_dispatch_queue) {
+       if (class->use_serial_dispatch_queue) {
                max_threads = 1;
                exclusive = TRUE;
        }
@@ -676,6 +680,7 @@ book_backend_get_contact_list_uids_sync (EBookBackend *backend,
        gboolean success;
 
        class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->get_contact_list_sync != NULL, FALSE);
 
        success = class->get_contact_list_sync (
@@ -1135,6 +1140,7 @@ book_backend_open_thread (GSimpleAsyncResult *simple,
        backend = E_BOOK_BACKEND (source_object);
 
        class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->open_sync != NULL);
 
        if (!e_book_backend_is_opened (backend)) {
@@ -1167,6 +1173,7 @@ book_backend_open_thread_old_style (GSimpleAsyncResult *simple,
        backend = E_BOOK_BACKEND (source_object);
 
        class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->open != NULL);
 
        data_book = e_book_backend_ref_data_book (backend);
@@ -1217,6 +1224,7 @@ e_book_backend_open (EBookBackend *backend,
        g_return_if_fail (E_IS_BOOK_BACKEND (backend));
 
        class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
 
        simple = g_simple_async_result_new (
                G_OBJECT (backend), callback,
@@ -1343,6 +1351,7 @@ book_backend_refresh_thread (GSimpleAsyncResult *simple,
        backend = E_BOOK_BACKEND (source_object);
 
        class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->refresh_sync != NULL);
 
        if (!e_book_backend_is_opened (backend)) {
@@ -1380,6 +1389,7 @@ book_backend_refresh_thread_old_style (GSimpleAsyncResult *simple,
        backend = E_BOOK_BACKEND (source_object);
 
        class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->refresh != NULL);
 
        data_book = e_book_backend_ref_data_book (backend);
@@ -1433,6 +1443,7 @@ e_book_backend_refresh (EBookBackend *backend,
        g_return_if_fail (E_IS_BOOK_BACKEND (backend));
 
        class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
 
        simple = g_simple_async_result_new (
                G_OBJECT (backend), callback,
@@ -1565,6 +1576,7 @@ book_backend_create_contacts_thread (GSimpleAsyncResult *simple,
        backend = E_BOOK_BACKEND (source_object);
 
        class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->create_contacts_sync != NULL);
 
        async_context = g_simple_async_result_get_op_res_gpointer (simple);
@@ -1609,6 +1621,7 @@ book_backend_create_contacts_thread_old_style (GSimpleAsyncResult *simple,
        backend = E_BOOK_BACKEND (source_object);
 
        class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->create_contacts != NULL);
 
        data_book = e_book_backend_ref_data_book (backend);
@@ -1680,6 +1693,7 @@ e_book_backend_create_contacts (EBookBackend *backend,
        g_return_if_fail (vcards != NULL);
 
        class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
 
        async_context = g_slice_new0 (AsyncContext);
        async_context->strv = g_strdupv ((gchar **) vcards);
@@ -1829,6 +1843,7 @@ book_backend_modify_contacts_thread (GSimpleAsyncResult *simple,
        backend = E_BOOK_BACKEND (source_object);
 
        class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->modify_contacts_sync != NULL);
 
        async_context = g_simple_async_result_get_op_res_gpointer (simple);
@@ -1873,6 +1888,7 @@ book_backend_modify_contacts_thread_old_style (GSimpleAsyncResult *simple,
        backend = E_BOOK_BACKEND (source_object);
 
        class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->modify_contacts != NULL);
 
        data_book = e_book_backend_ref_data_book (backend);
@@ -1944,6 +1960,7 @@ e_book_backend_modify_contacts (EBookBackend *backend,
        g_return_if_fail (vcards != NULL);
 
        class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
 
        async_context = g_slice_new0 (AsyncContext);
        async_context->strv = g_strdupv ((gchar **) vcards);
@@ -2087,6 +2104,7 @@ book_backend_remove_contacts_thread (GSimpleAsyncResult *simple,
        backend = E_BOOK_BACKEND (source_object);
 
        class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->remove_contacts_sync != NULL);
 
        async_context = g_simple_async_result_get_op_res_gpointer (simple);
@@ -2130,6 +2148,7 @@ book_backend_remove_contacts_thread_old_style (GSimpleAsyncResult *simple,
        backend = E_BOOK_BACKEND (source_object);
 
        class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->remove_contacts != NULL);
 
        data_book = e_book_backend_ref_data_book (backend);
@@ -2201,6 +2220,7 @@ e_book_backend_remove_contacts (EBookBackend *backend,
        g_return_if_fail (uids != NULL);
 
        class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
 
        async_context = g_slice_new0 (AsyncContext);
        async_context->strv = g_strdupv ((gchar **) uids);
@@ -2345,6 +2365,7 @@ book_backend_get_contact_thread (GSimpleAsyncResult *simple,
        backend = E_BOOK_BACKEND (source_object);
 
        class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->get_contact_sync != NULL);
 
        async_context = g_simple_async_result_get_op_res_gpointer (simple);
@@ -2388,6 +2409,7 @@ book_backend_get_contact_thread_old_style (GSimpleAsyncResult *simple,
        backend = E_BOOK_BACKEND (source_object);
 
        class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->get_contact != NULL);
 
        data_book = e_book_backend_ref_data_book (backend);
@@ -2451,6 +2473,7 @@ e_book_backend_get_contact (EBookBackend *backend,
        g_return_if_fail (uid != NULL);
 
        class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
 
        async_context = g_slice_new0 (AsyncContext);
        async_context->uid = g_strdup (uid);
@@ -2606,6 +2629,7 @@ book_backend_get_contact_list_thread (GSimpleAsyncResult *simple,
        backend = E_BOOK_BACKEND (source_object);
 
        class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->get_contact_list_sync != NULL);
 
        async_context = g_simple_async_result_get_op_res_gpointer (simple);
@@ -2650,6 +2674,7 @@ book_backend_get_contact_list_thread_old_style (GSimpleAsyncResult *simple,
        backend = E_BOOK_BACKEND (source_object);
 
        class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->get_contact_list != NULL);
 
        data_book = e_book_backend_ref_data_book (backend);
@@ -2714,6 +2739,7 @@ e_book_backend_get_contact_list (EBookBackend *backend,
        g_return_if_fail (query != NULL);
 
        class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
 
        async_context = g_slice_new0 (AsyncContext);
        async_context->query = g_strdup (query);
@@ -2865,6 +2891,7 @@ book_backend_get_contact_list_uids_thread (GSimpleAsyncResult *simple,
        backend = E_BOOK_BACKEND (source_object);
 
        class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->get_contact_list_uids_sync != NULL);
 
        async_context = g_simple_async_result_get_op_res_gpointer (simple);
@@ -2909,6 +2936,7 @@ book_backend_get_contact_list_uids_thread_old_style (GSimpleAsyncResult *simple,
        backend = E_BOOK_BACKEND (source_object);
 
        class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->get_contact_list_uids != NULL);
 
        data_book = e_book_backend_ref_data_book (backend);
@@ -2973,6 +3001,7 @@ e_book_backend_get_contact_list_uids (EBookBackend *backend,
        g_return_if_fail (query != NULL);
 
        class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
 
        async_context = g_slice_new0 (AsyncContext);
        async_context->query = g_strdup (query);
@@ -3077,6 +3106,7 @@ e_book_backend_start_view (EBookBackend *backend,
        g_return_if_fail (E_IS_DATA_BOOK_VIEW (view));
 
        class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->start_view);
 
        class->start_view (backend, view);
@@ -3099,6 +3129,7 @@ e_book_backend_stop_view (EBookBackend *backend,
        g_return_if_fail (E_IS_DATA_BOOK_VIEW (view));
 
        class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->stop_view != NULL);
 
        class->stop_view (backend, view);
@@ -3221,6 +3252,7 @@ e_book_backend_get_backend_property (EBookBackend *backend,
        g_return_val_if_fail (prop_name != NULL, NULL);
 
        class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_backend_property != NULL, NULL);
 
        return class->get_backend_property (backend, prop_name);
@@ -3286,6 +3318,7 @@ e_book_backend_get_direct_book (EBookBackend *backend)
        g_return_val_if_fail (E_IS_BOOK_BACKEND (backend), NULL);
 
        class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_val_if_fail (class != NULL, NULL);
 
        if (class->get_direct_book != NULL)
                direct_book = class->get_direct_book (backend);
@@ -3313,10 +3346,15 @@ void
 e_book_backend_configure_direct (EBookBackend *backend,
                                  const gchar *config)
 {
+       EBookBackendClass *class;
+
        g_return_if_fail (E_IS_BOOK_BACKEND (backend));
 
-       if (E_BOOK_BACKEND_GET_CLASS (backend)->configure_direct)
-               E_BOOK_BACKEND_GET_CLASS (backend)->configure_direct (backend, config);
+       class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
+
+       if (class->configure_direct)
+               class->configure_direct (backend, config);
 }
 
 /**
@@ -3332,14 +3370,20 @@ e_book_backend_configure_direct (EBookBackend *backend,
 void
 e_book_backend_sync (EBookBackend *backend)
 {
+       EBookBackendClass *class;
+
        g_return_if_fail (E_IS_BOOK_BACKEND (backend));
 
-       g_object_ref (backend);
+       class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
 
-       if (E_BOOK_BACKEND_GET_CLASS (backend)->sync)
-               (* E_BOOK_BACKEND_GET_CLASS (backend)->sync) (backend);
+       if (class->sync) {
+               g_object_ref (backend);
 
-       g_object_unref (backend);
+               class->sync (backend);
+
+               g_object_unref (backend);
+       }
 }
 
 /**
@@ -3363,21 +3407,25 @@ e_book_backend_set_locale (EBookBackend *backend,
                            GCancellable *cancellable,
                            GError **error)
 {
+       EBookBackendClass *class;
        /* If the backend does not support locales, just happily return */
        gboolean success = TRUE;
 
        g_return_val_if_fail (E_IS_BOOK_BACKEND (backend), FALSE);
 
-       g_object_ref (backend);
+       class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_val_if_fail (class != NULL, FALSE);
+
+       if (class->set_locale) {
+               g_object_ref (backend);
+
+               success = class->set_locale (backend, locale, cancellable, error);
 
-       if (E_BOOK_BACKEND_GET_CLASS (backend)->set_locale) {
-               success = (* E_BOOK_BACKEND_GET_CLASS (backend)->set_locale) (backend, locale,
-                                                                             cancellable, error);
                if (success)
                        e_book_backend_notify_complete (backend);
 
+               g_object_unref (backend);
        }
-       g_object_unref (backend);
 
        return success;
 }
@@ -3396,16 +3444,21 @@ e_book_backend_set_locale (EBookBackend *backend,
 gchar *
 e_book_backend_dup_locale (EBookBackend *backend)
 {
+       EBookBackendClass *class;
        gchar *locale = NULL;
 
        g_return_val_if_fail (E_IS_BOOK_BACKEND (backend), NULL);
 
-       g_object_ref (backend);
+       class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_val_if_fail (class != NULL, NULL);
 
-       if (E_BOOK_BACKEND_GET_CLASS (backend)->dup_locale)
-               locale = (* E_BOOK_BACKEND_GET_CLASS (backend)->dup_locale) (backend);
+       if (class->dup_locale) {
+               g_object_ref (backend);
 
-       g_object_unref (backend);
+               locale = class->dup_locale (backend);
+
+               g_object_unref (backend);
+       }
 
        return locale;
 }
@@ -3432,6 +3485,7 @@ e_book_backend_notify_update (EBookBackend *backend,
        g_return_if_fail (E_IS_CONTACT (contact));
 
        class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->notify_update != NULL);
 
        class->notify_update (backend, contact);
@@ -3628,26 +3682,27 @@ e_book_backend_create_cursor (EBookBackend *backend,
                               guint n_fields,
                               GError **error)
 {
+       EBookBackendClass *class;
        EDataBookCursor *cursor = NULL;
 
        g_return_val_if_fail (E_IS_BOOK_BACKEND (backend), NULL);
 
-       g_object_ref (backend);
+       class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_val_if_fail (class != NULL, NULL);
 
-       if (E_BOOK_BACKEND_GET_CLASS (backend)->create_cursor)
-               cursor = (* E_BOOK_BACKEND_GET_CLASS (backend)->create_cursor) (backend,
-                                                                               sort_fields,
-                                                                               sort_types,
-                                                                               n_fields,
-                                                                               error);
-       else
+       if (class->create_cursor) {
+               g_object_ref (backend);
+
+               cursor = class->create_cursor (backend, sort_fields, sort_types, n_fields, error);
+
+               g_object_unref (backend);
+       } else {
                g_set_error (
                        error,
                        E_CLIENT_ERROR,
                        E_CLIENT_ERROR_NOT_SUPPORTED,
                        "Addressbook backend does not support cursors");
-
-       g_object_unref (backend);
+       }
 
        return cursor;
 }
@@ -3671,14 +3726,18 @@ e_book_backend_delete_cursor (EBookBackend *backend,
                               EDataBookCursor *cursor,
                               GError **error)
 {
+       EBookBackendClass *class;
        gboolean success = FALSE;
 
        g_return_val_if_fail (E_IS_BOOK_BACKEND (backend), FALSE);
 
+       class = E_BOOK_BACKEND_GET_CLASS (backend);
+       g_return_val_if_fail (class != NULL, FALSE);
+
        g_object_ref (backend);
 
-       if (E_BOOK_BACKEND_GET_CLASS (backend)->delete_cursor)
-               success = (* E_BOOK_BACKEND_GET_CLASS (backend)->delete_cursor) (backend, cursor, error);
+       if (class->delete_cursor)
+               success = class->delete_cursor (backend, cursor, error);
        else
                g_warning ("Backend asked to delete a cursor, but does not support cursors");
 
diff --git a/src/addressbook/libedata-book/e-book-cache.c b/src/addressbook/libedata-book/e-book-cache.c
index 6899cd7..fbf931a 100644
--- a/src/addressbook/libedata-book/e-book-cache.c
+++ b/src/addressbook/libedata-book/e-book-cache.c
@@ -2367,9 +2367,13 @@ query_preflight_check (PreflightContext *context,
                        gint aux_index = summary_field_get_index (book_cache, test->field_id);
 
                        /* It's really improbable that we ever get 64 fields in the summary
-                        * In any case we warn about this in e_book_sqlite_new_full().
+                        * In any case we warn about this.
                         */
                        g_warn_if_fail (aux_index >= 0 && aux_index < EBC_MAX_SUMMARY_FIELDS);
+
+                       /* Just to mute a compiler warning when aux_index == -1 */
+                       aux_index = ABS (aux_index);
+
                        context->aux_mask |= (1 << aux_index);
 
                        /* If this condition is a *requirement* for the overall query to
@@ -3184,6 +3188,9 @@ ebc_generate_autocomplete_query (EBookCache *book_cache,
 
                aux_index = summary_field_get_index (book_cache, test->field_id);
                g_warn_if_fail (aux_index >= 0 && aux_index < EBC_MAX_SUMMARY_FIELDS);
+
+               /* Just to mute a compiler warning when aux_index == -1 */
+               aux_index = ABS (aux_index);
                context->aux_mask = (1 << aux_index);
                context->left_join_mask = 0;
 
diff --git a/src/addressbook/libedata-book/e-book-sqlite.c b/src/addressbook/libedata-book/e-book-sqlite.c
index f4f2fdc..169b002 100644
--- a/src/addressbook/libedata-book/e-book-sqlite.c
+++ b/src/addressbook/libedata-book/e-book-sqlite.c
@@ -4914,6 +4914,10 @@ query_preflight_check (PreflightContext *context,
                         * In any case we warn about this in e_book_sqlite_new_full().
                         */
                        g_warn_if_fail (aux_index >= 0 && aux_index < EBSQL_MAX_SUMMARY_FIELDS);
+
+                       /* Just to mute a compiler warning when aux_index == -1 */
+                       aux_index = ABS (aux_index);
+
                        context->aux_mask |= (1 << aux_index);
                        EBSQL_NOTE (
                                PREFLIGHT,
@@ -5670,6 +5674,10 @@ ebsql_generate_autocomplete_query (EBookSqlite *ebsql,
 
                aux_index = summary_field_get_index (ebsql, test->field_id);
                g_warn_if_fail (aux_index >= 0 && aux_index < EBSQL_MAX_SUMMARY_FIELDS);
+
+               /* Just to mute a compiler warning when aux_index == -1 */
+               aux_index = ABS (aux_index);
+
                context->aux_mask = (1 << aux_index);
                context->left_join_mask = 0;
 
diff --git a/src/addressbook/libedata-book/e-data-book-cursor.c 
b/src/addressbook/libedata-book/e-data-book-cursor.c
index b1c367a..2166400 100644
--- a/src/addressbook/libedata-book/e-data-book-cursor.c
+++ b/src/addressbook/libedata-book/e-data-book-cursor.c
@@ -472,9 +472,13 @@ data_book_cursor_compare_contact (EDataBookCursor *cursor,
                                   EContact *contact,
                                   gboolean *matches_sexp)
 {
+       EDataBookCursorClass *klass;
        gint result;
 
-       if (!E_DATA_BOOK_CURSOR_GET_CLASS (cursor)->compare_contact) {
+       klass = E_DATA_BOOK_CURSOR_GET_CLASS (cursor);
+       g_return_val_if_fail (klass != NULL, 0);
+
+       if (!klass->compare_contact) {
                g_critical (
                        "EDataBookCursor.compare_contact() unimplemented on type '%s'",
                        G_OBJECT_TYPE_NAME (cursor));
@@ -482,9 +486,7 @@ data_book_cursor_compare_contact (EDataBookCursor *cursor,
        }
 
        g_object_ref (cursor);
-       result = (* E_DATA_BOOK_CURSOR_GET_CLASS (cursor)->compare_contact) (cursor,
-                                                                            contact,
-                                                                            matches_sexp);
+       result = klass->compare_contact (cursor, contact, matches_sexp);
        g_object_unref (cursor);
 
        return result;
@@ -754,18 +756,19 @@ e_data_book_cursor_set_sexp (EDataBookCursor *cursor,
                              GCancellable *cancellable,
                              GError **error)
 {
+       EDataBookCursorClass *klass;
        GError *local_error = NULL;
        gboolean success = FALSE;
 
        g_return_val_if_fail (E_IS_DATA_BOOK_CURSOR (cursor), FALSE);
 
-       g_object_ref (cursor);
+       klass = E_DATA_BOOK_CURSOR_GET_CLASS (cursor);
+       g_return_val_if_fail (klass != NULL, FALSE);
 
-       if (E_DATA_BOOK_CURSOR_GET_CLASS (cursor)->set_sexp) {
-               success = (* E_DATA_BOOK_CURSOR_GET_CLASS (cursor)->set_sexp) (cursor,
-                                                                              sexp,
-                                                                              error);
+       g_object_ref (cursor);
 
+       if (klass->set_sexp) {
+               success = klass->set_sexp (cursor, sexp, error);
        } else {
                g_set_error_literal (
                        error,
@@ -843,34 +846,30 @@ e_data_book_cursor_step (EDataBookCursor *cursor,
                          GCancellable *cancellable,
                          GError **error)
 {
+       EDataBookCursorClass *klass;
        gint retval;
 
-       g_return_val_if_fail (E_IS_DATA_BOOK_CURSOR (cursor), FALSE);
+       g_return_val_if_fail (E_IS_DATA_BOOK_CURSOR (cursor), -1);
        g_return_val_if_fail ((flags & E_BOOK_CURSOR_STEP_FETCH) == 0 ||
                              (results != NULL && *results == NULL), -1);
 
-       if (!E_DATA_BOOK_CURSOR_GET_CLASS (cursor)->step) {
+       klass = E_DATA_BOOK_CURSOR_GET_CLASS (cursor);
+       g_return_val_if_fail (klass != NULL, -1);
+
+       if (!klass->step) {
                g_set_error_literal (
                        error,
                        E_CLIENT_ERROR,
                        E_CLIENT_ERROR_NOT_SUPPORTED,
                        _("Cursor does not support step"));
-               return FALSE;
+               return -1;
        }
 
        g_object_ref (cursor);
-       retval = (* E_DATA_BOOK_CURSOR_GET_CLASS (cursor)->step) (cursor,
-                                                                 revision_guard,
-                                                                 flags,
-                                                                 origin,
-                                                                 count,
-                                                                 results,
-                                                                 cancellable,
-                                                                 error);
+       retval = klass->step (cursor, revision_guard, flags, origin, count, results, cancellable, error);
        g_object_unref (cursor);
 
        if (retval >= 0 && (flags & E_BOOK_CURSOR_STEP_MOVE) != 0) {
-
                calculate_step_position (cursor, origin, count, retval);
        }
 
@@ -910,18 +909,19 @@ e_data_book_cursor_set_alphabetic_index (EDataBookCursor *cursor,
                                          GCancellable *cancellable,
                                          GError **error)
 {
+       EDataBookCursorClass *klass;
        GError *local_error = NULL;
        gboolean success;
 
        g_return_val_if_fail (E_IS_DATA_BOOK_CURSOR (cursor), FALSE);
 
+       klass = E_DATA_BOOK_CURSOR_GET_CLASS (cursor);
+       g_return_val_if_fail (klass != NULL, FALSE);
+
        g_object_ref (cursor);
 
-       if (E_DATA_BOOK_CURSOR_GET_CLASS (cursor)->set_alphabetic_index) {
-               success = (* E_DATA_BOOK_CURSOR_GET_CLASS (cursor)->set_alphabetic_index) (cursor,
-                                                                                          index,
-                                                                                          locale,
-                                                                                          error);
+       if (klass->set_alphabetic_index) {
+               success = klass->set_alphabetic_index (cursor, index, locale, error);
 
                /* We already set the new cursor value, we can't fail anymore so just fire a warning */
                if (!e_data_book_cursor_recalculate (cursor, cancellable, &local_error)) {
@@ -966,14 +966,18 @@ e_data_book_cursor_recalculate (EDataBookCursor *cursor,
                                 GCancellable *cancellable,
                                 GError **error)
 {
+       EDataBookCursorClass *klass;
        gint total = 0;
        gint position = 0;
        gboolean success = FALSE;
 
        g_return_val_if_fail (E_IS_DATA_BOOK_CURSOR (cursor), FALSE);
 
+       klass = E_DATA_BOOK_CURSOR_GET_CLASS (cursor);
+       g_return_val_if_fail (klass != NULL, FALSE);
+
        /* Bad programming error */
-       if (!E_DATA_BOOK_CURSOR_GET_CLASS (cursor)->get_position) {
+       if (!klass->get_position) {
                g_critical (
                        "EDataBookCursor.get_position() unimplemented on type '%s'",
                        G_OBJECT_TYPE_NAME (cursor));
@@ -982,11 +986,7 @@ e_data_book_cursor_recalculate (EDataBookCursor *cursor,
        }
 
        g_object_ref (cursor);
-       success = (* E_DATA_BOOK_CURSOR_GET_CLASS (cursor)->get_position) (cursor,
-                                                                           &total,
-                                                                           &position,
-                                                                           cancellable,
-                                                                           error);
+       success = klass->get_position (cursor, &total, &position, cancellable, error);
        g_object_unref (cursor);
 
        if (success)
@@ -1019,15 +1019,19 @@ e_data_book_cursor_load_locale (EDataBookCursor *cursor,
                                 GCancellable *cancellable,
                                 GError **error)
 {
+       EDataBookCursorClass *klass;
        EDataBookCursorPrivate *priv;
        gboolean success;
        gchar *local_locale = NULL;
 
        g_return_val_if_fail (E_IS_DATA_BOOK_CURSOR (cursor), FALSE);
 
+       klass = E_DATA_BOOK_CURSOR_GET_CLASS (cursor);
+       g_return_val_if_fail (klass != NULL, FALSE);
+
        priv = cursor->priv;
 
-       if (!E_DATA_BOOK_CURSOR_GET_CLASS (cursor)->load_locale) {
+       if (!klass->load_locale) {
                g_critical (
                        "EDataBookCursor.load_locale() unimplemented on type '%s'",
                        G_OBJECT_TYPE_NAME (cursor));
@@ -1035,7 +1039,7 @@ e_data_book_cursor_load_locale (EDataBookCursor *cursor,
        }
 
        g_object_ref (cursor);
-       success = (* E_DATA_BOOK_CURSOR_GET_CLASS (cursor)->load_locale) (cursor, &local_locale, error);
+       success = klass->load_locale (cursor, &local_locale, error);
        g_object_unref (cursor);
 
        /* Changed ! Reset the thing */
diff --git a/src/calendar/libecal/e-cal-recur.c b/src/calendar/libecal/e-cal-recur.c
index 35892df..243bffa 100644
--- a/src/calendar/libecal/e-cal-recur.c
+++ b/src/calendar/libecal/e-cal-recur.c
@@ -4321,6 +4321,13 @@ cal_obj_time_compare_func (gconstpointer arg1,
        cotime1 = (CalObjTime *) arg1;
        cotime2 = (CalObjTime *) arg2;
 
+       if (!cotime1 || !cotime2) {
+               if (cotime1 == cotime2)
+                       return 0;
+
+               return cotime2 ? -1 : 1;
+       }
+
        if (cotime1->year < cotime2->year)
                retval = -1;
        else if (cotime1->year > cotime2->year)
diff --git a/src/calendar/libedata-cal/e-cal-backend-store.c b/src/calendar/libedata-cal/e-cal-backend-store.c
index 3f13a18..dd14d0e 100644
--- a/src/calendar/libedata-cal/e-cal-backend-store.c
+++ b/src/calendar/libedata-cal/e-cal-backend-store.c
@@ -1177,6 +1177,7 @@ e_cal_backend_store_load (ECalBackendStore *store)
                return TRUE;
 
        class = E_CAL_BACKEND_STORE_GET_CLASS (store);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->load != NULL, FALSE);
 
        store->priv->loaded = class->load (store);
@@ -1198,6 +1199,7 @@ e_cal_backend_store_clean (ECalBackendStore *store)
        g_return_val_if_fail (E_IS_CAL_BACKEND_STORE (store), FALSE);
 
        class = E_CAL_BACKEND_STORE_GET_CLASS (store);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->clean != NULL, FALSE);
 
        if (store->priv->intervaltree != NULL) {
@@ -1231,6 +1233,7 @@ e_cal_backend_store_get_component (ECalBackendStore *store,
        g_return_val_if_fail (uid != NULL, NULL);
 
        class = E_CAL_BACKEND_STORE_GET_CLASS (store);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_component != NULL, NULL);
 
        return class->get_component (store, uid, rid);
@@ -1257,6 +1260,7 @@ e_cal_backend_store_has_component (ECalBackendStore *store,
        g_return_val_if_fail (uid != NULL, FALSE);
 
        class = E_CAL_BACKEND_STORE_GET_CLASS (store);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->has_component != NULL, FALSE);
 
        return class->has_component (store, uid, rid);
@@ -1285,6 +1289,7 @@ e_cal_backend_store_put_component_with_time_range (ECalBackendStore *store,
        g_return_val_if_fail (E_IS_CAL_COMPONENT (comp), FALSE);
 
        class = E_CAL_BACKEND_STORE_GET_CLASS (store);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->put_component != NULL, FALSE);
 
        if (class->put_component (store, comp)) {
@@ -1317,6 +1322,7 @@ e_cal_backend_store_put_component (ECalBackendStore *store,
        g_return_val_if_fail (E_IS_CAL_COMPONENT (comp), FALSE);
 
        class = E_CAL_BACKEND_STORE_GET_CLASS (store);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->put_component != NULL, FALSE);
 
        return class->put_component (store, comp);
@@ -1343,6 +1349,7 @@ e_cal_backend_store_remove_component (ECalBackendStore *store,
        g_return_val_if_fail (uid != NULL, FALSE);
 
        class = E_CAL_BACKEND_STORE_GET_CLASS (store);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->remove_component != NULL, FALSE);
 
        if (class->remove_component (store, uid, rid)) {
@@ -1371,6 +1378,7 @@ e_cal_backend_store_get_default_timezone (ECalBackendStore *store)
        g_return_val_if_fail (E_IS_CAL_BACKEND_STORE (store), NULL);
 
        class = E_CAL_BACKEND_STORE_GET_CLASS (store);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_default_timezone != NULL, NULL);
 
        return class->get_default_timezone (store);
@@ -1395,6 +1403,7 @@ e_cal_backend_store_set_default_timezone (ECalBackendStore *store,
        g_return_val_if_fail (zone != NULL, FALSE);
 
        class = E_CAL_BACKEND_STORE_GET_CLASS (store);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->set_default_timezone != NULL, FALSE);
 
        return class->set_default_timezone (store, zone);
@@ -1419,6 +1428,7 @@ e_cal_backend_store_get_components_by_uid (ECalBackendStore *store,
        g_return_val_if_fail (uid != NULL, NULL);
 
        class = E_CAL_BACKEND_STORE_GET_CLASS (store);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_components_by_uid != NULL, NULL);
 
        return class->get_components_by_uid (store, uid);
@@ -1492,6 +1502,7 @@ e_cal_backend_store_get_components (ECalBackendStore *store)
        g_return_val_if_fail (E_IS_CAL_BACKEND_STORE (store), NULL);
 
        class = E_CAL_BACKEND_STORE_GET_CLASS (store);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_components != NULL, NULL);
 
        return class->get_components (store);
@@ -1565,6 +1576,7 @@ e_cal_backend_store_get_component_ids (ECalBackendStore *store)
        g_return_val_if_fail (E_IS_CAL_BACKEND_STORE (store), NULL);
 
        class = E_CAL_BACKEND_STORE_GET_CLASS (store);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_component_ids != NULL, NULL);
 
        return class->get_component_ids (store);
@@ -1589,6 +1601,7 @@ e_cal_backend_store_get_key_value (ECalBackendStore *store,
        g_return_val_if_fail (key != NULL, NULL);
 
        class = E_CAL_BACKEND_STORE_GET_CLASS (store);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_key_value != NULL, NULL);
 
        return class->get_key_value (store, key);
@@ -1615,6 +1628,7 @@ e_cal_backend_store_put_key_value (ECalBackendStore *store,
        g_return_val_if_fail (key != NULL, FALSE);
 
        class = E_CAL_BACKEND_STORE_GET_CLASS (store);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->put_key_value != NULL, FALSE);
 
        return class->put_key_value (store, key, value);
@@ -1634,6 +1648,7 @@ e_cal_backend_store_thaw_changes (ECalBackendStore *store)
        g_return_if_fail (E_IS_CAL_BACKEND_STORE (store));
 
        class = E_CAL_BACKEND_STORE_GET_CLASS (store);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->thaw_changes != NULL);
 
        class->thaw_changes (store);
@@ -1653,6 +1668,7 @@ e_cal_backend_store_freeze_changes (ECalBackendStore *store)
        g_return_if_fail (E_IS_CAL_BACKEND_STORE (store));
 
        class = E_CAL_BACKEND_STORE_GET_CLASS (store);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->freeze_changes != NULL);
 
        class->freeze_changes (store);
diff --git a/src/calendar/libedata-cal/e-cal-backend-sync.c b/src/calendar/libedata-cal/e-cal-backend-sync.c
index 9b01bd9..0ca680e 100644
--- a/src/calendar/libedata-cal/e-cal-backend-sync.c
+++ b/src/calendar/libedata-cal/e-cal-backend-sync.c
@@ -63,6 +63,8 @@ e_cal_backend_sync_open (ECalBackendSync *backend,
        g_return_if_fail (E_IS_CAL_BACKEND_SYNC (backend));
 
        class = E_CAL_BACKEND_SYNC_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
+
        if (class->open_sync != NULL) {
                class->open_sync (
                        backend, cal, cancellable, only_if_exists, error);
@@ -97,6 +99,8 @@ e_cal_backend_sync_refresh (ECalBackendSync *backend,
        g_return_if_fail (E_IS_CAL_BACKEND_SYNC (backend));
 
        class = E_CAL_BACKEND_SYNC_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
+
        if (class->refresh_sync != NULL) {
                class->refresh_sync (backend, cal, cancellable, error);
        } else {
@@ -136,6 +140,8 @@ e_cal_backend_sync_get_object (ECalBackendSync *backend,
        g_return_if_fail (calobj != NULL);
 
        class = E_CAL_BACKEND_SYNC_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
+
        if (class->get_object_sync != NULL) {
                class->get_object_sync (
                        backend, cal, cancellable, uid, rid, calobj, error);
@@ -173,6 +179,8 @@ e_cal_backend_sync_get_object_list (ECalBackendSync *backend,
        g_return_if_fail (calobjs != NULL);
 
        class = E_CAL_BACKEND_SYNC_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
+
        if (class->get_object_list_sync != NULL) {
                class->get_object_list_sync (
                        backend, cal, cancellable, sexp, calobjs, error);
@@ -213,6 +221,8 @@ e_cal_backend_sync_get_free_busy (ECalBackendSync *backend,
        g_return_if_fail (E_IS_CAL_BACKEND_SYNC (backend));
 
        class = E_CAL_BACKEND_SYNC_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
+
        if (class->get_free_busy_sync != NULL) {
                class->get_free_busy_sync (
                        backend, cal, cancellable,
@@ -254,6 +264,8 @@ e_cal_backend_sync_create_objects (ECalBackendSync *backend,
        g_return_if_fail (E_IS_CAL_BACKEND_SYNC (backend));
 
        class = E_CAL_BACKEND_SYNC_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
+
        if (class->create_objects_sync != NULL) {
                class->create_objects_sync (
                        backend, cal, cancellable,
@@ -299,6 +311,8 @@ e_cal_backend_sync_modify_objects (ECalBackendSync *backend,
        g_return_if_fail (E_IS_CAL_BACKEND_SYNC (backend));
 
        class = E_CAL_BACKEND_SYNC_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
+
        if (class->modify_objects_sync != NULL) {
                class->modify_objects_sync (
                        backend, cal, cancellable,
@@ -345,6 +359,8 @@ e_cal_backend_sync_remove_objects (ECalBackendSync *backend,
        g_return_if_fail (E_IS_CAL_BACKEND_SYNC (backend));
 
        class = E_CAL_BACKEND_SYNC_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
+
        if (class->remove_objects_sync != NULL) {
                class->remove_objects_sync (
                        backend, cal, cancellable,
@@ -380,6 +396,8 @@ e_cal_backend_sync_receive_objects (ECalBackendSync *backend,
        g_return_if_fail (E_IS_CAL_BACKEND_SYNC (backend));
 
        class = E_CAL_BACKEND_SYNC_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
+
        if (class->receive_objects_sync != NULL) {
                class->receive_objects_sync (
                        backend, cal, cancellable, calobj, error);
@@ -418,6 +436,8 @@ e_cal_backend_sync_send_objects (ECalBackendSync *backend,
        g_return_if_fail (E_IS_CAL_BACKEND_SYNC (backend));
 
        class = E_CAL_BACKEND_SYNC_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
+
        if (class->send_objects_sync != NULL) {
                class->send_objects_sync (
                        backend, cal, cancellable,
@@ -460,6 +480,8 @@ e_cal_backend_sync_get_attachment_uris (ECalBackendSync *backend,
        g_return_if_fail (attachments != NULL);
 
        class = E_CAL_BACKEND_SYNC_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
+
        if (class->get_attachment_uris_sync != NULL) {
                class->get_attachment_uris_sync (
                        backend, cal, cancellable,
@@ -501,6 +523,8 @@ e_cal_backend_sync_discard_alarm (ECalBackendSync *backend,
        g_return_if_fail (auid != NULL);
 
        class = E_CAL_BACKEND_SYNC_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
+
        if (class->discard_alarm_sync != NULL) {
                class->discard_alarm_sync (
                        backend, cal, cancellable,
@@ -544,6 +568,8 @@ e_cal_backend_sync_get_timezone (ECalBackendSync *backend,
        g_return_if_fail (E_IS_CAL_BACKEND_SYNC (backend));
 
        class = E_CAL_BACKEND_SYNC_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
+
        if (class->get_timezone_sync != NULL) {
                class->get_timezone_sync (
                        backend, cal, cancellable,
@@ -596,6 +622,8 @@ e_cal_backend_sync_add_timezone (ECalBackendSync *backend,
        g_return_if_fail (E_IS_CAL_BACKEND_SYNC (backend));
 
        class = E_CAL_BACKEND_SYNC_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
+
        if (class->add_timezone_sync != NULL) {
                class->add_timezone_sync (
                        backend, cal, cancellable, tzobject, error);
diff --git a/src/calendar/libedata-cal/e-cal-backend.c b/src/calendar/libedata-cal/e-cal-backend.c
index 3756665..e5819b6 100644
--- a/src/calendar/libedata-cal/e-cal-backend.c
+++ b/src/calendar/libedata-cal/e-cal-backend.c
@@ -698,6 +698,7 @@ static void
 cal_backend_constructed (GObject *object)
 {
        ECalBackend *backend;
+       ECalBackendClass *klass;
        ESourceRegistry *registry;
        ESource *source;
        gint max_threads = -1;
@@ -707,13 +708,16 @@ cal_backend_constructed (GObject *object)
        G_OBJECT_CLASS (e_cal_backend_parent_class)->constructed (object);
 
        backend = E_CAL_BACKEND (object);
+       klass = E_CAL_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (klass != NULL);
+
        registry = e_cal_backend_get_registry (backend);
        source = e_backend_get_source (E_BACKEND (backend));
 
        /* If the backend specifies a serial dispatch queue, create
         * a thread pool with one exclusive thread.  The thread pool
         * will serialize operations for us. */
-       if (E_CAL_BACKEND_GET_CLASS (backend)->use_serial_dispatch_queue) {
+       if (klass->use_serial_dispatch_queue) {
                max_threads = 1;
                exclusive = TRUE;
        }
@@ -1424,6 +1428,7 @@ e_cal_backend_get_backend_property (ECalBackend *backend,
        g_return_val_if_fail (prop_name != NULL, NULL);
 
        class = E_CAL_BACKEND_GET_CLASS (backend);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_backend_property != NULL, NULL);
 
        return class->get_backend_property (backend, prop_name);
@@ -1588,6 +1593,7 @@ cal_backend_open_thread (GSimpleAsyncResult *simple,
        backend = E_CAL_BACKEND (source_object);
 
        class = E_CAL_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->open != NULL);
 
        data_cal = e_cal_backend_ref_data_cal (backend);
@@ -1747,6 +1753,7 @@ cal_backend_refresh_thread (GSimpleAsyncResult *simple,
        backend = E_CAL_BACKEND (source_object);
 
        class = E_CAL_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
 
        data_cal = e_cal_backend_ref_data_cal (backend);
        g_return_if_fail (data_cal != NULL);
@@ -1920,6 +1927,7 @@ cal_backend_get_object_thread (GSimpleAsyncResult *simple,
        backend = E_CAL_BACKEND (source_object);
 
        class = E_CAL_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->get_object != NULL);
 
        data_cal = e_cal_backend_ref_data_cal (backend);
@@ -2113,6 +2121,7 @@ cal_backend_get_object_list_thread (GSimpleAsyncResult *simple,
        backend = E_CAL_BACKEND (source_object);
 
        class = E_CAL_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->get_object_list != NULL);
 
        data_cal = e_cal_backend_ref_data_cal (backend);
@@ -2308,6 +2317,7 @@ cal_backend_get_free_busy_thread (GSimpleAsyncResult *simple,
        backend = E_CAL_BACKEND (source_object);
 
        class = E_CAL_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->get_free_busy != NULL);
 
        data_cal = e_cal_backend_ref_data_cal (backend);
@@ -2525,6 +2535,7 @@ cal_backend_create_objects_thread (GSimpleAsyncResult *simple,
        backend = E_CAL_BACKEND (source_object);
 
        class = E_CAL_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
 
        data_cal = e_cal_backend_ref_data_cal (backend);
        g_return_if_fail (data_cal != NULL);
@@ -2746,6 +2757,7 @@ cal_backend_modify_objects_thread (GSimpleAsyncResult *simple,
        backend = E_CAL_BACKEND (source_object);
 
        class = E_CAL_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
 
        data_cal = e_cal_backend_ref_data_cal (backend);
        g_return_if_fail (data_cal != NULL);
@@ -2978,6 +2990,7 @@ cal_backend_remove_objects_thread (GSimpleAsyncResult *simple,
        backend = E_CAL_BACKEND (source_object);
 
        class = E_CAL_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->remove_objects != NULL);
 
        data_cal = e_cal_backend_ref_data_cal (backend);
@@ -3216,6 +3229,7 @@ cal_backend_receive_objects_thread (GSimpleAsyncResult *simple,
        backend = E_CAL_BACKEND (source_object);
 
        class = E_CAL_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->receive_objects != NULL);
 
        data_cal = e_cal_backend_ref_data_cal (backend);
@@ -3395,6 +3409,7 @@ cal_backend_send_objects_thread (GSimpleAsyncResult *simple,
        backend = E_CAL_BACKEND (source_object);
 
        class = E_CAL_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->send_objects != NULL);
 
        data_cal = e_cal_backend_ref_data_cal (backend);
@@ -3592,6 +3607,7 @@ cal_backend_get_attachment_uris_thread (GSimpleAsyncResult *simple,
        backend = E_CAL_BACKEND (source_object);
 
        class = E_CAL_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->get_attachment_uris != NULL);
 
        data_cal = e_cal_backend_ref_data_cal (backend);
@@ -3788,6 +3804,7 @@ cal_backend_discard_alarm_thread (GSimpleAsyncResult *simple,
        backend = E_CAL_BACKEND (source_object);
 
        class = E_CAL_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
 
        data_cal = e_cal_backend_ref_data_cal (backend);
        g_return_if_fail (data_cal != NULL);
@@ -3977,6 +3994,7 @@ cal_backend_get_timezone_thread (GSimpleAsyncResult *simple,
        backend = E_CAL_BACKEND (source_object);
 
        class = E_CAL_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->get_timezone != NULL);
 
        data_cal = e_cal_backend_ref_data_cal (backend);
@@ -4163,6 +4181,7 @@ cal_backend_add_timezone_thread (GSimpleAsyncResult *simple,
        backend = E_CAL_BACKEND (source_object);
 
        class = E_CAL_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->add_timezone != NULL);
 
        data_cal = e_cal_backend_ref_data_cal (backend);
@@ -4288,11 +4307,16 @@ void
 e_cal_backend_start_view (ECalBackend *backend,
                           EDataCalView *view)
 {
+       ECalBackendClass *klass;
+
        g_return_if_fail (backend != NULL);
        g_return_if_fail (E_IS_CAL_BACKEND (backend));
-       g_return_if_fail (E_CAL_BACKEND_GET_CLASS (backend)->start_view != NULL);
 
-       (* E_CAL_BACKEND_GET_CLASS (backend)->start_view) (backend, view);
+       klass = E_CAL_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (klass != NULL);
+       g_return_if_fail (klass->start_view != NULL);
+
+       klass->start_view (backend, view);
 }
 
 /**
@@ -4308,14 +4332,17 @@ void
 e_cal_backend_stop_view (ECalBackend *backend,
                          EDataCalView *view)
 {
+       ECalBackendClass *klass;
+
        g_return_if_fail (backend != NULL);
        g_return_if_fail (E_IS_CAL_BACKEND (backend));
 
-       /* backward compatibility, do not force each backend define this function */
-       if (!E_CAL_BACKEND_GET_CLASS (backend)->stop_view)
-               return;
+       klass = E_CAL_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (klass != NULL);
 
-       (* E_CAL_BACKEND_GET_CLASS (backend)->stop_view) (backend, view);
+       /* backward compatibility, do not force each backend define this function */
+       if (klass->stop_view)
+               klass->stop_view (backend, view);
 }
 
 /**
diff --git a/src/calendar/libedata-cal/e-cal-cache.c b/src/calendar/libedata-cal/e-cal-cache.c
index 6c2553a..510bbb3 100644
--- a/src/calendar/libedata-cal/e-cal-cache.c
+++ b/src/calendar/libedata-cal/e-cal-cache.c
@@ -882,13 +882,17 @@ ecc_fill_other_columns (ECalCache *cal_cache,
 
        e_cal_component_get_priority (comp, &pint);
        add_value (ECC_COLUMN_PRIORITY, pint && *pint ? g_strdup_printf ("%d", *pint) : NULL);
-       if (pint)
+       if (pint) {
                e_cal_component_free_priority (pint);
+               pint = NULL;
+       }
 
        e_cal_component_get_percent (comp, &pint);
        add_value (ECC_COLUMN_PERCENT_COMPLETE, pint && *pint ? g_strdup_printf ("%d", *pint) : NULL);
-       if (pint)
+       if (pint) {
                e_cal_component_free_percent (pint);
+               pint = NULL;
+       }
 
        has = e_cal_component_has_alarms (comp);
        add_value (ECC_COLUMN_HAS_ALARM, g_strdup (has ? "1" : "0"));
diff --git a/src/camel/camel-address.c b/src/camel/camel-address.c
index 8aec82d..9aadff7 100644
--- a/src/camel/camel-address.c
+++ b/src/camel/camel-address.c
@@ -84,6 +84,7 @@ camel_address_length (CamelAddress *addr)
        g_return_val_if_fail (CAMEL_IS_ADDRESS (addr), -1);
 
        class = CAMEL_ADDRESS_GET_CLASS (addr);
+       g_return_val_if_fail (class != NULL, -1);
        g_return_val_if_fail (class->length != NULL, -1);
 
        return class->length (addr);
@@ -107,6 +108,7 @@ camel_address_decode (CamelAddress *addr,
        g_return_val_if_fail (CAMEL_IS_ADDRESS (addr), -1);
 
        class = CAMEL_ADDRESS_GET_CLASS (addr);
+       g_return_val_if_fail (class != NULL, -1);
        g_return_val_if_fail (class->decode != NULL, -1);
 
        return class->decode (addr, raw);
@@ -128,6 +130,7 @@ camel_address_encode (CamelAddress *addr)
        g_return_val_if_fail (CAMEL_IS_ADDRESS (addr), NULL);
 
        class = CAMEL_ADDRESS_GET_CLASS (addr);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->encode != NULL, NULL);
 
        return class->encode (addr);
@@ -152,6 +155,7 @@ camel_address_unformat (CamelAddress *addr,
        g_return_val_if_fail (CAMEL_IS_ADDRESS (addr), -1);
 
        class = CAMEL_ADDRESS_GET_CLASS (addr);
+       g_return_val_if_fail (class != NULL, -1);
        g_return_val_if_fail (class->unformat != NULL, -1);
 
        return class->unformat (addr, raw);
@@ -173,6 +177,7 @@ camel_address_format (CamelAddress *addr)
        g_return_val_if_fail (CAMEL_IS_ADDRESS (addr), NULL);
 
        class = CAMEL_ADDRESS_GET_CLASS (addr);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->format != NULL, NULL);
 
        return class->format (addr);
@@ -198,6 +203,7 @@ camel_address_cat (CamelAddress *dest,
        g_return_val_if_fail (CAMEL_IS_ADDRESS (source), -1);
 
        class = CAMEL_ADDRESS_GET_CLASS (dest);
+       g_return_val_if_fail (class != NULL, -1);
        g_return_val_if_fail (class->cat != NULL, -1);
 
        return class->cat (dest, source);
@@ -239,6 +245,7 @@ camel_address_remove (CamelAddress *addr,
        g_return_if_fail (CAMEL_IS_ADDRESS (addr));
 
        class = CAMEL_ADDRESS_GET_CLASS (addr);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->remove != NULL);
 
        if (index == -1) {
diff --git a/src/camel/camel-certdb.c b/src/camel/camel-certdb.c
index 695fb94..4e240f1 100644
--- a/src/camel/camel-certdb.c
+++ b/src/camel/camel-certdb.c
@@ -499,7 +499,7 @@ camel_certdb_load (CamelCertDB *certdb)
                return -1;
 
        class = CAMEL_CERTDB_GET_CLASS (certdb);
-       if (!class->header_load || !class->cert_load) {
+       if (!class || !class->header_load || !class->cert_load) {
                fclose (in);
                in = NULL;
                g_warn_if_reached ();
@@ -581,7 +581,7 @@ camel_certdb_save (CamelCertDB *certdb)
        }
 
        class = CAMEL_CERTDB_GET_CLASS (certdb);
-       if (!class->header_save || !class->cert_save) {
+       if (!class || !class->header_save || !class->cert_save) {
                fclose (out);
                out = NULL;
                g_warn_if_reached ();
diff --git a/src/camel/camel-cipher-context.c b/src/camel/camel-cipher-context.c
index 2b185bc..dcdc3ee 100644
--- a/src/camel/camel-cipher-context.c
+++ b/src/camel/camel-cipher-context.c
@@ -348,6 +348,7 @@ camel_cipher_context_sign_sync (CamelCipherContext *context,
        g_return_val_if_fail (CAMEL_IS_CIPHER_CONTEXT (context), FALSE);
 
        class = CAMEL_CIPHER_CONTEXT_GET_CLASS (context);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->sign_sync != NULL, FALSE);
 
        CIPHER_LOCK (context);
@@ -482,6 +483,7 @@ camel_cipher_context_verify_sync (CamelCipherContext *context,
        g_return_val_if_fail (CAMEL_IS_MIME_PART (ipart), NULL);
 
        class = CAMEL_CIPHER_CONTEXT_GET_CLASS (context);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->verify_sync != NULL, NULL);
 
        CIPHER_LOCK (context);
@@ -638,6 +640,7 @@ camel_cipher_context_encrypt_sync (CamelCipherContext *context,
        g_return_val_if_fail (CAMEL_IS_MIME_PART (opart), FALSE);
 
        class = CAMEL_CIPHER_CONTEXT_GET_CLASS (context);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->encrypt_sync != NULL, FALSE);
 
        CIPHER_LOCK (context);
@@ -810,6 +813,7 @@ camel_cipher_context_decrypt_sync (CamelCipherContext *context,
        g_return_val_if_fail (CAMEL_IS_MIME_PART (opart), NULL);
 
        class = CAMEL_CIPHER_CONTEXT_GET_CLASS (context);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->decrypt_sync != NULL, NULL);
 
        CIPHER_LOCK (context);
@@ -952,8 +956,8 @@ camel_cipher_context_id_to_hash (CamelCipherContext *context,
                CAMEL_CIPHER_HASH_DEFAULT);
 
        class = CAMEL_CIPHER_CONTEXT_GET_CLASS (context);
-       g_return_val_if_fail (
-               class->id_to_hash != NULL, CAMEL_CIPHER_HASH_DEFAULT);
+       g_return_val_if_fail (class != NULL, CAMEL_CIPHER_HASH_DEFAULT);
+       g_return_val_if_fail (class->id_to_hash != NULL, CAMEL_CIPHER_HASH_DEFAULT);
 
        return class->id_to_hash (context, id);
 }
@@ -967,6 +971,7 @@ camel_cipher_context_hash_to_id (CamelCipherContext *context,
        g_return_val_if_fail (CAMEL_IS_CIPHER_CONTEXT (context), NULL);
 
        class = CAMEL_CIPHER_CONTEXT_GET_CLASS (context);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->hash_to_id != NULL, NULL);
 
        return class->hash_to_id (context, hash);
diff --git a/src/camel/camel-data-wrapper.c b/src/camel/camel-data-wrapper.c
index 7882875..68fcee3 100644
--- a/src/camel/camel-data-wrapper.c
+++ b/src/camel/camel-data-wrapper.c
@@ -545,7 +545,8 @@ camel_data_wrapper_set_mime_type (CamelDataWrapper *data_wrapper,
        g_return_if_fail (mime_type != NULL);
 
        class = CAMEL_DATA_WRAPPER_GET_CLASS (data_wrapper);
-       g_return_if_fail (class->set_mime_type);
+       g_return_if_fail (class != NULL);
+       g_return_if_fail (class->set_mime_type != NULL);
 
        class->set_mime_type (data_wrapper, mime_type);
 }
@@ -564,6 +565,7 @@ camel_data_wrapper_get_mime_type (CamelDataWrapper *data_wrapper)
        g_return_val_if_fail (CAMEL_IS_DATA_WRAPPER (data_wrapper), NULL);
 
        class = CAMEL_DATA_WRAPPER_GET_CLASS (data_wrapper);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_mime_type != NULL, NULL);
 
        return class->get_mime_type (data_wrapper);
@@ -583,6 +585,7 @@ camel_data_wrapper_get_mime_type_field (CamelDataWrapper *data_wrapper)
        g_return_val_if_fail (CAMEL_IS_DATA_WRAPPER (data_wrapper), NULL);
 
        class = CAMEL_DATA_WRAPPER_GET_CLASS (data_wrapper);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_mime_type_field != NULL, NULL);
 
        return class->get_mime_type_field (data_wrapper);
@@ -608,6 +611,7 @@ camel_data_wrapper_set_mime_type_field (CamelDataWrapper *data_wrapper,
        g_return_if_fail (mime_type != NULL);
 
        class = CAMEL_DATA_WRAPPER_GET_CLASS (data_wrapper);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->set_mime_type_field != NULL);
 
        class->set_mime_type_field (data_wrapper, mime_type);
@@ -655,6 +659,7 @@ camel_data_wrapper_is_offline (CamelDataWrapper *data_wrapper)
        g_return_val_if_fail (CAMEL_IS_DATA_WRAPPER (data_wrapper), TRUE);
 
        class = CAMEL_DATA_WRAPPER_GET_CLASS (data_wrapper);
+       g_return_val_if_fail (class != NULL, TRUE);
        g_return_val_if_fail (class->is_offline != NULL, TRUE);
 
        return class->is_offline (data_wrapper);
@@ -716,6 +721,7 @@ camel_data_wrapper_write_to_stream_sync (CamelDataWrapper *data_wrapper,
        g_return_val_if_fail (CAMEL_IS_STREAM (stream), -1);
 
        class = CAMEL_DATA_WRAPPER_GET_CLASS (data_wrapper);
+       g_return_val_if_fail (class != NULL, -1);
        g_return_val_if_fail (class->write_to_stream_sync != NULL, -1);
 
        bytes_written = class->write_to_stream_sync (
@@ -863,6 +869,7 @@ camel_data_wrapper_decode_to_stream_sync (CamelDataWrapper *data_wrapper,
        g_return_val_if_fail (CAMEL_IS_STREAM (stream), -1);
 
        class = CAMEL_DATA_WRAPPER_GET_CLASS (data_wrapper);
+       g_return_val_if_fail (class != NULL, -1);
        g_return_val_if_fail (class->decode_to_stream_sync != NULL, -1);
 
        bytes_written = class->decode_to_stream_sync (
@@ -999,6 +1006,7 @@ camel_data_wrapper_construct_from_stream_sync (CamelDataWrapper *data_wrapper,
        g_return_val_if_fail (CAMEL_IS_STREAM (stream), FALSE);
 
        class = CAMEL_DATA_WRAPPER_GET_CLASS (data_wrapper);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->construct_from_stream_sync != NULL, FALSE);
 
        success = class->construct_from_stream_sync (
@@ -1145,6 +1153,7 @@ camel_data_wrapper_write_to_output_stream_sync (CamelDataWrapper *data_wrapper,
        g_return_val_if_fail (G_IS_OUTPUT_STREAM (output_stream), -1);
 
        class = CAMEL_DATA_WRAPPER_GET_CLASS (data_wrapper);
+       g_return_val_if_fail (class != NULL, -1);
        g_return_val_if_fail (class->write_to_output_stream_sync != NULL, -1);
 
        bytes_written = class->write_to_output_stream_sync (
@@ -1297,6 +1306,7 @@ camel_data_wrapper_decode_to_output_stream_sync (CamelDataWrapper *data_wrapper,
        g_return_val_if_fail (G_IS_OUTPUT_STREAM (output_stream), -1);
 
        class = CAMEL_DATA_WRAPPER_GET_CLASS (data_wrapper);
+       g_return_val_if_fail (class != NULL, -1);
        g_return_val_if_fail (class->decode_to_output_stream_sync != NULL, -1);
 
        bytes_written = class->decode_to_output_stream_sync (
@@ -1435,6 +1445,7 @@ camel_data_wrapper_construct_from_input_stream_sync (CamelDataWrapper *data_wrap
        g_return_val_if_fail (G_IS_INPUT_STREAM (input_stream), FALSE);
 
        class = CAMEL_DATA_WRAPPER_GET_CLASS (data_wrapper);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->construct_from_input_stream_sync != NULL, FALSE);
 
        success = class->construct_from_input_stream_sync (
diff --git a/src/camel/camel-folder-summary.c b/src/camel/camel-folder-summary.c
index dfca052..ace078a 100644
--- a/src/camel/camel-folder-summary.c
+++ b/src/camel/camel-folder-summary.c
@@ -56,10 +56,6 @@
 #include "camel-vtrash-folder.h"
 #include "camel-mime-part-utils.h"
 
-#define CAMEL_FOLDER_SUMMARY_GET_PRIVATE(obj) \
-       (G_TYPE_INSTANCE_GET_PRIVATE \
-       ((obj), CAMEL_TYPE_FOLDER_SUMMARY, CamelFolderSummaryPrivate))
-
 /* Make 5 minutes as default cache drop */
 #define SUMMARY_CACHE_DROP 300
 #define dd(x) if (camel_debug("sync")) x
@@ -203,29 +199,27 @@ free_o_name (gpointer key,
 static void
 folder_summary_dispose (GObject *object)
 {
-       CamelFolderSummaryPrivate *priv;
-
-       priv = CAMEL_FOLDER_SUMMARY_GET_PRIVATE (object);
+       CamelFolderSummary *summary = CAMEL_FOLDER_SUMMARY (object);
 
-       if (priv->timeout_handle) {
+       if (summary->priv->timeout_handle) {
                /* this should not happen, because the release timer
                 * holds a reference on object */
-               g_source_remove (priv->timeout_handle);
-               priv->timeout_handle = 0;
+               g_source_remove (summary->priv->timeout_handle);
+               summary->priv->timeout_handle = 0;
        }
 
-       g_clear_object (&priv->filter_index);
-       g_clear_object (&priv->filter_64);
-       g_clear_object (&priv->filter_qp);
-       g_clear_object (&priv->filter_uu);
-       g_clear_object (&priv->filter_save);
-       g_clear_object (&priv->filter_html);
-       g_clear_object (&priv->filter_stream);
-       g_clear_object (&priv->filter_index);
+       g_clear_object (&summary->priv->filter_index);
+       g_clear_object (&summary->priv->filter_64);
+       g_clear_object (&summary->priv->filter_qp);
+       g_clear_object (&summary->priv->filter_uu);
+       g_clear_object (&summary->priv->filter_save);
+       g_clear_object (&summary->priv->filter_html);
+       g_clear_object (&summary->priv->filter_stream);
+       g_clear_object (&summary->priv->filter_index);
 
-       if (priv->folder) {
-               g_object_weak_unref (G_OBJECT (priv->folder), (GWeakNotify) g_nullify_pointer, &priv->folder);
-               priv->folder = NULL;
+       if (summary->priv->folder) {
+               g_object_weak_unref (G_OBJECT (summary->priv->folder), (GWeakNotify) g_nullify_pointer, 
&summary->priv->folder);
+               summary->priv->folder = NULL;
        }
 
        /* Chain up to parent's dispose() method. */
@@ -236,17 +230,16 @@ static void
 folder_summary_finalize (GObject *object)
 {
        CamelFolderSummary *summary = CAMEL_FOLDER_SUMMARY (object);
-       CamelFolderSummaryPrivate *priv = summary->priv;
 
-       g_hash_table_destroy (priv->uids);
+       g_hash_table_destroy (summary->priv->uids);
        remove_all_loaded (summary);
-       g_hash_table_destroy (priv->loaded_infos);
+       g_hash_table_destroy (summary->priv->loaded_infos);
 
-       g_hash_table_foreach (priv->filter_charset, free_o_name, NULL);
-       g_hash_table_destroy (priv->filter_charset);
+       g_hash_table_foreach (summary->priv->filter_charset, free_o_name, NULL);
+       g_hash_table_destroy (summary->priv->filter_charset);
 
-       g_rec_mutex_clear (&priv->summary_lock);
-       g_rec_mutex_clear (&priv->filter_lock);
+       g_rec_mutex_clear (&summary->priv->summary_lock);
+       g_rec_mutex_clear (&summary->priv->filter_lock);
 
        /* Chain up to parent's finalize() method. */
        G_OBJECT_CLASS (camel_folder_summary_parent_class)->finalize (object);
@@ -782,7 +775,7 @@ camel_folder_summary_class_init (CamelFolderSummaryClass *class)
 static void
 camel_folder_summary_init (CamelFolderSummary *summary)
 {
-       summary->priv = CAMEL_FOLDER_SUMMARY_GET_PRIVATE (summary);
+       summary->priv = G_TYPE_INSTANCE_GET_PRIVATE (summary, CAMEL_TYPE_FOLDER_SUMMARY, 
CamelFolderSummaryPrivate);
 
        summary->priv->version = CAMEL_FOLDER_SUMMARY_VERSION;
        summary->priv->flags = 0;
@@ -1158,6 +1151,7 @@ camel_folder_summary_next_uid_string (CamelFolderSummary *summary)
        g_return_val_if_fail (CAMEL_IS_FOLDER_SUMMARY (summary), NULL);
 
        class = CAMEL_FOLDER_SUMMARY_GET_CLASS (summary);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->next_uid_string != NULL, NULL);
 
        return class->next_uid_string (summary);
@@ -1437,6 +1431,7 @@ camel_folder_summary_get (CamelFolderSummary *summary,
        g_return_val_if_fail (uid != NULL, NULL);
 
        class = CAMEL_FOLDER_SUMMARY_GET_CLASS (summary);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->message_info_from_uid != NULL, NULL);
 
        return class->message_info_from_uid (summary, uid);
@@ -2119,12 +2114,17 @@ gboolean
 camel_folder_summary_save (CamelFolderSummary *summary,
                           GError **error)
 {
+       CamelFolderSummaryClass *klass;
        CamelStore *parent_store;
        CamelDB *cdb;
        CamelFIRecord *record;
        gint ret, count;
 
-       g_return_val_if_fail (summary != NULL, FALSE);
+       g_return_val_if_fail (CAMEL_IS_FOLDER_SUMMARY (summary), FALSE);
+
+       klass = CAMEL_FOLDER_SUMMARY_GET_CLASS (summary);
+       g_return_val_if_fail (klass != NULL, FALSE);
+       g_return_val_if_fail (klass->summary_header_save != NULL, FALSE);
 
        if (!(summary->priv->flags & CAMEL_FOLDER_SUMMARY_DIRTY) ||
            is_in_memory_summary (summary))
@@ -2180,7 +2180,7 @@ camel_folder_summary_save (CamelFolderSummary *summary,
                }
        }
 
-       record = CAMEL_FOLDER_SUMMARY_GET_CLASS (summary)->summary_header_save (summary, error);
+       record = klass->summary_header_save (summary, error);
        if (!record) {
                summary->priv->flags |= CAMEL_FOLDER_SUMMARY_DIRTY;
                camel_folder_summary_unlock (summary);
@@ -2222,11 +2222,18 @@ gboolean
 camel_folder_summary_header_save (CamelFolderSummary *summary,
                                  GError **error)
 {
+       CamelFolderSummaryClass *klass;
        CamelStore *parent_store;
        CamelFIRecord *record;
        CamelDB *cdb;
        gint ret;
 
+       g_return_val_if_fail (CAMEL_IS_FOLDER_SUMMARY (summary), FALSE);
+
+       klass = CAMEL_FOLDER_SUMMARY_GET_CLASS (summary);
+       g_return_val_if_fail (klass != NULL, FALSE);
+       g_return_val_if_fail (klass->summary_header_save != NULL, FALSE);
+
        if (is_in_memory_summary (summary))
                return TRUE;
 
@@ -2239,7 +2246,7 @@ camel_folder_summary_header_save (CamelFolderSummary *summary,
 
        d (printf ("\ncamel_folder_summary_header_save called \n"));
 
-       record = CAMEL_FOLDER_SUMMARY_GET_CLASS (summary)->summary_header_save (summary, error);
+       record = klass->summary_header_save (summary, error);
        if (!record) {
                camel_folder_summary_unlock (summary);
                return FALSE;
@@ -2283,12 +2290,19 @@ camel_folder_summary_header_load (CamelFolderSummary *summary,
                                  const gchar *folder_name,
                                  GError **error)
 {
+       CamelFolderSummaryClass *klass;
        CamelDB *cdb;
        CamelFIRecord *record;
        gboolean ret = FALSE;
 
        d (printf ("\ncamel_folder_summary_header_load called \n"));
 
+       g_return_val_if_fail (CAMEL_IS_FOLDER_SUMMARY (summary), FALSE);
+
+       klass = CAMEL_FOLDER_SUMMARY_GET_CLASS (summary);
+       g_return_val_if_fail (klass != NULL, FALSE);
+       g_return_val_if_fail (klass->summary_header_load != NULL, FALSE);
+
        if (is_in_memory_summary (summary))
                return TRUE;
 
@@ -2300,7 +2314,7 @@ camel_folder_summary_header_load (CamelFolderSummary *summary,
        record = g_new0 (CamelFIRecord, 1);
        camel_db_read_folder_info_record (cdb, folder_name, record, error);
 
-       ret = CAMEL_FOLDER_SUMMARY_GET_CLASS (summary)->summary_header_load (summary, record);
+       ret = klass->summary_header_load (summary, record);
 
        camel_folder_summary_unlock (summary);
 
@@ -2457,6 +2471,7 @@ camel_folder_summary_info_new_from_headers (CamelFolderSummary *summary,
        g_return_val_if_fail (CAMEL_IS_FOLDER_SUMMARY (summary), NULL);
 
        class = CAMEL_FOLDER_SUMMARY_GET_CLASS (summary);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->message_info_new_from_headers != NULL, NULL);
 
        return class->message_info_new_from_headers (summary, headers);
@@ -2487,50 +2502,57 @@ CamelMessageInfo *
 camel_folder_summary_info_new_from_parser (CamelFolderSummary *summary,
                                            CamelMimeParser *mp)
 {
+       CamelFolderSummaryClass *klass;
        CamelMessageInfo *info = NULL;
        gchar *buffer;
        gsize len;
-       CamelFolderSummaryPrivate *p = summary->priv;
        goffset start;
        CamelIndexName *name = NULL;
 
+       g_return_val_if_fail (CAMEL_IS_FOLDER_SUMMARY (summary), NULL);
+       g_return_val_if_fail (CAMEL_IS_MIME_PARSER (mp), NULL);
+
+       klass = CAMEL_FOLDER_SUMMARY_GET_CLASS (summary);
+       g_return_val_if_fail (klass != NULL, NULL);
+       g_return_val_if_fail (klass->message_info_new_from_parser, NULL);
+
        /* should this check the parser is in the right state, or assume it is?? */
 
        start = camel_mime_parser_tell (mp);
        if (camel_mime_parser_step (mp, &buffer, &len) != CAMEL_MIME_PARSER_STATE_EOF) {
-               info = CAMEL_FOLDER_SUMMARY_GET_CLASS (summary)->message_info_new_from_parser (summary, mp);
+               info = klass->message_info_new_from_parser (summary, mp);
 
                camel_mime_parser_unstep (mp);
 
                /* assign a unique uid, this is slightly 'wrong' as we do not really
                 * know if we are going to store this in the summary, but no matter */
-               if (p->index)
+               if (summary->priv->index)
                        summary_assign_uid (summary, info);
 
                g_rec_mutex_lock (&summary->priv->filter_lock);
 
-               if (p->index) {
-                       if (p->filter_index == NULL)
-                               p->filter_index = camel_mime_filter_index_new (p->index);
-                       camel_index_delete_name (p->index, camel_message_info_get_uid (info));
-                       name = camel_index_add_name (p->index, camel_message_info_get_uid (info));
-                       camel_mime_filter_index_set_name (CAMEL_MIME_FILTER_INDEX (p->filter_index), name);
+               if (summary->priv->index) {
+                       if (!summary->priv->filter_index)
+                               summary->priv->filter_index = camel_mime_filter_index_new 
(summary->priv->index);
+                       camel_index_delete_name (summary->priv->index, camel_message_info_get_uid (info));
+                       name = camel_index_add_name (summary->priv->index, camel_message_info_get_uid (info));
+                       camel_mime_filter_index_set_name (CAMEL_MIME_FILTER_INDEX 
(summary->priv->filter_index), name);
                }
 
                /* always scan the content info, even if we dont save it */
                summary_traverse_content_with_parser (summary, info, mp);
 
-               if (name && p->index) {
-                       camel_index_write_name (p->index, name);
+               if (name && summary->priv->index) {
+                       camel_index_write_name (summary->priv->index, name);
                        g_object_unref (name);
-                       camel_mime_filter_index_set_name (
-                               CAMEL_MIME_FILTER_INDEX (p->filter_index), NULL);
+                       camel_mime_filter_index_set_name (CAMEL_MIME_FILTER_INDEX 
(summary->priv->filter_index), NULL);
                }
 
                g_rec_mutex_unlock (&summary->priv->filter_lock);
 
                camel_message_info_set_size (info, camel_mime_parser_tell (mp) - start);
        }
+
        return info;
 }
 
@@ -2548,31 +2570,37 @@ CamelMessageInfo *
 camel_folder_summary_info_new_from_message (CamelFolderSummary *summary,
                                             CamelMimeMessage *msg)
 {
+       CamelFolderSummaryClass *klass;
        CamelMessageInfo *info;
-       CamelFolderSummaryPrivate *p = summary->priv;
        CamelIndexName *name = NULL;
 
-       info = CAMEL_FOLDER_SUMMARY_GET_CLASS (summary)->message_info_new_from_message (summary, msg);
+       g_return_val_if_fail (CAMEL_IS_FOLDER_SUMMARY (summary), NULL);
+       g_return_val_if_fail (CAMEL_IS_MIME_MESSAGE (msg), NULL);
+
+       klass = CAMEL_FOLDER_SUMMARY_GET_CLASS (summary);
+       g_return_val_if_fail (klass != NULL, NULL);
+       g_return_val_if_fail (klass->message_info_new_from_message != NULL, NULL);
+
+       info = klass->message_info_new_from_message (summary, msg);
 
        /* assign a unique uid, this is slightly 'wrong' as we do not really
         * know if we are going to store this in the summary, but we need it set for indexing */
-       if (p->index)
+       if (summary->priv->index)
                summary_assign_uid (summary, info);
 
        g_rec_mutex_lock (&summary->priv->filter_lock);
 
-       if (p->index) {
-               if (p->filter_index == NULL)
-                       p->filter_index = camel_mime_filter_index_new (p->index);
-               camel_index_delete_name (p->index, camel_message_info_get_uid (info));
-               name = camel_index_add_name (p->index, camel_message_info_get_uid (info));
-               camel_mime_filter_index_set_name (
-                       CAMEL_MIME_FILTER_INDEX (p->filter_index), name);
+       if (summary->priv->index) {
+               if (summary->priv->filter_index == NULL)
+                       summary->priv->filter_index = camel_mime_filter_index_new (summary->priv->index);
+               camel_index_delete_name (summary->priv->index, camel_message_info_get_uid (info));
+               name = camel_index_add_name (summary->priv->index, camel_message_info_get_uid (info));
+               camel_mime_filter_index_set_name (CAMEL_MIME_FILTER_INDEX (summary->priv->filter_index), 
name);
 
-               if (p->filter_stream == NULL) {
+               if (!summary->priv->filter_stream) {
                        CamelStream *null = camel_stream_null_new ();
 
-                       p->filter_stream = camel_stream_filter_new (null);
+                       summary->priv->filter_stream = camel_stream_filter_new (null);
                        g_object_unref (null);
                }
        }
@@ -2580,10 +2608,9 @@ camel_folder_summary_info_new_from_message (CamelFolderSummary *summary,
        summary_traverse_content_with_part (summary, info, (CamelMimePart *) msg);
 
        if (name) {
-               camel_index_write_name (p->index, name);
+               camel_index_write_name (summary->priv->index, name);
                g_object_unref (name);
-               camel_mime_filter_index_set_name (
-                       CAMEL_MIME_FILTER_INDEX (p->filter_index), NULL);
+               camel_mime_filter_index_set_name (CAMEL_MIME_FILTER_INDEX (summary->priv->filter_index), 
NULL);
        }
 
        g_rec_mutex_unlock (&summary->priv->filter_lock);
@@ -2822,17 +2849,24 @@ static CamelMessageInfo *
 message_info_new_from_parser (CamelFolderSummary *summary,
                               CamelMimeParser *mp)
 {
+       CamelFolderSummaryClass *klass;
        CamelMessageInfo *mi = NULL;
        CamelNameValueArray *headers;
        gint state;
 
+       g_return_val_if_fail (CAMEL_IS_FOLDER_SUMMARY (summary), NULL);
+
+       klass = CAMEL_FOLDER_SUMMARY_GET_CLASS (summary);
+       g_return_val_if_fail (klass != NULL, NULL);
+       g_return_val_if_fail (klass->message_info_new_from_headers != NULL, NULL);
+
        state = camel_mime_parser_state (mp);
        switch (state) {
        case CAMEL_MIME_PARSER_STATE_HEADER:
        case CAMEL_MIME_PARSER_STATE_MESSAGE:
        case CAMEL_MIME_PARSER_STATE_MULTIPART:
                headers = camel_mime_parser_dup_headers (mp);
-               mi = CAMEL_FOLDER_SUMMARY_GET_CLASS (summary)->message_info_new_from_headers (summary, 
headers);
+               mi = klass->message_info_new_from_headers (summary, headers);
                camel_name_value_array_free (headers);
                break;
        default:
@@ -2846,7 +2880,15 @@ static CamelMessageInfo *
 message_info_new_from_message (CamelFolderSummary *summary,
                                CamelMimeMessage *msg)
 {
-       return CAMEL_FOLDER_SUMMARY_GET_CLASS (summary)->message_info_new_from_headers (summary, 
camel_medium_get_headers (CAMEL_MEDIUM (msg)));
+       CamelFolderSummaryClass *klass;
+
+       g_return_val_if_fail (CAMEL_IS_FOLDER_SUMMARY (summary), NULL);
+
+       klass = CAMEL_FOLDER_SUMMARY_GET_CLASS (summary);
+       g_return_val_if_fail (klass != NULL, NULL);
+       g_return_val_if_fail (klass->message_info_new_from_headers != NULL, NULL);
+
+       return klass->message_info_new_from_headers (summary, camel_medium_get_headers (CAMEL_MEDIUM (msg)));
 }
 
 static gchar *
@@ -3055,7 +3097,6 @@ summary_traverse_content_with_parser (CamelFolderSummary *summary,
        gchar *buffer;
        CamelContentType *ct;
        gint enc_id = -1, chr_id = -1, html_id = -1, idx_id = -1;
-       CamelFolderSummaryPrivate *p = summary->priv;
        CamelMimeFilter *mfc;
        const gchar *calendar_header;
 
@@ -3090,7 +3131,7 @@ summary_traverse_content_with_parser (CamelFolderSummary *summary,
                if (camel_mime_parser_header (mp, "X-Evolution-Note", NULL))
                        camel_message_info_set_user_flag (msginfo, "$has_note", TRUE);
 
-               if (p->index && camel_content_type_is (ct, "text", "*")) {
+               if (summary->priv->index && camel_content_type_is (ct, "text", "*")) {
                        gchar *encoding;
                        const gchar *charset;
 
@@ -3100,25 +3141,25 @@ summary_traverse_content_with_parser (CamelFolderSummary *summary,
                        if (encoding) {
                                if (!g_ascii_strcasecmp (encoding, "base64")) {
                                        d (printf (" decoding base64\n"));
-                                       if (p->filter_64 == NULL)
-                                               p->filter_64 = camel_mime_filter_basic_new 
(CAMEL_MIME_FILTER_BASIC_BASE64_DEC);
+                                       if (summary->priv->filter_64 == NULL)
+                                               summary->priv->filter_64 = camel_mime_filter_basic_new 
(CAMEL_MIME_FILTER_BASIC_BASE64_DEC);
                                        else
-                                               camel_mime_filter_reset (p->filter_64);
-                                       enc_id = camel_mime_parser_filter_add (mp, p->filter_64);
+                                               camel_mime_filter_reset (summary->priv->filter_64);
+                                       enc_id = camel_mime_parser_filter_add (mp, summary->priv->filter_64);
                                } else if (!g_ascii_strcasecmp (encoding, "quoted-printable")) {
                                        d (printf (" decoding quoted-printable\n"));
-                                       if (p->filter_qp == NULL)
-                                               p->filter_qp = camel_mime_filter_basic_new 
(CAMEL_MIME_FILTER_BASIC_QP_DEC);
+                                       if (summary->priv->filter_qp == NULL)
+                                               summary->priv->filter_qp = camel_mime_filter_basic_new 
(CAMEL_MIME_FILTER_BASIC_QP_DEC);
                                        else
-                                               camel_mime_filter_reset (p->filter_qp);
-                                       enc_id = camel_mime_parser_filter_add (mp, p->filter_qp);
+                                               camel_mime_filter_reset (summary->priv->filter_qp);
+                                       enc_id = camel_mime_parser_filter_add (mp, summary->priv->filter_qp);
                                } else if (!g_ascii_strcasecmp (encoding, "x-uuencode")) {
                                        d (printf (" decoding x-uuencode\n"));
-                                       if (p->filter_uu == NULL)
-                                               p->filter_uu = camel_mime_filter_basic_new 
(CAMEL_MIME_FILTER_BASIC_UU_DEC);
+                                       if (summary->priv->filter_uu == NULL)
+                                               summary->priv->filter_uu = camel_mime_filter_basic_new 
(CAMEL_MIME_FILTER_BASIC_UU_DEC);
                                        else
-                                               camel_mime_filter_reset (p->filter_uu);
-                                       enc_id = camel_mime_parser_filter_add (mp, p->filter_uu);
+                                               camel_mime_filter_reset (summary->priv->filter_uu);
+                                       enc_id = camel_mime_parser_filter_add (mp, summary->priv->filter_uu);
                                } else {
                                        d (printf (" ignoring encoding %s\n", encoding));
                                }
@@ -3130,11 +3171,11 @@ summary_traverse_content_with_parser (CamelFolderSummary *summary,
                            && !(g_ascii_strcasecmp (charset, "us-ascii") == 0
                                 || g_ascii_strcasecmp (charset, "utf-8") == 0)) {
                                d (printf (" Adding conversion filter from %s to UTF-8\n", charset));
-                               mfc = g_hash_table_lookup (p->filter_charset, charset);
+                               mfc = g_hash_table_lookup (summary->priv->filter_charset, charset);
                                if (mfc == NULL) {
                                        mfc = camel_mime_filter_charset_new (charset, "UTF-8");
                                        if (mfc)
-                                               g_hash_table_insert (p->filter_charset, g_strdup (charset), 
mfc);
+                                               g_hash_table_insert (summary->priv->filter_charset, g_strdup 
(charset), mfc);
                                } else {
                                        camel_mime_filter_reset ((CamelMimeFilter *) mfc);
                                }
@@ -3148,15 +3189,15 @@ summary_traverse_content_with_parser (CamelFolderSummary *summary,
                        /* we do charset conversions before this filter, which isn't strictly correct,
                         * but works in most cases */
                        if (camel_content_type_is (ct, "text", "html")) {
-                               if (p->filter_html == NULL)
-                                       p->filter_html = camel_mime_filter_html_new ();
+                               if (summary->priv->filter_html == NULL)
+                                       summary->priv->filter_html = camel_mime_filter_html_new ();
                                else
-                                       camel_mime_filter_reset ((CamelMimeFilter *) p->filter_html);
-                               html_id = camel_mime_parser_filter_add (mp, (CamelMimeFilter *) 
p->filter_html);
+                                       camel_mime_filter_reset ((CamelMimeFilter *) 
summary->priv->filter_html);
+                               html_id = camel_mime_parser_filter_add (mp, (CamelMimeFilter *) 
summary->priv->filter_html);
                        }
 
                        /* and this filter actually does the indexing */
-                       idx_id = camel_mime_parser_filter_add (mp, p->filter_index);
+                       idx_id = camel_mime_parser_filter_add (mp, summary->priv->filter_index);
                }
                /* and scan/index everything */
                while (camel_mime_parser_step (mp, &buffer, &len) != CAMEL_MIME_PARSER_STATE_BODY_END)
@@ -3208,7 +3249,6 @@ summary_traverse_content_with_part (CamelFolderSummary *summary,
 {
        CamelDataWrapper *containee;
        gint parts, i;
-       CamelFolderSummaryPrivate *p = summary->priv;
        CamelContentType *ct;
        const CamelNameValueArray *headers;
        gboolean is_calendar = FALSE, is_note = FALSE;
@@ -3279,33 +3319,33 @@ summary_traverse_content_with_part (CamelFolderSummary *summary,
        } else if (CAMEL_IS_MIME_MESSAGE (containee)) {
                /* for messages we only look at its contents */
                summary_traverse_content_with_part (summary, msginfo, (CamelMimePart *) containee);
-       } else if (p->filter_stream
+       } else if (summary->priv->filter_stream
                   && camel_content_type_is (ct, "text", "*")) {
                gint html_id = -1, idx_id = -1;
 
                /* pre-attach html filter if required, otherwise just index filter */
                if (camel_content_type_is (ct, "text", "html")) {
-                       if (p->filter_html == NULL)
-                               p->filter_html = camel_mime_filter_html_new ();
+                       if (summary->priv->filter_html == NULL)
+                               summary->priv->filter_html = camel_mime_filter_html_new ();
                        else
-                               camel_mime_filter_reset ((CamelMimeFilter *) p->filter_html);
+                               camel_mime_filter_reset ((CamelMimeFilter *) summary->priv->filter_html);
                        html_id = camel_stream_filter_add (
-                               CAMEL_STREAM_FILTER (p->filter_stream),
-                               (CamelMimeFilter *) p->filter_html);
+                               CAMEL_STREAM_FILTER (summary->priv->filter_stream),
+                               (CamelMimeFilter *) summary->priv->filter_html);
                }
                idx_id = camel_stream_filter_add (
-                       CAMEL_STREAM_FILTER (p->filter_stream),
-                       p->filter_index);
+                       CAMEL_STREAM_FILTER (summary->priv->filter_stream),
+                       summary->priv->filter_index);
 
                /* FIXME Pass a GCancellable and GError here. */
                camel_data_wrapper_decode_to_stream_sync (
-                       containee, p->filter_stream, NULL, NULL);
-               camel_stream_flush (p->filter_stream, NULL, NULL);
+                       containee, summary->priv->filter_stream, NULL, NULL);
+               camel_stream_flush (summary->priv->filter_stream, NULL, NULL);
 
                camel_stream_filter_remove (
-                       CAMEL_STREAM_FILTER (p->filter_stream), idx_id);
+                       CAMEL_STREAM_FILTER (summary->priv->filter_stream), idx_id);
                camel_stream_filter_remove (
-                       CAMEL_STREAM_FILTER (p->filter_stream), html_id);
+                       CAMEL_STREAM_FILTER (summary->priv->filter_stream), html_id);
        }
 }
 
@@ -3379,10 +3419,19 @@ CamelMessageInfo *
 camel_message_info_new_from_headers (CamelFolderSummary *summary,
                                     const CamelNameValueArray *headers)
 {
-       if (summary != NULL)
-               return CAMEL_FOLDER_SUMMARY_GET_CLASS (summary)->message_info_new_from_headers (summary, 
headers);
-       else
+       if (summary != NULL) {
+               CamelFolderSummaryClass *klass;
+
+               g_return_val_if_fail (CAMEL_IS_FOLDER_SUMMARY (summary), NULL);
+
+               klass = CAMEL_FOLDER_SUMMARY_GET_CLASS (summary);
+               g_return_val_if_fail (klass != NULL, NULL);
+               g_return_val_if_fail (klass->message_info_new_from_headers != NULL, NULL);
+
+               return klass->message_info_new_from_headers (summary, headers);
+       } else {
                return message_info_new_from_headers (NULL, headers);
+       }
 }
 
 /**
diff --git a/src/camel/camel-folder.c b/src/camel/camel-folder.c
index ee67b63..c67b2be 100644
--- a/src/camel/camel-folder.c
+++ b/src/camel/camel-folder.c
@@ -1396,6 +1396,7 @@ camel_folder_get_filename (CamelFolder *folder,
        g_return_val_if_fail (uid != NULL, NULL);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_filename != NULL, NULL);
 
        filename = class->get_filename (folder, uid, error);
@@ -1713,6 +1714,7 @@ camel_folder_get_message_count (CamelFolder *folder)
        g_return_val_if_fail (CAMEL_IS_FOLDER (folder), -1);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_val_if_fail (class != NULL, -1);
        g_return_val_if_fail (class->get_message_count != NULL, -1);
 
        return class->get_message_count (folder);
@@ -1802,6 +1804,7 @@ camel_folder_get_permanent_flags (CamelFolder *folder)
        g_return_val_if_fail (CAMEL_IS_FOLDER (folder), 0);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_val_if_fail (class != NULL, 0);
        g_return_val_if_fail (class->get_permanent_flags != NULL, 0);
 
        return class->get_permanent_flags (folder);
@@ -1827,6 +1830,7 @@ camel_folder_get_message_flags (CamelFolder *folder,
        g_return_val_if_fail (uid != NULL, 0);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_val_if_fail (class != NULL, 0);
        g_return_val_if_fail (class->get_message_flags != NULL, 0);
 
        return class->get_message_flags (folder, uid);
@@ -1863,6 +1867,7 @@ camel_folder_set_message_flags (CamelFolder *folder,
        g_return_val_if_fail (uid != NULL, FALSE);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->set_message_flags != NULL, FALSE);
 
        return class->set_message_flags (folder, uid, mask, set);
@@ -1892,6 +1897,7 @@ camel_folder_get_message_user_flag (CamelFolder *folder,
        g_return_val_if_fail (name != NULL, 0);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_val_if_fail (class != NULL, 0);
        g_return_val_if_fail (class->get_message_user_flag != NULL, 0);
 
        return class->get_message_user_flag (folder, uid, name);
@@ -1924,6 +1930,7 @@ camel_folder_set_message_user_flag (CamelFolder *folder,
        g_return_if_fail (name != NULL);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->set_message_user_flag != NULL);
 
        class->set_message_user_flag (folder, uid, name, value);
@@ -1952,6 +1959,7 @@ camel_folder_get_message_user_tag (CamelFolder *folder,
        g_return_val_if_fail (name != NULL, NULL);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_message_user_tag != NULL, NULL);
 
        /* FIXME: should duplicate string */
@@ -1985,6 +1993,7 @@ camel_folder_set_message_user_tag (CamelFolder *folder,
        g_return_if_fail (name != NULL);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->set_message_user_tag != NULL);
 
        class->set_message_user_tag (folder, uid, name, value);
@@ -2011,6 +2020,7 @@ camel_folder_get_message_info (CamelFolder *folder,
        g_return_val_if_fail (uid != NULL, NULL);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_message_info != NULL, NULL);
 
        return class->get_message_info (folder, uid);
@@ -2055,6 +2065,7 @@ camel_folder_get_uids (CamelFolder *folder)
        g_return_val_if_fail (CAMEL_IS_FOLDER (folder), NULL);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_uids != NULL, NULL);
 
        return class->get_uids (folder);
@@ -2077,6 +2088,7 @@ camel_folder_free_uids (CamelFolder *folder,
        g_return_if_fail (array != NULL);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->free_uids != NULL);
 
        class->free_uids (folder, array);
@@ -2109,6 +2121,7 @@ camel_folder_get_uncached_uids (CamelFolder *folder,
        g_return_val_if_fail (uids != NULL, NULL);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_uncached_uids != NULL, NULL);
 
        uncached_uids = class->get_uncached_uids (folder, uids, error);
@@ -2142,6 +2155,7 @@ camel_folder_cmp_uids (CamelFolder *folder,
        g_return_val_if_fail (uid2 != NULL, 0);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_val_if_fail (class != NULL, 0);
        g_return_val_if_fail (class->cmp_uids != NULL, 0);
 
        return class->cmp_uids (folder, uid1, uid2);
@@ -2166,6 +2180,7 @@ camel_folder_sort_uids (CamelFolder *folder,
        g_return_if_fail (uids != NULL);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->sort_uids != NULL);
 
        class->sort_uids (folder, uids);
@@ -2189,6 +2204,7 @@ camel_folder_get_summary (CamelFolder *folder)
        g_return_val_if_fail (CAMEL_IS_FOLDER (folder), NULL);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_summary != NULL, NULL);
 
        return class->get_summary (folder);
@@ -2211,6 +2227,7 @@ camel_folder_free_summary (CamelFolder *folder,
        g_return_if_fail (array != NULL);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->free_summary != NULL);
 
        class->free_summary (folder, array);
@@ -2241,6 +2258,7 @@ camel_folder_search_by_expression (CamelFolder *folder,
        g_return_val_if_fail (CAMEL_IS_FOLDER (folder), NULL);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->search_by_expression != NULL, NULL);
 
        /* NOTE: that it is upto the callee to CAMEL_FOLDER_REC_LOCK */
@@ -2275,6 +2293,7 @@ camel_folder_count_by_expression (CamelFolder *folder,
        g_return_val_if_fail (CAMEL_IS_FOLDER (folder), 0);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_val_if_fail (class != NULL, 0);
        g_return_val_if_fail (class->count_by_expression != NULL, 0);
 
        /* NOTE: that it is upto the callee to CAMEL_FOLDER_REC_LOCK */
@@ -2309,6 +2328,7 @@ camel_folder_search_by_uids (CamelFolder *folder,
        g_return_val_if_fail (CAMEL_IS_FOLDER (folder), NULL);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->search_by_uids != NULL, NULL);
 
        /* NOTE: that it is upto the callee to CAMEL_FOLDER_REC_LOCK */
@@ -2337,6 +2357,7 @@ camel_folder_search_free (CamelFolder *folder,
        g_return_if_fail (result != NULL);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->search_free != NULL);
 
        /* NOTE: upto the callee to CAMEL_FOLDER_REC_LOCK */
@@ -2366,6 +2387,7 @@ camel_folder_delete (CamelFolder *folder)
        g_return_if_fail (CAMEL_IS_FOLDER (folder));
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->delete_ != NULL);
 
        camel_folder_lock (folder);
@@ -2431,6 +2453,7 @@ camel_folder_rename (CamelFolder *folder,
        g_return_if_fail (new_name != NULL);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->rename != NULL);
 
        old_name = g_strdup (camel_folder_get_full_name (folder));
@@ -2546,6 +2569,7 @@ camel_folder_freeze (CamelFolder *folder)
        g_return_if_fail (CAMEL_IS_FOLDER (folder));
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->freeze != NULL);
 
        class->freeze (folder);
@@ -2567,6 +2591,7 @@ camel_folder_thaw (CamelFolder *folder)
        g_return_if_fail (folder->priv->frozen != 0);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->thaw != NULL);
 
        class->thaw (folder);
@@ -2586,6 +2611,7 @@ camel_folder_is_frozen (CamelFolder *folder)
        g_return_val_if_fail (CAMEL_IS_FOLDER (folder), FALSE);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->is_frozen != NULL, FALSE);
 
        return class->is_frozen (folder);
@@ -2790,6 +2816,7 @@ camel_folder_append_message_sync (CamelFolder *folder,
        g_return_val_if_fail (CAMEL_IS_MIME_MESSAGE (message), FALSE);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->append_message_sync != NULL, FALSE);
 
        /* Need to connect the service before we can append. */
@@ -2964,6 +2991,7 @@ camel_folder_expunge_sync (CamelFolder *folder,
        g_return_val_if_fail (CAMEL_IS_FOLDER (folder), FALSE);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->expunge_sync != NULL, FALSE);
 
        /* Need to connect the service before we can expunge. */
@@ -3110,6 +3138,7 @@ camel_folder_get_message_sync (CamelFolder *folder,
        g_return_val_if_fail (message_uid != NULL, NULL);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_message_sync != NULL, NULL);
 
        camel_operation_push_message (
@@ -3199,6 +3228,8 @@ camel_folder_get_message_cached (CamelFolder *folder,
        g_return_val_if_fail (message_uid != NULL, NULL);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_val_if_fail (class != NULL, NULL);
+
        if (!class->get_message_cached)
                return NULL;
 
@@ -3333,6 +3364,7 @@ camel_folder_get_quota_info_sync (CamelFolder *folder,
        g_return_val_if_fail (CAMEL_IS_FOLDER (folder), NULL);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_quota_info_sync != NULL, NULL);
 
        /* Translators: The first “%s” is replaced with an account name and the second “%s”
@@ -3470,6 +3502,7 @@ camel_folder_purge_message_cache_sync (CamelFolder *folder,
        g_return_val_if_fail (CAMEL_IS_FOLDER (folder), FALSE);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_val_if_fail (class != NULL, FALSE);
 
        /* Some backends that wont support mobile
         * mode, won't have this api implemented. */
@@ -3618,6 +3651,7 @@ camel_folder_refresh_info_sync (CamelFolder *folder,
        g_return_val_if_fail (CAMEL_IS_FOLDER (folder), FALSE);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->refresh_info_sync != NULL, FALSE);
 
        /* Need to connect the service before we can refresh. */
@@ -3759,6 +3793,7 @@ camel_folder_synchronize_sync (CamelFolder *folder,
        g_return_val_if_fail (CAMEL_IS_FOLDER (folder), FALSE);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->synchronize_sync != NULL, FALSE);
 
        /* Need to connect the service before we can synchronize. */
@@ -3914,6 +3949,7 @@ camel_folder_synchronize_message_sync (CamelFolder *folder,
        g_return_val_if_fail (message_uid != NULL, FALSE);
 
        class = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->get_message_sync != NULL, FALSE);
 
        camel_folder_lock (folder);
@@ -4108,6 +4144,9 @@ camel_folder_transfer_messages_to_sync (CamelFolder *source,
                        class = CAMEL_FOLDER_GET_CLASS (destination);
                else
                        class = CAMEL_FOLDER_GET_CLASS (source);
+
+               g_return_val_if_fail (class != NULL, FALSE);
+
                success = class->transfer_messages_to_sync (
                        source, message_uids, destination, delete_originals,
                        transferred_uids, cancellable, error);
@@ -4270,6 +4309,7 @@ camel_folder_prepare_content_refresh (CamelFolder *folder)
        g_return_if_fail (CAMEL_IS_FOLDER (folder));
 
        klass = CAMEL_FOLDER_GET_CLASS (folder);
+       g_return_if_fail (klass != NULL);
 
        if (klass->prepare_content_refresh)
                klass->prepare_content_refresh (folder);
@@ -4582,7 +4622,7 @@ camel_folder_change_info_add_uid (CamelFolderChangeInfo *info,
                } else if (olduids == info->uid_changed) {
                        g_ptr_array_remove_fast (olduids, olduid);
                        g_ptr_array_add (info->uid_added, olduid);
-                       g_hash_table_insert (p->uid_stored, olduid, info->uid_changed);
+                       g_hash_table_insert (p->uid_stored, olduid, info->uid_added);
                }
                return;
        }
diff --git a/src/camel/camel-index.c b/src/camel/camel-index.c
index c95964e..98cc3cf 100644
--- a/src/camel/camel-index.c
+++ b/src/camel/camel-index.c
@@ -97,6 +97,7 @@ camel_index_rename (CamelIndex *idx,
        g_return_val_if_fail (CAMEL_IS_INDEX (idx), -1);
 
        class = CAMEL_INDEX_GET_CLASS (idx);
+       g_return_val_if_fail (class != NULL, -1);
        g_return_val_if_fail (class->rename != NULL, -1);
 
        if ((idx->state & CAMEL_INDEX_DELETED) == 0)
@@ -134,6 +135,7 @@ camel_index_sync (CamelIndex *idx)
        g_return_val_if_fail (CAMEL_IS_INDEX (idx), -1);
 
        class = CAMEL_INDEX_GET_CLASS (idx);
+       g_return_val_if_fail (class != NULL, -1);
        g_return_val_if_fail (class->sync != NULL, -1);
 
        if ((idx->state & CAMEL_INDEX_DELETED) == 0)
@@ -152,6 +154,7 @@ camel_index_compress (CamelIndex *idx)
        g_return_val_if_fail (CAMEL_IS_INDEX (idx), -1);
 
        class = CAMEL_INDEX_GET_CLASS (idx);
+       g_return_val_if_fail (class != NULL, -1);
        g_return_val_if_fail (class->compress != NULL, -1);
 
        if ((idx->state & CAMEL_INDEX_DELETED) == 0)
@@ -171,6 +174,7 @@ camel_index_delete (CamelIndex *idx)
        g_return_val_if_fail (CAMEL_IS_INDEX (idx), -1);
 
        class = CAMEL_INDEX_GET_CLASS (idx);
+       g_return_val_if_fail (class != NULL, -1);
        g_return_val_if_fail (class->delete_ != NULL, -1);
 
        if ((idx->state & CAMEL_INDEX_DELETED) == 0) {
@@ -193,6 +197,7 @@ camel_index_has_name (CamelIndex *idx,
        g_return_val_if_fail (CAMEL_IS_INDEX (idx), FALSE);
 
        class = CAMEL_INDEX_GET_CLASS (idx);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->has_name != NULL, FALSE);
 
        if ((idx->state & CAMEL_INDEX_DELETED) == 0)
@@ -219,6 +224,7 @@ camel_index_add_name (CamelIndex *index,
        g_return_val_if_fail (CAMEL_IS_INDEX (index), NULL);
 
        class = CAMEL_INDEX_GET_CLASS (index);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->add_name != NULL, NULL);
 
        if ((index->state & CAMEL_INDEX_DELETED) == 0)
@@ -236,6 +242,7 @@ camel_index_write_name (CamelIndex *idx,
        g_return_val_if_fail (CAMEL_IS_INDEX (idx), -1);
 
        class = CAMEL_INDEX_GET_CLASS (idx);
+       g_return_val_if_fail (class != NULL, -1);
        g_return_val_if_fail (class->write_name != NULL, -1);
 
        if ((idx->state & CAMEL_INDEX_DELETED) == 0)
@@ -263,6 +270,7 @@ camel_index_find_name (CamelIndex *index,
        g_return_val_if_fail (CAMEL_IS_INDEX (index), NULL);
 
        class = CAMEL_INDEX_GET_CLASS (index);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->find_name != NULL, NULL);
 
        if ((index->state & CAMEL_INDEX_DELETED) == 0)
@@ -287,6 +295,7 @@ camel_index_delete_name (CamelIndex *index,
        g_return_if_fail (CAMEL_IS_INDEX (index));
 
        class = CAMEL_INDEX_GET_CLASS (index);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->delete_name != NULL);
 
        if ((index->state & CAMEL_INDEX_DELETED) == 0)
@@ -312,6 +321,7 @@ camel_index_find (CamelIndex *index,
        g_return_val_if_fail (CAMEL_IS_INDEX (index), NULL);
 
        class = CAMEL_INDEX_GET_CLASS (index);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->find != NULL, NULL);
 
        if ((index->state & CAMEL_INDEX_DELETED) != 0)
@@ -343,6 +353,7 @@ camel_index_words (CamelIndex *index)
        g_return_val_if_fail (CAMEL_IS_INDEX (index), NULL);
 
        class = CAMEL_INDEX_GET_CLASS (index);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->words != NULL, NULL);
 
        if ((index->state & CAMEL_INDEX_DELETED) == 0)
@@ -395,6 +406,7 @@ camel_index_name_add_word (CamelIndexName *idn,
        g_return_if_fail (CAMEL_IS_INDEX_NAME (idn));
 
        class = CAMEL_INDEX_NAME_GET_CLASS (idn);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->add_word != NULL);
 
        if (idn->index->normalize)
@@ -416,6 +428,7 @@ camel_index_name_add_buffer (CamelIndexName *idn,
        g_return_val_if_fail (CAMEL_IS_INDEX_NAME (idn), 0);
 
        class = CAMEL_INDEX_NAME_GET_CLASS (idn);
+       g_return_val_if_fail (class != NULL, 0);
        g_return_val_if_fail (class->add_buffer != NULL, 0);
 
        return class->add_buffer (idn, buffer, len);
@@ -463,6 +476,7 @@ camel_index_cursor_next (CamelIndexCursor *idc)
        g_return_val_if_fail (CAMEL_IS_INDEX_CURSOR (idc), NULL);
 
        class = CAMEL_INDEX_CURSOR_GET_CLASS (idc);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->next != NULL, NULL);
 
        return class->next (idc);
diff --git a/src/camel/camel-medium.c b/src/camel/camel-medium.c
index 2165881..f35491a 100644
--- a/src/camel/camel-medium.c
+++ b/src/camel/camel-medium.c
@@ -187,6 +187,7 @@ camel_medium_add_header (CamelMedium *medium,
        g_return_if_fail (value != NULL);
 
        class = CAMEL_MEDIUM_GET_CLASS (medium);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->add_header != NULL);
 
        class->add_header (medium, name, value);
@@ -218,6 +219,7 @@ camel_medium_set_header (CamelMedium *medium,
        }
 
        class = CAMEL_MEDIUM_GET_CLASS (medium);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->set_header != NULL);
 
        class->set_header (medium, name, value);
@@ -241,6 +243,7 @@ camel_medium_remove_header (CamelMedium *medium,
        g_return_if_fail (name != NULL);
 
        class = CAMEL_MEDIUM_GET_CLASS (medium);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->remove_header != NULL);
 
        class->remove_header (medium, name);
@@ -270,6 +273,7 @@ camel_medium_get_header (CamelMedium *medium,
        g_return_val_if_fail (name != NULL, NULL);
 
        class = CAMEL_MEDIUM_GET_CLASS (medium);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_header != NULL, NULL);
 
        return class->get_header (medium, name);
@@ -295,6 +299,7 @@ camel_medium_dup_headers (CamelMedium *medium)
        g_return_val_if_fail (CAMEL_IS_MEDIUM (medium), NULL);
 
        class = CAMEL_MEDIUM_GET_CLASS (medium);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->dup_headers != NULL, NULL);
 
        return class->dup_headers (medium);
@@ -320,6 +325,7 @@ camel_medium_get_headers (CamelMedium *medium)
        g_return_val_if_fail (CAMEL_IS_MEDIUM (medium), NULL);
 
        class = CAMEL_MEDIUM_GET_CLASS (medium);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_headers != NULL, NULL);
 
        return class->get_headers (medium);
@@ -343,6 +349,7 @@ camel_medium_get_content (CamelMedium *medium)
        g_return_val_if_fail (CAMEL_IS_MEDIUM (medium), NULL);
 
        class = CAMEL_MEDIUM_GET_CLASS (medium);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_content != NULL, NULL);
 
        return class->get_content (medium);
@@ -367,6 +374,7 @@ camel_medium_set_content (CamelMedium *medium,
                g_return_if_fail (CAMEL_IS_DATA_WRAPPER (content));
 
        class = CAMEL_MEDIUM_GET_CLASS (medium);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->set_content != NULL);
 
        class->set_content (medium, content);
diff --git a/src/camel/camel-mime-filter.c b/src/camel/camel-mime-filter.c
index 1ea7770..2b4918c 100644
--- a/src/camel/camel-mime-filter.c
+++ b/src/camel/camel-mime-filter.c
@@ -226,6 +226,7 @@ camel_mime_filter_filter (CamelMimeFilter *filter,
        g_return_if_fail (in != NULL);
 
        class = CAMEL_MIME_FILTER_GET_CLASS (filter);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->filter != NULL);
 
        filter_run (
@@ -264,6 +265,7 @@ camel_mime_filter_complete (CamelMimeFilter *filter,
        g_return_if_fail (in != NULL);
 
        class = CAMEL_MIME_FILTER_GET_CLASS (filter);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->complete != NULL);
 
        filter_run (
@@ -285,6 +287,7 @@ camel_mime_filter_reset (CamelMimeFilter *filter)
        g_return_if_fail (CAMEL_IS_MIME_FILTER (filter));
 
        class = CAMEL_MIME_FILTER_GET_CLASS (filter);
+       g_return_if_fail (class != NULL);
 
        if (class->reset != NULL)
                class->reset (filter);
diff --git a/src/camel/camel-mime-message.c b/src/camel/camel-mime-message.c
index bca0f93..0d0477a 100644
--- a/src/camel/camel-mime-message.c
+++ b/src/camel/camel-mime-message.c
@@ -109,7 +109,7 @@ process_header (CamelMedium *medium,
        const gchar *charset;
        gchar *unfolded;
 
-       header_type = (CamelHeaderType) g_hash_table_lookup (header_name_table, name);
+       header_type = (CamelHeaderType) GPOINTER_TO_INT (g_hash_table_lookup (header_name_table, name));
        switch (header_type) {
        case HEADER_FROM:
                addr = camel_internet_address_new ();
@@ -1396,6 +1396,8 @@ cmm_dump_rec (CamelMimeMessage *msg,
        gchar *s;
        const GByteArray *data;
 
+       g_return_if_fail (CAMEL_IS_MIME_PART (part));
+
        s = alloca (depth + 1);
        memset (s, ' ', depth);
        s[depth] = 0;
diff --git a/src/camel/camel-mime-parser.c b/src/camel/camel-mime-parser.c
index a241606..8f8ca29 100644
--- a/src/camel/camel-mime-parser.c
+++ b/src/camel/camel-mime-parser.c
@@ -1087,13 +1087,9 @@ folder_push_part (struct _header_scan_state *s,
 }
 
 static void
-folder_pull_part (struct _header_scan_state *s)
+folder_scan_stack_free (struct _header_scan_stack *h)
 {
-       struct _header_scan_stack *h;
-
-       h = s->parts;
        if (h) {
-               s->parts = h->parent;
                g_free (h->boundary);
 #ifdef MEMPOOL
                camel_mempool_destroy (h->pool);
@@ -1108,6 +1104,19 @@ folder_pull_part (struct _header_scan_state *s)
                if (h->from_line)
                        g_byte_array_free (h->from_line, TRUE);
                g_free (h);
+       }
+}
+
+static void
+folder_pull_part (struct _header_scan_state *s)
+{
+       struct _header_scan_stack *h;
+
+       h = s->parts;
+       if (h) {
+               s->parts = h->parent;
+
+               folder_scan_stack_free (h);
        } else {
                g_warning ("Header stack underflow!\n");
        }
@@ -1338,7 +1347,11 @@ folder_scan_header (struct _header_scan_state *s,
                                while ((*inptr++) != '\n')
                                        ;
 
-                               g_return_val_if_fail (inptr <= s->inend + 1, NULL);
+                               if (inptr > s->inend + 1) {
+                                       g_warn_if_fail (inptr <= s->inend + 1);
+                                       folder_scan_stack_free (h);
+                                       return NULL;
+                               }
 
                                /* check for sentinal or real end of line */
                                if (inptr >= inend) {
diff --git a/src/camel/camel-mime-part.c b/src/camel/camel-mime-part.c
index 76cbe2a..d46c3fe 100644
--- a/src/camel/camel-mime-part.c
+++ b/src/camel/camel-mime-part.c
@@ -239,31 +239,31 @@ init_header_name_table (void)
        g_hash_table_insert (
                header_name_table,
                (gpointer) "Content-Description",
-               (gpointer) HEADER_DESCRIPTION);
+               GINT_TO_POINTER (HEADER_DESCRIPTION));
        g_hash_table_insert (
                header_name_table,
                (gpointer) "Content-Disposition",
-               (gpointer) HEADER_DISPOSITION);
+               GINT_TO_POINTER (HEADER_DISPOSITION));
        g_hash_table_insert (
                header_name_table,
                (gpointer) "Content-id",
-               (gpointer) HEADER_CONTENT_ID);
+               GINT_TO_POINTER (HEADER_CONTENT_ID));
        g_hash_table_insert (
                header_name_table,
                (gpointer) "Content-Transfer-Encoding",
-               (gpointer) HEADER_ENCODING);
+               GINT_TO_POINTER (HEADER_ENCODING));
        g_hash_table_insert (
                header_name_table,
                (gpointer) "Content-MD5",
-               (gpointer) HEADER_CONTENT_MD5);
+               GINT_TO_POINTER (HEADER_CONTENT_MD5));
        g_hash_table_insert (
                header_name_table,
                (gpointer) "Content-Location",
-               (gpointer) HEADER_CONTENT_LOCATION);
+               GINT_TO_POINTER (HEADER_CONTENT_LOCATION));
        g_hash_table_insert (
                header_name_table,
                (gpointer) "Content-Type",
-               (gpointer) HEADER_CONTENT_TYPE);
+               GINT_TO_POINTER (HEADER_CONTENT_TYPE));
 
        header_formatted_table = g_hash_table_new (
                camel_strcase_hash, camel_strcase_equal);
@@ -317,7 +317,7 @@ mime_part_process_header (CamelMedium *medium,
        /* known, the job is done in the parsing routine. If not,         */
        /* we simply add the header in a raw fashion                      */
 
-       header_type = (CamelHeaderType) g_hash_table_lookup (header_name_table, name);
+       header_type = (CamelHeaderType) GPOINTER_TO_INT (g_hash_table_lookup (header_name_table, name));
        switch (header_type) {
        case HEADER_DESCRIPTION: /* raw header->utf8 conversion */
                g_free (mime_part->priv->description);
@@ -1583,6 +1583,7 @@ camel_mime_part_construct_from_parser_sync (CamelMimePart *mime_part,
        g_return_val_if_fail (CAMEL_IS_MIME_PARSER (parser), FALSE);
 
        class = CAMEL_MIME_PART_GET_CLASS (mime_part);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->construct_from_parser_sync != NULL, FALSE);
 
        success = class->construct_from_parser_sync (
diff --git a/src/camel/camel-multipart.c b/src/camel/camel-multipart.c
index 3329ada..e349bbd 100644
--- a/src/camel/camel-multipart.c
+++ b/src/camel/camel-multipart.c
@@ -447,6 +447,7 @@ camel_multipart_add_part (CamelMultipart *multipart,
        g_return_if_fail (CAMEL_IS_MIME_PART (part));
 
        class = CAMEL_MULTIPART_GET_CLASS (multipart);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->add_part != NULL);
 
        class->add_part (multipart, part);
@@ -468,6 +469,7 @@ camel_multipart_get_part (CamelMultipart *multipart,
        g_return_val_if_fail (CAMEL_IS_MULTIPART (multipart), NULL);
 
        class = CAMEL_MULTIPART_GET_CLASS (multipart);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_part != NULL, NULL);
 
        return class->get_part (multipart, index);
@@ -487,6 +489,7 @@ camel_multipart_get_number (CamelMultipart *multipart)
        g_return_val_if_fail (CAMEL_IS_MULTIPART (multipart), 0);
 
        class = CAMEL_MULTIPART_GET_CLASS (multipart);
+       g_return_val_if_fail (class != NULL, 0);
        g_return_val_if_fail (class->get_number != NULL, 0);
 
        return class->get_number (multipart);
@@ -506,6 +509,7 @@ camel_multipart_get_boundary (CamelMultipart *multipart)
        g_return_val_if_fail (CAMEL_IS_MULTIPART (multipart), NULL);
 
        class = CAMEL_MULTIPART_GET_CLASS (multipart);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_boundary != NULL, NULL);
 
        return class->get_boundary (multipart);
@@ -530,6 +534,7 @@ camel_multipart_set_boundary (CamelMultipart *multipart,
        g_return_if_fail (CAMEL_IS_MULTIPART (multipart));
 
        class = CAMEL_MULTIPART_GET_CLASS (multipart);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->set_boundary != NULL);
 
        class->set_boundary (multipart, boundary);
@@ -636,6 +641,7 @@ camel_multipart_construct_from_parser (CamelMultipart *multipart,
        g_return_val_if_fail (CAMEL_IS_MIME_PARSER (mp), -1);
 
        class = CAMEL_MULTIPART_GET_CLASS (multipart);
+       g_return_val_if_fail (class != NULL, -1);
        g_return_val_if_fail (class->construct_from_parser != NULL, -1);
 
        return class->construct_from_parser (multipart, mp);
diff --git a/src/camel/camel-object.c b/src/camel/camel-object.c
index ea7a0b8..6f9003d 100644
--- a/src/camel/camel-object.c
+++ b/src/camel/camel-object.c
@@ -428,6 +428,7 @@ camel_object_state_read (CamelObject *object)
        g_return_val_if_fail (CAMEL_IS_OBJECT (object), -1);
 
        class = CAMEL_OBJECT_GET_CLASS (object);
+       g_return_val_if_fail (class != NULL, -1);
 
        state_filename = camel_object_get_state_filename (object);
        if (state_filename == NULL)
@@ -464,6 +465,7 @@ camel_object_state_write (CamelObject *object)
        g_return_val_if_fail (CAMEL_IS_OBJECT (object), -1);
 
        class = CAMEL_OBJECT_GET_CLASS (object);
+       g_return_val_if_fail (class != NULL, -1);
 
        state_filename = camel_object_get_state_filename (object);
        if (state_filename == NULL)
diff --git a/src/camel/camel-offline-folder.c b/src/camel/camel-offline-folder.c
index 3aa5cd8..5e631d4 100644
--- a/src/camel/camel-offline-folder.c
+++ b/src/camel/camel-offline-folder.c
@@ -643,6 +643,7 @@ camel_offline_folder_downsync_sync (CamelOfflineFolder *folder,
        g_return_val_if_fail (CAMEL_IS_OFFLINE_FOLDER (folder), FALSE);
 
        class = CAMEL_OFFLINE_FOLDER_GET_CLASS (folder);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->downsync_sync != NULL, FALSE);
 
        success = class->downsync_sync (
diff --git a/src/camel/camel-provider.c b/src/camel/camel-provider.c
index ba7a87d..602b378 100644
--- a/src/camel/camel-provider.c
+++ b/src/camel/camel-provider.c
@@ -202,7 +202,6 @@ camel_provider_init (void)
        GDir *dir;
        const gchar *entry;
        gchar *p, *name, buf[80];
-       CamelProviderModule *m;
        static gint loaded = 0;
        const gchar *provider_dir;
 
@@ -226,6 +225,7 @@ camel_provider_init (void)
        }
 
        while ((entry = g_dir_read_name (dir))) {
+               CamelProviderModule *m = NULL;
                FILE *fp;
 
                p = strrchr (entry, '.');
@@ -246,9 +246,6 @@ camel_provider_init (void)
                if (p)
                        strcpy (p, "." G_MODULE_SUFFIX);
 
-               m = g_malloc0 (sizeof (*m));
-               m->path = name;
-
                while ((fgets (buf, sizeof (buf), fp))) {
                        buf[sizeof (buf) - 1] = '\0';
                        p = strchr (buf, '\n');
@@ -258,11 +255,18 @@ camel_provider_init (void)
                        if (*buf) {
                                gchar *protocol = g_strdup (buf);
 
+                               if (!m) {
+                                       m = g_malloc0 (sizeof (*m));
+                                       m->path = name;
+                               }
+
                                m->types = g_slist_prepend (m->types, protocol);
                                g_hash_table_insert (module_table, protocol, m);
                        }
                }
 
+               if (!m)
+                       g_free (name);
                fclose (fp);
        }
 
diff --git a/src/camel/camel-sasl.c b/src/camel/camel-sasl.c
index 6c0dd9b..12b4be1 100644
--- a/src/camel/camel-sasl.c
+++ b/src/camel/camel-sasl.c
@@ -88,18 +88,18 @@ sasl_build_class_table_rec (GType type,
        children = g_type_children (type, &n_children);
 
        for (ii = 0; ii < n_children; ii++) {
-               GType type = children[ii];
+               GType child_type = children[ii];
                CamelSaslClass *sasl_class;
                gpointer key;
 
                /* Recurse over the child's children. */
-               sasl_build_class_table_rec (type, class_table);
+               sasl_build_class_table_rec (child_type, class_table);
 
                /* Skip abstract types. */
-               if (G_TYPE_IS_ABSTRACT (type))
+               if (G_TYPE_IS_ABSTRACT (child_type))
                        continue;
 
-               sasl_class = g_type_class_ref (type);
+               sasl_class = g_type_class_ref (child_type);
 
                if (sasl_class->auth_type == NULL) {
                        g_critical (
@@ -421,6 +421,7 @@ camel_sasl_try_empty_password_sync (CamelSasl *sasl,
        g_return_val_if_fail (CAMEL_IS_SASL (sasl), FALSE);
 
        class = CAMEL_SASL_GET_CLASS (sasl);
+       g_return_val_if_fail (class != NULL, FALSE);
 
        if (class->try_empty_password_sync == NULL)
                return FALSE;
@@ -607,6 +608,7 @@ camel_sasl_challenge_sync (CamelSasl *sasl,
        g_return_val_if_fail (CAMEL_IS_SASL (sasl), NULL);
 
        class = CAMEL_SASL_GET_CLASS (sasl);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->challenge_sync != NULL, NULL);
 
        response = class->challenge_sync (sasl, token, cancellable, error);
diff --git a/src/camel/camel-service.c b/src/camel/camel-service.c
index 45d6e9e..aff79a5 100644
--- a/src/camel/camel-service.c
+++ b/src/camel/camel-service.c
@@ -1437,6 +1437,7 @@ camel_service_get_name (CamelService *service,
        g_return_val_if_fail (CAMEL_IS_SERVICE (service), NULL);
 
        class = CAMEL_SERVICE_GET_CLASS (service);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_name != NULL, NULL);
 
        return class->get_name (service, brief);
@@ -1610,6 +1611,7 @@ camel_service_set_settings (CamelService *service,
        g_return_if_fail (CAMEL_IS_SERVICE (service));
 
        class = CAMEL_SERVICE_GET_CLASS (service);
+       g_return_if_fail (class != NULL);
 
        if (settings != NULL) {
                g_return_if_fail (
@@ -2093,9 +2095,8 @@ camel_service_authenticate_sync (CamelService *service,
                CAMEL_AUTHENTICATION_ERROR);
 
        class = CAMEL_SERVICE_GET_CLASS (service);
-       g_return_val_if_fail (
-               class->authenticate_sync != NULL,
-               CAMEL_AUTHENTICATION_ERROR);
+       g_return_val_if_fail (class != NULL, CAMEL_AUTHENTICATION_ERROR);
+       g_return_val_if_fail (class->authenticate_sync != NULL, CAMEL_AUTHENTICATION_ERROR);
 
        result = class->authenticate_sync (
                service, mechanism, cancellable, error);
@@ -2255,6 +2256,7 @@ camel_service_query_auth_types_sync (CamelService *service,
        g_return_val_if_fail (CAMEL_IS_SERVICE (service), NULL);
 
        class = CAMEL_SERVICE_GET_CLASS (service);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->query_auth_types_sync != NULL, NULL);
 
        return class->query_auth_types_sync (service, cancellable, error);
diff --git a/src/camel/camel-session.c b/src/camel/camel-session.c
index 74634a9..4431d7a 100644
--- a/src/camel/camel-session.c
+++ b/src/camel/camel-session.c
@@ -916,6 +916,7 @@ camel_session_add_service (CamelSession *session,
        g_return_val_if_fail (protocol != NULL, NULL);
 
        class = CAMEL_SESSION_GET_CLASS (session);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->add_service != NULL, NULL);
 
        service = class->add_service (session, uid, protocol, type, error);
@@ -943,6 +944,7 @@ camel_session_remove_service (CamelSession *session,
        g_return_if_fail (CAMEL_IS_SERVICE (service));
 
        class = CAMEL_SESSION_GET_CLASS (session);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->remove_service != NULL);
 
        class->remove_service (session, service);
@@ -1172,6 +1174,7 @@ camel_session_get_password (CamelSession *session,
        g_return_val_if_fail (item != NULL, NULL);
 
        class = CAMEL_SESSION_GET_CLASS (session);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_password != NULL, NULL);
 
        password = class->get_password (
@@ -1212,6 +1215,7 @@ camel_session_forget_password (CamelSession *session,
        g_return_val_if_fail (item != NULL, FALSE);
 
        class = CAMEL_SESSION_GET_CLASS (session);
+       g_return_val_if_fail (class, FALSE);
        g_return_val_if_fail (class->forget_password, FALSE);
 
        success = class->forget_password (session, service, item, error);
@@ -1247,16 +1251,13 @@ camel_session_trust_prompt (CamelSession *session,
 {
        CamelSessionClass *class;
 
-       g_return_val_if_fail (
-               CAMEL_IS_SESSION (session), CAMEL_CERT_TRUST_UNKNOWN);
-       g_return_val_if_fail (
-               CAMEL_IS_SERVICE (service), CAMEL_CERT_TRUST_UNKNOWN);
-       g_return_val_if_fail (
-               G_IS_TLS_CERTIFICATE (certificate), CAMEL_CERT_TRUST_UNKNOWN);
+       g_return_val_if_fail (CAMEL_IS_SESSION (session), CAMEL_CERT_TRUST_UNKNOWN);
+       g_return_val_if_fail (CAMEL_IS_SERVICE (service), CAMEL_CERT_TRUST_UNKNOWN);
+       g_return_val_if_fail (G_IS_TLS_CERTIFICATE (certificate), CAMEL_CERT_TRUST_UNKNOWN);
 
        class = CAMEL_SESSION_GET_CLASS (session);
-       g_return_val_if_fail (
-               class->trust_prompt != NULL, CAMEL_CERT_TRUST_UNKNOWN);
+       g_return_val_if_fail (class != NULL, CAMEL_CERT_TRUST_UNKNOWN);
+       g_return_val_if_fail (class->trust_prompt != NULL, CAMEL_CERT_TRUST_UNKNOWN);
 
        return class->trust_prompt (session, service, certificate, errors);
 }
@@ -1323,6 +1324,7 @@ camel_session_lookup_addressbook (CamelSession *session,
        g_return_val_if_fail (name != NULL, FALSE);
 
        class = CAMEL_SESSION_GET_CLASS (session);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->lookup_addressbook != NULL, FALSE);
 
        return class->lookup_addressbook (session, name);
@@ -1388,6 +1390,7 @@ camel_session_get_filter_driver (CamelSession *session,
        g_return_val_if_fail (type != NULL, NULL);
 
        class = CAMEL_SESSION_GET_CLASS (session);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_filter_driver != NULL, NULL);
 
        driver = class->get_filter_driver (session, type, for_folder, error);
@@ -1648,6 +1651,7 @@ camel_session_authenticate_sync (CamelSession *session,
        g_return_val_if_fail (CAMEL_IS_SERVICE (service), FALSE);
 
        class = CAMEL_SESSION_GET_CLASS (session);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->authenticate_sync != NULL, FALSE);
 
        success = class->authenticate_sync (
@@ -1801,6 +1805,7 @@ camel_session_forward_to_sync (CamelSession *session,
        g_return_val_if_fail (address != NULL, FALSE);
 
        class = CAMEL_SESSION_GET_CLASS (session);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->forward_to_sync != NULL, FALSE);
 
        success = class->forward_to_sync (
@@ -1953,6 +1958,7 @@ camel_session_get_oauth2_access_token_sync (CamelSession *session,
        g_return_val_if_fail (CAMEL_IS_SESSION (session), FALSE);
 
        klass = CAMEL_SESSION_GET_CLASS (session);
+       g_return_val_if_fail (klass != NULL, FALSE);
        g_return_val_if_fail (klass->get_oauth2_access_token_sync != NULL, FALSE);
 
        return klass->get_oauth2_access_token_sync (session, service, out_access_token, out_expires_in, 
cancellable, error);
diff --git a/src/camel/camel-settings.c b/src/camel/camel-settings.c
index fdeb8e7..db10a4f 100644
--- a/src/camel/camel-settings.c
+++ b/src/camel/camel-settings.c
@@ -44,6 +44,8 @@ settings_clone (CamelSettings *settings)
        guint ii, n_properties;
 
        class = CAMEL_SETTINGS_GET_CLASS (settings);
+       g_return_val_if_fail (class != NULL, NULL);
+
        properties = camel_settings_class_list_settings (class, &n_properties);
 
        parameters = g_new0 (GParameter, n_properties);
@@ -91,6 +93,8 @@ settings_equal (CamelSettings *settings_a,
        value_b = g_slice_new0 (GValue);
 
        class = CAMEL_SETTINGS_GET_CLASS (settings_a);
+       g_return_val_if_fail (class != NULL, FALSE);
+
        properties = camel_settings_class_list_settings (class, &n_properties);
 
        for (ii = 0; equal && ii < n_properties; ii++) {
@@ -182,6 +186,7 @@ camel_settings_clone (CamelSettings *settings)
        g_return_val_if_fail (CAMEL_IS_SETTINGS (settings), NULL);
 
        class = CAMEL_SETTINGS_GET_CLASS (settings);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->clone != NULL, NULL);
 
        clone = class->clone (settings);
@@ -217,6 +222,7 @@ camel_settings_equal (CamelSettings *settings_a,
        g_return_val_if_fail (CAMEL_IS_SETTINGS (settings_b), FALSE);
 
        class = CAMEL_SETTINGS_GET_CLASS (settings_a);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->equal != NULL, FALSE);
 
        return class->equal (settings_a, settings_b);
diff --git a/src/camel/camel-sexp.c b/src/camel/camel-sexp.c
index a0afff0..8ad03ed 100644
--- a/src/camel/camel-sexp.c
+++ b/src/camel/camel-sexp.c
@@ -808,7 +808,7 @@ camel_sexp_term_eval (CamelSExp *sexp,
                       CamelSExpTerm *term)
 {
        CamelSExpResult *result = NULL;
-       gint i;
+       gint i, argc;
        CamelSExpResult **argv;
 
        /* this must only be called from inside term evaluation callbacks! */
@@ -846,15 +846,16 @@ camel_sexp_term_eval (CamelSExp *sexp,
                break;
        case CAMEL_SEXP_TERM_FUNC:
                /* first evaluate all arguments to result types */
-               argv = alloca (sizeof (argv[0]) * term->value.func.termcount);
-               for (i = 0; i < term->value.func.termcount; i++) {
+               argc = term->value.func.termcount;
+               argv = g_alloca (sizeof (argv[0]) * argc);
+               for (i = 0; i < argc; i++) {
                        argv[i] = camel_sexp_term_eval (sexp, term->value.func.terms[i]);
                }
                /* call the function */
                if (term->value.func.sym->f.func)
-                       result = term->value.func.sym->f.func (sexp, term->value.func.termcount, argv, 
term->value.func.sym->data);
+                       result = term->value.func.sym->f.func (sexp, argc, argv, term->value.func.sym->data);
 
-               camel_sexp_resultv_free (sexp, term->value.func.termcount, argv);
+               camel_sexp_resultv_free (sexp, argc, argv);
                break;
        default:
                camel_sexp_fatal_error (sexp, "Unknown type in parse tree: %d", term->type);
@@ -1186,9 +1187,9 @@ camel_sexp_term_evaluate_occur_times (CamelSExp *sexp,
 
                result = camel_sexp_result_new (sexp, CAMEL_SEXP_RES_UNDEFINED);
                argc = term->value.func.termcount;
-               argv = alloca (sizeof (argv[0]) * argc);
+               argv = g_alloca (sizeof (argv[0]) * argc);
 
-               for (i = 0; i < term->value.func.termcount; i++) {
+               for (i = 0; i < argc; i++) {
                        argv[i] = camel_sexp_term_evaluate_occur_times (
                                sexp, term->value.func.terms[i], start, end);
                }
@@ -1196,8 +1197,7 @@ camel_sexp_term_evaluate_occur_times (CamelSExp *sexp,
                if (is_time_function (term->value.func.sym->name)) {
                        /* evaluate time */
                        if (term->value.func.sym->f.func)
-                               result = term->value.func.sym->f.func (sexp, term->value.func.termcount,
-                                             argv, term->value.func.sym->data);
+                               result = term->value.func.sym->f.func (sexp, argc, argv, 
term->value.func.sym->data);
                } else if ((generator = get_generator_function (term->value.func.sym->name)) != NULL) {
                        /* evaluate generator function */
                        result->time_generator = TRUE;
@@ -1210,7 +1210,7 @@ camel_sexp_term_evaluate_occur_times (CamelSExp *sexp,
                        result->time_generator = FALSE;
                }
 
-               camel_sexp_resultv_free (sexp, term->value.func.termcount, argv);
+               camel_sexp_resultv_free (sexp, argc, argv);
                break;
        }
        case CAMEL_SEXP_TERM_INT:
@@ -1304,8 +1304,20 @@ parse_values (CamelSExp *sexp,
        terms = g_malloc (size * sizeof (*terms));
        l = list;
        for (i = size - 1; i >= 0; i--) {
-               g_return_val_if_fail (l, NULL);
-               g_return_val_if_fail (l->data, NULL);
+               if (!l || !l->data) {
+                       if (!l)
+                               g_warn_if_fail (l != NULL);
+                       if (l && !l->data)
+                               g_warn_if_fail (l->data != NULL);
+
+                       g_slist_free (list);
+                       g_free (terms);
+
+                       *len = 0;
+
+                       return NULL;
+               }
+
                terms[i] = l->data;
                l = g_slist_next (l);
        }
diff --git a/src/camel/camel-store-summary.c b/src/camel/camel-store-summary.c
index 5c21950..b78e068 100644
--- a/src/camel/camel-store-summary.c
+++ b/src/camel/camel-store-summary.c
@@ -230,6 +230,7 @@ store_summary_store_info_free (CamelStoreSummary *summary,
        CamelStoreSummaryClass *class;
 
        class = CAMEL_STORE_SUMMARY_GET_CLASS (summary);
+       g_return_if_fail (class != NULL);
 
        g_free (info->path);
        g_slice_free1 (class->store_info_size, info);
@@ -449,6 +450,7 @@ camel_store_summary_load (CamelStoreSummary *summary)
        g_return_val_if_fail (summary->priv->summary_path != NULL, -1);
 
        class = CAMEL_STORE_SUMMARY_GET_CLASS (summary);
+       g_return_val_if_fail (class != NULL, -1);
        g_return_val_if_fail (class->store_info_load != NULL, -1);
 
        in = g_fopen (summary->priv->summary_path, "rb");
@@ -513,6 +515,7 @@ camel_store_summary_save (CamelStoreSummary *summary)
        g_return_val_if_fail (summary->priv->summary_path != NULL, -1);
 
        class = CAMEL_STORE_SUMMARY_GET_CLASS (summary);
+       g_return_val_if_fail (class != NULL, -1);
        g_return_val_if_fail (class->summary_header_save != NULL, -1);
 
        io (printf ("** saving summary\n"));
@@ -638,6 +641,7 @@ camel_store_summary_add_from_path (CamelStoreSummary *summary,
                CamelStoreSummaryClass *class;
 
                class = CAMEL_STORE_SUMMARY_GET_CLASS (summary);
+               g_return_val_if_fail (class != NULL, NULL);
                g_return_val_if_fail (class->store_info_new != NULL, NULL);
 
                info = class->store_info_new (summary, path);
@@ -692,6 +696,7 @@ camel_store_summary_info_unref (CamelStoreSummary *summary,
                CamelStoreSummaryClass *class;
 
                class = CAMEL_STORE_SUMMARY_GET_CLASS (summary);
+               g_return_if_fail (class != NULL);
                g_return_if_fail (class->store_info_free != NULL);
 
                class->store_info_free (summary, info);
@@ -785,6 +790,7 @@ camel_store_summary_info_new (CamelStoreSummary *summary)
        g_return_val_if_fail (CAMEL_IS_STORE_SUMMARY (summary), NULL);
 
        class = CAMEL_STORE_SUMMARY_GET_CLASS (summary);
+       g_return_val_if_fail (class > 0, NULL);
        g_return_val_if_fail (class->store_info_size > 0, NULL);
 
        info = g_slice_alloc0 (class->store_info_size);
@@ -814,6 +820,7 @@ camel_store_info_set_string (CamelStoreSummary *summary,
        g_return_if_fail (info != NULL);
 
        class = CAMEL_STORE_SUMMARY_GET_CLASS (summary);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->store_info_set_string != NULL);
 
        g_rec_mutex_lock (&summary->priv->summary_lock);
diff --git a/src/camel/camel-store.c b/src/camel/camel-store.c
index 8b3b97d..a9bcb9f 100644
--- a/src/camel/camel-store.c
+++ b/src/camel/camel-store.c
@@ -361,6 +361,7 @@ store_constructed (GObject *object)
        store = CAMEL_STORE (object);
        class = CAMEL_STORE_GET_CLASS (store);
 
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->hash_folder_name != NULL);
        g_return_if_fail (class->equal_folder_name != NULL);
 
@@ -387,6 +388,7 @@ store_get_inbox_folder_sync (CamelStore *store,
        CamelFolder *folder;
 
        class = CAMEL_STORE_GET_CLASS (store);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_folder_sync != NULL, NULL);
 
        /* Assume the inbox's name is "inbox" and open with default flags. */
@@ -1170,12 +1172,21 @@ camel_folder_info_build (GPtrArray *folders,
        gchar *p, *pname;
        gint i, nlen;
 
+       if (!folders) {
+               g_warn_if_fail (folders != NULL);
+               return NULL;
+       }
+
+       if (!folders->pdata || !folders->len) {
+               g_warn_if_fail (folders->pdata != NULL);
+               return NULL;
+       }
+
        if (namespace_ == NULL)
                namespace_ = "";
        nlen = strlen (namespace_);
 
-       if (folders->pdata && folders->len)
-               qsort (folders->pdata, folders->len, sizeof (folders->pdata[0]), folder_info_cmp);
+       qsort (folders->pdata, folders->len, sizeof (folders->pdata[0]), folder_info_cmp);
 
        /* Hash the folders. */
        hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
@@ -1318,6 +1329,7 @@ camel_store_can_refresh_folder (CamelStore *store,
        g_return_val_if_fail (info != NULL, FALSE);
 
        class = CAMEL_STORE_GET_CLASS (store);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->can_refresh_folder != NULL, FALSE);
 
        return class->can_refresh_folder (store, info, error);
@@ -1359,6 +1371,7 @@ camel_store_get_folder_sync (CamelStore *store,
        g_return_val_if_fail (folder_name != NULL, NULL);
 
        class = CAMEL_STORE_GET_CLASS (store);
+       g_return_val_if_fail (class != NULL, NULL);
 
 try_again:
        /* Try cache first. */
@@ -1397,6 +1410,13 @@ try_again:
                }
        }
 
+       if (folder_name_is_vtrash)
+               g_return_val_if_fail (class->get_trash_folder_sync != NULL, NULL);
+       else if (folder_name_is_vjunk)
+               g_return_val_if_fail (class->get_junk_folder_sync != NULL, NULL);
+       else
+               g_return_val_if_fail (class->get_folder_sync != NULL, NULL);
+
        camel_operation_push_message (
                cancellable, _("Opening folder “%s”"), folder_name);
 
@@ -1494,6 +1514,7 @@ try_again:
                reversed_name = g_strreverse (g_strdup (folder_name));
                child_and_parent = g_strsplit (reversed_name, "/", 2);
                g_return_val_if_fail (child_and_parent[0] != NULL, NULL);
+               g_return_val_if_fail (class->create_folder_sync != NULL, NULL);
 
                /* Element 0 is the new folder name.
                 * Element 1 is the parent path, or NULL. */
@@ -1689,6 +1710,7 @@ camel_store_get_folder_info_sync (CamelStore *store,
        g_return_val_if_fail (CAMEL_IS_STORE (store), NULL);
 
        class = CAMEL_STORE_GET_CLASS (store);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_folder_info_sync != NULL, NULL);
 
        name = camel_service_get_name (CAMEL_SERVICE (store), TRUE);
@@ -1950,6 +1972,7 @@ camel_store_get_inbox_folder_sync (CamelStore *store,
        g_return_val_if_fail (CAMEL_IS_STORE (store), NULL);
 
        class = CAMEL_STORE_GET_CLASS (store);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_inbox_folder_sync != NULL, NULL);
 
        folder = class->get_inbox_folder_sync (store, cancellable, error);
@@ -2072,6 +2095,7 @@ camel_store_get_junk_folder_sync (CamelStore *store,
                CamelFolder *folder;
 
                class = CAMEL_STORE_GET_CLASS (store);
+               g_return_val_if_fail (class != NULL, NULL);
                g_return_val_if_fail (class->get_junk_folder_sync != NULL, NULL);
 
                folder = class->get_junk_folder_sync (store, cancellable, error);
@@ -2198,6 +2222,7 @@ camel_store_get_trash_folder_sync (CamelStore *store,
                CamelFolder *folder;
 
                class = CAMEL_STORE_GET_CLASS (store);
+               g_return_val_if_fail (class != NULL, NULL);
                g_return_val_if_fail (class->get_trash_folder_sync != NULL, NULL);
 
                folder = class->get_trash_folder_sync (
@@ -2369,6 +2394,7 @@ store_create_folder_thread (GTask *task,
        folder_name = async_context->folder_name_2;
 
        class = CAMEL_STORE_GET_CLASS (store);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->create_folder_sync != NULL);
 
        if (parent_name == NULL || *parent_name == '\0') {
@@ -2556,6 +2582,7 @@ store_delete_folder_thread (GTask *task,
        folder_name = async_context->folder_name_1;
 
        class = CAMEL_STORE_GET_CLASS (store);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->delete_folder_sync != NULL);
 
        reserved_vfolder_name =
@@ -2741,6 +2768,7 @@ store_rename_folder_thread (GTask *task,
        new_name = async_context->folder_name_2;
 
        class = CAMEL_STORE_GET_CLASS (store);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->rename_folder_sync != NULL);
 
        if (g_str_equal (old_name, new_name)) {
@@ -2959,6 +2987,7 @@ camel_store_synchronize_sync (CamelStore *store,
        g_return_val_if_fail (CAMEL_IS_STORE (store), FALSE);
 
        class = CAMEL_STORE_GET_CLASS (store);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->synchronize_sync != NULL, FALSE);
 
        success = class->synchronize_sync (store, expunge, cancellable, error);
@@ -3107,6 +3136,7 @@ camel_store_initial_setup_sync (CamelStore *store,
        *out_save_setup = NULL;
 
        class = CAMEL_STORE_GET_CLASS (store);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->initial_setup_sync != NULL, FALSE);
 
        save_setup = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
diff --git a/src/camel/camel-stream.c b/src/camel/camel-stream.c
index 2243dc7..a6c6d0c 100644
--- a/src/camel/camel-stream.c
+++ b/src/camel/camel-stream.c
@@ -504,6 +504,7 @@ camel_stream_read (CamelStream *stream,
        g_return_val_if_fail (n == 0 || buffer, -1);
 
        class = CAMEL_STREAM_GET_CLASS (stream);
+       g_return_val_if_fail (class != NULL, -1);
        g_return_val_if_fail (class->read != NULL, -1);
 
        n_bytes = class->read (stream, buffer, n, cancellable, error);
@@ -539,6 +540,7 @@ camel_stream_write (CamelStream *stream,
        g_return_val_if_fail (n == 0 || buffer, -1);
 
        class = CAMEL_STREAM_GET_CLASS (stream);
+       g_return_val_if_fail (class != NULL, -1);
        g_return_val_if_fail (class->write != NULL, -1);
 
        n_bytes = class->write (stream, buffer, n, cancellable, error);
@@ -569,6 +571,7 @@ camel_stream_flush (CamelStream *stream,
        g_return_val_if_fail (CAMEL_IS_STREAM (stream), -1);
 
        class = CAMEL_STREAM_GET_CLASS (stream);
+       g_return_val_if_fail (class != NULL, -1);
        g_return_val_if_fail (class->flush != NULL, -1);
 
        retval = class->flush (stream, cancellable, error);
@@ -598,6 +601,7 @@ camel_stream_close (CamelStream *stream,
        g_return_val_if_fail (CAMEL_IS_STREAM (stream), -1);
 
        class = CAMEL_STREAM_GET_CLASS (stream);
+       g_return_val_if_fail (class != NULL, -1);
        g_return_val_if_fail (class->close != NULL, -1);
 
        retval = class->close (stream, cancellable, error);
@@ -622,6 +626,7 @@ camel_stream_eos (CamelStream *stream)
        g_return_val_if_fail (CAMEL_IS_STREAM (stream), TRUE);
 
        class = CAMEL_STREAM_GET_CLASS (stream);
+       g_return_val_if_fail (class != NULL, TRUE);
        g_return_val_if_fail (class->eos != NULL, TRUE);
 
        return class->eos (stream);
diff --git a/src/camel/camel-vee-folder.c b/src/camel/camel-vee-folder.c
index b735c25..4b14870 100644
--- a/src/camel/camel-vee-folder.c
+++ b/src/camel/camel-vee-folder.c
@@ -577,9 +577,15 @@ subfolder_changed (CamelFolder *subfolder,
                    CamelFolderChangeInfo *changes,
                    CamelVeeFolder *vfolder)
 {
+       CamelVeeFolderClass *klass;
+
        g_return_if_fail (vfolder != NULL);
        g_return_if_fail (CAMEL_IS_VEE_FOLDER (vfolder));
 
+       klass = CAMEL_VEE_FOLDER_GET_CLASS (vfolder);
+       g_return_if_fail (klass != NULL);
+       g_return_if_fail (klass->folder_changed != NULL);
+
        g_rec_mutex_lock (&vfolder->priv->changed_lock);
        if (g_hash_table_lookup (vfolder->priv->ignore_changed, subfolder) ||
            !camel_vee_folder_get_auto_update (vfolder)) {
@@ -599,7 +605,7 @@ subfolder_changed (CamelFolder *subfolder,
        }
        g_rec_mutex_unlock (&vfolder->priv->changed_lock);
 
-       CAMEL_VEE_FOLDER_GET_CLASS (vfolder)->folder_changed (vfolder, subfolder, changes);
+       klass->folder_changed (vfolder, subfolder, changes);
 }
 
 /* track vanishing folders */
@@ -723,6 +729,7 @@ vee_folder_propagate_skipped_changes (CamelVeeFolder *vf)
        g_return_if_fail (vf != NULL);
 
        class = CAMEL_VEE_FOLDER_GET_CLASS (vf);
+       g_return_if_fail (class != NULL);
 
        g_rec_mutex_lock (&vf->priv->changed_lock);
 
@@ -1448,9 +1455,15 @@ void
 camel_vee_folder_set_expression (CamelVeeFolder *vfolder,
                                  const gchar *expression)
 {
+       CamelVeeFolderClass *klass;
+
        g_return_if_fail (CAMEL_IS_VEE_FOLDER (vfolder));
 
-       CAMEL_VEE_FOLDER_GET_CLASS (vfolder)->set_expression (vfolder, expression);
+       klass = CAMEL_VEE_FOLDER_GET_CLASS (vfolder);
+       g_return_if_fail (klass != NULL);
+       g_return_if_fail (klass->set_expression != NULL);
+
+       klass->set_expression (vfolder, expression);
 }
 
 /**
@@ -1482,8 +1495,14 @@ camel_vee_folder_add_folder (CamelVeeFolder *vfolder,
                              CamelFolder *subfolder,
                              GCancellable *cancellable)
 {
+       CamelVeeFolderClass *klass;
+
        g_return_if_fail (CAMEL_IS_VEE_FOLDER (vfolder));
 
+       klass = CAMEL_VEE_FOLDER_GET_CLASS (vfolder);
+       g_return_if_fail (klass != NULL);
+       g_return_if_fail (klass->add_folder != NULL);
+
        if (vfolder == (CamelVeeFolder *) subfolder) {
                g_warning ("Adding a virtual folder to itself as source, ignored");
                return;
@@ -1517,7 +1536,7 @@ camel_vee_folder_add_folder (CamelVeeFolder *vfolder,
                subfolder, "deleted",
                G_CALLBACK (subfolder_deleted), vfolder);
 
-       CAMEL_VEE_FOLDER_GET_CLASS (vfolder)->add_folder (vfolder, subfolder, cancellable);
+       klass->add_folder (vfolder, subfolder, cancellable);
 }
 
 /**
@@ -1533,10 +1552,15 @@ camel_vee_folder_remove_folder (CamelVeeFolder *vfolder,
                                 CamelFolder *subfolder,
                                 GCancellable *cancellable)
 {
+       CamelVeeFolderClass *klass;
        gint freeze_count;
 
        g_return_if_fail (CAMEL_IS_VEE_FOLDER (vfolder));
 
+       klass = CAMEL_VEE_FOLDER_GET_CLASS (vfolder);
+       g_return_if_fail (klass != NULL);
+       g_return_if_fail (klass->remove_folder != NULL);
+
        g_rec_mutex_lock (&vfolder->priv->subfolder_lock);
 
        if (g_list_find (vfolder->priv->subfolders, subfolder) == NULL) {
@@ -1557,7 +1581,7 @@ camel_vee_folder_remove_folder (CamelVeeFolder *vfolder,
 
        g_rec_mutex_unlock (&vfolder->priv->subfolder_lock);
 
-       CAMEL_VEE_FOLDER_GET_CLASS (vfolder)->remove_folder (vfolder, subfolder, cancellable);
+       klass->remove_folder (vfolder, subfolder, cancellable);
 
        g_object_unref (subfolder);
 }
@@ -1575,9 +1599,17 @@ camel_vee_folder_rebuild_folder (CamelVeeFolder *vfolder,
                                  CamelFolder *subfolder,
                                  GCancellable *cancellable)
 {
+       CamelVeeFolderClass *klass;
+
+       g_return_if_fail (CAMEL_IS_VEE_FOLDER (vfolder));
+
+       klass = CAMEL_VEE_FOLDER_GET_CLASS (vfolder);
+       g_return_if_fail (klass != NULL);
+       g_return_if_fail (klass->rebuild_folder != NULL);
+
        vee_folder_propagate_skipped_changes (vfolder);
 
-       CAMEL_VEE_FOLDER_GET_CLASS (vfolder)->rebuild_folder (vfolder, subfolder, cancellable);
+       klass->rebuild_folder (vfolder, subfolder, cancellable);
 }
 
 static void
diff --git a/src/camel/camel-vee-store.c b/src/camel/camel-vee-store.c
index 122f569..1d786db 100644
--- a/src/camel/camel-vee-store.c
+++ b/src/camel/camel-vee-store.c
@@ -286,10 +286,17 @@ vee_store_get_folder_info_sync (CamelStore *store,
 
        d (printf ("Get folder info '%s'\n", top ? top:"<null>"));
 
-       infos_hash = g_hash_table_new (g_str_hash, g_str_equal);
        folders = camel_store_dup_opened_folders (store);
-       if (folders->pdata && folders->len)
-               qsort (folders->pdata, folders->len, sizeof (folders->pdata[0]), vee_folder_cmp);
+       if (!folders || !folders->pdata || !folders->len) {
+               if (folders)
+                       g_ptr_array_free (folders, TRUE);
+
+               return NULL;
+       }
+
+       qsort (folders->pdata, folders->len, sizeof (folders->pdata[0]), vee_folder_cmp);
+
+       infos_hash = g_hash_table_new (g_str_hash, g_str_equal);
        for (i = 0; i < folders->len; i++) {
                CamelVeeFolder *folder = folders->pdata[i];
                const gchar *full_name;
@@ -1064,8 +1071,9 @@ vee_store_rebuild_unmatched_folder (CamelSession *session,
                camel_folder_changed (unmatched_folder, changes);
        camel_folder_change_info_free (changes);
 
-       /* coverity[unchecked_value] */
-       g_cancellable_set_error_if_cancelled (cancellable, error);
+       /* Just to mute CHECKED_RETURN warning */
+       if (g_cancellable_set_error_if_cancelled (cancellable, error))
+               return;
 }
 
 /**
diff --git a/src/camel/providers/imapx/camel-imapx-search.c b/src/camel/providers/imapx/camel-imapx-search.c
index 29245d9..3f2100d 100644
--- a/src/camel/providers/imapx/camel-imapx-search.c
+++ b/src/camel/providers/imapx/camel-imapx-search.c
@@ -181,19 +181,12 @@ imapx_search_process_criteria (CamelSExp *sexp,
                ((mailbox == NULL) && (local_error != NULL)), NULL);
 
        if (mailbox != NULL) {
-               CamelIMAPXStore *imapx_store;
                CamelIMAPXConnManager *conn_man;
 
-               imapx_store = camel_imapx_search_ref_store (imapx_search);
-
-               /* there should always be one, held by one of the callers of this function */
-               g_warn_if_fail (imapx_store != NULL);
-
                conn_man = camel_imapx_store_get_conn_manager (imapx_store);
                uids = camel_imapx_conn_manager_uid_search_sync (conn_man, mailbox, criteria_prefix->str, 
search_key,
                        words ? (const gchar * const *) words->pdata : NULL, imapx_search->priv->cancellable, 
&local_error);
 
-               g_clear_object (&imapx_store);
                g_object_unref (mailbox);
        }
 
diff --git a/src/camel/providers/imapx/camel-imapx-server.c b/src/camel/providers/imapx/camel-imapx-server.c
index f413d67..6339382 100644
--- a/src/camel/providers/imapx/camel-imapx-server.c
+++ b/src/camel/providers/imapx/camel-imapx-server.c
@@ -1093,7 +1093,11 @@ imapx_untagged_fetch (CamelIMAPXServer *is,
                gconstpointer body_data;
                gsize body_size;
 
-               g_return_val_if_fail (is->priv->get_message_stream != NULL, FALSE);
+               if (!is->priv->get_message_stream) {
+                       g_warn_if_fail (is->priv->get_message_stream != NULL);
+                       imapx_free_fetch (finfo);
+                       return FALSE;
+               }
 
                /* Fill out the body stream, in the right spot. */
 
@@ -1130,9 +1134,15 @@ imapx_untagged_fetch (CamelIMAPXServer *is,
                CamelIMAPXMailbox *select_pending;
 
                if (is->priv->fetch_changes_mailbox) {
-                       g_return_val_if_fail (is->priv->fetch_changes_mailbox != NULL, FALSE);
-                       g_return_val_if_fail (is->priv->fetch_changes_folder != NULL, FALSE);
-                       g_return_val_if_fail (is->priv->fetch_changes_infos != NULL, FALSE);
+                       if (!is->priv->fetch_changes_mailbox ||
+                           !is->priv->fetch_changes_folder ||
+                           !is->priv->fetch_changes_infos) {
+                               g_warn_if_fail (is->priv->fetch_changes_mailbox != NULL);
+                               g_warn_if_fail (is->priv->fetch_changes_folder != NULL);
+                               g_warn_if_fail (is->priv->fetch_changes_infos != NULL);
+                               imapx_free_fetch (finfo);
+                               return FALSE;
+                       }
                }
 
                g_mutex_lock (&is->priv->select_lock);
@@ -1167,12 +1177,15 @@ imapx_untagged_fetch (CamelIMAPXServer *is,
                                COMMAND_LOCK (is);
 
                                if (is->priv->current_command) {
+                                       guint32 n_messages;
+
                                        COMMAND_UNLOCK (is);
 
                                        is->priv->fetch_changes_last_progress = monotonic_time;
 
-                                       camel_operation_progress (cancellable, 100 * is->priv->context->id
-                                               / camel_imapx_mailbox_get_messages 
(is->priv->fetch_changes_mailbox));
+                                       n_messages = camel_imapx_mailbox_get_messages 
(is->priv->fetch_changes_mailbox);
+                                       if (n_messages > 0)
+                                               camel_operation_progress (cancellable, 100 * 
is->priv->context->id / n_messages);
                                } else {
                                        COMMAND_UNLOCK (is);
                                }
@@ -1186,7 +1199,15 @@ imapx_untagged_fetch (CamelIMAPXServer *is,
                        c (is->priv->tagprefix, "flag changed: %lu\n", is->priv->context->id);
 
                        select_folder = imapx_server_ref_folder (is, select_mailbox);
-                       g_return_val_if_fail (select_folder != NULL, FALSE);
+                       if (!select_folder) {
+                               g_warn_if_fail (select_folder != NULL);
+
+                               g_clear_object (&select_mailbox);
+                               g_clear_object (&select_pending);
+                               imapx_free_fetch (finfo);
+
+                               return FALSE;
+                       }
 
                        if (finfo->got & FETCH_UID) {
                                uid = finfo->uid;
@@ -1216,10 +1237,11 @@ imapx_untagged_fetch (CamelIMAPXServer *is,
                        }
 
                        if (changed) {
-                               g_return_val_if_fail (is->priv->changes != NULL, FALSE);
-
                                g_mutex_lock (&is->priv->changes_lock);
-                               camel_folder_change_info_change_uid (is->priv->changes, uid);
+                               if (is->priv->changes)
+                                       camel_folder_change_info_change_uid (is->priv->changes, uid);
+                               else
+                                       g_warn_if_fail (is->priv->changes != NULL);
                                g_mutex_unlock (&is->priv->changes_lock);
                        }
                        g_free (uid);
@@ -1258,9 +1280,15 @@ imapx_untagged_fetch (CamelIMAPXServer *is,
                 * asked for new messages to be added to the index. */
 
                if (is->priv->fetch_changes_mailbox) {
-                       g_return_val_if_fail (is->priv->fetch_changes_mailbox != NULL, FALSE);
-                       g_return_val_if_fail (is->priv->fetch_changes_folder != NULL, FALSE);
-                       g_return_val_if_fail (is->priv->fetch_changes_infos != NULL, FALSE);
+                       if (!is->priv->fetch_changes_mailbox ||
+                           !is->priv->fetch_changes_folder ||
+                           !is->priv->fetch_changes_infos) {
+                               g_warn_if_fail (is->priv->fetch_changes_mailbox != NULL);
+                               g_warn_if_fail (is->priv->fetch_changes_folder != NULL);
+                               g_warn_if_fail (is->priv->fetch_changes_infos != NULL);
+                               imapx_free_fetch (finfo);
+                               return FALSE;
+                       }
 
                        folder = g_object_ref (is->priv->fetch_changes_folder);
                        mailbox = g_object_ref (is->priv->fetch_changes_mailbox);
@@ -1301,7 +1329,17 @@ imapx_untagged_fetch (CamelIMAPXServer *is,
                                FetchChangesInfo *nfo;
 
                                nfo = g_hash_table_lookup (is->priv->fetch_changes_infos, finfo->uid);
-                               g_return_val_if_fail (nfo != NULL, FALSE);
+                               if (!nfo) {
+                                       g_warn_if_fail (nfo != NULL);
+
+                                       camel_message_info_set_abort_notifications (mi, FALSE);
+                                       g_clear_object (&mi);
+                                       g_clear_object (&mailbox);
+                                       g_clear_object (&folder);
+                                       imapx_free_fetch (finfo);
+
+                                       return FALSE;
+                               }
 
                                server_flags = nfo->server_flags;
                                server_user_flags = nfo->server_user_flags;
@@ -2123,7 +2161,11 @@ imapx_continuation (CamelIMAPXServer *is,
 
        /* coverity[deadcode] */
        link = ic ? ic->current_part : NULL;
-       g_return_val_if_fail (link != NULL, FALSE);
+       if (!link) {
+               g_warn_if_fail (link != NULL);
+               return FALSE;
+       }
+
        cp = (CamelIMAPXCommandPart *) link->data;
 
        switch (cp->type & CAMEL_IMAPX_COMMAND_MASK) {
@@ -4386,7 +4428,9 @@ camel_imapx_server_copy_message_sync (CamelIMAPXServer *is,
        if (camel_imapx_mailbox_get_permanentflags (destination) == ~0) {
                /* To get permanent flags. That's okay if the "SELECT" fails here, as it can be
                   due to the folder being write-only; just ignore the error and continue. */
-               camel_imapx_server_ensure_selected_sync (is, destination, cancellable, NULL);
+               if (!camel_imapx_server_ensure_selected_sync (is, destination, cancellable, NULL)) {
+                       ;
+               }
        }
 
        if (g_cancellable_set_error_if_cancelled (cancellable, error))
@@ -4450,7 +4494,7 @@ camel_imapx_server_copy_message_sync (CamelIMAPXServer *is,
                                break;
                }
 
-               imapx_uidset_done (&uidset, ic);
+               g_warn_if_fail (imapx_uidset_done (&uidset, ic));
 
                camel_imapx_command_add (ic, " %M", destination);
 
@@ -4713,7 +4757,9 @@ camel_imapx_server_append_message_sync (CamelIMAPXServer *is,
 
        /* That's okay if the "SELECT" fails here, as it can be due to
           the folder being write-only; just ignore the error and continue. */
-       camel_imapx_server_ensure_selected_sync (is, mailbox, cancellable, NULL);
+       if (!camel_imapx_server_ensure_selected_sync (is, mailbox, cancellable, NULL)) {
+               ;
+       }
 
        if (g_cancellable_set_error_if_cancelled (cancellable, error))
                return FALSE;
@@ -4840,7 +4886,7 @@ camel_imapx_server_append_message_sync (CamelIMAPXServer *is,
        if (success) {
                CamelIMAPXFolder *imapx_folder;
                CamelFolder *folder;
-               CamelMessageInfo *mi;
+               CamelMessageInfo *clone;
                gchar *cur, *old_uid;
                guint32 uidvalidity;
 
@@ -4857,7 +4903,7 @@ camel_imapx_server_append_message_sync (CamelIMAPXServer *is,
                 * numbered MessageInfo, without losing any information.  Otherwise
                 * we have to wait for the server to let us know it was appended. */
 
-               mi = camel_message_info_clone (info, camel_folder_get_folder_summary (folder));
+               clone = camel_message_info_clone (info, camel_folder_get_folder_summary (folder));
                old_uid = g_strdup (camel_message_info_get_uid (info));
 
                if (ic->status && ic->status->condition == IMAPX_APPENDUID) {
@@ -4866,7 +4912,7 @@ camel_imapx_server_append_message_sync (CamelIMAPXServer *is,
                                gchar *uid;
 
                                uid = g_strdup_printf ("%u", ic->status->u.appenduid.uid);
-                               camel_message_info_set_uid (mi, uid);
+                               camel_message_info_set_uid (clone, uid);
 
                                cur = camel_data_cache_get_filename  (imapx_folder->cache, "cur", uid);
                                if (g_rename (path, cur) == -1 && errno != ENOENT) {
@@ -4874,17 +4920,17 @@ camel_imapx_server_append_message_sync (CamelIMAPXServer *is,
                                }
 
                                imapx_set_message_info_flags_for_new_message (
-                                       mi,
+                                       clone,
                                        camel_message_info_get_flags (info),
                                        camel_message_info_get_user_flags (info),
                                        TRUE,
                                        camel_message_info_get_user_tags (info),
                                        camel_imapx_mailbox_get_permanentflags (mailbox));
 
-                               camel_folder_summary_add (camel_folder_get_folder_summary (folder), mi, TRUE);
+                               camel_folder_summary_add (camel_folder_get_folder_summary (folder), clone, 
TRUE);
 
                                g_mutex_lock (&is->priv->changes_lock);
-                               camel_folder_change_info_add_uid (is->priv->changes, 
camel_message_info_get_uid (mi));
+                               camel_folder_change_info_add_uid (is->priv->changes, 
camel_message_info_get_uid (clone));
                                g_mutex_unlock (&is->priv->changes_lock);
 
                                camel_folder_summary_save (camel_folder_get_folder_summary (folder), NULL);
@@ -4894,7 +4940,7 @@ camel_imapx_server_append_message_sync (CamelIMAPXServer *is,
                                else
                                        g_free (uid);
 
-                               g_clear_object (&mi);
+                               g_clear_object (&clone);
 
                                g_free (cur);
                        } else {
@@ -4906,7 +4952,7 @@ camel_imapx_server_append_message_sync (CamelIMAPXServer *is,
                g_free (old_uid);
 
                camel_imapx_command_unref (ic);
-               g_clear_object (&mi);
+               g_clear_object (&clone);
                g_object_unref (folder);
        }
 
diff --git a/src/camel/providers/local/camel-local-private.c b/src/camel/providers/local/camel-local-private.c
index f19c784..71a71d7 100644
--- a/src/camel/providers/local/camel-local-private.c
+++ b/src/camel/providers/local/camel-local-private.c
@@ -42,11 +42,20 @@ camel_local_frompos_sort (gpointer enc,
                sa2 = g_realloc (sa2, len2 + 1);
                l2 = len2 + 1;
        }
-       strncpy (sa1, data1, len1); sa1[len1] = 0;
-       strncpy (sa2, data2, len2); sa2[len2] = 0;
 
-       a1 = strtoul (sa1, NULL, 10);
-       a2 = strtoul (sa2, NULL, 10);
+       if (sa1) {
+               strncpy (sa1, data1, len1); sa1[len1] = 0;
+               a1 = strtoul (sa1, NULL, 10);
+       } else {
+               a1 = 0;
+       }
+
+       if (sa2) {
+               strncpy (sa2, data2, len2); sa2[len2] = 0;
+               a2 = strtoul (sa2, NULL, 10);
+       } else {
+               a2 = 0;
+       }
 
        return a1 - a2;
 }
diff --git a/src/camel/providers/local/camel-local-store.c b/src/camel/providers/local/camel-local-store.c
index 8323db4..88e7abb 100644
--- a/src/camel/providers/local/camel-local-store.c
+++ b/src/camel/providers/local/camel-local-store.c
@@ -725,6 +725,7 @@ camel_local_store_get_full_path (CamelLocalStore *store,
        /* XXX Guard against full_name == NULL? */
 
        class = CAMEL_LOCAL_STORE_GET_CLASS (store);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_full_path != NULL, NULL);
 
        return class->get_full_path (store, full_name);
@@ -742,6 +743,7 @@ camel_local_store_get_meta_path (CamelLocalStore *store,
        /* XXX Guard against ext == NULL? */
 
        class = CAMEL_LOCAL_STORE_GET_CLASS (store);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_meta_path != NULL, NULL);
 
        return class->get_meta_path (store, full_name, ext);
diff --git a/src/camel/providers/local/camel-maildir-folder.c 
b/src/camel/providers/local/camel-maildir-folder.c
index 9e6b259..89007a0 100644
--- a/src/camel/providers/local/camel-maildir-folder.c
+++ b/src/camel/providers/local/camel-maildir-folder.c
@@ -115,9 +115,9 @@ maildir_folder_get_filename (CamelFolder *folder,
         * name based on actual flags.
        */
        if (!camel_maildir_message_info_get_filename (mdi)) {
-               const gchar *uid = camel_message_info_get_uid (info);
+               const gchar *info_uid = camel_message_info_get_uid (info);
 
-               if (uid) {
+               if (info_uid) {
                        GDir *dir;
                        gchar *dirname;
 
@@ -127,10 +127,10 @@ maildir_folder_get_filename (CamelFolder *folder,
 
                        if (dir) {
                                const gchar *filename;
-                               gint uid_len = strlen (uid);
+                               gint uid_len = strlen (info_uid);
 
                                while (filename = g_dir_read_name (dir), filename) {
-                                       if (g_str_has_prefix (filename, uid) && (filename[uid_len] == '\0' || 
filename[uid_len] == CAMEL_MAILDIR_FLAG_SEP)) {
+                                       if (g_str_has_prefix (filename, info_uid) && (filename[uid_len] == 
'\0' || filename[uid_len] == CAMEL_MAILDIR_FLAG_SEP)) {
                                                camel_maildir_message_info_take_filename (mdi, g_strdup 
(filename));
                                                break;
                                        }
diff --git a/src/camel/providers/local/camel-maildir-store.c b/src/camel/providers/local/camel-maildir-store.c
index 5861d57..9611e01 100644
--- a/src/camel/providers/local/camel-maildir-store.c
+++ b/src/camel/providers/local/camel-maildir-store.c
@@ -1159,6 +1159,7 @@ scan_old_dir_info (CamelStore *store,
                        if (stat (tmp, &st) == 0 && S_ISDIR (st.st_mode)) {
                                struct _scan_node in;
 
+                               memset (&in, 0, sizeof (struct _scan_node));
                                in.dnode = st.st_dev;
                                in.inode = st.st_ino;
 
diff --git a/src/camel/providers/local/camel-mbox-summary.c b/src/camel/providers/local/camel-mbox-summary.c
index b0d94cd..a33f8a0 100644
--- a/src/camel/providers/local/camel-mbox-summary.c
+++ b/src/camel/providers/local/camel-mbox-summary.c
@@ -1130,10 +1130,10 @@ camel_mbox_summary_sync_mbox (CamelMboxSummary *cls,
                        header = camel_mime_parser_dup_headers (mp);
                        xevnew = camel_local_summary_encode_x_evolution ((CamelLocalSummary *) cls, info);
                        if (mbs->xstatus) {
-                               guint32 flags = camel_message_info_get_flags (info);
+                               guint32 info_flags = camel_message_info_get_flags (info);
 
-                               encode_status (flags & STATUS_STATUS, statnew);
-                               encode_status (flags & STATUS_XSTATUS, xstatnew);
+                               encode_status (info_flags & STATUS_STATUS, statnew);
+                               encode_status (info_flags & STATUS_XSTATUS, xstatnew);
 
                                len = camel_local_summary_write_headers (fdout, header, xevnew, statnew, 
xstatnew);
                        } else {
diff --git a/src/camel/providers/pop3/camel-pop3-folder.c b/src/camel/providers/pop3/camel-pop3-folder.c
index 9998625..0931a0d 100644
--- a/src/camel/providers/pop3/camel-pop3-folder.c
+++ b/src/camel/providers/pop3/camel-pop3-folder.c
@@ -903,7 +903,9 @@ pop3_folder_synchronize_sync (CamelFolder *folder,
        if (g_cancellable_is_cancelled (cancellable)) {
                if (error && !*error) {
                        /* coverity[unchecked_value] */
-                       g_cancellable_set_error_if_cancelled (cancellable, error);
+                       if (g_cancellable_set_error_if_cancelled (cancellable, error)) {
+                               ;
+                       }
                }
                return FALSE;
        }
diff --git a/src/camel/providers/pop3/camel-pop3-store.c b/src/camel/providers/pop3/camel-pop3-store.c
index 77d9740..3f56542 100644
--- a/src/camel/providers/pop3/camel-pop3-store.c
+++ b/src/camel/providers/pop3/camel-pop3-store.c
@@ -340,7 +340,9 @@ try_sasl (CamelPOP3Store *store,
                    || (resp = (guchar *) camel_sasl_challenge_base64_sync (sasl, (const gchar *) line + 2, 
cancellable, &local_error)) == NULL) {
                        if (camel_stream_write_string (CAMEL_STREAM (pop3_stream), "*\r\n", cancellable, 
NULL)) {
                                /* coverity[unchecked_value] */
-                               camel_pop3_stream_line (pop3_stream, &line, &len, cancellable, NULL);
+                               if (!camel_pop3_stream_line (pop3_stream, &line, &len, cancellable, NULL)) {
+                                       ;
+                               }
                        }
 
                        if (local_error) {
diff --git a/src/camel/tests/lib/messages.c b/src/camel/tests/lib/messages.c
index ea7b0a0..211e7aa 100644
--- a/src/camel/tests/lib/messages.c
+++ b/src/camel/tests/lib/messages.c
@@ -312,9 +312,9 @@ message_dump_rec (CamelMimeMessage *msg,
        if (CAMEL_IS_MULTIPART (containee)) {
                parts = camel_multipart_get_number (CAMEL_MULTIPART (containee));
                for (i = 0; i < parts; i++) {
-                       CamelMimePart *part = camel_multipart_get_part (CAMEL_MULTIPART (containee), i);
+                       CamelMimePart *subpart = camel_multipart_get_part (CAMEL_MULTIPART (containee), i);
 
-                       message_dump_rec (msg, part, depth + 1);
+                       message_dump_rec (msg, subpart, depth + 1);
                }
        } else if (CAMEL_IS_MIME_MESSAGE (containee)) {
                message_dump_rec (msg, (CamelMimePart *) containee, depth + 1);
diff --git a/src/libebackend/e-backend-factory.c b/src/libebackend/e-backend-factory.c
index e9b8493..87936b3 100644
--- a/src/libebackend/e-backend-factory.c
+++ b/src/libebackend/e-backend-factory.c
@@ -79,6 +79,7 @@ e_backend_factory_get_hash_key (EBackendFactory *factory)
        g_return_val_if_fail (E_IS_BACKEND_FACTORY (factory), NULL);
 
        class = E_BACKEND_FACTORY_GET_CLASS (factory);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->get_hash_key != NULL, NULL);
 
        return class->get_hash_key (factory);
@@ -105,6 +106,7 @@ e_backend_factory_new_backend (EBackendFactory *factory,
        g_return_val_if_fail (E_IS_SOURCE (source), NULL);
 
        class = E_BACKEND_FACTORY_GET_CLASS (factory);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->new_backend != NULL, NULL);
 
        return class->new_backend (factory, source);
@@ -129,6 +131,7 @@ e_backend_factory_get_module_filename (EBackendFactory *factory)
        g_return_val_if_fail (E_IS_BACKEND_FACTORY (factory), NULL);
 
        class = E_BACKEND_FACTORY_GET_CLASS (factory);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->e_module != NULL, NULL);
 
        return e_module_get_filename (class->e_module);
@@ -154,6 +157,7 @@ e_backend_factory_share_subprocess (EBackendFactory *factory)
        g_return_val_if_fail (E_IS_BACKEND_FACTORY (factory), FALSE);
 
        class = E_BACKEND_FACTORY_GET_CLASS (factory);
+       g_return_val_if_fail (class != NULL, FALSE);
 
        return class->share_subprocess;
 }
diff --git a/src/libebackend/e-backend.c b/src/libebackend/e-backend.c
index 31c1be9..ed40cc0 100644
--- a/src/libebackend/e-backend.c
+++ b/src/libebackend/e-backend.c
@@ -270,6 +270,7 @@ e_backend_authenticate_sync (EBackend *backend,
        g_return_val_if_fail (credentials != NULL, E_SOURCE_AUTHENTICATION_ERROR);
 
        class = E_BACKEND_GET_CLASS (backend);
+       g_return_val_if_fail (class != NULL, E_SOURCE_AUTHENTICATION_ERROR);
        g_return_val_if_fail (class->authenticate_sync != NULL, E_SOURCE_AUTHENTICATION_ERROR);
 
        return class->authenticate_sync (backend, credentials, out_certificate_pem, out_certificate_errors, 
cancellable, error);
@@ -1475,6 +1476,7 @@ e_backend_get_destination_address (EBackend *backend,
        g_return_val_if_fail (port != NULL, FALSE);
 
        klass = E_BACKEND_GET_CLASS (backend);
+       g_return_val_if_fail (klass != NULL, FALSE);
        g_return_val_if_fail (klass->get_destination_address != NULL, FALSE);
 
        return klass->get_destination_address (backend, host, port);
@@ -1554,6 +1556,7 @@ e_backend_prepare_shutdown (EBackend *backend)
        g_return_if_fail (E_IS_BACKEND (backend));
 
        class = E_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->prepare_shutdown != NULL);
 
        g_object_ref (backend);
diff --git a/src/libebackend/e-cache.c b/src/libebackend/e-cache.c
index e36808d..e683da1 100644
--- a/src/libebackend/e-cache.c
+++ b/src/libebackend/e-cache.c
@@ -2059,7 +2059,7 @@ e_cache_foreach_update_cb (ECache *cache,
 
        fu->rows = g_slist_prepend (fu->rows, rd);
 
-       g_return_val_if_fail ((gint) fu->column_names->len != ncols, FALSE);
+       g_return_val_if_fail (fu->column_names && (gint) fu->column_names->len != ncols, FALSE);
 
        return TRUE;
 }
diff --git a/src/libebackend/e-collection-backend-factory.c b/src/libebackend/e-collection-backend-factory.c
index 122f065..5c44285 100644
--- a/src/libebackend/e-collection-backend-factory.c
+++ b/src/libebackend/e-collection-backend-factory.c
@@ -58,6 +58,7 @@ collection_backend_factory_get_hash_key (EBackendFactory *factory)
        gsize length;
 
        class = E_COLLECTION_BACKEND_FACTORY_GET_CLASS (factory);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->factory_name != NULL, NULL);
 
        component_name = E_SOURCE_EXTENSION_COLLECTION;
@@ -80,8 +81,8 @@ collection_backend_factory_new_backend (EBackendFactory *factory,
        ESourceRegistryServer *server;
 
        class = E_COLLECTION_BACKEND_FACTORY_GET_CLASS (factory);
-       g_return_val_if_fail (g_type_is_a (
-               class->backend_type, E_TYPE_COLLECTION_BACKEND), NULL);
+       g_return_val_if_fail (class != NULL, NULL);
+       g_return_val_if_fail (g_type_is_a (class->backend_type, E_TYPE_COLLECTION_BACKEND), NULL);
 
        server = collection_backend_factory_get_server (factory);
 
@@ -187,6 +188,7 @@ e_collection_backend_factory_prepare_mail (ECollectionBackendFactory *factory,
        g_return_if_fail (E_IS_SOURCE (mail_transport_source));
 
        class = E_COLLECTION_BACKEND_FACTORY_GET_CLASS (factory);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->prepare_mail != NULL);
 
        class->prepare_mail (
diff --git a/src/libebackend/e-collection-backend.c b/src/libebackend/e-collection-backend.c
index 4fa459e..1001db9 100644
--- a/src/libebackend/e-collection-backend.c
+++ b/src/libebackend/e-collection-backend.c
@@ -249,6 +249,7 @@ collection_backend_load_resources (ECollectionBackend *backend)
         * and e_source_registry_server_load_directory(). */
 
        class = E_COLLECTION_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->dup_resource_id != NULL);
 
        cache_dir = e_collection_backend_get_cache_dir (backend);
@@ -557,6 +558,7 @@ collection_backend_populate_idle_cb (gpointer user_data)
        backend->priv->scheduled_populate_idle_id = 0;
 
        class = E_COLLECTION_BACKEND_GET_CLASS (backend);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->populate != NULL, FALSE);
 
        class->populate (backend);
@@ -1371,6 +1373,7 @@ e_collection_backend_dup_resource_id (ECollectionBackend *backend,
        g_return_val_if_fail (E_IS_SOURCE (child_source), NULL);
 
        class = E_COLLECTION_BACKEND_GET_CLASS (backend);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->dup_resource_id != NULL, NULL);
 
        /* Make sure the ESource belongs to the ECollectionBackend to
@@ -1610,6 +1613,7 @@ e_collection_backend_create_resource_sync (ECollectionBackend *backend,
        g_return_val_if_fail (E_IS_SOURCE (source), FALSE);
 
        class = E_COLLECTION_BACKEND_GET_CLASS (backend);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->create_resource_sync != NULL, FALSE);
 
        return class->create_resource_sync (
@@ -1657,6 +1661,7 @@ e_collection_backend_create_resource (ECollectionBackend *backend,
        g_return_if_fail (E_IS_SOURCE (source));
 
        class = E_COLLECTION_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->create_resource != NULL);
 
        class->create_resource (
@@ -1688,6 +1693,7 @@ e_collection_backend_create_resource_finish (ECollectionBackend *backend,
        g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE);
 
        class = E_COLLECTION_BACKEND_GET_CLASS (backend);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->create_resource_finish != NULL, FALSE);
 
        return class->create_resource_finish (backend, result, error);
@@ -1726,6 +1732,7 @@ e_collection_backend_delete_resource_sync (ECollectionBackend *backend,
        g_return_val_if_fail (E_IS_SOURCE (source), FALSE);
 
        class = E_COLLECTION_BACKEND_GET_CLASS (backend);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->delete_resource_sync != NULL, FALSE);
 
        return class->delete_resource_sync (
@@ -1767,6 +1774,7 @@ e_collection_backend_delete_resource (ECollectionBackend *backend,
        g_return_if_fail (E_IS_SOURCE (source));
 
        class = E_COLLECTION_BACKEND_GET_CLASS (backend);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->delete_resource != NULL);
 
        return class->delete_resource (
@@ -1798,6 +1806,7 @@ e_collection_backend_delete_resource_finish (ECollectionBackend *backend,
        g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE);
 
        class = E_COLLECTION_BACKEND_GET_CLASS (backend);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->delete_resource_finish != NULL, FALSE);
 
        return class->delete_resource_finish (backend, result, error);
diff --git a/src/libebackend/e-data-factory.c b/src/libebackend/e-data-factory.c
index 0da6628..dfcb933 100644
--- a/src/libebackend/e-data-factory.c
+++ b/src/libebackend/e-data-factory.c
@@ -194,6 +194,7 @@ data_factory_construct_subprocess_path (EDataFactory *data_factory)
        g_atomic_int_inc (&counter);
 
        class = E_DATA_FACTORY_GET_CLASS (data_factory);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->subprocess_object_path_prefix != NULL, NULL);
 
        return g_strdup_printf (
@@ -212,6 +213,7 @@ data_factory_construct_subprocess_bus_name (EDataFactory *data_factory)
        g_atomic_int_inc (&counter);
 
        class = E_DATA_FACTORY_GET_CLASS (data_factory);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->subprocess_bus_name_prefix != NULL, NULL);
 
        /* We use the format "%sx%d%u" because we want to be really safe about
@@ -567,6 +569,7 @@ data_factory_call_subprocess_backend_create_sync (EDataFactory *data_factory,
                        data_factory, sender, proxy);
 
                class = E_DATA_FACTORY_GET_CLASS (data_factory);
+               g_return_if_fail (class != NULL);
                g_return_if_fail (class->complete_open != NULL);
 
                class->complete_open (data_factory, invocation, object_path, bus_name, extension_name);
@@ -709,6 +712,8 @@ data_factory_bus_acquired (EDBusServer *server,
        GError *error = NULL;
 
        class = E_DATA_FACTORY_GET_CLASS (E_DATA_FACTORY (server));
+       g_return_if_fail (class != NULL);
+       g_return_if_fail (class->get_dbus_interface_skeleton != NULL);
 
        skeleton_interface = class->get_dbus_interface_skeleton (server);
 
@@ -832,6 +837,8 @@ data_factory_quit_server (EDBusServer *server,
        }
 
        class = E_DATA_FACTORY_GET_CLASS (E_DATA_FACTORY (server));
+       g_return_if_fail (class != NULL);
+       g_return_if_fail (class->get_dbus_interface_skeleton != NULL);
 
        skeleton_interface = class->get_dbus_interface_skeleton (server);
        if (skeleton_interface && g_dbus_interface_skeleton_get_connection (skeleton_interface))
@@ -974,11 +981,13 @@ data_factory_constructed (GObject *object)
        GList *list, *link;
 
        data_factory = E_DATA_FACTORY (object);
-       class = E_DATA_FACTORY_GET_CLASS (data_factory);
 
        /* Chain up to parent's constructed() method. */
        G_OBJECT_CLASS (e_data_factory_parent_class)->constructed (object);
 
+       class = E_DATA_FACTORY_GET_CLASS (data_factory);
+       g_return_if_fail (class != NULL);
+
        /* Collect all backend factories into a hash table. */
 
        list = e_extensible_list_extensions (
@@ -1221,6 +1230,7 @@ e_data_factory_construct_path (EDataFactory *data_factory)
        g_atomic_int_inc (&counter);
 
        class = E_DATA_FACTORY_GET_CLASS (data_factory);
+       g_return_val_if_fail (class != NULL, NULL);
        g_return_val_if_fail (class->data_object_path_prefix != NULL, NULL);
 
        return g_strdup_printf (
@@ -1239,6 +1249,7 @@ data_factory_spawn_subprocess_backend (EDataFactory *data_factory,
        DataFactorySubprocessData *sd = NULL;
        EBackendFactory *backend_factory = NULL;
        EDataFactoryClass *class;
+       EDBusServerClass *server_class;
        ESource *source;
        EDataFactoryPrivate *priv;
        GError *error = NULL;
@@ -1256,6 +1267,14 @@ data_factory_spawn_subprocess_backend (EDataFactory *data_factory,
        g_return_if_fail (extension_name != NULL && *extension_name != '\0');
        g_return_if_fail (subprocess_path != NULL && *subprocess_path != '\0');
 
+       class = E_DATA_FACTORY_GET_CLASS (data_factory);
+       g_return_if_fail (class != NULL);
+       g_return_if_fail (class->complete_open != NULL);
+       g_return_if_fail (class->get_factory_name != NULL);
+
+       server_class = E_DBUS_SERVER_GET_CLASS (data_factory);
+       g_return_if_fail (server_class != NULL);
+
        priv = data_factory->priv;
 
        source = e_source_registry_ref_source (priv->registry, uid);
@@ -1279,7 +1298,6 @@ data_factory_spawn_subprocess_backend (EDataFactory *data_factory,
 
                type_name = G_OBJECT_TYPE_NAME (backend_factory);
 
-               class = E_DATA_FACTORY_GET_CLASS (data_factory);
                factory_name = class->get_factory_name (backend_factory);
 
                subprocess_helpers_hash_key = data_factory_dup_subprocess_helper_hash_key (
diff --git a/src/libebackend/e-dbus-server.c b/src/libebackend/e-dbus-server.c
index 2fa2697..ba77f00 100644
--- a/src/libebackend/e-dbus-server.c
+++ b/src/libebackend/e-dbus-server.c
@@ -202,6 +202,7 @@ dbus_server_bus_name_acquired (EDBusServer *server,
        EDBusServerClass *class;
 
        class = E_DBUS_SERVER_GET_CLASS (server);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->bus_name != NULL);
 
        e_source_registry_debug_print ("Bus name '%s' acquired.\n", class->bus_name);
@@ -214,6 +215,7 @@ dbus_server_bus_name_lost (EDBusServer *server,
        EDBusServerClass *class;
 
        class = E_DBUS_SERVER_GET_CLASS (server);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->bus_name != NULL);
 
        e_source_registry_debug_print ("Bus name '%s' lost.\n", class->bus_name);
@@ -229,9 +231,8 @@ dbus_server_run_server (EDBusServer *server)
        /* Try to acquire the well-known bus name. */
 
        class = E_DBUS_SERVER_GET_CLASS (server);
-       g_return_val_if_fail (
-               class->bus_name != NULL,
-               E_DBUS_SERVER_EXIT_NONE);
+       g_return_val_if_fail (class != NULL, E_DBUS_SERVER_EXIT_NONE);
+       g_return_val_if_fail (class->bus_name != NULL, E_DBUS_SERVER_EXIT_NONE);
 
        server->priv->bus_owner_id = g_bus_own_name (
                G_BUS_TYPE_SESSION,
@@ -608,6 +609,7 @@ e_dbus_server_load_modules (EDBusServer *server)
        g_return_if_fail (E_IS_DBUS_SERVER (server));
 
        class = E_DBUS_SERVER_GET_CLASS (server);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->module_directory != NULL);
 
        /* This ensures a module directory is only loaded once. */
diff --git a/src/libebackend/e-subprocess-factory.c b/src/libebackend/e-subprocess-factory.c
index 514d490..9654fc8 100644
--- a/src/libebackend/e-subprocess-factory.c
+++ b/src/libebackend/e-subprocess-factory.c
@@ -258,6 +258,10 @@ e_subprocess_factory_ref_initable_backend (ESubprocessFactory *subprocess_factor
        g_return_val_if_fail (backend_factory_type_name != NULL && *backend_factory_type_name != '\0', NULL);
        g_return_val_if_fail (module_filename != NULL && *module_filename != '\0', NULL);
 
+       class = E_SUBPROCESS_FACTORY_GET_CLASS (subprocess_factory);
+       g_return_val_if_fail (class != NULL, NULL);
+       g_return_val_if_fail (class->ref_backend != NULL, NULL);
+
        priv = subprocess_factory->priv;
 
        g_mutex_lock (&priv->mutex);
@@ -290,8 +294,6 @@ e_subprocess_factory_ref_initable_backend (ESubprocessFactory *subprocess_factor
                goto exit;
        }
 
-       class = E_SUBPROCESS_FACTORY_GET_CLASS (subprocess_factory);
-
        backend = class->ref_backend (registry, source, backend_factory_type_name);
 
        if (backend == NULL) {
@@ -397,15 +399,17 @@ e_subprocess_factory_open_backend (ESubprocessFactory *subprocess_factory,
        g_return_val_if_fail (module_filename != NULL && *module_filename != '\0', NULL);
        g_return_val_if_fail (E_DBUS_SUBPROCESS_IS_BACKEND (proxy), NULL);
 
+       class = E_SUBPROCESS_FACTORY_GET_CLASS (subprocess_factory);
+       g_return_val_if_fail (class != NULL, NULL);
+       g_return_val_if_fail (class->open_data != NULL, NULL);
+
        backend = e_subprocess_factory_ref_initable_backend (
                subprocess_factory, uid, backend_factory_type_name, module_filename, cancellable, error);
 
        if (backend == NULL)
                return NULL;
 
-       class = E_SUBPROCESS_FACTORY_GET_CLASS (subprocess_factory);
-       object_path = class->open_data (
-               subprocess_factory, backend, connection, proxy, cancellable, error);
+       object_path = class->open_data (subprocess_factory, backend, connection, proxy, cancellable, error);
 
        g_clear_object (&backend);
 
diff --git a/src/libebackend/e-user-prompter-server-extension.c 
b/src/libebackend/e-user-prompter-server-extension.c
index e0f85c8..8c1e4fc 100644
--- a/src/libebackend/e-user-prompter-server-extension.c
+++ b/src/libebackend/e-user-prompter-server-extension.c
@@ -39,6 +39,7 @@
 
 #include <string.h>
 
+#include "e-user-prompter-server.h"
 #include "e-user-prompter-server-extension.h"
 
 #define E_USER_PROMPTER_SERVER_EXTENSION_GET_PRIVATE(obj) \
@@ -73,7 +74,8 @@ user_prompter_server_extension_constructed (GObject *object)
        server = E_USER_PROMPTER_SERVER (extensible);
 
        klass = E_USER_PROMPTER_SERVER_EXTENSION_GET_CLASS (extension);
-       g_return_if_fail (klass->register_dialogs);
+       g_return_if_fail (klass != NULL);
+       g_return_if_fail (klass->register_dialogs != NULL);
 
        klass->register_dialogs (extension, server);
 }
@@ -138,6 +140,7 @@ e_user_prompter_server_extension_prompt (EUserPrompterServerExtension *extension
        g_return_val_if_fail (E_IS_USER_PROMPTER_SERVER_EXTENSION (extension), FALSE);
 
        klass = E_USER_PROMPTER_SERVER_EXTENSION_GET_CLASS (extension);
+       g_return_val_if_fail (klass != NULL, FALSE);
        g_return_val_if_fail (klass->prompt != NULL, FALSE);
 
        return klass->prompt (extension, prompt_id, dialog_name, parameters);
diff --git a/src/libebackend/e-user-prompter-server-extension.h 
b/src/libebackend/e-user-prompter-server-extension.h
index e60d34e..5131dd6 100644
--- a/src/libebackend/e-user-prompter-server-extension.h
+++ b/src/libebackend/e-user-prompter-server-extension.h
@@ -18,7 +18,7 @@
 #ifndef E_USER_PROMPTER_SERVER_EXTENSION_H
 #define E_USER_PROMPTER_SERVER_EXTENSION_H
 
-#include <libebackend/libebackend.h>
+#include <libedataserver/libedataserver.h>
 
 /* Standard GObject macros */
 #define E_TYPE_USER_PROMPTER_SERVER_EXTENSION \
diff --git a/src/libebackend/e-user-prompter-server.c b/src/libebackend/e-user-prompter-server.c
index 7a22034..1a72a11 100644
--- a/src/libebackend/e-user-prompter-server.c
+++ b/src/libebackend/e-user-prompter-server.c
@@ -33,6 +33,7 @@
 /* Private D-Bus classes. */
 #include "e-dbus-user-prompter.h"
 
+#include "e-user-prompter-server-extension.h"
 #include "e-user-prompter-server.h"
 
 #define E_USER_PROMPTER_SERVER_GET_PRIVATE(obj) \
diff --git a/src/libebackend/e-user-prompter-server.h b/src/libebackend/e-user-prompter-server.h
index 9088e8c..2a78e44 100644
--- a/src/libebackend/e-user-prompter-server.h
+++ b/src/libebackend/e-user-prompter-server.h
@@ -18,8 +18,8 @@
 #ifndef E_USER_PROMPTER_SERVER_H
 #define E_USER_PROMPTER_SERVER_H
 
-#include <libebackend/libebackend.h>
 #include <libedataserver/libedataserver.h>
+#include <libebackend/e-dbus-server.h>
 
 /* Standard GObject macros */
 #define E_TYPE_USER_PROMPTER_SERVER \
diff --git a/src/libebackend/e-user-prompter.h b/src/libebackend/e-user-prompter.h
index 43d5627..ffd6e4a 100644
--- a/src/libebackend/e-user-prompter.h
+++ b/src/libebackend/e-user-prompter.h
@@ -23,7 +23,6 @@
 #define E_USER_PROMPTER_H
 
 #include <glib.h>
-#include <libebackend/libebackend.h>
 #include <libedataserver/libedataserver.h>
 
 /* Standard GObject macros */
diff --git a/src/libedataserver/e-collator.c b/src/libedataserver/e-collator.c
index 334b8f1..718eac5 100644
--- a/src/libedataserver/e-collator.c
+++ b/src/libedataserver/e-collator.c
@@ -498,6 +498,7 @@ e_collator_generate_key (ECollator *collator,
 
        if (!source) {
                g_free (translit_str);
+               g_free (free_me);
                return NULL;
        }
 
diff --git a/src/libedataserver/e-extension.c b/src/libedataserver/e-extension.c
index 3133c9c..1242355 100644
--- a/src/libedataserver/e-extension.c
+++ b/src/libedataserver/e-extension.c
@@ -71,6 +71,8 @@ extension_set_extensible (EExtension *extension,
        g_return_if_fail (extension->priv->extensible == NULL);
 
        class = E_EXTENSION_GET_CLASS (extension);
+       g_return_if_fail (class != NULL);
+
        extensible_type = G_OBJECT_TYPE (extensible);
 
        /* Verify the EExtensible object is the type we want. */
diff --git a/src/libedataserver/e-proxy.c b/src/libedataserver/e-proxy.c
index a51c465..883379a 100644
--- a/src/libedataserver/e-proxy.c
+++ b/src/libedataserver/e-proxy.c
@@ -533,7 +533,6 @@ ep_parse_ignore_host (gpointer data,
        SoupAddress *addr;
        guint status;
        gchar *input, *netmask, *hostname;
-       ProxyHostAddr *host_addr;
        gboolean has_error = FALSE;
 
        if (!proxy || !proxy->priv)
@@ -552,6 +551,7 @@ ep_parse_ignore_host (gpointer data,
        addr = soup_address_new (hostname, 0);
        status = soup_address_resolve_sync (addr, NULL);
        if (status == SOUP_STATUS_OK) {
+               ProxyHostAddr *host_addr;
                gint addr_len;
                struct sockaddr * so_addr = NULL;
 
@@ -562,8 +562,10 @@ ep_parse_ignore_host (gpointer data,
                /* This will never happen, since we have already called
                 * soup_address_resolve_sync ().
                */
-               if (!so_addr)
+               if (!so_addr) {
+                       ep_free_proxy_host_addr (host_addr);
                        goto error;
+               }
 
                if (so_addr->sa_family == AF_INET)
                        has_error = ep_manipulate_ipv4 (
@@ -582,6 +584,7 @@ ep_parse_ignore_host (gpointer data,
                        priv->ign_hosts = g_slist_append (
                                priv->ign_hosts, hostname);
                } else {
+                       ep_free_proxy_host_addr (host_addr);
                        g_free (hostname);
                }
        } else {
diff --git a/src/libedataserver/e-sexp.c b/src/libedataserver/e-sexp.c
index 9230452..f49c078 100644
--- a/src/libedataserver/e-sexp.c
+++ b/src/libedataserver/e-sexp.c
@@ -795,7 +795,7 @@ e_sexp_term_eval (ESExp *sexp,
                break;
        case ESEXP_TERM_FUNC:
                /* first evaluate all arguments to result types */
-               argv = alloca (sizeof (argv[0]) * t->value.func.termcount);
+               argv = g_alloca (sizeof (argv[0]) * t->value.func.termcount);
                for (i = 0; i < t->value.func.termcount; i++) {
                        argv[i] = e_sexp_term_eval (sexp, t->value.func.terms[i]);
                }
@@ -1137,9 +1137,9 @@ e_sexp_term_evaluate_occur_times (ESExp *sexp,
 
                r = e_sexp_result_new (sexp, ESEXP_RES_UNDEFINED);
                argc = t->value.func.termcount;
-               argv = alloca (sizeof (argv[0]) * argc);
+               argv = g_alloca (sizeof (argv[0]) * argc);
 
-               for (i = 0; i < t->value.func.termcount; i++) {
+               for (i = 0; i < argc; i++) {
                        argv[i] = e_sexp_term_evaluate_occur_times (
                                sexp, t->value.func.terms[i], start, end);
                }
@@ -1147,8 +1147,7 @@ e_sexp_term_evaluate_occur_times (ESExp *sexp,
                if (is_time_function (t->value.func.sym->name)) {
                        /* evaluate time */
                        if (t->value.func.sym->f.func)
-                               r = t->value.func.sym->f.func (sexp, t->value.func.termcount,
-                                             argv, t->value.func.sym->data);
+                               r = t->value.func.sym->f.func (sexp, argc, argv, t->value.func.sym->data);
                } else if ((generator = get_generator_function (t->value.func.sym->name)) != NULL) {
                        /* evaluate generator function */
                        r->time_generator = TRUE;
@@ -1161,7 +1160,7 @@ e_sexp_term_evaluate_occur_times (ESExp *sexp,
                        r->time_generator = FALSE;
                }
 
-               e_sexp_resultv_free (sexp, t->value.func.termcount, argv);
+               e_sexp_resultv_free (sexp, argc, argv);
                break;
        }
        case ESEXP_TERM_INT:
@@ -1252,8 +1251,20 @@ parse_values (ESExp *sexp,
        terms = g_malloc (size * sizeof (*terms));
        l = list;
        for (i = size - 1; i >= 0; i--) {
-               g_return_val_if_fail (l, NULL);
-               g_return_val_if_fail (l->data, NULL);
+               if (!l || !l->data) {
+                       if (!l)
+                               g_warn_if_fail (l != NULL);
+                       if (l && !l->data)
+                               g_warn_if_fail (l->data != NULL);
+
+                       g_slist_free (list);
+                       g_free (terms);
+
+                       *len = 0;
+
+                       return NULL;
+               }
+
                terms[i] = l->data;
                l = g_slist_next (l);
        }
diff --git a/src/libedataserver/e-source-credentials-provider-impl.c 
b/src/libedataserver/e-source-credentials-provider-impl.c
index 6c4498b..8e3b438 100644
--- a/src/libedataserver/e-source-credentials-provider-impl.c
+++ b/src/libedataserver/e-source-credentials-provider-impl.c
@@ -152,6 +152,7 @@ e_source_credentials_provider_impl_can_process (ESourceCredentialsProviderImpl *
        g_return_val_if_fail (E_IS_SOURCE (source), FALSE);
 
        klass = E_SOURCE_CREDENTIALS_PROVIDER_IMPL_GET_CLASS (provider_impl);
+       g_return_val_if_fail (klass != NULL, FALSE);
        g_return_val_if_fail (klass->can_process != NULL, FALSE);
 
        return klass->can_process (provider_impl, source);
@@ -175,6 +176,7 @@ e_source_credentials_provider_impl_can_store (ESourceCredentialsProviderImpl *pr
        g_return_val_if_fail (E_IS_SOURCE_CREDENTIALS_PROVIDER_IMPL (provider_impl), FALSE);
 
        klass = E_SOURCE_CREDENTIALS_PROVIDER_IMPL_GET_CLASS (provider_impl);
+       g_return_val_if_fail (klass != NULL, FALSE);
        g_return_val_if_fail (klass->can_store != NULL, FALSE);
 
        return klass->can_store (provider_impl);
@@ -198,6 +200,7 @@ e_source_credentials_provider_impl_can_prompt (ESourceCredentialsProviderImpl *p
        g_return_val_if_fail (E_IS_SOURCE_CREDENTIALS_PROVIDER_IMPL (provider_impl), FALSE);
 
        klass = E_SOURCE_CREDENTIALS_PROVIDER_IMPL_GET_CLASS (provider_impl);
+       g_return_val_if_fail (klass != NULL, FALSE);
        g_return_val_if_fail (klass->can_prompt != NULL, FALSE);
 
        return klass->can_prompt (provider_impl);
@@ -238,6 +241,7 @@ e_source_credentials_provider_impl_lookup_sync (ESourceCredentialsProviderImpl *
        g_return_val_if_fail (out_credentials != NULL, FALSE);
 
        klass = E_SOURCE_CREDENTIALS_PROVIDER_IMPL_GET_CLASS (provider_impl);
+       g_return_val_if_fail (klass != NULL, FALSE);
        g_return_val_if_fail (klass->lookup_sync != NULL, FALSE);
 
        return klass->lookup_sync (provider_impl, source, cancellable, out_credentials, error);
@@ -277,6 +281,7 @@ e_source_credentials_provider_impl_store_sync (ESourceCredentialsProviderImpl *p
        g_return_val_if_fail (credentials != NULL, FALSE);
 
        klass = E_SOURCE_CREDENTIALS_PROVIDER_IMPL_GET_CLASS (provider_impl);
+       g_return_val_if_fail (klass != NULL, FALSE);
        g_return_val_if_fail (klass->store_sync != NULL, FALSE);
 
        return klass->store_sync (provider_impl, source, credentials, permanently, cancellable, error);
@@ -311,6 +316,7 @@ e_source_credentials_provider_impl_delete_sync (ESourceCredentialsProviderImpl *
        g_return_val_if_fail (E_IS_SOURCE (source), FALSE);
 
        klass = E_SOURCE_CREDENTIALS_PROVIDER_IMPL_GET_CLASS (provider_impl);
+       g_return_val_if_fail (klass != NULL, FALSE);
        g_return_val_if_fail (klass->delete_sync != NULL, FALSE);
 
        return klass->delete_sync (provider_impl, source, cancellable, error);
diff --git a/src/libedataserver/e-source-credentials-provider.c 
b/src/libedataserver/e-source-credentials-provider.c
index 36764ba..06b706d 100644
--- a/src/libedataserver/e-source-credentials-provider.c
+++ b/src/libedataserver/e-source-credentials-provider.c
@@ -391,6 +391,7 @@ e_source_credentials_provider_ref_source (ESourceCredentialsProvider *provider,
        g_return_val_if_fail (uid != NULL, NULL);
 
        klass = E_SOURCE_CREDENTIALS_PROVIDER_GET_CLASS (provider);
+       g_return_val_if_fail (klass != NULL, NULL);
        g_return_val_if_fail (klass->ref_source != NULL, NULL);
 
        return klass->ref_source (provider, uid);
diff --git a/src/libedataserver/e-source.c b/src/libedataserver/e-source.c
index bb78db8..7177c8e 100644
--- a/src/libedataserver/e-source.c
+++ b/src/libedataserver/e-source.c
@@ -3533,6 +3533,7 @@ e_source_remove_sync (ESource *source,
        g_return_val_if_fail (E_IS_SOURCE (source), FALSE);
 
        class = E_SOURCE_GET_CLASS (source);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->remove_sync != NULL, FALSE);
 
        return class->remove_sync (source, cancellable, error);
@@ -3566,6 +3567,7 @@ e_source_remove (ESource *source,
        g_return_if_fail (E_IS_SOURCE (source));
 
        class = E_SOURCE_GET_CLASS (source);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->remove != NULL);
 
        class->remove (source, cancellable, callback, user_data);
@@ -3595,6 +3597,7 @@ e_source_remove_finish (ESource *source,
        g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE);
 
        class = E_SOURCE_GET_CLASS (source);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->remove_finish != NULL, FALSE);
 
        return class->remove_finish (source, result, error);
@@ -3626,6 +3629,7 @@ e_source_write_sync (ESource *source,
        g_return_val_if_fail (E_IS_SOURCE (source), FALSE);
 
        class = E_SOURCE_GET_CLASS (source);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->write_sync != NULL, FALSE);
 
        return class->write_sync (source, cancellable, error);
@@ -3659,6 +3663,7 @@ e_source_write (ESource *source,
        g_return_if_fail (E_IS_SOURCE (source));
 
        class = E_SOURCE_GET_CLASS (source);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->write != NULL);
 
        class->write (source, cancellable, callback, user_data);
@@ -3688,6 +3693,7 @@ e_source_write_finish (ESource *source,
        g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE);
 
        class = E_SOURCE_GET_CLASS (source);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->write_finish != NULL, FALSE);
 
        return class->write_finish (source, result, error);
@@ -3727,6 +3733,7 @@ e_source_remote_create_sync (ESource *source,
        g_return_val_if_fail (E_IS_SOURCE (scratch_source), FALSE);
 
        class = E_SOURCE_GET_CLASS (source);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->remote_create_sync != NULL, FALSE);
 
        return class->remote_create_sync (
@@ -3769,6 +3776,7 @@ e_source_remote_create (ESource *source,
        g_return_if_fail (E_IS_SOURCE (scratch_source));
 
        class = E_SOURCE_GET_CLASS (source);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->remote_create != NULL);
 
        class->remote_create (
@@ -3799,6 +3807,7 @@ e_source_remote_create_finish (ESource *source,
        g_return_val_if_fail (E_IS_SOURCE (source), FALSE);
 
        class = E_SOURCE_GET_CLASS (source);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->remote_create_finish != NULL, FALSE);
 
        return class->remote_create_finish (source, result, error);
@@ -3831,6 +3840,7 @@ e_source_remote_delete_sync (ESource *source,
        g_return_val_if_fail (E_IS_SOURCE (source), FALSE);
 
        class = E_SOURCE_GET_CLASS (source);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->remote_delete_sync != NULL, FALSE);
 
        return class->remote_delete_sync (source, cancellable, error);
@@ -3865,6 +3875,7 @@ e_source_remote_delete (ESource *source,
        g_return_if_fail (E_IS_SOURCE (source));
 
        class = E_SOURCE_GET_CLASS (source);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->remote_delete != NULL);
 
        class->remote_delete (source, cancellable, callback, user_data);
@@ -3893,6 +3904,7 @@ e_source_remote_delete_finish (ESource *source,
        g_return_val_if_fail (E_IS_SOURCE (source), FALSE);
 
        class = E_SOURCE_GET_CLASS (source);
+       g_return_val_if_fail (class != NULL, FALSE);
        g_return_val_if_fail (class->remote_delete_finish != NULL, FALSE);
 
        return class->remote_delete_finish (source, result, error);
@@ -3930,8 +3942,8 @@ e_source_get_oauth2_access_token_sync (ESource *source,
        g_return_val_if_fail (E_IS_SOURCE (source), FALSE);
 
        class = E_SOURCE_GET_CLASS (source);
-       g_return_val_if_fail (
-               class->get_oauth2_access_token_sync != NULL, FALSE);
+       g_return_val_if_fail (class != NULL, FALSE);
+       g_return_val_if_fail (class->get_oauth2_access_token_sync != NULL, FALSE);
 
        return class->get_oauth2_access_token_sync (
                source, cancellable, out_access_token, out_expires_in, error);
@@ -3965,6 +3977,7 @@ e_source_get_oauth2_access_token (ESource *source,
        g_return_if_fail (E_IS_SOURCE (source));
 
        class = E_SOURCE_GET_CLASS (source);
+       g_return_if_fail (class != NULL);
        g_return_if_fail (class->get_oauth2_access_token != NULL);
 
        return class->get_oauth2_access_token (
@@ -4003,8 +4016,8 @@ e_source_get_oauth2_access_token_finish (ESource *source,
        g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE);
 
        class = E_SOURCE_GET_CLASS (source);
-       g_return_val_if_fail (
-               class->get_oauth2_access_token_finish != NULL, FALSE);
+       g_return_val_if_fail (class != NULL, FALSE);
+       g_return_val_if_fail (class->get_oauth2_access_token_finish != NULL, FALSE);
 
        return class->get_oauth2_access_token_finish (
                source, result, out_access_token, out_expires_in, error);
@@ -4486,6 +4499,7 @@ e_source_invoke_credentials_required_sync (ESource *source,
        g_return_val_if_fail (E_IS_SOURCE (source), FALSE);
 
        klass = E_SOURCE_GET_CLASS (source);
+       g_return_val_if_fail (klass != NULL, FALSE);
        g_return_val_if_fail (klass->invoke_credentials_required_impl != NULL, FALSE);
 
        dbus_object = e_source_ref_dbus_object (source);
@@ -4704,6 +4718,7 @@ e_source_invoke_authenticate_sync (ESource *source,
        g_return_val_if_fail (E_IS_SOURCE (source), FALSE);
 
        klass = E_SOURCE_GET_CLASS (source);
+       g_return_val_if_fail (klass != NULL, FALSE);
        g_return_val_if_fail (klass->invoke_authenticate_impl != NULL, FALSE);
 
        dbus_object = e_source_ref_dbus_object (source);
@@ -5107,6 +5122,7 @@ e_source_unset_last_credentials_required_arguments_sync (ESource *source,
        g_return_val_if_fail (E_IS_SOURCE (source), FALSE);
 
        klass = E_SOURCE_GET_CLASS (source);
+       g_return_val_if_fail (klass != NULL, FALSE);
        g_return_val_if_fail (klass->unset_last_credentials_required_arguments_impl != NULL, FALSE);
 
        return klass->unset_last_credentials_required_arguments_impl (source, cancellable, error);
diff --git a/src/libedataserver/e-webdav-session.c b/src/libedataserver/e-webdav-session.c
index 06f3b0d..fc9a646 100644
--- a/src/libedataserver/e-webdav-session.c
+++ b/src/libedataserver/e-webdav-session.c
@@ -4655,11 +4655,11 @@ e_webdav_session_principal_collection_set_cb (EWebDAVSession *webdav,
                        length = xmlXPathNodeSetGetLength (xpath_obj->nodesetval);
 
                        for (ii = 0; ii < length; ii++) {
-                               gchar *href;
+                               gchar *got_href;
 
-                               href = e_xml_xpath_eval_as_string (xpath_ctx, 
"%s/D:principal-collection-set/D:href[%d]", xpath_prop_prefix, ii + 1);
-                               if (href)
-                                       *out_principal_hrefs = g_slist_prepend (*out_principal_hrefs, href);
+                               got_href = e_xml_xpath_eval_as_string (xpath_ctx, 
"%s/D:principal-collection-set/D:href[%d]", xpath_prop_prefix, ii + 1);
+                               if (got_href)
+                                       *out_principal_hrefs = g_slist_prepend (*out_principal_hrefs, 
got_href);
                        }
 
                        xmlXPathFreeObject (xpath_obj);
diff --git a/src/libedataserverui/e-credentials-prompter-impl.c 
b/src/libedataserverui/e-credentials-prompter-impl.c
index c88d0a7..e339bfc 100644
--- a/src/libedataserverui/e-credentials-prompter-impl.c
+++ b/src/libedataserverui/e-credentials-prompter-impl.c
@@ -47,6 +47,7 @@ e_credentials_prompter_impl_constructed (GObject *object)
        prompter = E_CREDENTIALS_PROMPTER (e_extension_get_extensible (E_EXTENSION (prompter_impl)));
 
        klass = E_CREDENTIALS_PROMPTER_IMPL_GET_CLASS (object);
+       g_return_if_fail (klass != NULL);
        g_return_if_fail (klass->authentication_methods != NULL);
 
        for (ii = 0; klass->authentication_methods[ii]; ii++) {
@@ -174,6 +175,7 @@ e_credentials_prompter_impl_prompt (ECredentialsPrompterImpl *prompter_impl,
        g_return_if_fail (credentials != NULL);
 
        klass = E_CREDENTIALS_PROMPTER_IMPL_GET_CLASS (prompter_impl);
+       g_return_if_fail (klass != NULL);
        g_return_if_fail (klass->process_prompt != NULL);
 
        klass->process_prompt (prompter_impl, prompt_id, auth_source, cred_source, error_text, credentials);
@@ -224,6 +226,7 @@ e_credentials_prompter_impl_cancel_prompt (ECredentialsPrompterImpl *prompter_im
        g_return_if_fail (E_IS_CREDENTIALS_PROMPTER_IMPL (prompter_impl));
 
        klass = E_CREDENTIALS_PROMPTER_IMPL_GET_CLASS (prompter_impl);
+       g_return_if_fail (klass != NULL);
        g_return_if_fail (klass->cancel_prompt != NULL);
 
        klass->cancel_prompt (prompter_impl, prompt_id);
diff --git a/src/libedataserverui/e-credentials-prompter.c b/src/libedataserverui/e-credentials-prompter.c
index 91f7cea..f8c94aa 100644
--- a/src/libedataserverui/e-credentials-prompter.c
+++ b/src/libedataserverui/e-credentials-prompter.c
@@ -548,12 +548,12 @@ e_credentials_prompter_prompt_finish_for_source (ECredentialsPrompter *prompter,
        }
 
        if (ppd->async_result) {
-               ECredentialsPrompter *prompter;
+               ECredentialsPrompter *ppd_prompter;
 
-               prompter = g_weak_ref_get (ppd->prompter);
-               if (prompter) {
-                       e_credentials_prompter_complete_prompt_call (prompter, ppd->async_result, 
ppd->auth_source, credentials, NULL);
-                       g_clear_object (&prompter);
+               ppd_prompter = g_weak_ref_get (ppd->prompter);
+               if (ppd_prompter) {
+                       e_credentials_prompter_complete_prompt_call (ppd_prompter, ppd->async_result, 
ppd->auth_source, credentials, NULL);
+                       g_clear_object (&ppd_prompter);
 
                        /* To not be completed multiple times */
                        g_clear_object (&ppd->async_result);
diff --git a/tests/libebook/client/test-book-client-photo-is-uri.c 
b/tests/libebook/client/test-book-client-photo-is-uri.c
index 6babeb2..e698597 100644
--- a/tests/libebook/client/test-book-client-photo-is-uri.c
+++ b/tests/libebook/client/test-book-client-photo-is-uri.c
@@ -114,18 +114,19 @@ give_james_brown_micheal_jacksons_face (EBookClient *book)
        GError         *error = NULL;
 
        if (!e_book_client_get_contact_sync (book, micheal_jackson_uid, &micheal, NULL, &error))
-         g_error ("Unable to get micheal jackson's contact information: %s", error->message);
+               g_error ("Unable to get micheal jackson's contact information: %s", error->message);
 
        if (!e_book_client_get_contact_sync (book, james_brown_uid, &james, NULL, &error))
-         g_error ("Unable to get james brown's contact information: %s", error->message);
+               g_error ("Unable to get james brown's contact information: %s", error->message);
 
        g_assert (micheal);
        g_assert (james);
 
        micheal_face = e_contact_get (micheal, E_CONTACT_PHOTO);
+       g_assert_nonnull (micheal_face);
        g_assert (micheal_face->type == E_CONTACT_PHOTO_TYPE_URI);
 
-       james_face = g_new (EContactPhoto, 1);
+       james_face = e_contact_photo_new ();
        james_face->type = E_CONTACT_PHOTO_TYPE_URI;
        james_face->data.uri = g_strdup (micheal_face->data.uri);
 
@@ -133,6 +134,9 @@ give_james_brown_micheal_jacksons_face (EBookClient *book)
 
        g_print ("Giving james brown micheal jacksons face: %s\n", micheal_face->data.uri);
 
+       e_contact_photo_free (micheal_face);
+       e_contact_photo_free (james_face);
+
        if (!e_book_client_modify_contact_sync (book, james, NULL, &error))
                g_error ("Failed to modify contact with cross referenced photo: %s", error->message);
 }
@@ -148,13 +152,13 @@ update_contact_inline (EBookClient *book,
        GError *error = NULL;
 
        if (!e_book_client_get_contact_sync (book, uid, &contact, NULL, &error))
-         g_error ("Unable to get contact: %s", error->message);
+               g_error ("Unable to get contact: %s", error->message);
 
        g_assert (contact);
 
        data = g_base64_decode (photo_data, &length);
 
-       photo = g_new (EContactPhoto, 1);
+       photo = e_contact_photo_new ();
        photo->type = E_CONTACT_PHOTO_TYPE_INLINED;
        photo->data.inlined.mime_type = NULL;
        photo->data.inlined.data = data;
@@ -163,8 +167,10 @@ update_contact_inline (EBookClient *book,
        /* set the photo */
        e_contact_set (contact, E_CONTACT_PHOTO, photo);
 
+       e_contact_photo_free (photo);
+
        if (!e_book_client_modify_contact_sync (book, contact, NULL, &error))
-           g_error ("Failed to modify contact with inline photo data: %s", error->message);
+               g_error ("Failed to modify contact with inline photo data: %s", error->message);
 }
 
 /* This assertion is made a couple of times in the view-complete
@@ -276,7 +282,7 @@ add_contact_inline (EBookClient *book)
 
        data = g_base64_decode (photo_data, &length);
 
-       photo = g_new (EContactPhoto, 1);
+       photo = e_contact_photo_new ();
        photo->type = E_CONTACT_PHOTO_TYPE_INLINED;
        photo->data.inlined.mime_type = NULL;
        photo->data.inlined.data = data;
@@ -286,7 +292,9 @@ add_contact_inline (EBookClient *book)
        e_contact_set (contact, E_CONTACT_PHOTO, photo);
        e_contact_set (contact, E_CONTACT_FULL_NAME, "Micheal Jackson");
 
-       if (!add_contact_verify  (book, contact))
+       e_contact_photo_free (photo);
+
+       if (!add_contact_verify (book, contact))
                g_error ("Failed to add contact");
 
        micheal_jackson_uid = e_contact_get (contact, E_CONTACT_UID);
@@ -300,7 +308,7 @@ add_contact_uri (EBookClient *book)
 
        contact = e_contact_new ();
 
-       photo = g_new (EContactPhoto, 1);
+       photo = e_contact_photo_new ();
        photo->type = E_CONTACT_PHOTO_TYPE_URI;
        photo->data.uri = g_strdup ("http://en.wikipedia.org/wiki/File:Jamesbrown4.jpg";);
 
@@ -308,7 +316,9 @@ add_contact_uri (EBookClient *book)
        e_contact_set (contact, E_CONTACT_PHOTO, photo);
        e_contact_set (contact, E_CONTACT_FULL_NAME, "James Brown");
 
-       if (!add_contact_verify  (book, contact))
+       e_contact_photo_free (photo);
+
+       if (!add_contact_verify (book, contact))
                g_error ("Failed to add contact");
 
        james_brown_uid = e_contact_get (contact, E_CONTACT_UID);
diff --git a/tests/libedata-book/test-book-meta-backend.c b/tests/libedata-book/test-book-meta-backend.c
index df54ad9..afbe88f 100644
--- a/tests/libedata-book/test-book-meta-backend.c
+++ b/tests/libedata-book/test-book-meta-backend.c
@@ -633,11 +633,16 @@ e_book_meta_backend_test_change_online (EBookMetaBackend *meta_backend,
 static void
 e_book_meta_backend_test_call_refresh (EBookMetaBackend *meta_backend)
 {
+       EBookBackendClass *backend_class;
        EFlag *flag;
        gulong handler_id;
        gboolean success;
        GError *error = NULL;
 
+       backend_class = E_BOOK_BACKEND_GET_CLASS (meta_backend);
+       g_return_if_fail (backend_class != NULL);
+       g_return_if_fail (backend_class->refresh_sync != NULL);
+
        if (!e_backend_get_online (E_BACKEND (meta_backend)))
                return;
 
@@ -646,7 +651,7 @@ e_book_meta_backend_test_call_refresh (EBookMetaBackend *meta_backend)
        handler_id = g_signal_connect_swapped (meta_backend, "refresh-completed",
                G_CALLBACK (e_flag_set), flag);
 
-       success = E_BOOK_BACKEND_GET_CLASS (meta_backend)->refresh_sync (E_BOOK_BACKEND (meta_backend), NULL, 
&error);
+       success = backend_class->refresh_sync (E_BOOK_BACKEND (meta_backend), NULL, &error);
        g_assert_no_error (error);
        g_assert (success);
 
@@ -830,6 +835,7 @@ static void
 test_create_contacts (EBookMetaBackend *meta_backend)
 {
        EBookMetaBackendTest *test_backend;
+       EBookBackendClass *backend_class;
        EBookCache *book_cache;
        GSList *offline_changes;
        gchar *vcards[2] = { NULL, NULL }, *tmp;
@@ -839,6 +845,10 @@ test_create_contacts (EBookMetaBackend *meta_backend)
 
        g_assert_nonnull (meta_backend);
 
+       backend_class = E_BOOK_BACKEND_GET_CLASS (meta_backend);
+       g_return_if_fail (backend_class != NULL);
+       g_return_if_fail (backend_class->create_contacts_sync != NULL);
+
        test_backend = E_BOOK_META_BACKEND_TEST (meta_backend);
        book_cache = e_book_meta_backend_ref_cache (meta_backend);
        g_assert_nonnull (book_cache);
@@ -848,7 +858,7 @@ test_create_contacts (EBookMetaBackend *meta_backend)
        /* Try to add existing contact, it should fail */
        vcards[0] = tcu_new_vcard_from_test_case ("custom-1");
 
-       success = E_BOOK_BACKEND_GET_CLASS (meta_backend)->create_contacts_sync (E_BOOK_BACKEND 
(meta_backend),
+       success = backend_class->create_contacts_sync (E_BOOK_BACKEND (meta_backend),
                (const gchar * const *) vcards, &new_contacts, NULL, &error);
        g_assert_error (error, E_DATA_BOOK_ERROR, E_DATA_BOOK_STATUS_CONTACTID_ALREADY_EXISTS);
        g_assert (!success);
@@ -861,7 +871,7 @@ test_create_contacts (EBookMetaBackend *meta_backend)
        /* Try to add new contact */
        vcards[0] = tcu_new_vcard_from_test_case ("custom-7");
 
-       success = E_BOOK_BACKEND_GET_CLASS (meta_backend)->create_contacts_sync (E_BOOK_BACKEND 
(meta_backend),
+       success = backend_class->create_contacts_sync (E_BOOK_BACKEND (meta_backend),
                (const gchar * const *) vcards, &new_contacts, NULL, &error);
        g_assert_no_error (error);
        g_assert (success);
@@ -886,7 +896,7 @@ test_create_contacts (EBookMetaBackend *meta_backend)
        /* Try to add existing contact, it should fail */
        vcards[0] = tcu_new_vcard_from_test_case ("custom-7");
 
-       success = E_BOOK_BACKEND_GET_CLASS (meta_backend)->create_contacts_sync (E_BOOK_BACKEND 
(meta_backend),
+       success = backend_class->create_contacts_sync (E_BOOK_BACKEND (meta_backend),
                (const gchar * const *) vcards, &new_contacts, NULL, &error);
        g_assert_error (error, E_DATA_BOOK_ERROR, E_DATA_BOOK_STATUS_CONTACTID_ALREADY_EXISTS);
        g_assert (!success);
@@ -899,7 +909,7 @@ test_create_contacts (EBookMetaBackend *meta_backend)
        /* Try to add new contact */
        vcards[0] = tcu_new_vcard_from_test_case ("custom-8");
 
-       success = E_BOOK_BACKEND_GET_CLASS (meta_backend)->create_contacts_sync (E_BOOK_BACKEND 
(meta_backend),
+       success = backend_class->create_contacts_sync (E_BOOK_BACKEND (meta_backend),
                (const gchar * const *) vcards, &new_contacts, NULL, &error);
        g_assert_no_error (error);
        g_assert (success);
@@ -938,7 +948,7 @@ test_create_contacts (EBookMetaBackend *meta_backend)
        g_assert_nonnull (tmp);
        memcpy (tmp, "X-TEST:*007*", 12);
 
-       success = E_BOOK_BACKEND_GET_CLASS (meta_backend)->create_contacts_sync (E_BOOK_BACKEND 
(meta_backend),
+       success = backend_class->create_contacts_sync (E_BOOK_BACKEND (meta_backend),
                (const gchar * const *) vcards, &new_contacts, NULL, &error);
        g_assert_no_error (error);
        g_assert (success);
@@ -996,6 +1006,7 @@ static void
 test_modify_contacts (EBookMetaBackend *meta_backend)
 {
        EBookMetaBackendTest *test_backend;
+       EBookBackendClass *backend_class;
        EBookCache *book_cache;
        EContact *contact;
        GSList *offline_changes;
@@ -1007,6 +1018,10 @@ test_modify_contacts (EBookMetaBackend *meta_backend)
 
        g_assert_nonnull (meta_backend);
 
+       backend_class = E_BOOK_BACKEND_GET_CLASS (meta_backend);
+       g_return_if_fail (backend_class != NULL);
+       g_return_if_fail (backend_class->modify_contacts_sync != NULL);
+
        test_backend = E_BOOK_META_BACKEND_TEST (meta_backend);
        book_cache = e_book_meta_backend_ref_cache (meta_backend);
        g_assert_nonnull (book_cache);
@@ -1018,7 +1033,7 @@ test_modify_contacts (EBookMetaBackend *meta_backend)
        g_assert_nonnull (tmp);
        memcpy (tmp + 4, "unknown", 7);
 
-       success = E_BOOK_BACKEND_GET_CLASS (meta_backend)->modify_contacts_sync (E_BOOK_BACKEND 
(meta_backend),
+       success = backend_class->modify_contacts_sync (E_BOOK_BACKEND (meta_backend),
                (const gchar * const *) vcards, &new_contacts, NULL, &error);
        g_assert_error (error, E_DATA_BOOK_ERROR, E_DATA_BOOK_STATUS_CONTACT_NOT_FOUND);
        g_assert (!success);
@@ -1029,7 +1044,7 @@ test_modify_contacts (EBookMetaBackend *meta_backend)
        /* Modify existing contact */
        vcards[0] = ebmb_test_modify_case ("custom-1");
 
-       success = E_BOOK_BACKEND_GET_CLASS (meta_backend)->modify_contacts_sync (E_BOOK_BACKEND 
(meta_backend),
+       success = backend_class->modify_contacts_sync (E_BOOK_BACKEND (meta_backend),
                (const gchar * const *) vcards, &new_contacts, NULL, &error);
        g_assert_no_error (error);
        g_assert (success);
@@ -1070,7 +1085,7 @@ test_modify_contacts (EBookMetaBackend *meta_backend)
        /* Modify custom-2 */
        vcards[0] = ebmb_test_modify_case ("custom-2");
 
-       success = E_BOOK_BACKEND_GET_CLASS (meta_backend)->modify_contacts_sync (E_BOOK_BACKEND 
(meta_backend),
+       success = backend_class->modify_contacts_sync (E_BOOK_BACKEND (meta_backend),
                (const gchar * const *) vcards, &new_contacts, NULL, &error);
        g_assert_no_error (error);
        g_assert (success);
@@ -1122,6 +1137,7 @@ static void
 test_remove_contacts (EBookMetaBackend *meta_backend)
 {
        EBookMetaBackendTest *test_backend;
+       EBookBackendClass *backend_class;
        EBookCache *book_cache;
        const gchar *uids[2] = { NULL, NULL };
        GSList *offline_changes;
@@ -1130,6 +1146,10 @@ test_remove_contacts (EBookMetaBackend *meta_backend)
 
        g_assert_nonnull (meta_backend);
 
+       backend_class = E_BOOK_BACKEND_GET_CLASS (meta_backend);
+       g_return_if_fail (backend_class != NULL);
+       g_return_if_fail (backend_class->remove_contacts_sync != NULL);
+
        test_backend = E_BOOK_META_BACKEND_TEST (meta_backend);
        book_cache = e_book_meta_backend_ref_cache (meta_backend);
        g_assert_nonnull (book_cache);
@@ -1137,7 +1157,7 @@ test_remove_contacts (EBookMetaBackend *meta_backend)
        /* Remove non-existing contact */
        uids[0] = "unknown-contact";
 
-       success = E_BOOK_BACKEND_GET_CLASS (meta_backend)->remove_contacts_sync (E_BOOK_BACKEND 
(meta_backend),
+       success = backend_class->remove_contacts_sync (E_BOOK_BACKEND (meta_backend),
                (const gchar * const *) uids, NULL, &error);
        g_assert_error (error, E_DATA_BOOK_ERROR, E_DATA_BOOK_STATUS_CONTACT_NOT_FOUND);
        g_assert (!success);
@@ -1146,7 +1166,7 @@ test_remove_contacts (EBookMetaBackend *meta_backend)
        /* Remove existing contact */
        uids[0] = "custom-1";
 
-       success = E_BOOK_BACKEND_GET_CLASS (meta_backend)->remove_contacts_sync (E_BOOK_BACKEND 
(meta_backend),
+       success = backend_class->remove_contacts_sync (E_BOOK_BACKEND (meta_backend),
                (const gchar * const *) uids, NULL, &error);
        g_assert_no_error (error);
        g_assert (success);
@@ -1166,7 +1186,7 @@ test_remove_contacts (EBookMetaBackend *meta_backend)
        /* Remove existing contact */
        uids[0] = "custom-3";
 
-       success = E_BOOK_BACKEND_GET_CLASS (meta_backend)->remove_contacts_sync (E_BOOK_BACKEND 
(meta_backend),
+       success = backend_class->remove_contacts_sync (E_BOOK_BACKEND (meta_backend),
                (const gchar * const *) uids, NULL, &error);
        g_assert_no_error (error);
        g_assert (success);
@@ -1208,12 +1228,17 @@ static void
 test_get_contact (EBookMetaBackend *meta_backend)
 {
        EBookMetaBackendTest *test_backend;
+       EBookBackendClass *backend_class;
        EBookCache *book_cache;
        EContact *contact;
        GError *error = NULL;
 
        g_assert_nonnull (meta_backend);
 
+       backend_class = E_BOOK_BACKEND_GET_CLASS (meta_backend);
+       g_return_if_fail (backend_class != NULL);
+       g_return_if_fail (backend_class->get_contact_sync != NULL);
+
        test_backend = E_BOOK_META_BACKEND_TEST (meta_backend);
        book_cache = e_book_meta_backend_ref_cache (meta_backend);
        g_assert_nonnull (book_cache);
@@ -1224,15 +1249,13 @@ test_get_contact (EBookMetaBackend *meta_backend)
        g_assert_no_error (error);
 
        /* Non-existing */
-       contact = E_BOOK_BACKEND_GET_CLASS (meta_backend)->get_contact_sync (E_BOOK_BACKEND (meta_backend),
-               "unknown-contact", NULL, &error);
+       contact = backend_class->get_contact_sync (E_BOOK_BACKEND (meta_backend), "unknown-contact", NULL, 
&error);
        g_assert_error (error, E_DATA_BOOK_ERROR, E_DATA_BOOK_STATUS_CONTACT_NOT_FOUND);
        g_assert_null (contact);
        g_clear_error (&error);
 
        /* Existing */
-       contact = E_BOOK_BACKEND_GET_CLASS (meta_backend)->get_contact_sync (E_BOOK_BACKEND (meta_backend),
-               "custom-1", NULL, &error);
+       contact = backend_class->get_contact_sync (E_BOOK_BACKEND (meta_backend), "custom-1", NULL, &error);
        g_assert_no_error (error);
        g_assert_nonnull (contact);
        g_assert_cmpstr (e_contact_get_const (contact, E_CONTACT_UID), ==, "custom-1");
@@ -1245,8 +1268,7 @@ test_get_contact (EBookMetaBackend *meta_backend)
 
        e_book_meta_backend_test_reset_counters (test_backend);
 
-       contact = E_BOOK_BACKEND_GET_CLASS (meta_backend)->get_contact_sync (E_BOOK_BACKEND (meta_backend),
-               "custom-5", NULL, &error);
+       contact = backend_class->get_contact_sync (E_BOOK_BACKEND (meta_backend), "custom-5", NULL, &error);
        g_assert_error (error, E_DATA_BOOK_ERROR, E_DATA_BOOK_STATUS_CONTACT_NOT_FOUND);
        g_assert_null (contact);
        g_clear_error (&error);
@@ -1267,8 +1289,7 @@ test_get_contact (EBookMetaBackend *meta_backend)
        e_book_meta_backend_test_reset_counters (test_backend);
        g_assert_cmpint (test_backend->connect_count, ==, 0);
 
-       contact = E_BOOK_BACKEND_GET_CLASS (meta_backend)->get_contact_sync (E_BOOK_BACKEND (meta_backend),
-               "custom-5", NULL, &error);
+       contact = backend_class->get_contact_sync (E_BOOK_BACKEND (meta_backend), "custom-5", NULL, &error);
        g_assert_no_error (error);
        g_assert_nonnull (contact);
        g_assert_cmpint (test_backend->connect_count, ==, 0);
@@ -1285,6 +1306,7 @@ test_get_contact (EBookMetaBackend *meta_backend)
 static void
 test_get_contact_list (EBookMetaBackend *meta_backend)
 {
+       EBookBackendClass *backend_class;
        GQueue contacts = G_QUEUE_INIT;
        EContact *contact;
        gboolean success;
@@ -1292,13 +1314,17 @@ test_get_contact_list (EBookMetaBackend *meta_backend)
 
        g_assert_nonnull (meta_backend);
 
-       success = E_BOOK_BACKEND_GET_CLASS (meta_backend)->get_contact_list_sync (E_BOOK_BACKEND 
(meta_backend),
+       backend_class = E_BOOK_BACKEND_GET_CLASS (meta_backend);
+       g_return_if_fail (backend_class != NULL);
+       g_return_if_fail (backend_class->get_contact_list_sync != NULL);
+
+       success = backend_class->get_contact_list_sync (E_BOOK_BACKEND (meta_backend),
                "(is \"uid\" \"unknown-contact\")", &contacts, NULL, &error);
        g_assert_no_error (error);
        g_assert (success);
        g_assert_cmpint (g_queue_get_length (&contacts), ==, 0);
 
-       success = E_BOOK_BACKEND_GET_CLASS (meta_backend)->get_contact_list_sync (E_BOOK_BACKEND 
(meta_backend),
+       success = backend_class->get_contact_list_sync (E_BOOK_BACKEND (meta_backend),
                "(is \"uid\" \"custom-3\")", &contacts, NULL, &error);
        g_assert_no_error (error);
        g_assert_cmpint (g_queue_get_length (&contacts), ==, 1);
@@ -1312,19 +1338,24 @@ test_get_contact_list (EBookMetaBackend *meta_backend)
 static void
 test_get_contact_list_uids (EBookMetaBackend *meta_backend)
 {
+       EBookBackendClass *backend_class;
        GQueue uids = G_QUEUE_INIT;
        gboolean success;
        GError *error = NULL;
 
        g_assert_nonnull (meta_backend);
 
-       success = E_BOOK_BACKEND_GET_CLASS (meta_backend)->get_contact_list_uids_sync (E_BOOK_BACKEND 
(meta_backend),
+       backend_class = E_BOOK_BACKEND_GET_CLASS (meta_backend);
+       g_return_if_fail (backend_class != NULL);
+       g_return_if_fail (backend_class->get_contact_list_uids_sync != NULL);
+
+       success = backend_class->get_contact_list_uids_sync (E_BOOK_BACKEND (meta_backend),
                "(is \"uid\" \"unknown-contact\")", &uids, NULL, &error);
        g_assert_no_error (error);
        g_assert (success);
        g_assert_cmpint (g_queue_get_length (&uids), ==, 0);
 
-       success = E_BOOK_BACKEND_GET_CLASS (meta_backend)->get_contact_list_uids_sync (E_BOOK_BACKEND 
(meta_backend),
+       success = backend_class->get_contact_list_uids_sync (E_BOOK_BACKEND (meta_backend),
                "(is \"uid\" \"custom-3\")", &uids, NULL, &error);
        g_assert_no_error (error);
        g_assert_cmpint (g_queue_get_length (&uids), ==, 1);
@@ -1503,6 +1534,7 @@ test_refresh (EBookMetaBackend *meta_backend)
 static void
 test_cursor (EBookMetaBackend *meta_backend)
 {
+       EBookBackendClass *backend_class;
        EDataBookCursor *cursor;
        EContactField sort_fields[] = { E_CONTACT_FULL_NAME };
        EBookCursorSortType sort_types[] = { E_BOOK_CURSOR_SORT_ASCENDING };
@@ -1515,8 +1547,16 @@ test_cursor (EBookMetaBackend *meta_backend)
 
        g_assert_nonnull (meta_backend);
 
+       backend_class = E_BOOK_BACKEND_GET_CLASS (meta_backend);
+       g_return_if_fail (backend_class != NULL);
+       g_return_if_fail (backend_class->create_cursor != NULL);
+       g_return_if_fail (backend_class->delete_cursor != NULL);
+       g_return_if_fail (backend_class->create_contacts_sync != NULL);
+       g_return_if_fail (backend_class->modify_contacts_sync != NULL);
+       g_return_if_fail (backend_class->remove_contacts_sync != NULL);
+
        /* Create the cursor */
-       cursor = E_BOOK_BACKEND_GET_CLASS (meta_backend)->create_cursor (E_BOOK_BACKEND (meta_backend),
+       cursor = backend_class->create_cursor (E_BOOK_BACKEND (meta_backend),
                sort_fields, sort_types, 1, &error);
        g_assert_no_error (error);
        g_assert_nonnull (cursor);
@@ -1531,7 +1571,7 @@ test_cursor (EBookMetaBackend *meta_backend)
 
        /* Create */
        vcards[0] = tcu_new_vcard_from_test_case ("custom-7");
-       success = E_BOOK_BACKEND_GET_CLASS (meta_backend)->create_contacts_sync (E_BOOK_BACKEND 
(meta_backend),
+       success = backend_class->create_contacts_sync (E_BOOK_BACKEND (meta_backend),
                (const gchar * const *) vcards, &contacts, NULL, &error);
        g_assert_no_error (error);
        g_assert (success);
@@ -1545,7 +1585,7 @@ test_cursor (EBookMetaBackend *meta_backend)
 
        /* Modify */
        vcards[0] = ebmb_test_modify_case ("custom-2");
-       success = E_BOOK_BACKEND_GET_CLASS (meta_backend)->modify_contacts_sync (E_BOOK_BACKEND 
(meta_backend),
+       success = backend_class->modify_contacts_sync (E_BOOK_BACKEND (meta_backend),
                (const gchar * const *) vcards, &contacts, NULL, &error);
        g_assert_no_error (error);
        g_assert (success);
@@ -1559,7 +1599,7 @@ test_cursor (EBookMetaBackend *meta_backend)
 
        /* Remove */
        uids[0] = "custom-3";
-       success = E_BOOK_BACKEND_GET_CLASS (meta_backend)->remove_contacts_sync (E_BOOK_BACKEND 
(meta_backend),
+       success = backend_class->remove_contacts_sync (E_BOOK_BACKEND (meta_backend),
                (const gchar * const *) uids, NULL, &error);
        g_assert_no_error (error);
        g_assert (success);
@@ -1568,7 +1608,7 @@ test_cursor (EBookMetaBackend *meta_backend)
        g_assert_cmpint (e_data_book_cursor_get_position (cursor), ==, 2);
 
        /* Free the cursor */
-       success = E_BOOK_BACKEND_GET_CLASS (meta_backend)->delete_cursor (E_BOOK_BACKEND (meta_backend), 
cursor, &error);
+       success = backend_class->delete_cursor (E_BOOK_BACKEND (meta_backend), cursor, &error);
        g_assert_no_error (error);
        g_assert (success);
 }
diff --git a/tests/libedata-cal/test-cal-meta-backend.c b/tests/libedata-cal/test-cal-meta-backend.c
index 51ea1a9..6d30c90 100644
--- a/tests/libedata-cal/test-cal-meta-backend.c
+++ b/tests/libedata-cal/test-cal-meta-backend.c
@@ -760,10 +760,15 @@ e_cal_meta_backend_test_change_online (ECalMetaBackend *meta_backend,
 static void
 e_cal_meta_backend_test_call_refresh (ECalMetaBackend *meta_backend)
 {
+       ECalBackendSyncClass *backend_class;
        EFlag *flag;
        gulong handler_id;
        GError *error = NULL;
 
+       backend_class = E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend);
+       g_return_if_fail (backend_class != NULL);
+       g_return_if_fail (backend_class->refresh_sync != NULL);
+
        if (!e_backend_get_online (E_BACKEND (meta_backend)))
                return;
 
@@ -772,7 +777,7 @@ e_cal_meta_backend_test_call_refresh (ECalMetaBackend *meta_backend)
        handler_id = g_signal_connect_swapped (meta_backend, "refresh-completed",
                G_CALLBACK (e_flag_set), flag);
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->refresh_sync (E_CAL_BACKEND_SYNC (meta_backend), NULL, 
NULL, &error);
+       backend_class->refresh_sync (E_CAL_BACKEND_SYNC (meta_backend), NULL, NULL, &error);
        g_assert_no_error (error);
 
        e_flag_wait (flag);
@@ -1191,6 +1196,7 @@ test_empty_cache (TCUFixture *fixture,
                "TZOFFSETTO:-0400\r\n"
                "END:DAYLIGHT\r\n"
                "END:VTIMEZONE\r\n";
+       ECalBackendSyncClass *backend_class;
        ECalMetaBackend *meta_backend;
        GList *zones;
        gboolean success;
@@ -1199,9 +1205,12 @@ test_empty_cache (TCUFixture *fixture,
        meta_backend = e_cal_meta_backend_test_new (fixture->cal_cache);
        g_assert_nonnull (meta_backend);
 
+       backend_class = E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend);
+       g_return_if_fail (backend_class != NULL);
+       g_return_if_fail (backend_class->add_timezone_sync != NULL);
+
        /* Add timezone to the cache */
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->add_timezone_sync (E_CAL_BACKEND_SYNC (meta_backend),
-               NULL, NULL, in_tzobj, &error);
+       backend_class->add_timezone_sync (E_CAL_BACKEND_SYNC (meta_backend), NULL, NULL, in_tzobj, &error);
        g_assert_no_error (error);
 
        zones = NULL;
@@ -1239,6 +1248,7 @@ test_empty_cache (TCUFixture *fixture,
 static void
 test_send_objects (ECalMetaBackend *meta_backend)
 {
+       ECalBackendSyncClass *backend_class;
        GSList *users = NULL;
        const gchar *calobj = "fake-iCalendar-object";
        gchar *modified_calobj = NULL;
@@ -1246,7 +1256,11 @@ test_send_objects (ECalMetaBackend *meta_backend)
 
        g_assert_nonnull (meta_backend);
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->send_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class = E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend);
+       g_return_if_fail (backend_class != NULL);
+       g_return_if_fail (backend_class->send_objects_sync != NULL);
+
+       backend_class->send_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, calobj, &users, &modified_calobj, &error);
 
        g_assert_no_error (error);
@@ -1259,13 +1273,18 @@ test_send_objects (ECalMetaBackend *meta_backend)
 static void
 test_get_attachment_uris (ECalMetaBackend *meta_backend)
 {
+       ECalBackendSyncClass *backend_class;
        GSList *uris = NULL;
        GError *error = NULL;
 
        g_assert_nonnull (meta_backend);
 
+       backend_class = E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend);
+       g_return_if_fail (backend_class != NULL);
+       g_return_if_fail (backend_class->get_attachment_uris_sync != NULL);
+
        /* non-existent event */
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->get_attachment_uris_sync (E_CAL_BACKEND_SYNC 
(meta_backend),
+       backend_class->get_attachment_uris_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, "unknown-event", NULL, &uris, &error);
 
        g_assert_error (error, E_DATA_CAL_ERROR, ObjectNotFound);
@@ -1274,14 +1293,14 @@ test_get_attachment_uris (ECalMetaBackend *meta_backend)
        g_clear_error (&error);
 
        /* existent event, but with no attachments */
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->get_attachment_uris_sync (E_CAL_BACKEND_SYNC 
(meta_backend),
+       backend_class->get_attachment_uris_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, "event-1", NULL, &uris, &error);
 
        g_assert_no_error (error);
        g_assert_null (uris);
 
        /* event with attachments */
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->get_attachment_uris_sync (E_CAL_BACKEND_SYNC 
(meta_backend),
+       backend_class->get_attachment_uris_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, "event-7", NULL, &uris, &error);
 
        g_assert_no_error (error);
@@ -1295,12 +1314,17 @@ test_get_attachment_uris (ECalMetaBackend *meta_backend)
 static void
 test_discard_alarm (ECalMetaBackend *meta_backend)
 {
+       ECalBackendSyncClass *backend_class;
        GError *error = NULL;
 
        g_assert_nonnull (meta_backend);
 
+       backend_class = E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend);
+       g_return_if_fail (backend_class != NULL);
+       g_return_if_fail (backend_class->discard_alarm_sync != NULL);
+
        /* Not implemented */
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->discard_alarm_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->discard_alarm_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, "unknown-event", NULL, NULL, &error);
 
        g_assert_error (error, E_CLIENT_ERROR, E_CLIENT_ERROR_NOT_SUPPORTED);
@@ -1333,6 +1357,7 @@ test_timezones (ECalMetaBackend *meta_backend)
                "TZOFFSETTO:-0400\r\n"
                "END:DAYLIGHT\r\n"
                "END:VTIMEZONE\r\n";
+       ECalBackendSyncClass *backend_class;
        ECalCache *cal_cache;
        icalcomponent *vcalendar;
        gchar *tzobj = NULL;
@@ -1342,26 +1367,31 @@ test_timezones (ECalMetaBackend *meta_backend)
 
        g_assert_nonnull (meta_backend);
 
+       backend_class = E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend);
+       g_return_if_fail (backend_class != NULL);
+       g_return_if_fail (backend_class->add_timezone_sync != NULL);
+       g_return_if_fail (backend_class->get_timezone_sync != NULL);
+
        /* Verify neither TZID, not LOCATION is in the timezone cache */
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->get_timezone_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->get_timezone_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, TZID, &tzobj, &error);
        g_assert_error (error, E_DATA_CAL_ERROR, ObjectNotFound);
        g_assert_null (tzobj);
        g_clear_error (&error);
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->get_timezone_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->get_timezone_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, TZLOC, &tzobj, &error);
        g_assert_error (error, E_DATA_CAL_ERROR, ObjectNotFound);
        g_assert_null (tzobj);
        g_clear_error (&error);
 
        /* Add it to the cache */
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->add_timezone_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->add_timezone_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, in_tzobj, &error);
        g_assert_no_error (error);
 
        /* Read it back */
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->get_timezone_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->get_timezone_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, TZID, &tzobj, &error);
        g_assert_no_error (error);
        g_assert_cmpstr (tzobj, ==, in_tzobj);
@@ -1369,14 +1399,14 @@ test_timezones (ECalMetaBackend *meta_backend)
        tzobj = NULL;
 
        /* As a non-built-in timezone it cannot be read with location, only with TZID */
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->get_timezone_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->get_timezone_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, TZLOC, &tzobj, &error);
        g_assert_error (error, E_DATA_CAL_ERROR, ObjectNotFound);
        g_assert_null (tzobj);
        g_clear_error (&error);
 
        /* Try also internal timezone, which will be renamed and added to the cache too */
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->get_timezone_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->get_timezone_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, "America/New_York", &tzobj, &error);
        g_assert_no_error (error);
        g_assert_nonnull (tzobj);
@@ -1469,7 +1499,7 @@ test_timezones (ECalMetaBackend *meta_backend)
        g_assert (success);
        g_assert_cmpint (g_list_length (zones), ==, 0);
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->add_timezone_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->add_timezone_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, in_tzobj, &error);
        g_assert_no_error (error);
 
@@ -1512,19 +1542,24 @@ test_get_free_busy (ECalMetaBackend *meta_backend)
                "FREEBUSY;FBTYPE=BUSY;X-SUMMARY=After-party clean up;X-LOCATION=All around:\r\n"
                " 20170102T100000Z/20170102T180000Z\r\n"
                "END:VFREEBUSY\r\n";
+       ECalBackendSyncClass *backend_class;
        GSList *users, *objects = NULL;
        time_t start, end;
        GError *error = NULL;
 
        g_assert_nonnull (meta_backend);
 
+       backend_class = E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend);
+       g_return_if_fail (backend_class != NULL);
+       g_return_if_fail (backend_class->get_free_busy_sync != NULL);
+
        users = g_slist_prepend (NULL, (gpointer) "user@no.where");
        users = g_slist_prepend (users, (gpointer) "unknown@no.where");
 
        start = icaltime_as_timet (icaltime_from_string ("20170102T080000Z"));
        end = icaltime_as_timet (icaltime_from_string ("20170102T200000Z"));
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->get_free_busy_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->get_free_busy_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, users, start, end, &objects, &error);
 
        g_assert_no_error (error);
@@ -1539,6 +1574,7 @@ static void
 test_create_objects (ECalMetaBackend *meta_backend)
 {
        ECalMetaBackendTest *test_backend;
+       ECalBackendSyncClass *backend_class;
        ECalCache *cal_cache;
        GSList *objects, *uids = NULL, *new_components = NULL, *offline_changes;
        gchar *calobj, *tmp;
@@ -1546,6 +1582,10 @@ test_create_objects (ECalMetaBackend *meta_backend)
 
        g_assert_nonnull (meta_backend);
 
+       backend_class = E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend);
+       g_return_if_fail (backend_class != NULL);
+       g_return_if_fail (backend_class->create_objects_sync != NULL);
+
        test_backend = E_CAL_META_BACKEND_TEST (meta_backend);
        cal_cache = e_cal_meta_backend_ref_cache (meta_backend);
        g_assert_nonnull (cal_cache);
@@ -1567,7 +1607,7 @@ test_create_objects (ECalMetaBackend *meta_backend)
        /* Try to add existing event, it should fail */
        objects = g_slist_prepend (NULL, tcu_new_icalstring_from_test_case ("event-1"));
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->create_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->create_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, objects, &uids, &new_components, &error);
        g_assert_error (error, E_DATA_CAL_ERROR, ObjectIdAlreadyExists);
        g_assert_null (uids);
@@ -1580,7 +1620,7 @@ test_create_objects (ECalMetaBackend *meta_backend)
        /* Try to add new event */
        objects = g_slist_prepend (NULL, tcu_new_icalstring_from_test_case ("event-7"));
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->create_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->create_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, objects, &uids, &new_components, &error);
        g_assert_no_error (error);
        g_assert_cmpint (g_slist_length (uids), ==, 1);
@@ -1607,7 +1647,7 @@ test_create_objects (ECalMetaBackend *meta_backend)
        /* Try to add existing event, it should fail */
        objects = g_slist_prepend (NULL, tcu_new_icalstring_from_test_case ("event-7"));
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->create_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->create_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, objects, &uids, &new_components, &error);
        g_assert_error (error, E_DATA_CAL_ERROR, ObjectIdAlreadyExists);
        g_assert_null (uids);
@@ -1620,7 +1660,7 @@ test_create_objects (ECalMetaBackend *meta_backend)
        /* Try to add new event */
        objects = g_slist_prepend (NULL, tcu_new_icalstring_from_test_case ("event-8"));
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->create_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->create_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, objects, &uids, &new_components, &error);
        g_assert_no_error (error);
        g_assert_cmpint (g_slist_length (uids), ==, 1);
@@ -1663,7 +1703,7 @@ test_create_objects (ECalMetaBackend *meta_backend)
 
        objects = g_slist_prepend (NULL, calobj);
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->create_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->create_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, objects, &uids, &new_components, &error);
        g_assert_no_error (error);
        g_assert_cmpint (g_slist_length (uids), ==, 1);
@@ -1722,6 +1762,7 @@ static void
 test_modify_objects (ECalMetaBackend *meta_backend)
 {
        ECalMetaBackendTest *test_backend;
+       ECalBackendSyncClass *backend_class;
        ECalCache *cal_cache;
        GSList *objects, *old_components = NULL, *new_components = NULL, *offline_changes;
        gchar *calobj, *tmp;
@@ -1731,6 +1772,10 @@ test_modify_objects (ECalMetaBackend *meta_backend)
 
        g_assert_nonnull (meta_backend);
 
+       backend_class = E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend);
+       g_return_if_fail (backend_class != NULL);
+       g_return_if_fail (backend_class->modify_objects_sync != NULL);
+
        test_backend = E_CAL_META_BACKEND_TEST (meta_backend);
        cal_cache = e_cal_meta_backend_ref_cache (meta_backend);
        g_assert_nonnull (cal_cache);
@@ -1744,7 +1789,7 @@ test_modify_objects (ECalMetaBackend *meta_backend)
 
        objects = g_slist_prepend (NULL, calobj);
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->modify_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->modify_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, objects, E_CAL_OBJ_MOD_ALL, &old_components, &new_components, &error);
        g_assert_error (error, E_DATA_CAL_ERROR, ObjectNotFound);
        g_assert_null (old_components);
@@ -1755,7 +1800,7 @@ test_modify_objects (ECalMetaBackend *meta_backend)
        /* Modify existing event */
        objects = g_slist_prepend (NULL, ecmb_test_modify_case ("event-1", NULL));
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->modify_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->modify_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, objects, E_CAL_OBJ_MOD_ALL, &old_components, &new_components, &error);
        g_assert_no_error (error);
        g_assert_cmpint (g_slist_length (old_components), ==, 1);
@@ -1787,7 +1832,7 @@ test_modify_objects (ECalMetaBackend *meta_backend)
        /* Modify event-2 */
        objects = g_slist_prepend (NULL, ecmb_test_modify_case ("event-2", NULL));
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->modify_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->modify_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, objects, E_CAL_OBJ_MOD_ALL, &old_components, &new_components, &error);
        g_assert_no_error (error);
        g_assert_cmpint (g_slist_length (old_components), ==, 1);
@@ -1826,7 +1871,7 @@ test_modify_objects (ECalMetaBackend *meta_backend)
        /* Modify non-recurring with THIS */
        objects = g_slist_prepend (NULL, ecmb_test_modify_case ("event-4", NULL));
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->modify_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->modify_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, objects, E_CAL_OBJ_MOD_THIS, &old_components, &new_components, &error);
        g_assert_no_error (error);
        g_assert_cmpint (g_slist_length (old_components), ==, 1);
@@ -1853,7 +1898,7 @@ test_modify_objects (ECalMetaBackend *meta_backend)
        /* Modify non-detached recurring instance with ONLY_THIS */
        objects = g_slist_prepend (NULL, ecmb_test_modify_case ("event-6", "20170227T134900"));
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->modify_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->modify_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, objects, E_CAL_OBJ_MOD_ONLY_THIS, &old_components, &new_components, &error);
        g_assert_error (error, E_DATA_CAL_ERROR, ObjectNotFound);
        g_assert_null (old_components);
@@ -1866,7 +1911,7 @@ test_modify_objects (ECalMetaBackend *meta_backend)
        /* Modify detached recurring instance with ONLY_THIS */
        objects = g_slist_prepend (NULL, ecmb_test_modify_case ("event-6-a", NULL));
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->modify_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->modify_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, objects, E_CAL_OBJ_MOD_ONLY_THIS, &old_components, &new_components, &error);
        g_assert_no_error (error);
        g_assert_cmpint (g_slist_length (old_components), ==, 1);
@@ -1899,12 +1944,17 @@ static void
 test_remove_objects (ECalMetaBackend *meta_backend)
 {
        ECalMetaBackendTest *test_backend;
+       ECalBackendSyncClass *backend_class;
        ECalCache *cal_cache;
        GSList *ids, *old_components = NULL, *new_components = NULL, *offline_changes;
        GError *error = NULL;
 
        g_assert_nonnull (meta_backend);
 
+       backend_class = E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend);
+       g_return_if_fail (backend_class != NULL);
+       g_return_if_fail (backend_class->remove_objects_sync != NULL);
+
        test_backend = E_CAL_META_BACKEND_TEST (meta_backend);
        cal_cache = e_cal_meta_backend_ref_cache (meta_backend);
        g_assert_nonnull (cal_cache);
@@ -1912,7 +1962,7 @@ test_remove_objects (ECalMetaBackend *meta_backend)
        /* Remove non-existing event */
        ids = g_slist_prepend (NULL, e_cal_component_id_new ("unknown-event", NULL));
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, ids, E_CAL_OBJ_MOD_ALL, &old_components, &new_components, &error);
        g_assert_error (error, E_DATA_CAL_ERROR, ObjectNotFound);
        g_assert_null (old_components);
@@ -1923,7 +1973,7 @@ test_remove_objects (ECalMetaBackend *meta_backend)
        /* Remove existing event */
        ids = g_slist_prepend (NULL, e_cal_component_id_new ("event-1", NULL));
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, ids, E_CAL_OBJ_MOD_ALL, &old_components, &new_components, &error);
        g_assert_no_error (error);
        g_assert_cmpint (g_slist_length (old_components), ==, 1);
@@ -1950,7 +2000,7 @@ test_remove_objects (ECalMetaBackend *meta_backend)
 
        ids = g_slist_prepend (NULL, e_cal_component_id_new ("event-6", "20170225T134900"));
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, ids, E_CAL_OBJ_MOD_THIS, &old_components, &new_components, &error);
        g_assert_no_error (error);
        g_assert_cmpint (g_slist_length (old_components), ==, 1);
@@ -1981,7 +2031,7 @@ test_remove_objects (ECalMetaBackend *meta_backend)
 
        ids = g_slist_prepend (NULL, e_cal_component_id_new ("event-6", "20170227T134900"));
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, ids, E_CAL_OBJ_MOD_ONLY_THIS, &old_components, &new_components, &error);
        g_assert_error (error, E_DATA_CAL_ERROR, ObjectNotFound);
        g_assert_null (old_components);
@@ -1992,7 +2042,7 @@ test_remove_objects (ECalMetaBackend *meta_backend)
        /* Remove non-existing detached instance with THIS - changes master object */
        ids = g_slist_prepend (NULL, e_cal_component_id_new ("event-6", "20170227T134900"));
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, ids, E_CAL_OBJ_MOD_THIS, &old_components, &new_components, &error);
        g_assert_no_error (error);
        g_assert_cmpint (g_slist_length (old_components), ==, 1);
@@ -2024,7 +2074,7 @@ test_remove_objects (ECalMetaBackend *meta_backend)
        /* Remove existing event */
        ids = g_slist_prepend (NULL, e_cal_component_id_new ("event-3", NULL));
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, ids, E_CAL_OBJ_MOD_ONLY_THIS, &old_components, &new_components, &error);
        g_assert_no_error (error);
        g_assert_cmpint (g_slist_length (old_components), ==, 1);
@@ -2074,6 +2124,7 @@ static void
 test_receive_objects (ECalMetaBackend *meta_backend)
 {
        ECalMetaBackendTest *test_backend;
+       ECalBackendSyncClass *backend_class;
        ECalCache *cal_cache;
        gchar *calobj;
        icalcomponent *icalcomp;
@@ -2082,6 +2133,12 @@ test_receive_objects (ECalMetaBackend *meta_backend)
 
        g_assert_nonnull (meta_backend);
 
+       backend_class = E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend);
+       g_return_if_fail (backend_class != NULL);
+       g_return_if_fail (backend_class->get_object_sync != NULL);
+       g_return_if_fail (backend_class->receive_objects_sync != NULL);
+       g_return_if_fail (backend_class->remove_objects_sync != NULL);
+
        test_backend = E_CAL_META_BACKEND_TEST (meta_backend);
        cal_cache = e_cal_meta_backend_ref_cache (meta_backend);
        g_assert_nonnull (cal_cache);
@@ -2110,7 +2167,7 @@ test_receive_objects (ECalMetaBackend *meta_backend)
                NULL);
 
        calobj = NULL;
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->get_object_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->get_object_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, "invite", NULL, &calobj, &error);
        g_assert_no_error (error);
        g_assert_nonnull (calobj);
@@ -2121,8 +2178,7 @@ test_receive_objects (ECalMetaBackend *meta_backend)
        calobj = tcu_new_icalstring_from_test_case ("invite-2");
        g_assert_nonnull (calobj);
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
-               NULL, NULL, calobj, &error);
+       backend_class->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend), NULL, NULL, calobj, &error);
        g_assert_no_error (error);
        g_free (calobj);
 
@@ -2131,7 +2187,7 @@ test_receive_objects (ECalMetaBackend *meta_backend)
        g_assert_cmpint (test_backend->remove_count, ==, 0);
 
        calobj = NULL;
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->get_object_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->get_object_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, "invite", NULL, &calobj, &error);
        g_assert_no_error (error);
        g_assert_nonnull (calobj);
@@ -2144,7 +2200,7 @@ test_receive_objects (ECalMetaBackend *meta_backend)
        /* Remove the 'invite' component, to test also user side */
        ids = g_slist_prepend (NULL, e_cal_component_id_new ("invite", NULL));
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, ids, E_CAL_OBJ_MOD_ALL, &old_components, &new_components, &error);
        g_assert_no_error (error);
        g_assert_cmpint (g_slist_length (old_components), ==, 1);
@@ -2173,8 +2229,7 @@ test_receive_objects (ECalMetaBackend *meta_backend)
        calobj = tcu_new_icalstring_from_test_case ("invite-1");
        g_assert_nonnull (calobj);
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
-               NULL, NULL, calobj, &error);
+       backend_class->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend), NULL, NULL, calobj, &error);
        g_assert_no_error (error);
        g_free (calobj);
 
@@ -2192,7 +2247,7 @@ test_receive_objects (ECalMetaBackend *meta_backend)
        ecmb_test_cache_and_server_equal (cal_cache, test_backend->vcalendar, E_CACHE_INCLUDE_DELETED);
 
        calobj = NULL;
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->get_object_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->get_object_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, "invite", NULL, &calobj, &error);
        g_assert_no_error (error);
        g_assert_nonnull (calobj);
@@ -2204,8 +2259,7 @@ test_receive_objects (ECalMetaBackend *meta_backend)
        calobj = tcu_new_icalstring_from_test_case ("invite-3");
        g_assert_nonnull (calobj);
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
-               NULL, NULL, calobj, &error);
+       backend_class->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend), NULL, NULL, calobj, &error);
        g_assert_no_error (error);
        g_free (calobj);
 
@@ -2223,7 +2277,7 @@ test_receive_objects (ECalMetaBackend *meta_backend)
        ecmb_test_cache_and_server_equal (cal_cache, test_backend->vcalendar, E_CACHE_INCLUDE_DELETED);
 
        calobj = NULL;
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->get_object_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->get_object_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, "invite", NULL, &calobj, &error);
        g_assert_no_error (error);
        g_assert_nonnull (calobj);
@@ -2235,8 +2289,7 @@ test_receive_objects (ECalMetaBackend *meta_backend)
        calobj = tcu_new_icalstring_from_test_case ("invite-4");
        g_assert_nonnull (calobj);
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
-               NULL, NULL, calobj, &error);
+       backend_class->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend), NULL, NULL, calobj, &error);
        g_assert_no_error (error);
        g_free (calobj);
 
@@ -2260,6 +2313,7 @@ static void
 test_receive_and_remove (ECalMetaBackend *meta_backend)
 {
        ECalMetaBackendTest *test_backend;
+       ECalBackendSyncClass *backend_class;
        ECalCache *cal_cache;
        gchar *calobj;
        GSList *old_components = NULL, *new_components = NULL, *ids;
@@ -2267,6 +2321,12 @@ test_receive_and_remove (ECalMetaBackend *meta_backend)
 
        g_assert_nonnull (meta_backend);
 
+       backend_class = E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend);
+       g_return_if_fail (backend_class != NULL);
+       g_return_if_fail (backend_class->get_object_sync != NULL);
+       g_return_if_fail (backend_class->remove_objects_sync != NULL);
+       g_return_if_fail (backend_class->receive_objects_sync != NULL);
+
        test_backend = E_CAL_META_BACKEND_TEST (meta_backend);
        cal_cache = e_cal_meta_backend_ref_cache (meta_backend);
        g_assert_nonnull (cal_cache);
@@ -2275,8 +2335,7 @@ test_receive_and_remove (ECalMetaBackend *meta_backend)
        calobj = tcu_new_icalstring_from_test_case ("invite-5");
        g_assert_nonnull (calobj);
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
-               NULL, NULL, calobj, &error);
+       backend_class->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend), NULL, NULL, calobj, &error);
        g_assert_no_error (error);
        g_free (calobj);
 
@@ -2294,7 +2353,7 @@ test_receive_and_remove (ECalMetaBackend *meta_backend)
        ecmb_test_cache_and_server_equal (cal_cache, test_backend->vcalendar, E_CACHE_INCLUDE_DELETED);
 
        calobj = NULL;
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->get_object_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->get_object_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, "invite-detached", NULL, &calobj, &error);
        g_assert_no_error (error);
        g_assert_nonnull (calobj);
@@ -2305,7 +2364,7 @@ test_receive_and_remove (ECalMetaBackend *meta_backend)
        /* Delete master component, with no detached instances now */
        ids = g_slist_prepend (NULL, e_cal_component_id_new ("invite-detached", NULL));
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, ids, E_CAL_OBJ_MOD_ALL, &old_components, &new_components, &error);
        g_assert_no_error (error);
        g_assert_cmpint (g_slist_length (old_components), ==, 1);
@@ -2334,7 +2393,7 @@ test_receive_and_remove (ECalMetaBackend *meta_backend)
        calobj = tcu_new_icalstring_from_test_case ("invite-5");
        g_assert_nonnull (calobj);
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, calobj, &error);
        g_assert_no_error (error);
        g_free (calobj);
@@ -2356,8 +2415,7 @@ test_receive_and_remove (ECalMetaBackend *meta_backend)
        calobj = tcu_new_icalstring_from_test_case ("invite-6");
        g_assert_nonnull (calobj);
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
-               NULL, NULL, calobj, &error);
+       backend_class->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend), NULL, NULL, calobj, &error);
        g_assert_no_error (error);
        g_free (calobj);
 
@@ -2377,7 +2435,7 @@ test_receive_and_remove (ECalMetaBackend *meta_backend)
        ecmb_test_cache_and_server_equal (cal_cache, test_backend->vcalendar, E_CACHE_INCLUDE_DELETED);
 
        calobj = NULL;
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->get_object_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->get_object_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, "invite-detached", NULL, &calobj, &error);
        g_assert_no_error (error);
        g_assert_nonnull (calobj);
@@ -2388,7 +2446,7 @@ test_receive_and_remove (ECalMetaBackend *meta_backend)
        /* Remove only the detached instance */
        ids = g_slist_prepend (NULL, e_cal_component_id_new ("invite-detached", "20180502T000000Z"));
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, ids, E_CAL_OBJ_MOD_THIS, &old_components, &new_components, &error);
        g_assert_no_error (error);
        g_assert_cmpint (g_slist_length (old_components), ==, 1);
@@ -2420,7 +2478,7 @@ test_receive_and_remove (ECalMetaBackend *meta_backend)
        ecmb_test_cache_and_server_equal (cal_cache, test_backend->vcalendar, E_CACHE_INCLUDE_DELETED);
 
        calobj = NULL;
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->get_object_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->get_object_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, "invite-detached", NULL, &calobj, &error);
        g_assert_no_error (error);
        g_assert_nonnull (calobj);
@@ -2432,8 +2490,7 @@ test_receive_and_remove (ECalMetaBackend *meta_backend)
        calobj = tcu_new_icalstring_from_test_case ("invite-6");
        g_assert_nonnull (calobj);
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
-               NULL, NULL, calobj, &error);
+       backend_class->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend), NULL, NULL, calobj, &error);
        g_assert_no_error (error);
        g_free (calobj);
 
@@ -2451,7 +2508,7 @@ test_receive_and_remove (ECalMetaBackend *meta_backend)
        ecmb_test_cache_and_server_equal (cal_cache, test_backend->vcalendar, E_CACHE_INCLUDE_DELETED);
 
        calobj = NULL;
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->get_object_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->get_object_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, "invite-detached", NULL, &calobj, &error);
        g_assert_no_error (error);
        g_assert_nonnull (calobj);
@@ -2462,7 +2519,7 @@ test_receive_and_remove (ECalMetaBackend *meta_backend)
        /* Remove the master object, which should delete both */
        ids = g_slist_prepend (NULL, e_cal_component_id_new ("invite-detached", NULL));
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, ids, E_CAL_OBJ_MOD_ALL, &old_components, &new_components, &error);
        g_assert_no_error (error);
        g_assert_cmpint (g_slist_length (old_components), ==, 1);
@@ -2488,13 +2545,13 @@ test_receive_and_remove (ECalMetaBackend *meta_backend)
        ecmb_test_cache_and_server_equal (cal_cache, test_backend->vcalendar, E_CACHE_INCLUDE_DELETED);
 
        calobj = NULL;
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->get_object_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->get_object_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, "invite-detached", NULL, &calobj, &error);
        g_assert_error (error, E_DATA_CAL_ERROR, ObjectNotFound);
        g_assert_null (calobj);
        g_clear_error (&error);
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->get_object_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->get_object_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, "invite-detached", "20180502T000000Z", &calobj, &error);
        g_assert_error (error, E_DATA_CAL_ERROR, ObjectNotFound);
        g_assert_null (calobj);
@@ -2504,8 +2561,7 @@ test_receive_and_remove (ECalMetaBackend *meta_backend)
        calobj = tcu_new_icalstring_from_test_case ("invite-6");
        g_assert_nonnull (calobj);
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
-               NULL, NULL, calobj, &error);
+       backend_class->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend), NULL, NULL, calobj, &error);
        g_assert_no_error (error);
        g_free (calobj);
 
@@ -2523,7 +2579,7 @@ test_receive_and_remove (ECalMetaBackend *meta_backend)
        /* Remove the master object with mode THIS, which is not in the cache, but should remove all anyway */
        ids = g_slist_prepend (NULL, e_cal_component_id_new ("invite-detached", NULL));
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, ids, E_CAL_OBJ_MOD_THIS, &old_components, &new_components, &error);
        g_assert_no_error (error);
        g_assert_cmpint (g_slist_length (old_components), ==, 1);
@@ -2551,15 +2607,14 @@ test_receive_and_remove (ECalMetaBackend *meta_backend)
        calobj = tcu_new_icalstring_from_test_case ("invite-6");
        g_assert_nonnull (calobj);
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
-               NULL, NULL, calobj, &error);
+       backend_class->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend), NULL, NULL, calobj, &error);
        g_assert_no_error (error);
        g_free (calobj);
 
        /* Remove the master object with mode ALL, which is not in the cache, but should remove all */
        ids = g_slist_prepend (NULL, e_cal_component_id_new ("invite-detached", NULL));
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, ids, E_CAL_OBJ_MOD_ALL, &old_components, &new_components, &error);
        g_assert_no_error (error);
        g_assert_cmpint (g_slist_length (old_components), ==, 1);
@@ -2590,8 +2645,7 @@ test_receive_and_remove (ECalMetaBackend *meta_backend)
        calobj = tcu_new_icalstring_from_test_case ("invite-6");
        g_assert_nonnull (calobj);
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
-               NULL, NULL, calobj, &error);
+       backend_class->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend), NULL, NULL, calobj, &error);
        g_assert_no_error (error);
        g_free (calobj);
 
@@ -2609,7 +2663,7 @@ test_receive_and_remove (ECalMetaBackend *meta_backend)
        /* Remove the detached instance with mode THIS */
        ids = g_slist_prepend (NULL, e_cal_component_id_new ("invite-detached", "20180502T000000Z"));
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, ids, E_CAL_OBJ_MOD_THIS, &old_components, &new_components, &error);
        g_assert_no_error (error);
        g_assert_cmpint (g_slist_length (old_components), ==, 1);
@@ -2638,8 +2692,7 @@ test_receive_and_remove (ECalMetaBackend *meta_backend)
        calobj = tcu_new_icalstring_from_test_case ("invite-6");
        g_assert_nonnull (calobj);
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
-               NULL, NULL, calobj, &error);
+       backend_class->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend), NULL, NULL, calobj, &error);
        g_assert_no_error (error);
        g_free (calobj);
 
@@ -2657,7 +2710,7 @@ test_receive_and_remove (ECalMetaBackend *meta_backend)
        /* Remove the detached instance with mode ALL */
        ids = g_slist_prepend (NULL, e_cal_component_id_new ("invite-detached", "20180502T000000Z"));
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, ids, E_CAL_OBJ_MOD_ALL, &old_components, &new_components, &error);
        g_assert_no_error (error);
        g_assert_cmpint (g_slist_length (old_components), ==, 1);
@@ -2686,8 +2739,7 @@ test_receive_and_remove (ECalMetaBackend *meta_backend)
        calobj = tcu_new_icalstring_from_test_case ("invite-7");
        g_assert_nonnull (calobj);
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
-               NULL, NULL, calobj, &error);
+       backend_class->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend), NULL, NULL, calobj, &error);
        g_assert_no_error (error);
        g_free (calobj);
 
@@ -2707,7 +2759,7 @@ test_receive_and_remove (ECalMetaBackend *meta_backend)
        /* Remove the detached instance with mode THIS */
        ids = g_slist_prepend (NULL, e_cal_component_id_new ("invite-detached", "20180502T000000Z"));
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, ids, E_CAL_OBJ_MOD_THIS, &old_components, &new_components, &error);
        g_assert_no_error (error);
        g_assert_cmpint (g_slist_length (old_components), ==, 1);
@@ -2742,8 +2794,7 @@ test_receive_and_remove (ECalMetaBackend *meta_backend)
        calobj = tcu_new_icalstring_from_test_case ("invite-6");
        g_assert_nonnull (calobj);
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
-               NULL, NULL, calobj, &error);
+       backend_class->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend), NULL, NULL, calobj, &error);
        g_assert_no_error (error);
        g_free (calobj);
 
@@ -2751,7 +2802,7 @@ test_receive_and_remove (ECalMetaBackend *meta_backend)
        ids = g_slist_prepend (NULL, e_cal_component_id_new ("invite-detached", "20180502T000000Z"));
        ids = g_slist_prepend (ids, e_cal_component_id_new ("invite-detached", "20180509T000000Z"));
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, ids, E_CAL_OBJ_MOD_THIS, &old_components, &new_components, &error);
        g_assert_no_error (error);
        g_assert_cmpint (g_slist_length (old_components), ==, 2);
@@ -2783,8 +2834,7 @@ test_receive_and_remove (ECalMetaBackend *meta_backend)
        calobj = tcu_new_icalstring_from_test_case ("invite-7");
        g_assert_nonnull (calobj);
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
-               NULL, NULL, calobj, &error);
+       backend_class->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend), NULL, NULL, calobj, &error);
        g_assert_no_error (error);
        g_free (calobj);
 
@@ -2804,7 +2854,7 @@ test_receive_and_remove (ECalMetaBackend *meta_backend)
        /* Remove the second detached instance with mode ALL */
        ids = g_slist_prepend (NULL, e_cal_component_id_new ("invite-detached", "20180509T000000Z"));
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, ids, E_CAL_OBJ_MOD_ALL, &old_components, &new_components, &error);
        g_assert_no_error (error);
        g_assert_cmpint (g_slist_length (old_components), ==, 1);
@@ -2835,8 +2885,7 @@ test_receive_and_remove (ECalMetaBackend *meta_backend)
        calobj = tcu_new_icalstring_from_test_case ("invite-7");
        g_assert_nonnull (calobj);
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
-               NULL, NULL, calobj, &error);
+       backend_class->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend), NULL, NULL, calobj, &error);
        g_assert_no_error (error);
        g_free (calobj);
 
@@ -2865,8 +2914,7 @@ test_receive_and_remove (ECalMetaBackend *meta_backend)
        calobj = tcu_new_icalstring_from_test_case ("invite-5");
        g_assert_nonnull (calobj);
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
-               NULL, NULL, calobj, &error);
+       backend_class->receive_objects_sync (E_CAL_BACKEND_SYNC (meta_backend), NULL, NULL, calobj, &error);
        g_assert_no_error (error);
        g_free (calobj);
 
@@ -2890,7 +2938,7 @@ test_receive_and_remove (ECalMetaBackend *meta_backend)
        /* Remove the second detached instance with mode THIS */
        ids = g_slist_prepend (NULL, e_cal_component_id_new ("invite-detached", "20180509T000000Z"));
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, ids, E_CAL_OBJ_MOD_THIS, &old_components, &new_components, &error);
        g_assert_no_error (error);
        g_assert_cmpint (g_slist_length (old_components), ==, 1);
@@ -2926,7 +2974,7 @@ test_receive_and_remove (ECalMetaBackend *meta_backend)
        /* Remove the first detached instance with mode ALL, which will drop whole series */
        ids = g_slist_prepend (NULL, e_cal_component_id_new ("invite-detached", "20180502T000000Z"));
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->remove_objects_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, ids, E_CAL_OBJ_MOD_ALL, &old_components, &new_components, &error);
        g_assert_no_error (error);
        g_assert_cmpint (g_slist_length (old_components), ==, 1);
@@ -2962,6 +3010,7 @@ static void
 test_get_object (ECalMetaBackend *meta_backend)
 {
        ECalMetaBackendTest *test_backend;
+       ECalBackendSyncClass *backend_class;
        ECalCache *cal_cache;
        icalcomponent *icalcomp;
        gchar *calobj = NULL;
@@ -2969,6 +3018,10 @@ test_get_object (ECalMetaBackend *meta_backend)
 
        g_assert_nonnull (meta_backend);
 
+       backend_class = E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend);
+       g_return_if_fail (backend_class != NULL);
+       g_return_if_fail (backend_class->get_object_sync != NULL);
+
        test_backend = E_CAL_META_BACKEND_TEST (meta_backend);
        cal_cache = e_cal_meta_backend_ref_cache (meta_backend);
        g_assert_nonnull (cal_cache);
@@ -2981,7 +3034,7 @@ test_get_object (ECalMetaBackend *meta_backend)
        g_assert_no_error (error);
 
        /* Master object with its detached instances */
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->get_object_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->get_object_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, "event-6", NULL, &calobj, &error);
 
        g_assert_no_error (error);
@@ -2999,7 +3052,7 @@ test_get_object (ECalMetaBackend *meta_backend)
        calobj = NULL;
 
        /* Only the detached instance */
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->get_object_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->get_object_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, "event-6", "20170225T134900", &calobj, &error);
 
        g_assert_no_error (error);
@@ -3022,7 +3075,7 @@ test_get_object (ECalMetaBackend *meta_backend)
 
        e_cal_meta_backend_test_reset_counters (test_backend);
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->get_object_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->get_object_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, "event-7", NULL, &calobj, &error);
        g_assert_error (error, E_DATA_CAL_ERROR, ObjectNotFound);
        g_assert_null (calobj);
@@ -3044,7 +3097,7 @@ test_get_object (ECalMetaBackend *meta_backend)
        e_cal_meta_backend_test_reset_counters (test_backend);
        g_assert_cmpint (test_backend->connect_count, ==, 0);
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->get_object_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->get_object_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, "event-7", NULL, &calobj, &error);
        g_assert_no_error (error);
        g_assert_nonnull (calobj);
@@ -3062,17 +3115,22 @@ test_get_object (ECalMetaBackend *meta_backend)
 static void
 test_get_object_list (ECalMetaBackend *meta_backend)
 {
+       ECalBackendSyncClass *backend_class;
        GSList *calobjs = NULL;
        GError *error = NULL;
 
        g_assert_nonnull (meta_backend);
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->get_object_list_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class = E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend);
+       g_return_if_fail (backend_class != NULL);
+       g_return_if_fail (backend_class->get_object_list_sync != NULL);
+
+       backend_class->get_object_list_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, "(uid? \"unknown-event\")", &calobjs, &error);
        g_assert_no_error (error);
        g_assert_null (calobjs);
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->get_object_list_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->get_object_list_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, "(uid? \"event-3\")", &calobjs, &error);
        g_assert_no_error (error);
        g_assert_nonnull (calobjs);
@@ -3081,7 +3139,7 @@ test_get_object_list (ECalMetaBackend *meta_backend)
        g_slist_free_full (calobjs, g_free);
        calobjs = NULL;
 
-       E_CAL_BACKEND_SYNC_GET_CLASS (meta_backend)->get_object_list_sync (E_CAL_BACKEND_SYNC (meta_backend),
+       backend_class->get_object_list_sync (E_CAL_BACKEND_SYNC (meta_backend),
                NULL, NULL, "(uid? \"event-6\")", &calobjs, &error);
        g_assert_no_error (error);
        g_assert_nonnull (calobjs);



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