[evolution-data-server] Merge more cleanup bits from camel-gobject.



commit 08cfec3e91b325a0ecbf342bb2cb6475b2ee39fb
Author: Matthew Barnes <mbarnes redhat com>
Date:   Tue Apr 20 17:21:57 2010 -0400

    Merge more cleanup bits from camel-gobject.
    
    In particular, any method that takes a CamelException must return at
    least a gboolean indicating success or failure.  This driven by the
    convention in GLib of allowing GError arguments to be NULL, in which
    case the function's return value is the only other way to report
    failure.  GError will soon replace CamelException.

 camel/camel-block-file.h                           |    2 +-
 camel/camel-disco-folder.c                         |  124 +-
 camel/camel-disco-folder.h                         |   36 +-
 camel/camel-disco-store.c                          |   22 +-
 camel/camel-folder.c                               |  106 +-
 camel/camel-folder.h                               |   31 +-
 camel/camel-offline-folder.c                       |   14 +-
 camel/camel-offline-folder.h                       |    4 +-
 camel/camel-offline-store.c                        |   24 +-
 camel/camel-offline-store.h                        |    6 +-
 camel/camel-partition-table.c                      |   39 +-
 camel/camel-partition-table.h                      |    6 +-
 camel/camel-provider.c                             |   15 +-
 camel/camel-provider.h                             |    2 +-
 camel/camel-service.c                              |   18 +-
 camel/camel-service.h                              |    4 +-
 camel/camel-session.c                              |   12 +-
 camel/camel-session.h                              |    4 +-
 camel/camel-store.c                                |  141 +-
 camel/camel-store.h                                |   27 +-
 camel/camel-vee-folder.c                           | 2762 ++++++++++----------
 camel/camel-vee-folder.h                           |    2 +
 camel/camel-vee-store.c                            |   29 +-
 camel/camel-vtrash-folder.c                        |   12 +-
 camel/camel-vtrash-folder.h                        |    6 +-
 camel/providers/groupwise/camel-groupwise-folder.c |  227 +-
 camel/providers/groupwise/camel-groupwise-folder.h |   10 +-
 .../providers/groupwise/camel-groupwise-journal.c  |   86 +-
 .../providers/groupwise/camel-groupwise-provider.c |    5 +-
 .../groupwise/camel-groupwise-store-summary.c      |   68 +-
 .../groupwise/camel-groupwise-store-summary.h      |   12 +-
 camel/providers/groupwise/camel-groupwise-store.c  |  239 +-
 camel/providers/groupwise/camel-groupwise-store.h  |    1 -
 .../providers/groupwise/camel-groupwise-summary.c  |  124 +-
 .../groupwise/camel-groupwise-transport.c          |  162 +-
 .../groupwise/camel-groupwise-transport.h          |   14 +-
 camel/providers/groupwise/camel-groupwise-utils.c  |   41 +-
 camel/providers/groupwise/camel-groupwise-utils.h  |    4 +-
 camel/providers/imap/camel-imap-command.c          |  121 +-
 camel/providers/imap/camel-imap-command.h          |    1 -
 camel/providers/imap/camel-imap-folder.c           |  649 +++--
 camel/providers/imap/camel-imap-folder.h           |   13 +-
 camel/providers/imap/camel-imap-journal.c          |   90 +-
 camel/providers/imap/camel-imap-message-cache.c    |  138 +-
 camel/providers/imap/camel-imap-message-cache.h    |    3 +-
 camel/providers/imap/camel-imap-search.c           |   69 +-
 camel/providers/imap/camel-imap-store-summary.c    |   78 +-
 camel/providers/imap/camel-imap-store.c            |  438 ++--
 camel/providers/imap/camel-imap-store.h            |    4 +-
 camel/providers/imap/camel-imap-summary.c          |  121 +-
 camel/providers/imap/camel-imap-utils.c            |    1 -
 camel/providers/imap/camel-imap-wrapper.c          |  120 +-
 camel/providers/imap/camel-imap-wrapper.h          |    1 -
 camel/providers/imapx/camel-imapx-folder.c         |   35 +-
 camel/providers/imapx/camel-imapx-store.c          |   83 +-
 camel/providers/local/camel-local-folder.c         |  188 +-
 camel/providers/local/camel-local-folder.h         |    4 +-
 camel/providers/local/camel-local-provider.c       |    5 +-
 camel/providers/local/camel-local-store.c          |  219 +-
 camel/providers/local/camel-local-store.h          |   22 +-
 camel/providers/local/camel-local-summary.c        |  178 +-
 camel/providers/local/camel-local-summary.h        |    2 +
 camel/providers/local/camel-maildir-folder.c       |  200 +-
 camel/providers/local/camel-maildir-folder.h       |   16 +-
 camel/providers/local/camel-maildir-store.c        |  215 +-
 camel/providers/local/camel-maildir-store.h        |   16 +-
 camel/providers/local/camel-maildir-summary.c      |  154 +-
 camel/providers/local/camel-maildir-summary.h      |   11 +-
 camel/providers/local/camel-mbox-folder.c          |  148 +-
 camel/providers/local/camel-mbox-folder.h          |   15 +-
 camel/providers/local/camel-mbox-store.c           |  248 +-
 camel/providers/local/camel-mbox-store.h           |   16 +-
 camel/providers/local/camel-mbox-summary.c         |  292 ++-
 camel/providers/local/camel-mbox-summary.h         |    4 +-
 camel/providers/local/camel-mh-folder.c            |  120 +-
 camel/providers/local/camel-mh-folder.h            |   16 +-
 camel/providers/local/camel-mh-store.c             |  199 +-
 camel/providers/local/camel-mh-store.h             |   15 +-
 camel/providers/local/camel-mh-summary.c           |  113 +-
 camel/providers/local/camel-mh-summary.h           |    9 +-
 camel/providers/local/camel-spool-folder.c         |   61 +-
 camel/providers/local/camel-spool-folder.h         |   18 +-
 camel/providers/local/camel-spool-store.c          |  246 ++-
 camel/providers/local/camel-spool-store.h          |   15 +-
 camel/providers/local/camel-spool-summary.c        |  183 +-
 camel/providers/local/camel-spool-summary.h        |    2 +-
 camel/providers/nntp/camel-nntp-folder.c           |  306 ++-
 camel/providers/nntp/camel-nntp-folder.h           |    7 +-
 camel/providers/nntp/camel-nntp-grouplist.c        |    1 -
 camel/providers/nntp/camel-nntp-newsrc.c           |    1 -
 camel/providers/nntp/camel-nntp-provider.c         |    2 +-
 camel/providers/nntp/camel-nntp-store-summary.c    |   78 +-
 camel/providers/nntp/camel-nntp-store-summary.h    |    6 +-
 camel/providers/nntp/camel-nntp-store.c            |  320 ++--
 camel/providers/nntp/camel-nntp-store.h            |    1 -
 camel/providers/nntp/camel-nntp-stream.c           |  128 +-
 camel/providers/nntp/camel-nntp-stream.h           |   26 +-
 camel/providers/nntp/camel-nntp-summary.c          |  279 +-
 camel/providers/nntp/camel-nntp-summary.h          |    6 +-
 camel/providers/pop3/camel-pop3-engine.c           |   39 +-
 camel/providers/pop3/camel-pop3-engine.h           |    2 +-
 camel/providers/pop3/camel-pop3-folder.c           |  159 +-
 camel/providers/pop3/camel-pop3-folder.h           |   20 +-
 camel/providers/pop3/camel-pop3-provider.c         |    2 +-
 camel/providers/pop3/camel-pop3-store.c            |  287 ++-
 camel/providers/pop3/camel-pop3-store.h            |   17 +-
 camel/providers/pop3/camel-pop3-stream.c           |  121 +-
 camel/providers/pop3/camel-pop3-stream.h           |    2 +-
 camel/providers/sendmail/camel-sendmail-provider.c |    2 +-
 .../providers/sendmail/camel-sendmail-transport.c  |   79 +-
 .../providers/sendmail/camel-sendmail-transport.h  |   14 +-
 camel/providers/smtp/camel-smtp-transport.c        |  258 +-
 camel/providers/smtp/camel-smtp-transport.h        |   13 +-
 .../libebook/tmpl/e-address-western.sgml           |    3 +
 .../addressbook/libebook/tmpl/e-book-query.sgml    |    3 +
 .../addressbook/libebook/tmpl/e-book-types.sgml    |    4 +
 .../addressbook/libebook/tmpl/e-book-view.sgml     |    3 +
 .../addressbook/libebook/tmpl/e-book.sgml          |    3 +
 .../addressbook/libebook/tmpl/e-contact.sgml       |    6 +
 .../addressbook/libebook/tmpl/e-destination.sgml   |    4 +
 .../addressbook/libebook/tmpl/e-name-western.sgml  |    3 +
 .../addressbook/libebook/tmpl/e-vcard.sgml         |    4 +
 docs/reference/camel/tmpl/address-data.sgml        |    3 +
 docs/reference/camel/tmpl/addresses.sgml           |    3 +
 docs/reference/camel/tmpl/camel-address.sgml       |    4 +
 docs/reference/camel/tmpl/camel-arg.sgml           |    3 +
 docs/reference/camel/tmpl/camel-block-file.sgml    |    3 +
 docs/reference/camel/tmpl/camel-certdb.sgml        |    5 +
 docs/reference/camel/tmpl/camel-charset-map.sgml   |    3 +
 .../reference/camel/tmpl/camel-cipher-context.sgml |   10 +-
 docs/reference/camel/tmpl/camel-data-cache.sgml    |    3 +
 docs/reference/camel/tmpl/camel-data-wrapper.sgml  |    4 +
 docs/reference/camel/tmpl/camel-db.sgml            |    3 +
 docs/reference/camel/tmpl/camel-debug.sgml         |    5 +
 docs/reference/camel/tmpl/camel-disco-diary.sgml   |    3 +
 docs/reference/camel/tmpl/camel-disco-folder.sgml  |    6 +
 docs/reference/camel/tmpl/camel-disco-store.sgml   |    3 +
 docs/reference/camel/tmpl/camel-exception.sgml     |    4 +
 docs/reference/camel/tmpl/camel-file-utils.sgml    |    3 +
 docs/reference/camel/tmpl/camel-filter-driver.sgml |    3 +
 docs/reference/camel/tmpl/camel-filter-search.sgml |    3 +
 docs/reference/camel/tmpl/camel-folder-search.sgml |    4 +
 .../reference/camel/tmpl/camel-folder-summary.sgml |    3 +
 docs/reference/camel/tmpl/camel-folder-thread.sgml |    3 +
 docs/reference/camel/tmpl/camel-folder.sgml        |   10 +
 docs/reference/camel/tmpl/camel-gpg-context.sgml   |    3 +
 .../camel/tmpl/camel-groupwise-folder.sgml         |    3 +
 .../camel/tmpl/camel-groupwise-journal.sgml        |    3 +
 .../camel/tmpl/camel-groupwise-store-summary.sgml  |    4 +
 .../camel/tmpl/camel-groupwise-store.sgml          |    3 +
 .../camel/tmpl/camel-groupwise-summary.sgml        |    3 +
 .../camel/tmpl/camel-groupwise-transport.sgml      |    3 +
 .../camel/tmpl/camel-groupwise-utils.sgml          |    3 +
 docs/reference/camel/tmpl/camel-html-parser.sgml   |    4 +
 docs/reference/camel/tmpl/camel-http-stream.sgml   |    3 +
 docs/reference/camel/tmpl/camel-iconv.sgml         |    5 +
 docs/reference/camel/tmpl/camel-imap-command.sgml  |    3 +
 docs/reference/camel/tmpl/camel-imap-folder.sgml   |    8 +
 docs/reference/camel/tmpl/camel-imap-journal.sgml  |    3 +
 .../camel/tmpl/camel-imap-message-cache.sgml       |    3 +
 docs/reference/camel/tmpl/camel-imap-search.sgml   |    3 +
 .../camel/tmpl/camel-imap-store-summary.sgml       |    4 +
 docs/reference/camel/tmpl/camel-imap-store.sgml    |   10 +-
 docs/reference/camel/tmpl/camel-imap-summary.sgml  |    3 +
 docs/reference/camel/tmpl/camel-imap-utils.sgml    |    3 +
 docs/reference/camel/tmpl/camel-imap-wrapper.sgml  |    3 +
 docs/reference/camel/tmpl/camel-imap4-command.sgml |    3 +
 docs/reference/camel/tmpl/camel-imap4-engine.sgml  |    3 +
 docs/reference/camel/tmpl/camel-imap4-folder.sgml  |    3 +
 docs/reference/camel/tmpl/camel-imap4-journal.sgml |    3 +
 docs/reference/camel/tmpl/camel-imap4-search.sgml  |    3 +
 .../reference/camel/tmpl/camel-imap4-specials.sgml |    3 +
 .../camel/tmpl/camel-imap4-store-summary.sgml      |    3 +
 docs/reference/camel/tmpl/camel-imap4-store.sgml   |    3 +
 docs/reference/camel/tmpl/camel-imap4-stream.sgml  |    3 +
 docs/reference/camel/tmpl/camel-imap4-summary.sgml |    3 +
 docs/reference/camel/tmpl/camel-imap4-utils.sgml   |    3 +
 docs/reference/camel/tmpl/camel-index.sgml         |    3 +
 .../camel/tmpl/camel-internet-address.sgml         |    4 +
 docs/reference/camel/tmpl/camel-junk-plugin.sgml   |    3 +
 docs/reference/camel/tmpl/camel-list-utils.sgml    |    3 +
 docs/reference/camel/tmpl/camel-local-folder.sgml  |    3 +
 docs/reference/camel/tmpl/camel-local-store.sgml   |    3 +
 docs/reference/camel/tmpl/camel-local-summary.sgml |    3 +
 docs/reference/camel/tmpl/camel-lock-client.sgml   |    3 +
 docs/reference/camel/tmpl/camel-lock-helper.sgml   |    3 +
 docs/reference/camel/tmpl/camel-lock.sgml          |    3 +
 .../reference/camel/tmpl/camel-maildir-folder.sgml |    3 +
 docs/reference/camel/tmpl/camel-maildir-store.sgml |    3 +
 .../camel/tmpl/camel-maildir-summary.sgml          |    3 +
 docs/reference/camel/tmpl/camel-mbox-folder.sgml   |    3 +
 docs/reference/camel/tmpl/camel-mbox-store.sgml    |    3 +
 docs/reference/camel/tmpl/camel-mbox-summary.sgml  |    3 +
 docs/reference/camel/tmpl/camel-medium.sgml        |    3 +
 docs/reference/camel/tmpl/camel-mempool.sgml       |    3 +
 docs/reference/camel/tmpl/camel-mh-folder.sgml     |    3 +
 docs/reference/camel/tmpl/camel-mh-store.sgml      |    3 +
 docs/reference/camel/tmpl/camel-mh-summary.sgml    |    3 +
 .../camel/tmpl/camel-mime-filter-basic.sgml        |    3 +
 .../camel/tmpl/camel-mime-filter-bestenc.sgml      |    3 +
 .../camel/tmpl/camel-mime-filter-canon.sgml        |    3 +
 .../camel/tmpl/camel-mime-filter-charset.sgml      |    3 +
 .../camel/tmpl/camel-mime-filter-crlf.sgml         |    3 +
 .../camel/tmpl/camel-mime-filter-enriched.sgml     |    3 +
 .../camel/tmpl/camel-mime-filter-from.sgml         |    4 +
 .../camel/tmpl/camel-mime-filter-gzip.sgml         |    3 +
 .../camel/tmpl/camel-mime-filter-html.sgml         |    4 +
 .../camel/tmpl/camel-mime-filter-index.sgml        |    3 +
 .../camel/tmpl/camel-mime-filter-linewrap.sgml     |    3 +
 .../camel/tmpl/camel-mime-filter-pgp.sgml          |    4 +
 .../camel/tmpl/camel-mime-filter-progress.sgml     |    3 +
 .../camel/tmpl/camel-mime-filter-save.sgml         |    3 +
 .../camel/tmpl/camel-mime-filter-tohtml.sgml       |    3 +
 .../camel/tmpl/camel-mime-filter-windows.sgml      |    3 +
 .../camel/tmpl/camel-mime-filter-yenc.sgml         |    3 +
 docs/reference/camel/tmpl/camel-mime-filter.sgml   |    4 +
 docs/reference/camel/tmpl/camel-mime-message.sgml  |    4 +
 docs/reference/camel/tmpl/camel-mime-parser.sgml   |    4 +
 docs/reference/camel/tmpl/camel-mime-part.sgml     |    4 +
 docs/reference/camel/tmpl/camel-mime-utils.sgml    |    5 +
 docs/reference/camel/tmpl/camel-movemail.sgml      |    3 +
 docs/reference/camel/tmpl/camel-msgport.sgml       |    4 +
 .../camel/tmpl/camel-multipart-encrypted.sgml      |    4 +
 .../camel/tmpl/camel-multipart-signed.sgml         |    4 +
 docs/reference/camel/tmpl/camel-multipart.sgml     |    4 +
 docs/reference/camel/tmpl/camel-net-utils.sgml     |    3 +
 docs/reference/camel/tmpl/camel-nntp-address.sgml  |    4 +
 docs/reference/camel/tmpl/camel-nntp-auth.sgml     |    3 +
 docs/reference/camel/tmpl/camel-nntp-folder.sgml   |    4 +
 .../reference/camel/tmpl/camel-nntp-grouplist.sgml |    3 +
 docs/reference/camel/tmpl/camel-nntp-newsrc.sgml   |    3 +
 .../camel/tmpl/camel-nntp-resp-codes.sgml          |    3 +
 .../camel/tmpl/camel-nntp-store-summary.sgml       |    4 +
 docs/reference/camel/tmpl/camel-nntp-store.sgml    |    3 +
 docs/reference/camel/tmpl/camel-nntp-stream.sgml   |    3 +
 docs/reference/camel/tmpl/camel-nntp-summary.sgml  |    3 +
 docs/reference/camel/tmpl/camel-nntp-utils.sgml    |    3 +
 docs/reference/camel/tmpl/camel-object.sgml        |    4 +
 .../reference/camel/tmpl/camel-offline-folder.sgml |    4 +
 .../camel/tmpl/camel-offline-journal.sgml          |    3 +
 docs/reference/camel/tmpl/camel-offline-store.sgml |    5 +
 docs/reference/camel/tmpl/camel-operation.sgml     |    4 +
 .../camel/tmpl/camel-partition-table.sgml          |    6 +
 docs/reference/camel/tmpl/camel-pop3-engine.sgml   |    3 +
 docs/reference/camel/tmpl/camel-pop3-folder.sgml   |    3 +
 docs/reference/camel/tmpl/camel-pop3-store.sgml    |    3 +
 docs/reference/camel/tmpl/camel-pop3-stream.sgml   |    3 +
 docs/reference/camel/tmpl/camel-provider.sgml      |    6 +
 .../reference/camel/tmpl/camel-sasl-anonymous.sgml |    3 +
 docs/reference/camel/tmpl/camel-sasl-cram-md5.sgml |    3 +
 .../camel/tmpl/camel-sasl-digest-md5.sgml          |    3 +
 docs/reference/camel/tmpl/camel-sasl-gssapi.sgml   |    3 +
 docs/reference/camel/tmpl/camel-sasl-login.sgml    |    3 +
 docs/reference/camel/tmpl/camel-sasl-ntlm.sgml     |    3 +
 docs/reference/camel/tmpl/camel-sasl-plain.sgml    |    3 +
 .../reference/camel/tmpl/camel-sasl-popb4smtp.sgml |    3 +
 docs/reference/camel/tmpl/camel-sasl.sgml          |    3 +
 .../camel/tmpl/camel-search-sql-sexp.sgml          |    3 +
 docs/reference/camel/tmpl/camel-search-sql.sgml    |    3 +
 .../camel/tmpl/camel-seekable-stream.sgml          |    3 +
 .../camel/tmpl/camel-seekable-substream.sgml       |    3 +
 .../camel/tmpl/camel-sendmail-transport.sgml       |    3 +
 docs/reference/camel/tmpl/camel-service.sgml       |    4 +
 docs/reference/camel/tmpl/camel-session.sgml       |    4 +
 docs/reference/camel/tmpl/camel-smime-context.sgml |    3 +
 .../reference/camel/tmpl/camel-smtp-transport.sgml |    3 +
 docs/reference/camel/tmpl/camel-spool-folder.sgml  |    3 +
 docs/reference/camel/tmpl/camel-spool-store.sgml   |    3 +
 docs/reference/camel/tmpl/camel-spool-summary.sgml |    3 +
 docs/reference/camel/tmpl/camel-store-summary.sgml |    4 +
 docs/reference/camel/tmpl/camel-store.sgml         |   10 +
 docs/reference/camel/tmpl/camel-stream-buffer.sgml |    3 +
 docs/reference/camel/tmpl/camel-stream-filter.sgml |    3 +
 docs/reference/camel/tmpl/camel-stream-fs.sgml     |    3 +
 docs/reference/camel/tmpl/camel-stream-mem.sgml    |    4 +
 docs/reference/camel/tmpl/camel-stream-null.sgml   |    4 +
 .../reference/camel/tmpl/camel-stream-process.sgml |    4 +
 docs/reference/camel/tmpl/camel-stream-vfs.sgml    |    3 +
 docs/reference/camel/tmpl/camel-stream.sgml        |    3 +
 docs/reference/camel/tmpl/camel-string-utils.sgml  |    3 +
 .../reference/camel/tmpl/camel-tcp-stream-raw.sgml |    4 +
 .../reference/camel/tmpl/camel-tcp-stream-ssl.sgml |    3 +
 docs/reference/camel/tmpl/camel-tcp-stream.sgml    |    3 +
 docs/reference/camel/tmpl/camel-test-provider.sgml |    3 +
 docs/reference/camel/tmpl/camel-test.sgml          |    6 +
 docs/reference/camel/tmpl/camel-text-index.sgml    |    3 +
 docs/reference/camel/tmpl/camel-transport.sgml     |    3 +
 docs/reference/camel/tmpl/camel-trie.sgml          |    3 +
 docs/reference/camel/tmpl/camel-uid-cache.sgml     |    3 +
 docs/reference/camel/tmpl/camel-url-scanner.sgml   |    4 +
 docs/reference/camel/tmpl/camel-url.sgml           |    3 +
 docs/reference/camel/tmpl/camel-utf8.sgml          |    3 +
 docs/reference/camel/tmpl/camel-vee-folder.sgml    |    3 +
 docs/reference/camel/tmpl/camel-vee-store.sgml     |    4 +
 docs/reference/camel/tmpl/camel-vee-summary.sgml   |    3 +
 docs/reference/camel/tmpl/camel-vtrash-folder.sgml |    3 +
 docs/reference/camel/tmpl/camel.sgml               |    4 +
 docs/reference/camel/tmpl/folders.sgml             |    3 +
 docs/reference/camel/tmpl/messages.sgml            |    4 +
 docs/reference/camel/tmpl/session.sgml             |    3 +
 docs/reference/camel/tmpl/streams.sgml             |    3 +
 .../libedataserver/tmpl/e-account-list.sgml        |    3 +
 docs/reference/libedataserver/tmpl/e-account.sgml  |    4 +
 .../libedataserver/tmpl/e-categories.sgml          |    4 +
 docs/reference/libedataserver/tmpl/e-flag.sgml     |    4 +
 docs/reference/libedataserver/tmpl/e-iterator.sgml |    3 +
 .../libedataserver/tmpl/e-list-iterator.sgml       |    3 +
 docs/reference/libedataserver/tmpl/e-list.sgml     |    3 +
 docs/reference/libedataserver/tmpl/e-memory.sgml   |    3 +
 docs/reference/libedataserver/tmpl/e-proxy.sgml    |    4 +
 docs/reference/libedataserver/tmpl/e-sexp.sgml     |    4 +
 .../libedataserver/tmpl/e-source-group.sgml        |    3 +
 .../libedataserver/tmpl/e-source-list.sgml         |    4 +
 docs/reference/libedataserver/tmpl/e-source.sgml   |    3 +
 .../libedataserver/tmpl/e-time-utils.sgml          |    4 +
 docs/reference/libedataserver/tmpl/e-uid.sgml      |    4 +
 docs/reference/libedataserver/tmpl/e-url.sgml      |    3 +
 docs/reference/libedataserver/tmpl/e-util.sgml     |   15 +-
 .../libedataserver/tmpl/e-xml-hash-utils.sgml      |    3 +
 .../reference/libedataserver/tmpl/e-xml-utils.sgml |    3 +
 .../reference/libedataserver/tmpl/eds-version.sgml |    3 +
 .../libedataserverui/tmpl/e-book-auth-util.sgml    |    3 +
 .../libedataserverui/tmpl/e-categories-dialog.sgml |    3 +
 .../tmpl/e-category-completion.sgml                |    4 +
 .../tmpl/e-cell-renderer-color.sgml                |    4 +
 .../libedataserverui/tmpl/e-contact-store.sgml     |    4 +
 .../tmpl/e-data-server-ui-marshal.sgml             |    3 +
 .../libedataserverui/tmpl/e-destination-store.sgml |    4 +
 .../tmpl/e-name-selector-dialog.sgml               |    4 +
 .../tmpl/e-name-selector-entry.sgml                |    4 +
 .../tmpl/e-name-selector-list.sgml                 |    4 +
 .../tmpl/e-name-selector-model.sgml                |    4 +
 .../libedataserverui/tmpl/e-name-selector.sgml     |    4 +
 .../libedataserverui/tmpl/e-passwords.sgml         |    7 +
 .../libedataserverui/tmpl/e-source-combo-box.sgml  |    3 +
 .../tmpl/e-source-selector-dialog.sgml             |    3 +
 .../libedataserverui/tmpl/e-source-selector.sgml   |    3 +
 .../tmpl/e-tree-model-generator.sgml               |    3 +
 338 files changed, 7015 insertions(+), 5322 deletions(-)
---
diff --git a/camel/camel-block-file.h b/camel/camel-block-file.h
index c91685f..0fa3e1e 100644
--- a/camel/camel-block-file.h
+++ b/camel/camel-block-file.h
@@ -112,7 +112,7 @@ gint		camel_block_file_delete		(CamelBlockFile *kf);
 CamelBlock *	camel_block_file_new_block	(CamelBlockFile *bs);
 gint		camel_block_file_free_block	(CamelBlockFile *bs,
 						 camel_block_t id);
-CamelBlock 	*camel_block_file_get_block	(CamelBlockFile *bs,
+CamelBlock *	camel_block_file_get_block	(CamelBlockFile *bs,
 						 camel_block_t id);
 void		camel_block_file_detach_block	(CamelBlockFile *bs,
 						 CamelBlock *bl);
diff --git a/camel/camel-disco-folder.c b/camel/camel-disco-folder.c
index cde2232..c358c1d 100644
--- a/camel/camel-disco-folder.c
+++ b/camel/camel-disco-folder.c
@@ -40,7 +40,7 @@ static CamelProperty disco_property_list[] = {
 };
 
 /* Forward Declarations */
-static void disco_expunge (CamelFolder *folder, CamelException *ex);
+static gboolean disco_expunge (CamelFolder *folder, CamelException *ex);
 
 struct _cdf_sync_msg {
 	CamelSessionThreadMsg msg;
@@ -182,31 +182,30 @@ disco_setv (CamelObject *object,
 	return ((CamelObjectClass *)parent_class)->setv(object, ex, args);
 }
 
-static void
+static gboolean
 disco_refresh_info (CamelFolder *folder,
                     CamelException *ex)
 {
 	CamelDiscoFolderClass *disco_folder_class;
 
 	if (camel_disco_store_status (CAMEL_DISCO_STORE (folder->parent_store)) != CAMEL_DISCO_STORE_ONLINE)
-		return;
+		return TRUE;
 
 	disco_folder_class = CAMEL_DISCO_FOLDER_GET_CLASS (folder);
 
-	disco_folder_class->refresh_info_online (folder, ex);
+	return disco_folder_class->refresh_info_online (folder, ex);
 }
 
-static void
+static gboolean
 disco_sync (CamelFolder *folder,
             gboolean expunge,
             CamelException *ex)
 {
 	CamelDiscoFolderClass *disco_folder_class;
 
-	if (expunge) {
-		disco_expunge (folder, ex);
+	if (expunge && !disco_expunge (folder, ex)) {
 		if (camel_exception_is_set (ex))
-			return;
+			return FALSE;
 	}
 
 	camel_object_state_write(folder);
@@ -215,22 +214,19 @@ disco_sync (CamelFolder *folder,
 
 	switch (camel_disco_store_status (CAMEL_DISCO_STORE (folder->parent_store))) {
 	case CAMEL_DISCO_STORE_ONLINE:
-		disco_folder_class->sync_online (folder, ex);
-		return;
+		return disco_folder_class->sync_online (folder, ex);
 
 	case CAMEL_DISCO_STORE_OFFLINE:
-		disco_folder_class->sync_offline (folder, ex);
-		return;
+		return disco_folder_class->sync_offline (folder, ex);
 
 	case CAMEL_DISCO_STORE_RESYNCING:
-		disco_folder_class->sync_resyncing (folder, ex);
-		return;
+		return disco_folder_class->sync_resyncing (folder, ex);
 	}
 
-	g_warn_if_reached ();
+	g_return_val_if_reached (FALSE);
 }
 
-static void
+static gboolean
 disco_expunge_uids (CamelFolder *folder,
                     GPtrArray *uids,
                     CamelException *ex)
@@ -239,31 +235,28 @@ disco_expunge_uids (CamelFolder *folder,
 	CamelDiscoFolderClass *disco_folder_class;
 
 	if (uids->len == 0)
-		return;
+		return TRUE;
 
 	disco_folder_class = CAMEL_DISCO_FOLDER_GET_CLASS (folder);
 
 	switch (camel_disco_store_status (disco)) {
 	case CAMEL_DISCO_STORE_ONLINE:
-		disco_folder_class->expunge_uids_online (
+		return disco_folder_class->expunge_uids_online (
 			folder, uids, ex);
-		return;
 
 	case CAMEL_DISCO_STORE_OFFLINE:
-		disco_folder_class->expunge_uids_offline (
+		return disco_folder_class->expunge_uids_offline (
 			folder, uids, ex);
-		return;
 
 	case CAMEL_DISCO_STORE_RESYNCING:
-		disco_folder_class->expunge_uids_resyncing (
+		return disco_folder_class->expunge_uids_resyncing (
 			folder, uids, ex);
-		return;
 	}
 
-	g_warn_if_reached ();
+	g_return_val_if_reached (FALSE);
 }
 
-static void
+static gboolean
 disco_expunge (CamelFolder *folder,
                CamelException *ex)
 {
@@ -271,6 +264,7 @@ disco_expunge (CamelFolder *folder,
 	gint i;
 	guint count;
 	CamelMessageInfo *info;
+	gboolean success;
 
 	uids = g_ptr_array_new ();
 	count = camel_folder_summary_count (folder->summary);
@@ -281,14 +275,16 @@ disco_expunge (CamelFolder *folder,
 		camel_message_info_free(info);
 	}
 
-	disco_expunge_uids (folder, uids, ex);
+	success = disco_expunge_uids (folder, uids, ex);
 
 	for (i = 0; i < uids->len; i++)
 		g_free (uids->pdata[i]);
 	g_ptr_array_free (uids, TRUE);
+
+	return success;
 }
 
-static void
+static gboolean
 disco_append_message (CamelFolder *folder,
                       CamelMimeMessage *message,
                       const CamelMessageInfo *info,
@@ -302,25 +298,22 @@ disco_append_message (CamelFolder *folder,
 
 	switch (camel_disco_store_status (disco)) {
 	case CAMEL_DISCO_STORE_ONLINE:
-		disco_folder_class->append_online (
+		return disco_folder_class->append_online (
 			folder, message, info, appended_uid, ex);
-		return;
 
 	case CAMEL_DISCO_STORE_OFFLINE:
-		disco_folder_class->append_offline (
+		return disco_folder_class->append_offline (
 			folder, message, info, appended_uid, ex);
-		return;
 
 	case CAMEL_DISCO_STORE_RESYNCING:
-		disco_folder_class->append_resyncing (
+		return disco_folder_class->append_resyncing (
 			folder, message, info, appended_uid, ex);
-		return;
 	}
 
-	g_warn_if_reached ();
+	g_return_val_if_reached (FALSE);
 }
 
-static void
+static gboolean
 disco_transfer_messages_to (CamelFolder *source,
                             GPtrArray *uids,
                             CamelFolder *dest,
@@ -335,28 +328,25 @@ disco_transfer_messages_to (CamelFolder *source,
 
 	switch (camel_disco_store_status (disco)) {
 	case CAMEL_DISCO_STORE_ONLINE:
-		disco_folder_class->transfer_online (
+		return disco_folder_class->transfer_online (
 			source, uids, dest, transferred_uids,
 			delete_originals, ex);
-		return;
 
 	case CAMEL_DISCO_STORE_OFFLINE:
-		disco_folder_class->transfer_offline (
+		return disco_folder_class->transfer_offline (
 			source, uids, dest, transferred_uids,
 			delete_originals, ex);
-		return;
 
 	case CAMEL_DISCO_STORE_RESYNCING:
-		disco_folder_class->transfer_resyncing (
+		return disco_folder_class->transfer_resyncing (
 			source, uids, dest, transferred_uids,
 			delete_originals, ex);
-		return;
 	}
 
-	g_warn_if_reached ();
+	g_return_val_if_reached (FALSE);
 }
 
-static void
+static gboolean
 disco_prepare_for_offline (CamelDiscoFolder *disco_folder,
                            const gchar *expression,
                            CamelException *ex)
@@ -364,6 +354,7 @@ disco_prepare_for_offline (CamelDiscoFolder *disco_folder,
 	CamelFolder *folder = CAMEL_FOLDER (disco_folder);
 	GPtrArray *uids;
 	gint i;
+	gboolean success = TRUE;
 
 	camel_operation_start(NULL, _("Preparing folder '%s' for offline"), folder->full_name);
 
@@ -374,16 +365,15 @@ disco_prepare_for_offline (CamelDiscoFolder *disco_folder,
 
 	if (!uids) {
 		camel_operation_end(NULL);
-		return;
+		return FALSE;
 	}
 
-	for (i = 0; i < uids->len; i++) {
+	for (i = 0; i < uids->len && success; i++) {
 		gint pc = i * 100 / uids->len;
 
-		camel_disco_folder_cache_message (disco_folder, uids->pdata[i], ex);
 		camel_operation_progress(NULL, pc);
-		if (camel_exception_is_set (ex))
-			break;
+		success = camel_disco_folder_cache_message (
+			disco_folder, uids->pdata[i], ex);
 	}
 
 	if (expression)
@@ -392,13 +382,15 @@ disco_prepare_for_offline (CamelDiscoFolder *disco_folder,
 		camel_folder_free_uids (folder, uids);
 
 	camel_operation_end(NULL);
+
+	return success;
 }
 
-static void
+static gboolean
 disco_refresh_info_online (CamelFolder *folder,
                            CamelException *ex)
 {
-	/* NOOP */;
+	return TRUE;
 }
 
 static void
@@ -468,16 +460,18 @@ camel_disco_folder_get_type (void)
  * although in some cases it may not be possible to avoid expunging
  * messages that are marked deleted by another client at the same time
  * as the expunge_uids call is running.
+ *
+ * Returns: %TRUE on success, %FALSE on failure
  **/
-void
+gboolean
 camel_disco_folder_expunge_uids (CamelFolder *folder,
                                  GPtrArray *uids,
                                  CamelException *ex)
 {
-	g_return_if_fail (CAMEL_IS_DISCO_FOLDER (folder));
-	g_return_if_fail (uids != NULL);
+	g_return_val_if_fail (CAMEL_IS_DISCO_FOLDER (folder), FALSE);
+	g_return_val_if_fail (uids != NULL, FALSE);
 
-	disco_expunge_uids (folder, uids, ex);
+	return disco_expunge_uids (folder, uids, ex);
 }
 
 /**
@@ -487,21 +481,23 @@ camel_disco_folder_expunge_uids (CamelFolder *folder,
  * @ex: a CamelException
  *
  * Requests that @disco_folder cache message @uid to disk.
+ *
+ * Returns: %TRUE on success, %FALSE on failure
  **/
-void
+gboolean
 camel_disco_folder_cache_message (CamelDiscoFolder *disco_folder,
                                   const gchar *uid,
                                   CamelException *ex)
 {
 	CamelDiscoFolderClass *class;
 
-	g_return_if_fail (CAMEL_IS_DISCO_FOLDER (disco_folder));
-	g_return_if_fail (uid != NULL);
+	g_return_val_if_fail (CAMEL_IS_DISCO_FOLDER (disco_folder), FALSE);
+	g_return_val_if_fail (uid != NULL, FALSE);
 
 	class = CAMEL_DISCO_FOLDER_GET_CLASS (disco_folder);
-	g_return_if_fail (class->cache_message != NULL);
+	g_return_val_if_fail (class->cache_message != NULL, FALSE);
 
-	class->cache_message (disco_folder, uid, ex);
+	return class->cache_message (disco_folder, uid, ex);
 }
 
 /**
@@ -514,18 +510,20 @@ camel_disco_folder_cache_message (CamelDiscoFolder *disco_folder,
  * This prepares @disco_folder for offline operation, by downloading
  * the bodies of all messages described by @expression (using the
  * same syntax as camel_folder_search_by_expression() ).
+ *
+ * Returns: %TRUE on success, %FALSE on failure
  **/
-void
+gboolean
 camel_disco_folder_prepare_for_offline (CamelDiscoFolder *disco_folder,
                                         const gchar *expression,
                                         CamelException *ex)
 {
 	CamelDiscoFolderClass *class;
 
-	g_return_if_fail (CAMEL_IS_DISCO_FOLDER (disco_folder));
+	g_return_val_if_fail (CAMEL_IS_DISCO_FOLDER (disco_folder), FALSE);
 
 	class = CAMEL_DISCO_FOLDER_GET_CLASS (disco_folder);
-	g_return_if_fail (class->prepare_for_offline != NULL);
+	g_return_val_if_fail (class->prepare_for_offline != NULL, FALSE);
 
-	class->prepare_for_offline (disco_folder, expression, ex);
+	return class->prepare_for_offline (disco_folder, expression, ex);
 }
diff --git a/camel/camel-disco-folder.h b/camel/camel-disco-folder.h
index 7bd8fce..7d34285 100644
--- a/camel/camel-disco-folder.h
+++ b/camel/camel-disco-folder.h
@@ -62,61 +62,61 @@ struct _CamelDiscoFolder {
 struct _CamelDiscoFolderClass {
 	CamelFolderClass parent_class;
 
-	void		(*refresh_info_online)	(CamelFolder *folder,
+	gboolean	(*refresh_info_online)	(CamelFolder *folder,
 						 CamelException *ex);
-	void		(*sync_online)		(CamelFolder *folder,
+	gboolean	(*sync_online)		(CamelFolder *folder,
 						 CamelException *ex);
-	void		(*sync_offline)		(CamelFolder *folder,
+	gboolean	(*sync_offline)		(CamelFolder *folder,
 						 CamelException *ex);
-	void		(*sync_resyncing)	(CamelFolder *folder,
+	gboolean	(*sync_resyncing)	(CamelFolder *folder,
 						 CamelException *ex);
-	void		(*expunge_uids_online)	(CamelFolder *folder,
+	gboolean	(*expunge_uids_online)	(CamelFolder *folder,
 						 GPtrArray *uids,
 						 CamelException *ex);
-	void		(*expunge_uids_offline)	(CamelFolder *folder,
+	gboolean	(*expunge_uids_offline)	(CamelFolder *folder,
 						 GPtrArray *uids,
 						 CamelException *ex);
-	void		(*expunge_uids_resyncing)
+	gboolean	(*expunge_uids_resyncing)
 						(CamelFolder *folder,
 						 GPtrArray *uids,
 						 CamelException *ex);
-	void		(*append_online)	(CamelFolder *folder,
+	gboolean	(*append_online)	(CamelFolder *folder,
 						 CamelMimeMessage *message,
 						 const CamelMessageInfo *info,
 						 gchar **appended_uid,
 						 CamelException *ex);
-	void		(*append_offline)	(CamelFolder *folder,
+	gboolean	(*append_offline)	(CamelFolder *folder,
 						 CamelMimeMessage *message,
 						 const CamelMessageInfo *info,
 						 gchar **appended_uid,
 						 CamelException *ex);
-	void		(*append_resyncing)	(CamelFolder *folder,
+	gboolean	(*append_resyncing)	(CamelFolder *folder,
 						 CamelMimeMessage *message,
 						 const CamelMessageInfo *info,
 						 gchar **appended_uid,
 						 CamelException *ex);
-	void		 (*transfer_online)	(CamelFolder *source,
+	gboolean	(*transfer_online)	(CamelFolder *source,
 						 GPtrArray *uids,
 						 CamelFolder *destination,
 						 GPtrArray **transferred_uids,
 						 gboolean delete_originals,
 						 CamelException *ex);
-	void		(*transfer_offline)	(CamelFolder *source,
+	gboolean	(*transfer_offline)	(CamelFolder *source,
 						 GPtrArray *uids,
 						 CamelFolder *destination,
 						 GPtrArray **transferred_uids,
 						 gboolean delete_originals,
 						 CamelException *ex);
-	void		(*transfer_resyncing)	(CamelFolder *source,
+	gboolean	(*transfer_resyncing)	(CamelFolder *source,
 						 GPtrArray *uids,
 						 CamelFolder *destination,
 						 GPtrArray **transferred_uids,
 						 gboolean delete_originals,
 						 CamelException *ex);
-	void		(*cache_message)	(CamelDiscoFolder *disco_folder,
+	gboolean	(*cache_message)	(CamelDiscoFolder *disco_folder,
 						 const gchar *uid,
 						 CamelException *ex);
-	void		(*prepare_for_offline)	(CamelDiscoFolder *disco_folder,
+	gboolean	(*prepare_for_offline)	(CamelDiscoFolder *disco_folder,
 						 const gchar *expression,
 						 CamelException *ex);
 	void		(*update_uid)		(CamelFolder *folder,
@@ -125,13 +125,13 @@ struct _CamelDiscoFolderClass {
 };
 
 CamelType	camel_disco_folder_get_type	(void);
-void		camel_disco_folder_expunge_uids	(CamelFolder *folder,
+gboolean	camel_disco_folder_expunge_uids	(CamelFolder *folder,
 						 GPtrArray *uids,
 						 CamelException *ex);
-void		camel_disco_folder_cache_message(CamelDiscoFolder *disco_folder,
+gboolean	camel_disco_folder_cache_message(CamelDiscoFolder *disco_folder,
 						 const gchar *uid,
 						 CamelException *ex);
-void		camel_disco_folder_prepare_for_offline
+gboolean	camel_disco_folder_prepare_for_offline
 						(CamelDiscoFolder *disco_folder,
 						 const gchar *expression,
 						 CamelException *ex);
diff --git a/camel/camel-disco-store.c b/camel/camel-disco-store.c
index 7510d6b..1c44e54 100644
--- a/camel/camel-disco-store.c
+++ b/camel/camel-disco-store.c
@@ -36,23 +36,27 @@
 
 #define d(x)
 
-static CamelStoreClass *parent_class = NULL;
+static gpointer camel_disco_store_parent_class;
 
-static void
+static gboolean
 disco_store_construct (CamelService *service,
                        CamelSession *session,
                        CamelProvider *provider,
                        CamelURL *url,
                        CamelException *ex)
 {
+	CamelServiceClass *service_class;
 	CamelDiscoStore *disco = CAMEL_DISCO_STORE (service);
 
-	CAMEL_SERVICE_CLASS (parent_class)->construct (service, session, provider, url, ex);
-	if (camel_exception_is_set (ex))
-		return;
+	/* Chain up to parent's construct() method. */
+	service_class = CAMEL_SERVICE_CLASS (camel_disco_store_parent_class);
+	if (!service_class->construct (service, session, provider, url, ex))
+		return FALSE;
 
 	disco->status = camel_session_is_online (session) ?
 		CAMEL_DISCO_STORE_ONLINE : CAMEL_DISCO_STORE_OFFLINE;
+
+	return TRUE;
 }
 
 static gboolean
@@ -65,7 +69,7 @@ disco_store_connect (CamelService *service,
 
 	status = camel_disco_store_status (store);
 	if (status != CAMEL_DISCO_STORE_OFFLINE) {
-		if (!CAMEL_SERVICE_CLASS (parent_class)->connect (service, ex)) {
+		if (!CAMEL_SERVICE_CLASS (camel_disco_store_parent_class)->connect (service, ex)) {
 			status = camel_disco_store_status (store);
 			if (status != CAMEL_DISCO_STORE_OFFLINE)
 				return FALSE;
@@ -129,7 +133,7 @@ disco_store_disconnect (CamelService *service,
 
 	}
 
-	return CAMEL_SERVICE_CLASS (parent_class)->disconnect (service, clean, ex);
+	return CAMEL_SERVICE_CLASS (camel_disco_store_parent_class)->disconnect (service, clean, ex);
 }
 
 static void
@@ -139,7 +143,7 @@ disco_store_cancel_connect (CamelService *service)
 
 	/* Fall back */
 	store->status = CAMEL_DISCO_STORE_OFFLINE;
-	CAMEL_SERVICE_CLASS (parent_class)->cancel_connect (service);
+	CAMEL_SERVICE_CLASS (camel_disco_store_parent_class)->cancel_connect (service);
 }
 
 static CamelFolder *
@@ -262,7 +266,7 @@ camel_disco_store_class_init (CamelDiscoStoreClass *class)
 	CamelServiceClass *service_class;
 	CamelStoreClass *store_class;
 
-	parent_class = CAMEL_STORE_CLASS (camel_type_get_global_classfuncs (camel_store_get_type ()));
+	camel_disco_store_parent_class = CAMEL_STORE_CLASS (camel_type_get_global_classfuncs (camel_store_get_type ()));
 
 	service_class = CAMEL_SERVICE_CLASS (class);
 	service_class->construct = disco_store_construct;
diff --git a/camel/camel-folder.c b/camel/camel-folder.c
index 4967605..11cffbd 100644
--- a/camel/camel-folder.c
+++ b/camel/camel-folder.c
@@ -311,11 +311,11 @@ folder_free (CamelObject *object,
 	}
 }
 
-static void
+static gboolean
 folder_refresh_info (CamelFolder *folder,
                      CamelException *ex)
 {
-	/* No op */
+	return TRUE;
 }
 
 static const gchar *
@@ -577,7 +577,7 @@ folder_free_message_info (CamelFolder *folder,
 	camel_message_info_free (info);
 }
 
-static void
+static gboolean
 folder_transfer_messages_to (CamelFolder *source,
                              GPtrArray *uids,
                              CamelFolder *dest,
@@ -616,6 +616,7 @@ folder_transfer_messages_to (CamelFolder *source,
 			ret_uid, delete_originals, ex);
 		camel_operation_progress (NULL, i * 100 / uids->len);
 	}
+
 	if (uids->len > 1) {
 		camel_folder_thaw (dest);
 		if (delete_originals)
@@ -624,6 +625,8 @@ folder_transfer_messages_to (CamelFolder *source,
 
 	camel_operation_end (NULL);
 	camel_exception_clear (&local);
+
+	return TRUE;
 }
 
 static void
@@ -854,25 +857,30 @@ camel_folder_construct (CamelFolder *folder,
  *
  * Sync changes made to a folder to its backing store, possibly
  * expunging deleted messages as well.
+ *
+ * Returns: %TRUE on success, %FALSE on failure
  **/
-void
+gboolean
 camel_folder_sync (CamelFolder *folder,
                    gboolean expunge,
                    CamelException *ex)
 {
 	CamelFolderClass *class;
+	gboolean success = TRUE;
 
-	g_return_if_fail (CAMEL_IS_FOLDER (folder));
+	g_return_val_if_fail (CAMEL_IS_FOLDER (folder), FALSE);
 
 	class = CAMEL_FOLDER_GET_CLASS (folder);
-	g_return_if_fail (class->sync != NULL);
+	g_return_val_if_fail (class->sync != NULL, FALSE);
 
 	camel_folder_lock (folder, CF_REC_LOCK);
 
 	if (!(folder->folder_flags & CAMEL_FOLDER_HAS_BEEN_DELETED))
-		class->sync (folder, expunge, ex);
+		success = class->sync (folder, expunge, ex);
 
 	camel_folder_unlock (folder, CF_REC_LOCK);
+
+	return success;
 }
 
 /**
@@ -881,21 +889,26 @@ camel_folder_sync (CamelFolder *folder,
  * @ex: a #CamelException
  *
  * Updates a folder's summary to be in sync with its backing store.
+ *
+ * Returns: %TRUE on success, %FALSE on failure
  **/
-void
+gboolean
 camel_folder_refresh_info (CamelFolder *folder,
                            CamelException *ex)
 {
 	CamelFolderClass *class;
+	gboolean success;
 
-	g_return_if_fail (CAMEL_IS_FOLDER (folder));
+	g_return_val_if_fail (CAMEL_IS_FOLDER (folder), FALSE);
 
 	class = CAMEL_FOLDER_GET_CLASS (folder);
-	g_return_if_fail (class->refresh_info != NULL);
+	g_return_val_if_fail (class->refresh_info != NULL, FALSE);
 
 	camel_folder_lock (folder, CF_REC_LOCK);
-	class->refresh_info (folder, ex);
+	success = class->refresh_info (folder, ex);
 	camel_folder_unlock (folder, CF_REC_LOCK);
+
+	return success;
 }
 
 /**
@@ -966,24 +979,29 @@ camel_folder_get_parent_store (CamelFolder *folder)
  * @ex: a #CamelException
  *
  * Delete messages which have been marked as "DELETED"
+ *
+ * Returns: %TRUE on success, %FALSE on failure
  **/
-void
+gboolean
 camel_folder_expunge (CamelFolder *folder,
                       CamelException *ex)
 {
 	CamelFolderClass *class;
+	gboolean success = TRUE;
 
-	g_return_if_fail (CAMEL_IS_FOLDER (folder));
+	g_return_val_if_fail (CAMEL_IS_FOLDER (folder), FALSE);
 
 	class = CAMEL_FOLDER_GET_CLASS (folder);
-	g_return_if_fail (class->expunge != NULL);
+	g_return_val_if_fail (class->expunge != NULL, FALSE);
 
 	camel_folder_lock (folder, CF_REC_LOCK);
 
 	if (!(folder->folder_flags & CAMEL_FOLDER_HAS_BEEN_DELETED))
-		class->expunge (folder, ex);
+		success = class->expunge (folder, ex);
 
 	camel_folder_unlock (folder, CF_REC_LOCK);
+
+	return success;
 }
 
 /**
@@ -1057,8 +1075,10 @@ camel_folder_get_deleted_message_count (CamelFolder *folder)
  *
  * Append @message to @folder. Only the flag and tag data from @info
  * are used. If @info is %NULL, no flags or tags will be set.
+ *
+ * Returns: %TRUE on success, %FALSE on failure
  **/
-void
+gboolean
 camel_folder_append_message (CamelFolder *folder,
                              CamelMimeMessage *message,
                              const CamelMessageInfo *info,
@@ -1066,17 +1086,21 @@ camel_folder_append_message (CamelFolder *folder,
                              CamelException *ex)
 {
 	CamelFolderClass *class;
+	gboolean success;
 
-	g_return_if_fail (CAMEL_IS_FOLDER (folder));
-	g_return_if_fail (CAMEL_IS_MIME_MESSAGE (message));
-	g_return_if_fail (info != NULL);
+	g_return_val_if_fail (CAMEL_IS_FOLDER (folder), FALSE);
+	g_return_val_if_fail (CAMEL_IS_MIME_MESSAGE (message), FALSE);
+	g_return_val_if_fail (info != NULL, FALSE);
 
 	class = CAMEL_FOLDER_GET_CLASS (folder);
-	g_return_if_fail (class->append_message != NULL);
+	g_return_val_if_fail (class->append_message != NULL, FALSE);
 
 	camel_folder_lock (folder, CF_REC_LOCK);
-	class->append_message (folder, message, info, appended_uid, ex);
+	success = class->append_message (
+		folder, message, info, appended_uid, ex);
 	camel_folder_unlock (folder, CF_REC_LOCK);
+
+	return success;
 }
 
 /**
@@ -1429,35 +1453,42 @@ camel_folder_get_message (CamelFolder *folder,
  * Ensure that a message identified by UID has been synced in the folder (so
  * that camel_folder_get_message on it later will work in offline mode).
  *
+ * Returns: %TRUE on success, %FALSE on failure
+ *
  * Since: 2.26
  **/
-void
+gboolean
 camel_folder_sync_message (CamelFolder *folder,
                            const gchar *uid,
                            CamelException *ex)
 {
 	CamelFolderClass *class;
+	gboolean success = FALSE;
 
-	g_return_if_fail (CAMEL_IS_FOLDER (folder));
-	g_return_if_fail (uid != NULL);
+	g_return_val_if_fail (CAMEL_IS_FOLDER (folder), FALSE);
+	g_return_val_if_fail (uid != NULL, FALSE);
 
 	class = CAMEL_FOLDER_GET_CLASS (folder);
-	g_return_if_fail (class->get_message != NULL);
+	g_return_val_if_fail (class->get_message != NULL, FALSE);
 
 	camel_folder_lock (folder, CF_REC_LOCK);
 
 	/* Use the sync_message method if the class implements it. */
 	if (class->sync_message != NULL)
-		class->sync_message (folder, uid, ex);
+		success = class->sync_message (folder, uid, ex);
 	else {
 		CamelMimeMessage *message;
 
 		message = class->get_message (folder, uid, ex);
-		if (message != NULL)
-			  camel_object_unref (message);
+		if (message != NULL) {
+			camel_object_unref (message);
+			success = TRUE;
+		}
 	}
 
 	camel_folder_unlock (folder, CF_REC_LOCK);
+
+	return success;
 }
 
 /**
@@ -1778,8 +1809,10 @@ camel_folder_search_free (CamelFolder *folder,
  * This copies or moves messages from one folder to another. If the
  * @source and @dest folders have the same parent_store, this may be
  * more efficient than using #camel_folder_append_message.
+ *
+ * Returns: %TRUE on success, %FALSE on failure
  **/
-void
+gboolean
 camel_folder_transfer_messages_to (CamelFolder *source,
                                    GPtrArray *uids,
                                    CamelFolder *dest,
@@ -1788,14 +1821,15 @@ camel_folder_transfer_messages_to (CamelFolder *source,
                                    CamelException *ex)
 {
 	CamelFolderClass *class;
+	gboolean success;
 
-	g_return_if_fail (CAMEL_IS_FOLDER (source));
-	g_return_if_fail (CAMEL_IS_FOLDER (dest));
-	g_return_if_fail (uids != NULL);
+	g_return_val_if_fail (CAMEL_IS_FOLDER (source), FALSE);
+	g_return_val_if_fail (CAMEL_IS_FOLDER (dest), FALSE);
+	g_return_val_if_fail (uids != NULL, FALSE);
 
 	if (source == dest || uids->len == 0) {
 		/* source and destination folders are the same, or no work to do, do nothing. */
-		return;
+		return TRUE;
 	}
 
 	if (source->parent_store == dest->parent_store) {
@@ -1805,13 +1839,15 @@ camel_folder_transfer_messages_to (CamelFolder *source,
 			class = CAMEL_FOLDER_GET_CLASS (dest);
 		else
 			class = CAMEL_FOLDER_GET_CLASS (source);
-		class->transfer_messages_to (
+		success = class->transfer_messages_to (
 			source, uids, dest, transferred_uids,
 			delete_originals, ex);
 	} else
-		folder_transfer_messages_to (
+		success = folder_transfer_messages_to (
 			source, uids, dest, transferred_uids,
 			delete_originals, ex);
+
+	return success;
 }
 
 /**
diff --git a/camel/camel-folder.h b/camel/camel-folder.h
index 9483c23..24e40af 100644
--- a/camel/camel-folder.h
+++ b/camel/camel-folder.h
@@ -145,19 +145,19 @@ struct _CamelFolder {
 struct _CamelFolderClass {
 	CamelObjectClass parent_class;
 
-	void		(*refresh_info)		(CamelFolder *folder,
+	gboolean	(*refresh_info)		(CamelFolder *folder,
 						 CamelException *ex);
-	void		(*sync)			(CamelFolder *folder,
+	gboolean	(*sync)			(CamelFolder *folder,
 						 gboolean expunge,
 						 CamelException *ex);
 	const gchar *	(*get_name)		(CamelFolder *folder);
 	const gchar *	(*get_full_name)	(CamelFolder *folder);
 	struct _CamelStore *
 			(*get_parent_store)	(CamelFolder *folder);
-	void		(*expunge)		(CamelFolder *folder,
+	gboolean	(*expunge)		(CamelFolder *folder,
 						 CamelException *ex);
 	gint		(*get_message_count)	(CamelFolder *folder);
-	void		(*append_message)	(CamelFolder *folder,
+	gboolean	(*append_message)	(CamelFolder *folder,
 						 CamelMimeMessage *message,
 						 const CamelMessageInfo *info,
 						 gchar **appended_uid,
@@ -214,7 +214,7 @@ struct _CamelFolderClass {
 						 CamelMessageInfo *info);
 	void		(*free_message_info)	(CamelFolder *folder,
 						 CamelMessageInfo *info);
-	void		(*transfer_messages_to)	(CamelFolder *source,
+	gboolean	(*transfer_messages_to)	(CamelFolder *source,
 						 GPtrArray *uids,
 						 CamelFolder *destination,
 						 GPtrArray **transferred_uids,
@@ -231,10 +231,10 @@ struct _CamelFolderClass {
 	guint32		(*count_by_expression)	(CamelFolder *folder,
 						 const gchar *expression,
 						 CamelException *ex);
-	void		(*sync_message)		(CamelFolder *folder,
+	gboolean	(*sync_message)		(CamelFolder *folder,
 						 const gchar *uid,
 						 CamelException *ex);
-        GPtrArray *	(*get_uncached_uids)	(CamelFolder *folder,
+	GPtrArray *	(*get_uncached_uids)	(CamelFolder *folder,
 						 GPtrArray * uids,
 						 CamelException *ex);
 	gchar *		(*get_filename)		(CamelFolder *folder,
@@ -247,9 +247,9 @@ void		camel_folder_construct		(CamelFolder *folder,
 						 struct _CamelStore *parent_store,
 						 const gchar *full_name,
 						 const gchar *name);
-void		camel_folder_refresh_info	(CamelFolder *folder,
+gboolean	camel_folder_refresh_info	(CamelFolder *folder,
 						 CamelException *ex);
-void		camel_folder_sync		(CamelFolder *folder,
+gboolean	camel_folder_sync		(CamelFolder *folder,
 						 gboolean expunge,
 						 CamelException *ex);
 void		camel_folder_set_lock_async	(CamelFolder *folder,
@@ -259,7 +259,7 @@ struct _CamelStore *
 		camel_folder_get_parent_store	(CamelFolder *folder);
 
 /* delete operations */
-void		camel_folder_expunge		(CamelFolder *folder,
+gboolean	camel_folder_expunge		(CamelFolder *folder,
 						 CamelException *ex);
 
 /* folder name operations */
@@ -302,7 +302,7 @@ void		camel_folder_set_message_user_tag
 #endif /* CAMEL_DISABLE_DEPRECATED */
 
 /* message manipulation */
-void		camel_folder_append_message	(CamelFolder *folder,
+gboolean	camel_folder_append_message	(CamelFolder *folder,
 						 CamelMimeMessage *message,
 						 const CamelMessageInfo *info,
 						 gchar **appended_uid,
@@ -331,11 +331,13 @@ CamelMimeMessage *
 		camel_folder_get_message	(CamelFolder *folder,
 						 const gchar *uid,
 						 CamelException *ex);
-void		camel_folder_sync_message	(CamelFolder *folder,
+gboolean	camel_folder_sync_message	(CamelFolder *folder,
 						 const gchar *uid,
 						 CamelException *ex);
 #define camel_folder_delete_message(folder, uid) \
-	camel_folder_set_message_flags (folder, uid, CAMEL_MESSAGE_DELETED|CAMEL_MESSAGE_SEEN, CAMEL_MESSAGE_DELETED|CAMEL_MESSAGE_SEEN)
+	(camel_folder_set_message_flags \
+	(folder, uid, CAMEL_MESSAGE_DELETED | \
+	CAMEL_MESSAGE_SEEN, CAMEL_MESSAGE_DELETED|CAMEL_MESSAGE_SEEN))
 
 GPtrArray *	camel_folder_get_uids		(CamelFolder *folder);
 void		camel_folder_free_uids		(CamelFolder *folder,
@@ -377,7 +379,7 @@ void		camel_folder_ref_message_info	(CamelFolder *folder,
 						 CamelMessageInfo *info);
 #endif
 
-void		camel_folder_transfer_messages_to
+gboolean	camel_folder_transfer_messages_to
 						(CamelFolder *source,
 						 GPtrArray *uids,
 						 CamelFolder *dest,
@@ -398,7 +400,6 @@ gint		camel_folder_get_frozen_count	(CamelFolder *folder);
 /* quota support */
 CamelFolderQuotaInfo *
 		camel_folder_get_quota_info	(CamelFolder *folder);
-
 CamelFolderQuotaInfo *
 		camel_folder_quota_info_new	(const gchar *name,
 						 guint64 used,
diff --git a/camel/camel-offline-folder.c b/camel/camel-offline-folder.c
index f17eded..5415aef 100644
--- a/camel/camel-offline-folder.c
+++ b/camel/camel-offline-folder.c
@@ -179,7 +179,7 @@ offline_folder_setv (CamelObject *object,
 	return ((CamelObjectClass *) camel_offline_folder_parent_class)->setv (object, ex, args);
 }
 
-static void
+static gboolean
 offline_folder_downsync (CamelOfflineFolder *offline,
                          const gchar *expression,
                          CamelException *ex)
@@ -219,6 +219,8 @@ done:
 		camel_folder_free_uids(folder, uncached_uids);
 
 	camel_operation_end (NULL);
+
+	return TRUE;
 }
 
 static void
@@ -278,18 +280,20 @@ camel_offline_folder_get_type (void)
  *
  * Syncs messages in @offline described by the search @expression to
  * the local machine for offline availability.
+ *
+ * Returns: %TRUE on success, %FALSE on failure
  **/
-void
+gboolean
 camel_offline_folder_downsync (CamelOfflineFolder *offline,
                                const gchar *expression,
                                CamelException *ex)
 {
 	CamelOfflineFolderClass *class;
 
-	g_return_if_fail (CAMEL_IS_OFFLINE_FOLDER (offline));
+	g_return_val_if_fail (CAMEL_IS_OFFLINE_FOLDER (offline), FALSE);
 
 	class = CAMEL_OFFLINE_FOLDER_GET_CLASS (offline);
-	g_return_if_fail (class->downsync != NULL);
+	g_return_val_if_fail (class->downsync != NULL, FALSE);
 
-	class->downsync (offline, expression, ex);
+	return class->downsync (offline, expression, ex);
 }
diff --git a/camel/camel-offline-folder.h b/camel/camel-offline-folder.h
index cabeff1..1b5b621 100644
--- a/camel/camel-offline-folder.h
+++ b/camel/camel-offline-folder.h
@@ -59,12 +59,12 @@ struct _CamelOfflineFolder {
 struct _CamelOfflineFolderClass {
 	CamelFolderClass parent_class;
 
-	void (* downsync) (CamelOfflineFolder *folder, const gchar *expression, CamelException *ex);
+	gboolean (* downsync) (CamelOfflineFolder *folder, const gchar *expression, CamelException *ex);
 };
 
 CamelType camel_offline_folder_get_type (void);
 
-void camel_offline_folder_downsync (CamelOfflineFolder *offline, const gchar *expression, CamelException *ex);
+gboolean camel_offline_folder_downsync (CamelOfflineFolder *offline, const gchar *expression, CamelException *ex);
 
 G_END_DECLS
 
diff --git a/camel/camel-offline-store.c b/camel/camel-offline-store.c
index 3e11bf1..f18c336 100644
--- a/camel/camel-offline-store.c
+++ b/camel/camel-offline-store.c
@@ -33,7 +33,7 @@
 
 static gpointer camel_offline_store_parent_class;
 
-static void
+static gboolean
 offline_store_construct (CamelService *service,
                          CamelSession *session,
                          CamelProvider *provider,
@@ -45,13 +45,14 @@ offline_store_construct (CamelService *service,
 
 	/* Chain up to parent's construct() method. */
 	service_class = CAMEL_SERVICE_CLASS (camel_offline_store_parent_class);
-	service_class->construct (service, session, provider, url, ex);
-	if (camel_exception_is_set (ex))
-		return;
+	if (!service_class->construct (service, session, provider, url, ex))
+		return FALSE;
 
 	store->state = camel_session_is_online (session) ?
 		CAMEL_OFFLINE_STORE_NETWORK_AVAIL :
 		CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL;
+
+	return TRUE;
 }
 
 static void
@@ -116,7 +117,7 @@ camel_offline_store_get_network_state (CamelOfflineStore *store,
  * Set the network state to either #CAMEL_OFFLINE_STORE_NETWORK_AVAIL
  * or #CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL.
  **/
-void
+gboolean
 camel_offline_store_set_network_state (CamelOfflineStore *store,
                                        gint state,
                                        CamelException *ex)
@@ -126,7 +127,7 @@ camel_offline_store_set_network_state (CamelOfflineStore *store,
 	gboolean network_state = camel_session_get_network_state (service->session);
 
 	if (store->state == state)
-		return;
+		return TRUE;
 
 	camel_exception_init (&lex);
 	if (store->state == CAMEL_OFFLINE_STORE_NETWORK_AVAIL) {
@@ -160,17 +161,19 @@ camel_offline_store_set_network_state (CamelOfflineStore *store,
 		}
 
 		if (!camel_service_disconnect (CAMEL_SERVICE (store), network_state, ex))
-			return;
+			return FALSE;
 	} else {
 		store->state = state;
 		/* network unavailable -> network available */
 		if (!camel_service_connect (CAMEL_SERVICE (store), ex)) {
 			store->state = CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL;
-			return;
+			return FALSE;
 		}
 	}
 
 	store->state = state;
+
+	return TRUE;
 }
 
 /**
@@ -178,7 +181,7 @@ camel_offline_store_set_network_state (CamelOfflineStore *store,
  *
  * Since: 2.22
  **/
-void
+gboolean
 camel_offline_store_prepare_for_offline (CamelOfflineStore *store,
                                          CamelException *ex)
 {
@@ -213,6 +216,7 @@ camel_offline_store_prepare_for_offline (CamelOfflineStore *store,
 
 		camel_store_sync (CAMEL_STORE (store), FALSE, &lex);
 		camel_exception_clear (&lex);
-
 	}
+
+	return TRUE;
 }
diff --git a/camel/camel-offline-store.h b/camel/camel-offline-store.h
index 6c6c051..33449d6 100644
--- a/camel/camel-offline-store.h
+++ b/camel/camel-offline-store.h
@@ -59,15 +59,15 @@ struct _CamelOfflineStore {
 struct _CamelOfflineStoreClass {
 	CamelStoreClass parent_class;
 
-	void (* set_network_state) (CamelOfflineStore *store, gint state, CamelException *ex);
+	gboolean (* set_network_state) (CamelOfflineStore *store, gint state, CamelException *ex);
 };
 
 CamelType camel_offline_store_get_type (void);
 
-void camel_offline_store_set_network_state (CamelOfflineStore *store, gint state, CamelException *ex);
+gboolean camel_offline_store_set_network_state (CamelOfflineStore *store, gint state, CamelException *ex);
 gint camel_offline_store_get_network_state (CamelOfflineStore *store, CamelException *ex);
 
-void camel_offline_store_prepare_for_offline (CamelOfflineStore *store, CamelException *ex);
+gboolean camel_offline_store_prepare_for_offline (CamelOfflineStore *store, CamelException *ex);
 
 G_END_DECLS
 
diff --git a/camel/camel-partition-table.c b/camel/camel-partition-table.c
index 62444df..938d3de 100644
--- a/camel/camel-partition-table.c
+++ b/camel/camel-partition-table.c
@@ -309,7 +309,9 @@ camel_key_t camel_partition_table_lookup(CamelPartitionTable *cpi, const gchar *
 	return keyid;
 }
 
-void camel_partition_table_remove(CamelPartitionTable *cpi, const gchar *key)
+gboolean
+camel_partition_table_remove (CamelPartitionTable *cpi,
+                              const gchar *key)
 {
 	CamelPartitionKeyBlock *pkb;
 	CamelPartitionMapBlock *ptb;
@@ -324,13 +326,13 @@ void camel_partition_table_remove(CamelPartitionTable *cpi, const gchar *key)
 	ptblock = find_partition(cpi, hashid, &index);
 	if (ptblock == NULL) {
 		CAMEL_PARTITION_TABLE_UNLOCK(cpi, lock);
-		return;
+		return TRUE;
 	}
 	ptb = (CamelPartitionMapBlock *)&ptblock->data;
 	block = camel_block_file_get_block(cpi->blocks, ptb->partition[index].blockid);
 	if (block == NULL) {
 		CAMEL_PARTITION_TABLE_UNLOCK(cpi, lock);
-		return;
+		return FALSE;
 	}
 	pkb = (CamelPartitionKeyBlock *)&block->data;
 
@@ -354,6 +356,8 @@ void camel_partition_table_remove(CamelPartitionTable *cpi, const gchar *key)
 	CAMEL_PARTITION_TABLE_UNLOCK(cpi, lock);
 
 	camel_block_file_unref_block(cpi->blocks, block);
+
+	return TRUE;
 }
 
 static gint
@@ -771,23 +775,24 @@ fail:
 	return keyid;
 }
 
-void
-camel_key_table_set_data(CamelKeyTable *ki, camel_key_t keyid, camel_block_t data)
+gboolean
+camel_key_table_set_data (CamelKeyTable *ki,
+                          camel_key_t keyid,
+                          camel_block_t data)
 {
 	CamelBlock *bl;
 	camel_block_t blockid;
 	gint index;
 	CamelKeyBlock *kb;
 
-	if (keyid == 0)
-		return;
+	g_return_val_if_fail (keyid != 0, FALSE);
 
 	blockid =  keyid & (~(CAMEL_BLOCK_SIZE-1));
 	index = keyid & (CAMEL_BLOCK_SIZE-1);
 
 	bl = camel_block_file_get_block(ki->blocks, blockid);
 	if (bl == NULL)
-		return;
+		return FALSE;
 	kb = (CamelKeyBlock *)&bl->data;
 
 	CAMEL_KEY_TABLE_LOCK(ki, lock);
@@ -800,10 +805,15 @@ camel_key_table_set_data(CamelKeyTable *ki, camel_key_t keyid, camel_block_t dat
 	CAMEL_KEY_TABLE_UNLOCK(ki, lock);
 
 	camel_block_file_unref_block(ki->blocks, bl);
+
+	return TRUE;
 }
 
-void
-camel_key_table_set_flags(CamelKeyTable *ki, camel_key_t keyid, guint flags, guint set)
+gboolean
+camel_key_table_set_flags (CamelKeyTable *ki,
+                           camel_key_t keyid,
+                           guint flags,
+                           guint set)
 {
 	CamelBlock *bl;
 	camel_block_t blockid;
@@ -811,15 +821,14 @@ camel_key_table_set_flags(CamelKeyTable *ki, camel_key_t keyid, guint flags, gui
 	CamelKeyBlock *kb;
 	guint old;
 
-	if (keyid == 0)
-		return;
+	g_return_val_if_fail (keyid != 0, FALSE);
 
 	blockid =  keyid & (~(CAMEL_BLOCK_SIZE-1));
 	index = keyid & (CAMEL_BLOCK_SIZE-1);
 
 	bl = camel_block_file_get_block(ki->blocks, blockid);
 	if (bl == NULL)
-		return;
+		return FALSE;
 	kb = (CamelKeyBlock *)&bl->data;
 
 #if 0
@@ -828,7 +837,7 @@ camel_key_table_set_flags(CamelKeyTable *ki, camel_key_t keyid, guint flags, gui
 #else
 	if (kb->used >=127 || index >= kb->used) {
 		g_warning("Block %x: Invalid index or content: index %d used %d\n", blockid, index, kb->used);
-		return;
+		return FALSE;
 	}
 #endif
 
@@ -843,6 +852,8 @@ camel_key_table_set_flags(CamelKeyTable *ki, camel_key_t keyid, guint flags, gui
 	CAMEL_KEY_TABLE_UNLOCK(ki, lock);
 
 	camel_block_file_unref_block(ki->blocks, bl);
+
+	return TRUE;
 }
 
 camel_block_t
diff --git a/camel/camel-partition-table.h b/camel/camel-partition-table.h
index 81b6ca0..5f33c04 100644
--- a/camel/camel-partition-table.h
+++ b/camel/camel-partition-table.h
@@ -96,7 +96,7 @@ gint		camel_partition_table_add	(CamelPartitionTable *cpi,
 						 camel_key_t keyid);
 camel_key_t	camel_partition_table_lookup	(CamelPartitionTable *cpi,
 						 const gchar *key);
-void		camel_partition_table_remove	(CamelPartitionTable *cpi,
+gboolean	camel_partition_table_remove	(CamelPartitionTable *cpi,
 						 const gchar *key);
 
 /* ********************************************************************** */
@@ -157,10 +157,10 @@ camel_key_t	camel_key_table_add		(CamelKeyTable *ki,
 						 const gchar *key,
 						 camel_block_t data,
 						 guint flags);
-void		camel_key_table_set_data	(CamelKeyTable *ki,
+gboolean	camel_key_table_set_data	(CamelKeyTable *ki,
 						 camel_key_t keyid,
 						 camel_block_t data);
-void		camel_key_table_set_flags	(CamelKeyTable *ki,
+gboolean	camel_key_table_set_flags	(CamelKeyTable *ki,
 						 camel_key_t keyid,
 						 guint flags,
 						 guint set);
diff --git a/camel/camel-provider.c b/camel/camel-provider.c
index 506da13..1ee190f 100644
--- a/camel/camel-provider.c
+++ b/camel/camel-provider.c
@@ -171,8 +171,10 @@ camel_provider_init (void)
  * Loads the provider at @path, and calls its initialization function,
  * passing @session as an argument. The provider should then register
  * itself with @session.
+ *
+ * Returns: %TRUE on success, %FALSE on failure
  **/
-void
+gboolean
 camel_provider_load (const gchar *path,
                      CamelException *ex)
 {
@@ -186,7 +188,7 @@ camel_provider_load (const gchar *path,
 			ex, CAMEL_EXCEPTION_SYSTEM,
 			_("Could not load %s: Module loading "
 			  "not supported on this system."), path);
-		return;
+		return FALSE;
 	}
 
 	module = g_module_open (path, G_MODULE_BIND_LAZY);
@@ -195,7 +197,7 @@ camel_provider_load (const gchar *path,
 			ex, CAMEL_EXCEPTION_SYSTEM,
 			_("Could not load %s: %s"),
 			path, g_module_error ());
-		return;
+		return FALSE;
 	}
 
 	if (!g_module_symbol (module, "camel_provider_module_init",
@@ -205,10 +207,12 @@ camel_provider_load (const gchar *path,
 			_("Could not load %s: No initialization "
 			  "code in module."), path);
 		g_module_close (module);
-		return;
+		return FALSE;
 	}
 
 	provider_module_init ();
+
+	return TRUE;
 }
 
 /**
@@ -372,8 +376,7 @@ camel_provider_get (const gchar *url_string,
 		m = g_hash_table_lookup(module_table, protocol);
 		if (m && !m->loaded) {
 			m->loaded = 1;
-			camel_provider_load(m->path, ex);
-			if (camel_exception_is_set (ex))
+			if (!camel_provider_load (m->path, ex))
 				goto fail;
 		}
 		provider = g_hash_table_lookup(provider_table, protocol);
diff --git a/camel/camel-provider.h b/camel/camel-provider.h
index 2cb8358..0316fb9 100644
--- a/camel/camel-provider.h
+++ b/camel/camel-provider.h
@@ -222,7 +222,7 @@ struct _CamelProviderModule {
 };
 
 void		camel_provider_init		(void);
-void		camel_provider_load		(const gchar *path,
+gboolean	camel_provider_load		(const gchar *path,
 						 CamelException *ex);
 void		camel_provider_register		(CamelProvider *provider);
 GList *		camel_provider_list		(gboolean load);
diff --git a/camel/camel-service.c b/camel/camel-service.c
index 2988d36..f2215ad 100644
--- a/camel/camel-service.c
+++ b/camel/camel-service.c
@@ -196,7 +196,7 @@ service_getv (CamelObject *object,
 	return CAMEL_OBJECT_CLASS (camel_service_parent_class)->getv (object, ex, args);
 }
 
-static void
+static gboolean
 service_construct (CamelService *service,
                    CamelSession *session,
                    CamelProvider *provider,
@@ -225,7 +225,7 @@ service_construct (CamelService *service,
 
 	service->status = CAMEL_SERVICE_DISCONNECTED;
 
-	return;
+	return TRUE;
 
 fail:
 	url_string = camel_url_to_string(url, CAMEL_URL_HIDE_PASSWORD);
@@ -233,6 +233,8 @@ fail:
 		ex, CAMEL_EXCEPTION_SERVICE_URL_INVALID,
 		err, url_string);
 	g_free(url_string);
+
+	return FALSE;
 }
 
 static gboolean
@@ -379,8 +381,10 @@ camel_service_get_type (void)
  * @ex: a #CamelException
  *
  * Constructs a #CamelService initialized with the given parameters.
+ *
+ * Returns: %TRUE on success, %FALSE on failure
  **/
-void
+gboolean
 camel_service_construct (CamelService *service,
                          CamelSession *session,
                          CamelProvider *provider,
@@ -389,13 +393,13 @@ camel_service_construct (CamelService *service,
 {
 	CamelServiceClass *class;
 
-	g_return_if_fail (CAMEL_IS_SERVICE (service));
-	g_return_if_fail (CAMEL_IS_SESSION (session));
+	g_return_val_if_fail (CAMEL_IS_SERVICE (service), FALSE);
+	g_return_val_if_fail (CAMEL_IS_SESSION (session), FALSE);
 
 	class = CAMEL_SERVICE_GET_CLASS (service);
-	g_return_if_fail (class->construct != NULL);
+	g_return_val_if_fail (class->construct != NULL, FALSE);
 
-	class->construct (service, session, provider, url, ex);
+	return class->construct (service, session, provider, url, ex);
 }
 
 /**
diff --git a/camel/camel-service.h b/camel/camel-service.h
index 8dff22b..3138812 100644
--- a/camel/camel-service.h
+++ b/camel/camel-service.h
@@ -90,7 +90,7 @@ struct _CamelService {
 struct _CamelServiceClass {
 	CamelObjectClass parent_class;
 
-	void		(*construct)		(CamelService *service,
+	gboolean	(*construct)		(CamelService *service,
 						 struct _CamelSession *session,
 						 CamelProvider *provider,
 						 CamelURL *url,
@@ -118,7 +118,7 @@ typedef struct {
 } CamelServiceAuthType;
 
 CamelType	camel_service_get_type		(void);
-void		camel_service_construct		(CamelService *service,
+gboolean	camel_service_construct		(CamelService *service,
 						 struct _CamelSession *session,
 						 CamelProvider *provider,
 						 CamelURL *url,
diff --git a/camel/camel-session.c b/camel/camel-session.c
index 35ac457..c72f294 100644
--- a/camel/camel-session.c
+++ b/camel/camel-session.c
@@ -542,8 +542,10 @@ camel_session_get_password (CamelSession *session,
  *
  * @service and @item identify the rejected authentication information,
  * as with #camel_session_get_password.
+ *
+ * Returns: %TRUE on success, %FALSE on failure
  **/
-void
+gboolean
 camel_session_forget_password (CamelSession *session,
                                CamelService *service,
                                const gchar *domain,
@@ -552,13 +554,13 @@ camel_session_forget_password (CamelSession *session,
 {
 	CamelSessionClass *class;
 
-	g_return_if_fail (CAMEL_IS_SESSION (session));
-	g_return_if_fail (item != NULL);
+	g_return_val_if_fail (CAMEL_IS_SESSION (session), FALSE);
+	g_return_val_if_fail (item != NULL, FALSE);
 
 	class = CAMEL_SESSION_GET_CLASS (session);
-	g_return_if_fail (class->forget_password);
+	g_return_val_if_fail (class->forget_password, FALSE);
 
-	class->forget_password (session, service, domain, item, ex);
+	return class->forget_password (session, service, domain, item, ex);
 }
 
 /**
diff --git a/camel/camel-session.h b/camel/camel-session.h
index 7f01fc3..07f9a8a 100644
--- a/camel/camel-session.h
+++ b/camel/camel-session.h
@@ -101,7 +101,7 @@ struct _CamelSessionClass {
 					      const gchar *item,
 					      guint32 flags,
 					      CamelException *ex);
-	void            (*forget_password)   (CamelSession *session,
+	gboolean        (*forget_password)   (CamelSession *session,
 					      CamelService *service,
 					      const gchar *domain,
 					      const gchar *item,
@@ -171,7 +171,7 @@ gchar *             camel_session_get_password       (CamelSession *session,
 						     const gchar *item,
 						     guint32 flags,
 						     CamelException *ex);
-void               camel_session_forget_password    (CamelSession *session,
+gboolean            camel_session_forget_password    (CamelSession *session,
 						     CamelService *service,
 						     const gchar *domain,
 						     const gchar *item,
diff --git a/camel/camel-store.c b/camel/camel-store.c
index c8f7928..31eeee1 100644
--- a/camel/camel-store.c
+++ b/camel/camel-store.c
@@ -102,7 +102,7 @@ store_finalize (CamelStore *store)
 	g_free (store->priv);
 }
 
-static void
+static gboolean
 store_construct (CamelService *service,
                  CamelSession *session,
                  CamelProvider *provider,
@@ -115,9 +115,8 @@ store_construct (CamelService *service,
 
 	/* Chain up to parent's construct() method. */
 	service_class = CAMEL_SERVICE_CLASS (camel_store_parent_class);
-	service_class->construct(service, session, provider, url, ex);
-	if (camel_exception_is_set (ex))
-		return;
+	if (!service_class->construct(service, session, provider, url, ex))
+		return FALSE;
 
 	store_db_path = g_build_filename (service->url->path, CAMEL_DB_FILE, NULL);
 
@@ -155,24 +154,26 @@ store_construct (CamelService *service,
 			g_print("Retry with %s failed\n", store_db_path);
 			g_free(store_db_path);
 			camel_exception_clear(ex);
-			return;
+			return FALSE;
 		}
 	}
 	g_free (store_db_path);
 
-	if (camel_db_create_folders_table (store->cdb_r, ex))
+	if (camel_db_create_folders_table (store->cdb_r, ex)) {
 		g_warning ("something went wrong terribly during db creation \n");
-	else {
-		d(printf ("folders table successfully created \n"));
+		return FALSE;
 	}
 
 	if (camel_exception_is_set (ex))
-		return;
+		return FALSE;
+
 	/* This is for writing to the store */
 	store->cdb_w = camel_db_clone (store->cdb_r, ex);
 
 	if (camel_url_get_param(url, "filter"))
 		store->flags |= CAMEL_STORE_FILTER_INBOX;
+
+	return TRUE;
 }
 
 static CamelFolder *
@@ -200,7 +201,7 @@ store_get_junk (CamelStore *store,
 	return store_get_special (store, CAMEL_VTRASH_FOLDER_JUNK);
 }
 
-static void
+static gboolean
 store_sync (CamelStore *store,
             gint expunge,
             CamelException *ex)
@@ -208,10 +209,11 @@ store_sync (CamelStore *store,
 	GPtrArray *folders;
 	CamelFolder *folder;
 	CamelException x;
+	gboolean success = TRUE;
 	gint i;
 
 	if (store->folders == NULL)
-		return;
+		return TRUE;
 
 	/* We don't sync any vFolders, that is used to update certain
 	 * vfolder queries mainly, and we're really only interested in
@@ -231,13 +233,15 @@ store_sync (CamelStore *store,
 	camel_exception_xfer(ex, &x);
 
 	g_ptr_array_free (folders, TRUE);
+
+	return success;
 }
 
-static void
+static gboolean
 store_noop (CamelStore *store,
             CamelException *ex)
 {
-	/* no-op */
+	return TRUE;
 }
 
 static gboolean
@@ -409,16 +413,6 @@ camel_store_get_folder (CamelStore *store,
 			camel_object_trigger_event(store, "folder_opened", folder);
 	}
 
-	if (camel_debug_start(":store")) {
-		gchar *u = camel_url_to_string(((CamelService *)store)->url, CAMEL_URL_HIDE_PASSWORD);
-
-		printf("CamelStore('%s'):get_folder('%s', %u) = %p\n", u, folder_name, flags, (gpointer) folder);
-		if (ex && ex->id)
-			printf("  failed: '%s'\n", ex->desc);
-		g_free(u);
-		camel_debug_end();
-	}
-
 	return folder;
 }
 
@@ -503,20 +497,23 @@ cs_delete_cached_folder(CamelStore *store, const gchar *folder_name)
  * @ex: a #CamelException
  *
  * Deletes the named folder. The folder must be empty.
+ *
+ * Returns: %TRUE on success, %FALSE on failure
  **/
-void
+gboolean
 camel_store_delete_folder (CamelStore *store,
                            const gchar *folder_name,
                            CamelException *ex)
 {
 	CamelStoreClass *class;
 	CamelException local;
+	gboolean success;
 
-	g_return_if_fail (CAMEL_IS_STORE (store));
-	g_return_if_fail (folder_name != NULL);
+	g_return_val_if_fail (CAMEL_IS_STORE (store), FALSE);
+	g_return_val_if_fail (folder_name != NULL, FALSE);
 
 	class = CAMEL_STORE_GET_CLASS (store);
-	g_return_if_fail (class->delete_folder != NULL);
+	g_return_val_if_fail (class->delete_folder != NULL, FALSE);
 
 	/* TODO: should probably be a parameter/bit on the storeinfo */
 	if (((store->flags & CAMEL_STORE_VTRASH) && strcmp(folder_name, CAMEL_VTRASH_NAME) == 0)
@@ -525,14 +522,14 @@ camel_store_delete_folder (CamelStore *store,
 			ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
 			_("Cannot delete folder: %s: Invalid operation"),
 			folder_name);
-		return;
+		return FALSE;
 	}
 
 	camel_exception_init(&local);
 
 	camel_store_lock (store, CS_FOLDER_LOCK);
 
-	class->delete_folder(store, folder_name, &local);
+	success = class->delete_folder(store, folder_name, &local);
 
 	/* ignore 'no such table' errors */
 	if (camel_exception_is_set (&local) && camel_exception_get_description (&local) &&
@@ -545,6 +542,8 @@ camel_store_delete_folder (CamelStore *store,
 		camel_exception_xfer(ex, &local);
 
 	camel_store_unlock (store, CS_FOLDER_LOCK);
+
+	return success;
 }
 
 /**
@@ -555,8 +554,10 @@ camel_store_delete_folder (CamelStore *store,
  * @ex: a #CamelException
  *
  * Rename a named folder to a new name.
+ *
+ * Returns: %TRUE on success, %FALSE on failure
  **/
-void
+gboolean
 camel_store_rename_folder (CamelStore *store,
                            const gchar *old_namein,
                            const gchar *new_name,
@@ -567,16 +568,17 @@ camel_store_rename_folder (CamelStore *store,
 	gint i, oldlen, namelen;
 	GPtrArray *folders = NULL;
 	gchar *old_name;
+	gboolean success;
 
-	g_return_if_fail (CAMEL_IS_STORE (store));
-	g_return_if_fail (old_namein != NULL);
-	g_return_if_fail (new_name != NULL);
+	g_return_val_if_fail (CAMEL_IS_STORE (store), FALSE);
+	g_return_val_if_fail (old_namein != NULL, FALSE);
+	g_return_val_if_fail (new_name != NULL, FALSE);
 
 	class = CAMEL_STORE_GET_CLASS (store);
-	g_return_if_fail (class->rename_folder != NULL);
+	g_return_val_if_fail (class->rename_folder != NULL, FALSE);
 
 	if (strcmp(old_namein, new_name) == 0)
-		return;
+		return TRUE;
 
 	if (((store->flags & CAMEL_STORE_VTRASH) && strcmp(old_namein, CAMEL_VTRASH_NAME) == 0)
 	    || ((store->flags & CAMEL_STORE_VJUNK) && strcmp(old_namein, CAMEL_VJUNK_NAME) == 0)) {
@@ -584,7 +586,7 @@ camel_store_rename_folder (CamelStore *store,
 			ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
 			_("Cannot rename folder: %s: Invalid operation"),
 			old_namein);
-		return;
+		return FALSE;
 	}
 
 	/* need to save this, since old_namein might be folder->full_name, which could go away */
@@ -616,11 +618,11 @@ camel_store_rename_folder (CamelStore *store,
 	}
 
 	/* Now try the real rename (will emit renamed event) */
-	class->rename_folder (store, old_name, new_name, ex);
+	success = class->rename_folder (store, old_name, new_name, ex);
 
 	/* If it worked, update all open folders/unlock them */
 	if (folders) {
-		if (!camel_exception_is_set(ex)) {
+		if (success) {
 			guint32 flags = CAMEL_STORE_FOLDER_INFO_RECURSIVE;
 			CamelRenameInfo reninfo;
 
@@ -662,6 +664,8 @@ camel_store_rename_folder (CamelStore *store,
 
 	g_ptr_array_free(folders, TRUE);
 	g_free(old_name);
+
+	return success;
 }
 
 /**
@@ -751,20 +755,22 @@ camel_store_get_junk (CamelStore *store,
  *
  * Syncs any changes that have been made to the store object and its
  * folders with the real store.
+ *
+ * Returns: %TRUE on success, %FALSE on failure
  **/
-void
+gboolean
 camel_store_sync (CamelStore *store,
                   gint expunge,
                   CamelException *ex)
 {
 	CamelStoreClass *class;
 
-	g_return_if_fail (CAMEL_IS_STORE (store));
+	g_return_val_if_fail (CAMEL_IS_STORE (store), FALSE);
 
 	class = CAMEL_STORE_GET_CLASS (store);
-	g_return_if_fail (class->sync != NULL);
+	g_return_val_if_fail (class->sync != NULL, FALSE);
 
-	class->sync (store, expunge, ex);
+	return class->sync (store, expunge, ex);
 }
 
 static void
@@ -1231,24 +1237,29 @@ camel_store_folder_subscribed (CamelStore *store,
  * @ex: a #CamelException
  *
  * Subscribe to the folder described by @folder_name.
+ *
+ * Returns: %TRUE on success, %FALSE on failure
  **/
-void
+gboolean
 camel_store_subscribe_folder (CamelStore *store,
                               const gchar *folder_name,
                               CamelException *ex)
 {
 	CamelStoreClass *class;
+	gboolean success;
 
-	g_return_if_fail (CAMEL_IS_STORE (store));
-	g_return_if_fail (folder_name != NULL);
-	g_return_if_fail (store->flags & CAMEL_STORE_SUBSCRIPTIONS);
+	g_return_val_if_fail (CAMEL_IS_STORE (store), FALSE);
+	g_return_val_if_fail (folder_name != NULL, FALSE);
+	g_return_val_if_fail (store->flags & CAMEL_STORE_SUBSCRIPTIONS, FALSE);
 
 	class = CAMEL_STORE_GET_CLASS (store);
-	g_return_if_fail (class->subscribe_folder != NULL);
+	g_return_val_if_fail (class->subscribe_folder != NULL, FALSE);
 
 	camel_store_lock (store, CS_FOLDER_LOCK);
-	class->subscribe_folder (store, folder_name, ex);
+	success = class->subscribe_folder (store, folder_name, ex);
 	camel_store_unlock (store, CS_FOLDER_LOCK);
+
+	return success;
 }
 
 /**
@@ -1258,34 +1269,34 @@ camel_store_subscribe_folder (CamelStore *store,
  * @ex: a #CamelException
  *
  * Unsubscribe from the folder described by @folder_name.
+ *
+ * Returns: %TRUE on success, %FALSE on failure
  **/
-void
+gboolean
 camel_store_unsubscribe_folder (CamelStore *store,
                                 const gchar *folder_name,
                                 CamelException *ex)
 {
 	CamelStoreClass *class;
-	CamelException local;
+	gboolean success;
 
-	g_return_if_fail (CAMEL_IS_STORE (store));
-	g_return_if_fail (folder_name != NULL);
-	g_return_if_fail (store->flags & CAMEL_STORE_SUBSCRIPTIONS);
+	g_return_val_if_fail (CAMEL_IS_STORE (store), FALSE);
+	g_return_val_if_fail (folder_name != NULL, FALSE);
+	g_return_val_if_fail (store->flags & CAMEL_STORE_SUBSCRIPTIONS, FALSE);
 
 	class = CAMEL_STORE_GET_CLASS (store);
-	g_return_if_fail (class->unsubscribe_folder != NULL);
-
-	camel_exception_init (&local);
+	g_return_val_if_fail (class->unsubscribe_folder != NULL, FALSE);
 
 	camel_store_lock (store, CS_FOLDER_LOCK);
 
-	class->unsubscribe_folder (store, folder_name, ex);
+	success = class->unsubscribe_folder (store, folder_name, ex);
 
-	if (!camel_exception_is_set (&local))
+	if (success)
 		cs_delete_cached_folder (store, folder_name);
-	else
-		camel_exception_xfer (ex, &local);
 
 	camel_store_unlock (store, CS_FOLDER_LOCK);
+
+	return success;
 }
 
 /**
@@ -1294,19 +1305,21 @@ camel_store_unsubscribe_folder (CamelStore *store,
  * @ex: a #CamelException
  *
  * Pings @store so that its connection doesn't timeout.
+ *
+ * Returns: %TRUE on success, %FALSE on failure
  **/
-void
+gboolean
 camel_store_noop (CamelStore *store,
                   CamelException *ex)
 {
 	CamelStoreClass *class;
 
-	g_return_if_fail (CAMEL_IS_STORE (store));
+	g_return_val_if_fail (CAMEL_IS_STORE (store), FALSE);
 
 	class = CAMEL_STORE_GET_CLASS (store);
-	g_return_if_fail (class->noop != NULL);
+	g_return_val_if_fail (class->noop != NULL, FALSE);
 
-	class->noop (store, ex);
+	return class->noop (store, ex);
 }
 
 /**
diff --git a/camel/camel-store.h b/camel/camel-store.h
index 944fc17..94758a2 100644
--- a/camel/camel-store.h
+++ b/camel/camel-store.h
@@ -203,14 +203,14 @@ struct _CamelStoreClass {
 						 const gchar *parent_name,
 						 const gchar *folder_name,
 						 CamelException *ex);
-	void		(*delete_folder)	(CamelStore *store,
+	gboolean	(*delete_folder)	(CamelStore *store,
 						 const gchar *folder_name,
 						 CamelException *ex);
-	void		(*rename_folder)	(CamelStore *store,
+	gboolean	(*rename_folder)	(CamelStore *store,
 						 const gchar *old_name,
 						 const gchar *new_name,
 						 CamelException *ex);
-	void		(*sync)			(CamelStore *store,
+	gboolean	(*sync)			(CamelStore *store,
 						 gint expunge,
 						 CamelException *ex);
 	CamelFolderInfo *
@@ -222,13 +222,13 @@ struct _CamelStoreClass {
 						 CamelFolderInfo *fi);
 	gboolean	(*folder_subscribed)	(CamelStore *store,
 						 const gchar *folder_name);
-	void		(*subscribe_folder)	(CamelStore *store,
+	gboolean	(*subscribe_folder)	(CamelStore *store,
 						 const gchar *folder_name,
 						 CamelException *ex);
-	void		(*unsubscribe_folder)	(CamelStore *store,
+	gboolean	(*unsubscribe_folder)	(CamelStore *store,
 						 const gchar *folder_name,
 						 CamelException *ex);
-	void		(*noop)			(CamelStore *store,
+	gboolean	(*noop)			(CamelStore *store,
 						 CamelException *ex);
 	gboolean	(*can_refresh_folder)	(CamelStore *store,
 						 CamelFolderInfo *info,
@@ -251,14 +251,14 @@ CamelFolderInfo *
 						 const gchar *parent_name,
 						 const gchar *folder_name,
 						 CamelException *ex);
-void		camel_store_delete_folder	(CamelStore *store,
+gboolean	camel_store_delete_folder	(CamelStore *store,
 						 const gchar *folder_name,
 						 CamelException *ex);
-void		camel_store_rename_folder	(CamelStore *store,
+gboolean	camel_store_rename_folder	(CamelStore *store,
 						 const gchar *old_namein,
 						 const gchar *new_name,
 						 CamelException *ex);
-void		camel_store_sync		(CamelStore *store,
+gboolean	camel_store_sync		(CamelStore *store,
 						 gint expunge,
 						 CamelException *ex);
 CamelFolderInfo *
@@ -277,7 +277,8 @@ CamelFolderInfo *
 		camel_folder_info_new		(void);
 void		camel_folder_info_free		(CamelFolderInfo *fi);
 #ifndef CAMEL_DISABLE_DEPRECATED
-CamelFolderInfo *camel_folder_info_build	(GPtrArray *folders,
+CamelFolderInfo *
+		camel_folder_info_build		(GPtrArray *folders,
 						 const gchar *namespace,
 						 gchar separator,
 						 gboolean short_names);
@@ -288,13 +289,13 @@ gboolean	camel_store_supports_subscriptions
 						(CamelStore *store);
 gboolean	camel_store_folder_subscribed	(CamelStore *store,
 						 const gchar *folder_name);
-void		camel_store_subscribe_folder	(CamelStore *store,
+gboolean	camel_store_subscribe_folder	(CamelStore *store,
 						 const gchar *folder_name,
 						 CamelException *ex);
-void		camel_store_unsubscribe_folder	(CamelStore *store,
+gboolean	camel_store_unsubscribe_folder	(CamelStore *store,
 						 const gchar *folder_name,
 						 CamelException *ex);
-void		camel_store_noop		(CamelStore *store,
+gboolean	camel_store_noop		(CamelStore *store,
 						 CamelException *ex);
 gint		camel_store_folder_uri_equal	(CamelStore *store,
 						 const gchar *uri0,
diff --git a/camel/camel-vee-folder.c b/camel/camel-vee-folder.c
index 6a7a62c..c46b7e4 100644
--- a/camel/camel-vee-folder.c
+++ b/camel/camel-vee-folder.c
@@ -56,444 +56,657 @@ struct _CamelVeeFolderPrivate {
 	gint unread_vfolder;
 };
 
-#define _PRIVATE(o) (((CamelVeeFolder *)(o))->priv)
+#define CAMEL_VEE_FOLDER_GET_PRIVATE(o) (((CamelVeeFolder *)(o))->priv)
 
-#if 0
-static void vee_refresh_info (CamelFolder *folder, CamelException *ex);
-
-static void vee_sync (CamelFolder *folder, gboolean expunge, CamelException *ex);
-static void vee_expunge (CamelFolder *folder, CamelException *ex);
+static gpointer camel_vee_folder_parent_class;
 
-static void vee_freeze (CamelFolder *folder);
-static void vee_thaw (CamelFolder *folder);
+struct _update_data {
+	CamelFolder *source;
+	CamelVeeFolder *vee_folder;
+	gchar hash[8];
+	CamelVeeFolder *folder_unmatched;
+	GHashTable *unmatched_uids;
+	gboolean rebuilt, correlating;
+};
 
-static CamelMimeMessage *vee_get_message (CamelFolder *folder, const gchar *uid, CamelException *ex);
-static void vee_append_message (CamelFolder *folder, CamelMimeMessage *message, const CamelMessageInfo *info, gchar **appended_uid, CamelException *ex);
-static void vee_transfer_messages_to (CamelFolder *source, GPtrArray *uids, CamelFolder *dest, GPtrArray **transferred_uids, gboolean delete_originals, CamelException *ex);
+struct _folder_changed_msg {
+	CamelSessionThreadMsg msg;
+	CamelFolderChangeInfo *changes;
+	CamelFolder *sub;
+	CamelVeeFolder *vee_folder;
+};
 
-static guint32 vee_count_by_expression (CamelFolder *folder, const gchar *expression, CamelException *ex);
-static GPtrArray *vee_search_by_expression (CamelFolder *folder, const gchar *expression, CamelException *ex);
-static GPtrArray *vee_search_by_uids (CamelFolder *folder, const gchar *expression, GPtrArray *uids, CamelException *ex);
+/* must be called with summary_lock held */
+static CamelVeeMessageInfo *
+vee_folder_add_uid (CamelVeeFolder *vf,
+                    CamelFolder *f,
+                    const gchar *inuid,
+                    const gchar hash[8])
+{
+	CamelVeeMessageInfo *mi = NULL;
 
-static void vee_rename (CamelFolder *folder, const gchar *new);
-#endif
+	mi = camel_vee_summary_add ((CamelVeeSummary *)((CamelFolder *)vf)->summary, f->summary, (gchar *)inuid, hash);
+	return mi;
+}
 
-static void camel_vee_folder_class_init (CamelVeeFolderClass *klass);
-static void camel_vee_folder_init       (CamelVeeFolder *obj);
-static void camel_vee_folder_finalize   (CamelObject *obj);
+/* same as vee_folder_add_uid, only returns whether uid was added or not */
+static gboolean
+vee_folder_add_uid_test (CamelVeeFolder *vf,
+                         CamelFolder *f,
+                         const gchar *inuid,
+                         const gchar hash[8])
+{
+	CamelVeeMessageInfo *mi;
 
-static gint vee_rebuild_folder (CamelVeeFolder *vf, CamelFolder *source, CamelException *ex);
-static void vee_folder_remove_folder (CamelVeeFolder *vf, CamelFolder *source);
+	mi = vee_folder_add_uid (vf, f, inuid, hash);
 
-static void folder_changed (CamelFolder *sub, CamelFolderChangeInfo *changes, CamelVeeFolder *vf);
-static void subfolder_deleted (CamelFolder *f, gpointer event_data, CamelVeeFolder *vf);
-static void folder_renamed (CamelFolder *f, const gchar *old, CamelVeeFolder *vf);
+	if (mi != NULL)
+		camel_message_info_free ((CamelMessageInfo *) mi);
 
-static CamelFolderClass *camel_vee_folder_parent;
+	return mi != NULL;
+}
 
-CamelType
-camel_vee_folder_get_type (void)
+/* A "correlating" expression has the property that whether a message matches
+ * depends on the other messages being searched.  folder_changed_change on a
+ * vfolder with a correlating expression may not make all the necessary updates,
+ * so the query is redone on the entire changed source folder the next time
+ * the vfolder is opened.
+ *
+ * The only current example of a correlating expression is one that uses
+ * "match-threads". */
+static gboolean
+expression_is_correlating (const gchar *expr)
 {
-	static CamelType type = CAMEL_INVALID_TYPE;
-
-	if (type == CAMEL_INVALID_TYPE) {
-		type = camel_type_register (camel_folder_get_type (), "CamelVeeFolder",
-					    sizeof (CamelVeeFolder),
-					    sizeof (CamelVeeFolderClass),
-					    (CamelObjectClassInitFunc) camel_vee_folder_class_init,
-					    NULL,
-					    (CamelObjectInitFunc) camel_vee_folder_init,
-					    (CamelObjectFinalizeFunc) camel_vee_folder_finalize);
-	}
-
-	return type;
+	/* XXX: Actually parse the expression to avoid triggering on
+	 * "match-threads" in the text the user is searching for! */
+	return (strstr (expr, "match-threads") != NULL);
 }
 
-void
-camel_vee_folder_construct (CamelVeeFolder *vf, CamelStore *parent_store, const gchar *full, const gchar *name, guint32 flags)
+/* Hold all these with summary lock and unmatched summary lock held */
+static void
+folder_changed_add_uid (CamelFolder *sub, const gchar *uid, const gchar hash[8], CamelVeeFolder *vf, gboolean use_db)
 {
 	CamelFolder *folder = (CamelFolder *)vf;
+	CamelVeeMessageInfo *vinfo;
+	const gchar *vuid;
+	gchar *oldkey;
+	gpointer oldval;
+	gint n;
+	CamelVeeFolder *folder_unmatched = vf->parent_vee_store ? vf->parent_vee_store->folder_unmatched : NULL;
+	GHashTable *unmatched_uids = vf->parent_vee_store ? vf->parent_vee_store->unmatched_uids : NULL;
 
-	vf->flags = flags;
-	camel_folder_construct (folder, parent_store, full, name);
+	vinfo = vee_folder_add_uid (vf, sub, uid, hash);
+	if (vinfo == NULL)
+		return;
 
-	folder->summary = camel_vee_summary_new (folder);
+	vuid = camel_pstring_strdup (camel_message_info_uid (vinfo));
+	camel_message_info_free ((CamelMessageInfo *) vinfo);
+	if (use_db) {
+		CamelException ex = CAMEL_EXCEPTION_INITIALISER;
+		camel_db_add_to_vfolder_transaction (folder->parent_store->cdb_w, folder->full_name, vuid, &ex);
+		camel_exception_clear (&ex);
+	}
+	camel_folder_change_info_add_uid (vf->changes,  vuid);
+	if ((vf->flags & CAMEL_STORE_FOLDER_PRIVATE) == 0 && !CAMEL_IS_VEE_FOLDER (sub) && folder_unmatched != NULL) {
+		if (g_hash_table_lookup_extended (unmatched_uids, vuid, (gpointer *)&oldkey, &oldval)) {
+			n = GPOINTER_TO_INT (oldval);
+			g_hash_table_insert (unmatched_uids, oldkey, GINT_TO_POINTER (n+1));
+		} else {
+			g_hash_table_insert (unmatched_uids, g_strdup (vuid), GINT_TO_POINTER (1));
+		}
+		vinfo = (CamelVeeMessageInfo *)camel_folder_get_message_info ((CamelFolder *)folder_unmatched, vuid);
+		if (vinfo) {
+			CamelException ex = CAMEL_EXCEPTION_INITIALISER;
+			camel_folder_change_info_remove_uid (folder_unmatched->changes, vuid);
+			camel_db_delete_uid_from_vfolder_transaction (folder->parent_store->cdb_w, ((CamelFolder *)folder_unmatched)->full_name, vuid, &ex);
+			camel_folder_summary_remove_uid_fast (((CamelFolder *)folder_unmatched)->summary, vuid);
+			camel_folder_free_message_info ((CamelFolder *)folder_unmatched, (CamelMessageInfo *)vinfo);
+			camel_exception_clear (&ex);
+		}
+	}
 
-	if (CAMEL_IS_VEE_STORE (parent_store))
-		vf->parent_vee_store = (CamelVeeStore *)parent_store;
+	camel_pstring_free (vuid);
 }
 
-/**
- * camel_vee_folder_new:
- * @parent_store: the parent CamelVeeStore
- * @full: the full path to the vfolder.
- * @flags: flags of some kind
- *
- * Create a new CamelVeeFolder object.
- *
- * Returns: A new CamelVeeFolder widget.
- **/
-CamelFolder *
-camel_vee_folder_new (CamelStore *parent_store, const gchar *full, guint32 flags)
+static void
+folder_changed_remove_uid (CamelFolder *sub, const gchar *uid, const gchar hash[8], gint keep, CamelVeeFolder *vf, gboolean use_db)
 {
-	CamelVeeFolder *vf;
-	gchar *tmp;
+	CamelFolder *folder = (CamelFolder *)vf;
+	gchar *vuid, *oldkey;
+	gpointer oldval;
+	gint n;
+	CamelVeeMessageInfo *vinfo;
+	CamelVeeFolder *folder_unmatched = vf->parent_vee_store ? vf->parent_vee_store->folder_unmatched : NULL;
+	GHashTable *unmatched_uids = vf->parent_vee_store ? vf->parent_vee_store->unmatched_uids : NULL;
 
-	if (CAMEL_IS_VEE_STORE (parent_store) && strcmp (full, CAMEL_UNMATCHED_NAME) == 0) {
-		vf = ((CamelVeeStore *)parent_store)->folder_unmatched;
-		camel_object_ref (vf);
-	} else {
-		const gchar *name = strrchr (full, '/');
+	vuid = alloca (strlen (uid)+9);
+	memcpy (vuid, hash, 8);
+	strcpy (vuid+8, uid);
 
-		if (name == NULL)
-			name = full;
-		else
-			name++;
-		vf = (CamelVeeFolder *)camel_object_new (camel_vee_folder_get_type ());
-		camel_vee_folder_construct (vf, parent_store, full, name, flags);
+	camel_folder_change_info_remove_uid (vf->changes, vuid);
+	if (use_db) {
+		/* FIXME[disk-summary] Handle exception */
+		CamelException ex = CAMEL_EXCEPTION_INITIALISER;
+		camel_db_delete_uid_from_vfolder_transaction (
+			folder->parent_store->cdb_w,
+			folder->full_name, vuid, &ex);
+		camel_exception_clear (&ex);
 	}
+	camel_folder_summary_remove_uid_fast (folder->summary, vuid);
 
-	d (printf ("returning folder %s %p, count = %d\n", full, vf, camel_folder_get_message_count ((CamelFolder *)vf)));
+	if ((vf->flags & CAMEL_STORE_FOLDER_PRIVATE) == 0 && !CAMEL_IS_VEE_FOLDER (sub) && folder_unmatched != NULL) {
+		if (keep) {
+			if (g_hash_table_lookup_extended (unmatched_uids, vuid, (gpointer *)&oldkey, &oldval)) {
+				n = GPOINTER_TO_INT (oldval);
+				if (n == 1) {
+					g_hash_table_remove (unmatched_uids, oldkey);
+					if (vee_folder_add_uid_test (folder_unmatched, sub, uid, hash))
+						camel_folder_change_info_add_uid (folder_unmatched->changes, oldkey);
+					g_free (oldkey);
+				} else {
+					g_hash_table_insert (unmatched_uids, oldkey, GINT_TO_POINTER (n-1));
+				}
+			} else {
+				if (vee_folder_add_uid_test (folder_unmatched, sub, uid, hash))
+					camel_folder_change_info_add_uid (folder_unmatched->changes, oldkey);
+			}
+		} else {
+			if (g_hash_table_lookup_extended (unmatched_uids, vuid, (gpointer *)&oldkey, &oldval)) {
+				g_hash_table_remove (unmatched_uids, oldkey);
+				g_free (oldkey);
+			}
 
-	if (vf) {
-		tmp = g_strdup_printf ("%s/%s.cmeta", ((CamelService *)parent_store)->url->path, full);
-		camel_object_set (vf, NULL, CAMEL_OBJECT_STATE_FILE, tmp, NULL);
-		g_free (tmp);
-		if (camel_object_state_read (vf) == -1) {
-			/* setup defaults: we have none currently */
+			vinfo = (CamelVeeMessageInfo *)camel_folder_get_message_info ((CamelFolder *)folder_unmatched, vuid);
+			if (vinfo) {
+				CamelException ex = CAMEL_EXCEPTION_INITIALISER;
+				camel_folder_change_info_remove_uid (folder_unmatched->changes, vuid);
+				camel_db_delete_uid_from_vfolder_transaction (folder->parent_store->cdb_w, ((CamelFolder *)folder_unmatched)->full_name, vuid, &ex);
+				camel_folder_summary_remove_uid_fast (((CamelFolder *)folder_unmatched)->summary, vuid);
+				camel_folder_free_message_info ((CamelFolder *)folder_unmatched, (CamelMessageInfo *)vinfo);
+				camel_exception_clear (&ex);
+			}
 		}
 	}
-	return (CamelFolder *)vf;
-}
-
-void
-camel_vee_folder_set_expression (CamelVeeFolder *vf, const gchar *query)
-{
-	((CamelVeeFolderClass *)((CamelObject *)vf)->klass)->set_expression (vf, query);
 }
 
-/**
- * camel_vee_folder_add_folder:
- * @vf: Virtual Folder object
- * @sub: source CamelFolder to add to @vf
- *
- * Adds @sub as a source folder to @vf.
- **/
-void
-camel_vee_folder_add_folder (CamelVeeFolder *vf, CamelFolder *sub)
+static void
+folder_changed_change_uid (CamelFolder *sub, const gchar *uid, const gchar hash[8], CamelVeeFolder *vf, gboolean use_db)
 {
-	struct _CamelVeeFolderPrivate *p = _PRIVATE (vf);
-	gint i;
+	gchar *vuid;
+	CamelVeeMessageInfo *vinfo, *uinfo = NULL;
+	CamelMessageInfo *info;
+	CamelFolder *folder = (CamelFolder *)vf;
 	CamelVeeFolder *folder_unmatched = vf->parent_vee_store ? vf->parent_vee_store->folder_unmatched : NULL;
 
-	if (vf == (CamelVeeFolder *)sub) {
-		g_warning ("Adding a virtual folder to itself as source, ignored");
-		return;
-	}
+	vuid = alloca (strlen (uid)+9);
+	memcpy (vuid, hash, 8);
+	strcpy (vuid+8, uid);
 
-	camel_vee_folder_lock (vf, CVF_SUBFOLDER_LOCK);
+	vinfo = (CamelVeeMessageInfo *)camel_folder_summary_uid (folder->summary, vuid);
+	if (folder_unmatched != NULL)
+		uinfo = (CamelVeeMessageInfo *)camel_folder_summary_uid (((CamelFolder *)folder_unmatched)->summary, vuid);
+	if (vinfo || uinfo) {
+		info = camel_folder_get_message_info (sub, uid);
+		if (info) {
+			if (vinfo) {
+				camel_folder_change_info_change_uid (vf->changes, vuid);
+				camel_message_info_free ((CamelMessageInfo *)vinfo);
+			}
 
-	/* for normal vfolders we want only unique ones, for unmatched we want them all recorded */
-	if (g_list_find (p->folders, sub) == NULL) {
-		p->folders = g_list_append (
-			p->folders, camel_object_ref (sub));
+			if (uinfo) {
+				camel_folder_change_info_change_uid (folder_unmatched->changes, vuid);
+				camel_message_info_free ((CamelMessageInfo *)uinfo);
+			}
 
-		camel_folder_lock (CAMEL_FOLDER (vf), CF_CHANGE_LOCK);
+			camel_folder_free_message_info (sub, info);
+		} else {
+			if (vinfo) {
+				folder_changed_remove_uid (sub, uid, hash, FALSE, vf, use_db);
+				camel_message_info_free ((CamelMessageInfo *)vinfo);
+			}
+			if (uinfo)
+				camel_message_info_free ((CamelMessageInfo *)uinfo);
+		}
+	}
+}
 
-		/* update the freeze state of 'sub' to match our freeze state */
-		for (i = 0; i < camel_folder_get_frozen_count ((CamelFolder *)vf); i++)
-			camel_folder_freeze (sub);
+static void
+folder_changed_change (CamelSession *session, CamelSessionThreadMsg *msg)
+{
+	struct _folder_changed_msg *m = (struct _folder_changed_msg *)msg;
+	CamelFolder *sub = m->sub;
+	CamelFolder *folder = (CamelFolder *)m->vee_folder;
+	CamelVeeFolder *vf = m->vee_folder;
+	CamelFolderChangeInfo *changes = m->changes;
+	gchar *vuid = NULL, hash[8];
+	const gchar *uid;
+	CamelVeeMessageInfo *vinfo;
+	gint i, vuidlen = 0;
+	CamelFolderChangeInfo *vf_changes = NULL, *unmatched_changes = NULL;
+	GPtrArray *matches_added = NULL, /* newly added, that match */
+		*matches_changed = NULL, /* newly changed, that now match */
+		*newchanged = NULL,
+		*changed;
+	GPtrArray *always_changed = NULL;
+	GHashTable *matches_hash;
+	CamelVeeFolder *folder_unmatched = vf->parent_vee_store ? vf->parent_vee_store->folder_unmatched : NULL;
+	GHashTable *unmatched_uids = vf->parent_vee_store ? vf->parent_vee_store->unmatched_uids : NULL;
+	GPtrArray *present = NULL;
 
-		camel_folder_unlock (CAMEL_FOLDER (vf), CF_CHANGE_LOCK);
+	/* See vee_folder_rebuild_folder. */
+	gboolean correlating = expression_is_correlating (vf->expression);
+
+	/* Check the folder hasn't beem removed while we weren't watching */
+	camel_vee_folder_lock (vf, CVF_SUBFOLDER_LOCK);
+	if (g_list_find (CAMEL_VEE_FOLDER_GET_PRIVATE (vf)->folders, sub) == NULL) {
+		camel_vee_folder_unlock (vf, CVF_SUBFOLDER_LOCK);
+		return;
 	}
-	if ((vf->flags & CAMEL_STORE_FOLDER_PRIVATE) == 0 && !CAMEL_IS_VEE_FOLDER (sub) && folder_unmatched != NULL) {
-		struct _CamelVeeFolderPrivate *up = _PRIVATE (folder_unmatched);
-		up->folders = g_list_append (
-			up->folders, camel_object_ref (sub));
 
-		camel_folder_lock (CAMEL_FOLDER (folder_unmatched), CF_CHANGE_LOCK);
+	camel_vee_folder_hash_folder (sub, hash);
 
-		/* update the freeze state of 'sub' to match Unmatched's freeze state */
-		for (i = 0; i < camel_folder_get_frozen_count ((CamelFolder *)folder_unmatched); i++)
-			camel_folder_freeze (sub);
+	/* Lookup anything before we lock anything, to avoid deadlock with build_folder */
 
-		camel_folder_unlock (CAMEL_FOLDER (folder_unmatched), CF_CHANGE_LOCK);
+	/* Find newly added that match */
+	if (changes->uid_added->len > 0) {
+		CamelException ex = CAMEL_EXCEPTION_INITIALISER;
+		dd (printf (" Searching for added matches '%s'\n", vf->expression));
+		matches_added = camel_folder_search_by_uids (sub, vf->expression, changes->uid_added, &ex);
+		camel_exception_clear (&ex);
 	}
 
-	camel_vee_folder_unlock (vf, CVF_SUBFOLDER_LOCK);
-
-	d (printf ("camel_vee_folder_add_folder (%s, %s)\n", ((CamelFolder *)vf)->full_name, sub->full_name));
+	/* TODO:
+	   In this code around here, we can work out if the search will affect the changes
+	   we had, and only re-search against them if they might have */
 
-	camel_object_hook_event ((CamelObject *)sub, "folder_changed", (CamelObjectEventHookFunc)folder_changed, vf);
-	camel_object_hook_event ((CamelObject *)sub, "deleted", (CamelObjectEventHookFunc)subfolder_deleted, vf);
-	camel_object_hook_event ((CamelObject *)sub, "renamed", (CamelObjectEventHookFunc)folder_renamed, vf);
+	/* Search for changed items that newly match, but only if we dont have them */
+	changed = changes->uid_changed;
+	if (changed->len > 0) {
+		CamelException ex = CAMEL_EXCEPTION_INITIALISER;
+		dd (printf (" Searching for changed matches '%s'\n", vf->expression));
 
-	((CamelVeeFolderClass *)((CamelObject *)vf)->klass)->add_folder (vf, sub);
+		if ((vf->flags & CAMEL_STORE_VEE_FOLDER_AUTO) == 0) {
+			newchanged = g_ptr_array_new ();
+			always_changed = g_ptr_array_new ();
+			for (i=0;i<changed->len;i++) {
+				uid = changed->pdata[i];
+				if (strlen (uid)+9 > vuidlen) {
+					vuidlen = strlen (uid)+64;
+					vuid = g_realloc (vuid, vuidlen);
+				}
+				memcpy (vuid, hash, 8);
+				strcpy (vuid+8, uid);
+				vinfo = (CamelVeeMessageInfo *)camel_folder_summary_uid (folder->summary, vuid);
+				if (vinfo == NULL) {
+					g_ptr_array_add (newchanged, (gchar *)uid);
+				} else {
+					g_ptr_array_add (always_changed, (gchar *)uid);
+					camel_message_info_free ((CamelMessageInfo *)vinfo);
+				}
+			}
+			changed = newchanged;
+		}
 
-}
+		if (changed->len)
+			matches_changed = camel_folder_search_by_uids (sub, vf->expression, changed, &ex);
+		camel_exception_clear (&ex);
+		if (always_changed && always_changed->len)
+			present = camel_folder_search_by_uids (sub, vf->expression, always_changed, &ex);
+		camel_exception_clear (&ex);
+	}
 
-/**
- * camel_vee_folder_remove_folder:
- * @vf: Virtual Folder object
- * @sub: source CamelFolder to remove from @vf
- *
- * Removed the source folder, @sub, from the virtual folder, @vf.
- **/
-void
+	camel_vee_folder_lock (vf, CVF_SUMMARY_LOCK);
 
-camel_vee_folder_remove_folder (CamelVeeFolder *vf, CamelFolder *sub)
-{
-	struct _CamelVeeFolderPrivate *p = _PRIVATE (vf);
-	gint i;
-	CamelVeeFolder *folder_unmatched = vf->parent_vee_store ? vf->parent_vee_store->folder_unmatched : NULL;
+	if (folder_unmatched != NULL)
+		camel_vee_folder_lock (folder_unmatched, CVF_SUMMARY_LOCK);
 
-	camel_vee_folder_lock (vf, CVF_SUBFOLDER_LOCK);
+	if (matches_changed || matches_added || changes->uid_removed->len||present)
+		camel_db_begin_transaction (folder->parent_store->cdb_w, NULL);
 
-	camel_vee_folder_lock (vf, CVF_CHANGED_LOCK);
-	p->folders_changed = g_list_remove (p->folders_changed, sub);
-	camel_vee_folder_unlock (vf, CVF_CHANGED_LOCK);
+	dd (printf ("Vfolder '%s' subfolder changed '%s'\n", folder->full_name, sub->full_name));
+	dd (printf (" changed %u added %u removed %u\n", changes->uid_changed->len, changes->uid_added->len, changes->uid_removed->len));
 
-	if (g_list_find (p->folders, sub) == NULL) {
-		camel_vee_folder_unlock (vf, CVF_SUBFOLDER_LOCK);
-		return;
+	/* Always remove removed uid's, in any case */
+	for (i=0;i<changes->uid_removed->len;i++) {
+		dd (printf ("  removing uid '%s'\n", (gchar *)changes->uid_removed->pdata[i]));
+		folder_changed_remove_uid (sub, changes->uid_removed->pdata[i], hash, FALSE, vf, !correlating);
 	}
 
-	camel_object_unhook_event ((CamelObject *)sub, "folder_changed", (CamelObjectEventHookFunc) folder_changed, vf);
-	camel_object_unhook_event ((CamelObject *)sub, "deleted", (CamelObjectEventHookFunc) subfolder_deleted, vf);
-	camel_object_unhook_event ((CamelObject *)sub, "renamed", (CamelObjectEventHookFunc) folder_renamed, vf);
+	/* Add any newly matched or to unmatched folder if they dont */
+	if (matches_added) {
+		matches_hash = g_hash_table_new (g_str_hash, g_str_equal);
+		for (i=0;i<matches_added->len;i++) {
+			dd (printf (" %s", (gchar *)matches_added->pdata[i]));
+			g_hash_table_insert (matches_hash, matches_added->pdata[i], matches_added->pdata[i]);
+		}
+		for (i=0;i<changes->uid_added->len;i++) {
+			uid = changes->uid_added->pdata[i];
+			if (g_hash_table_lookup (matches_hash, uid)) {
+				dd (printf ("  adding uid '%s' [newly matched]\n", (gchar *)uid));
+				folder_changed_add_uid (sub, uid, hash, vf, !correlating);
+			} else if ((vf->flags & CAMEL_STORE_FOLDER_PRIVATE) == 0) {
+				if (strlen (uid)+9 > vuidlen) {
+					vuidlen = strlen (uid)+64;
+					vuid = g_realloc (vuid, vuidlen);
+				}
+				memcpy (vuid, hash, 8);
+				strcpy (vuid+8, uid);
 
-	p->folders = g_list_remove (p->folders, sub);
+				if (!CAMEL_IS_VEE_FOLDER (sub) && folder_unmatched != NULL && g_hash_table_lookup (unmatched_uids, vuid) == NULL) {
+					dd (printf ("  adding uid '%s' to Unmatched [newly unmatched]\n", (gchar *)uid));
+					vinfo = (CamelVeeMessageInfo *)camel_folder_get_message_info ((CamelFolder *)folder_unmatched, vuid);
+					if (vinfo == NULL) {
+						if (vee_folder_add_uid_test (folder_unmatched, sub, uid, hash))
+							camel_folder_change_info_add_uid (folder_unmatched->changes, vuid);
+					} else {
+						camel_folder_free_message_info ((CamelFolder *)folder_unmatched, (CamelMessageInfo *)vinfo);
+					}
+				}
+			}
+		}
+		g_hash_table_destroy (matches_hash);
+	}
 
-	/* undo the freeze state that we have imposed on this source folder */
-	camel_folder_lock (CAMEL_FOLDER (vf), CF_CHANGE_LOCK);
-	for (i = 0; i < camel_folder_get_frozen_count ((CamelFolder *)vf); i++)
-		camel_folder_thaw (sub);
-	camel_folder_unlock (CAMEL_FOLDER (vf), CF_CHANGE_LOCK);
+	/* Change any newly changed */
+	if (always_changed) {
+		if (correlating) {
+			/* Messages may be pulled in by the correlation even if
+			 * they do not match the expression individually, so it
+			 * would be wrong to preemptively remove anything here.
+			 * vee_folder_rebuild_folder will make any necessary removals
+			 * when it re-queries the entire source folder. */
+			for (i=0;i<always_changed->len;i++)
+				folder_changed_change_uid (sub, always_changed->pdata[i], hash, vf, !correlating);
+		} else {
+			GHashTable *ht_present = g_hash_table_new (g_str_hash, g_str_equal);
 
-	camel_vee_folder_unlock (vf, CVF_SUBFOLDER_LOCK);
+			for (i=0;present && i<present->len;i++) {
+				folder_changed_change_uid (sub, present->pdata[i], hash, vf, !correlating);
+				g_hash_table_insert (ht_present, present->pdata[i], present->pdata[i]);
+			}
 
-	if (folder_unmatched != NULL) {
-		struct _CamelVeeFolderPrivate *up = _PRIVATE (folder_unmatched);
+			for (i=0; i<always_changed->len; i++) {
+				if (!present || !g_hash_table_lookup (ht_present, always_changed->pdata[i]))
+					/* XXX: IIUC, these messages haven't been deleted from the
+					 * source folder, so shouldn't "keep" be set to TRUE? */
+					folder_changed_remove_uid (sub, always_changed->pdata[i], hash, TRUE, vf, !correlating);
+			}
 
-		camel_vee_folder_lock (folder_unmatched, CVF_SUBFOLDER_LOCK);
-		/* if folder deleted, then blow it away from unmatched always, and remove all refs to it */
-		if (sub->folder_flags & CAMEL_FOLDER_HAS_BEEN_DELETED) {
-			while (g_list_find (up->folders, sub)) {
-				up->folders = g_list_remove (up->folders, sub);
-				camel_object_unref (sub);
+			g_hash_table_destroy (ht_present);
+		}
+		g_ptr_array_free (always_changed, TRUE);
+	}
 
-				/* undo the freeze state that Unmatched has imposed on this source folder */
-				camel_folder_lock (CAMEL_FOLDER (folder_unmatched), CF_CHANGE_LOCK);
-				for (i = 0; i < camel_folder_get_frozen_count ((CamelFolder *)folder_unmatched); i++)
-					camel_folder_thaw (sub);
-				camel_folder_unlock (CAMEL_FOLDER (folder_unmatched), CF_CHANGE_LOCK);
-			}
-		} else if ((vf->flags & CAMEL_STORE_FOLDER_PRIVATE) == 0) {
-			if (g_list_find (up->folders, sub) != NULL) {
-				up->folders = g_list_remove (up->folders, sub);
-				camel_object_unref (sub);
+	/* Change/add/remove any changed */
+	if (changes->uid_changed->len) {
+		/* If we are auto-updating, then re-check changed uids still match */
+		dd (printf (" Vfolder %supdate\nuids match:", (vf->flags & CAMEL_STORE_VEE_FOLDER_AUTO)?"auto-":""));
+		matches_hash = g_hash_table_new (g_str_hash, g_str_equal);
+		for (i=0;matches_changed && i<matches_changed->len;i++) {
+			dd (printf (" %s", (gchar *)matches_changed->pdata[i]));
+			g_hash_table_insert (matches_hash, matches_changed->pdata[i], matches_changed->pdata[i]);
+		}
+		dd (printf ("\n"));
 
-				/* undo the freeze state that Unmatched has imposed on this source folder */
-				camel_folder_lock (CAMEL_FOLDER (folder_unmatched), CF_CHANGE_LOCK);
-				for (i = 0; i < camel_folder_get_frozen_count ((CamelFolder *)folder_unmatched); i++)
-					camel_folder_thaw (sub);
-				camel_folder_unlock (CAMEL_FOLDER (folder_unmatched), CF_CHANGE_LOCK);
+		for (i=0;i<changed->len;i++) {
+			uid = changed->pdata[i];
+			if (strlen (uid)+9 > vuidlen) {
+				vuidlen = strlen (uid)+64;
+				vuid = g_realloc (vuid, vuidlen);
+			}
+			memcpy (vuid, hash, 8);
+			strcpy (vuid+8, uid);
+			vinfo = (CamelVeeMessageInfo *)camel_folder_summary_uid (folder->summary, vuid);
+			if (vinfo == NULL) {
+				if (g_hash_table_lookup (matches_hash, uid)) {
+					/* A uid we dont have, but now it matches, add it */
+					dd (printf ("  adding uid '%s' [newly matched]\n", uid));
+					folder_changed_add_uid (sub, uid, hash, vf, !correlating);
+				} else {
+					/* A uid we still don't have, just change it (for unmatched) */
+					folder_changed_change_uid (sub, uid, hash, vf, !correlating);
+				}
+			} else {
+				if ((vf->flags & CAMEL_STORE_VEE_FOLDER_AUTO) == 0
+				    || g_hash_table_lookup (matches_hash, uid)) {
+					/* still match, or we're not auto-updating, change event, (if it changed) */
+					dd (printf ("  changing uid '%s' [still matches]\n", uid));
+					folder_changed_change_uid (sub, uid, hash, vf, !correlating);
+				} else {
+					/* No longer matches, remove it, but keep it in unmatched (potentially) */
+					dd (printf ("  removing uid '%s' [did match]\n", uid));
+					folder_changed_remove_uid (sub, uid, hash, TRUE, vf, !correlating);
+				}
+				camel_message_info_free ((CamelMessageInfo *)vinfo);
 			}
 		}
-		camel_vee_folder_unlock (folder_unmatched, CVF_SUBFOLDER_LOCK);
+		g_hash_table_destroy (matches_hash);
+	} else {
+		/* stuff didn't match but it changed - check unmatched folder for changes */
+		for (i=0;i<changed->len;i++)
+			folder_changed_change_uid (sub, changed->pdata[i], hash, vf, !correlating);
 	}
 
-	((CamelVeeFolderClass *)((CamelObject *)vf)->klass)->remove_folder (vf, sub);
+	if (folder_unmatched != NULL) {
+		if (camel_folder_change_info_changed (folder_unmatched->changes)) {
+			unmatched_changes = folder_unmatched->changes;
+			folder_unmatched->changes = camel_folder_change_info_new ();
+		}
 
-	if (CAMEL_IS_VEE_FOLDER (sub))
-		return;
+		camel_vee_folder_unlock (folder_unmatched, CVF_SUMMARY_LOCK);
+	}
 
-	camel_object_unref (sub);
-}
+	if (camel_folder_change_info_changed (vf->changes)) {
+		vf_changes = vf->changes;
+		vf->changes = camel_folder_change_info_new ();
+	}
 
-/**
- * camel_vee_folder_rebuild_folder:
- * @vf: Virtual Folder object
- * @sub: source CamelFolder to add to @vf
- * @ex: Exception.
- *
- * Rebuild the folder @sub, if it should be.
- **/
-gint
-camel_vee_folder_rebuild_folder (CamelVeeFolder *vf, CamelFolder *sub, CamelException *ex)
-{
-	return ((CamelVeeFolderClass *)((CamelObject *)vf)->klass)->rebuild_folder (vf, sub, ex);
-}
+	if (matches_changed || matches_added || changes->uid_removed->len || present)
+		camel_db_end_transaction (folder->parent_store->cdb_w, NULL);
+	camel_vee_folder_unlock (vf, CVF_SUMMARY_LOCK);
 
-static void
-remove_folders (CamelFolder *folder, CamelFolder *foldercopy, CamelVeeFolder *vf)
-{
-	camel_vee_folder_remove_folder (vf, folder);
-	camel_object_unref (folder);
-}
+	/* Cleanup stuff on our folder */
+	if (matches_added)
+		camel_folder_search_free (sub, matches_added);
+	if (present)
+		camel_folder_search_free (sub, present);
 
-/**
- * camel_vee_folder_set_folders:
- * @vf:
- * @folders:
- *
- * Set the whole list of folder sources on a vee folder.
- **/
-void
-camel_vee_folder_set_folders (CamelVeeFolder *vf, GList *folders)
-{
-	struct _CamelVeeFolderPrivate *p = _PRIVATE (vf);
-	GHashTable *remove = g_hash_table_new (NULL, NULL);
-	GList *l;
-	CamelFolder *folder;
+	if (matches_changed)
+		camel_folder_search_free (sub, matches_changed);
 
-	/* setup a table of all folders we have currently */
-	camel_vee_folder_lock (vf, CVF_SUBFOLDER_LOCK);
-	l = p->folders;
-	while (l) {
-		g_hash_table_insert (remove, l->data, l->data);
-		camel_object_ref (l->data);
-		l = l->next;
-	}
 	camel_vee_folder_unlock (vf, CVF_SUBFOLDER_LOCK);
 
-	/* if we already have the folder, ignore it, otherwise add it */
-	l = folders;
-	while (l) {
-		if ((folder = g_hash_table_lookup (remove, l->data))) {
-			g_hash_table_remove (remove, folder);
-			camel_object_unref (folder);
-		} else {
-			camel_vee_folder_add_folder (vf, l->data);
-		}
-		l = l->next;
+	/* cleanup the rest */
+	if (newchanged)
+		g_ptr_array_free (newchanged, TRUE);
+
+	g_free (vuid);
+
+	if (unmatched_changes) {
+		camel_object_trigger_event ((CamelObject *)folder_unmatched, "folder_changed", unmatched_changes);
+		camel_folder_change_info_free (unmatched_changes);
 	}
 
-	/* then remove any we still have */
-	g_hash_table_foreach (remove, (GHFunc)remove_folders, vf);
-	g_hash_table_destroy (remove);
+	/* Add to folders_changed if we need to call vee_folder_rebuild_folder, which
+	 * could be the case for two reasons:
+	 * - We changed the vfolder and it is not auto-updating.  Need to re-sync.
+	 * - Vfolder is correlating.  Changes to non-matching source messages
+	 *   won't be processed here and won't show up in vf_changes but may
+	 *   still affect the vfolder contents (e.g., non-matching messages
+	 *   added to a matching thread), so we re-run the query on the whole
+	 *   source folder.  (For match-threads, it may be enough to do this if
+	 *   changes->uid_added->len > 0, but I'm not completely sure and I'd
+	 *   rather be safe than sorry.)
+	 */
+	if ((vf_changes && (vf->flags & CAMEL_STORE_VEE_FOLDER_AUTO) == 0) || correlating) {
+		camel_vee_folder_lock (vf, CVF_CHANGED_LOCK);
+		if (g_list_find (vf->priv->folders_changed, sub) == NULL)
+			vf->priv->folders_changed = g_list_prepend (vf->priv->folders_changed, sub);
+		camel_vee_folder_unlock (vf, CVF_CHANGED_LOCK);
+	}
+
+	if (vf_changes) {
+		camel_object_trigger_event ((CamelObject *)vf, "folder_changed", vf_changes);
+		camel_folder_change_info_free (vf_changes);
+	}
 }
 
-/**
- * camel_vee_folder_hash_folder:
- * @folder:
- * @:
- *
- * Create a hash string representing the folder name, which should be
- * unique, and remain static for a given folder.
- **/
-void
-camel_vee_folder_hash_folder (CamelFolder *folder, gchar buffer[8])
+static void
+subfolder_renamed_update (CamelVeeFolder *vf, CamelFolder *sub, gchar hash[8])
 {
-	GChecksum *checksum;
-	guint8 *digest;
-	gsize length;
-	gint state = 0, save = 0;
-	gchar *tmp;
-	gint i;
+	gint count, i;
+	CamelFolderChangeInfo *changes = NULL;
+	CamelVeeFolder *folder_unmatched = vf->parent_vee_store ? vf->parent_vee_store->folder_unmatched : NULL;
+	GHashTable *unmatched_uids = vf->parent_vee_store ? vf->parent_vee_store->unmatched_uids : NULL;
+	CamelFolderSummary *ssummary = sub->summary;
 
-	length = g_checksum_type_get_length (G_CHECKSUM_MD5);
-	digest = g_alloca (length);
+	camel_vee_folder_lock (vf, CVF_SUMMARY_LOCK);
 
-	checksum = g_checksum_new (G_CHECKSUM_MD5);
-	tmp = camel_service_get_url ((CamelService *)folder->parent_store);
-	g_checksum_update (checksum, (guchar *) tmp, -1);
-	g_free (tmp);
-	tmp = folder->full_name;
-	g_checksum_update (checksum, (guchar *) tmp, -1);
-	g_checksum_get_digest (checksum, digest, &length);
-	g_checksum_free (checksum);
+	count = camel_folder_summary_count (((CamelFolder *)vf)->summary);
+	for (i=0;i<count;i++) {
+		CamelVeeMessageInfo *mi = (CamelVeeMessageInfo *)camel_folder_summary_index (((CamelFolder *)vf)->summary, i);
+		CamelVeeMessageInfo *vinfo;
 
-	g_base64_encode_step (digest, 6, FALSE, buffer, &state, &save);
-	g_base64_encode_close (FALSE, buffer, &state, &save);
+		if (mi == NULL)
+			continue;
 
-	for (i=0;i<8;i++) {
-		if (buffer[i] == '+')
-			buffer[i] = '.';
-		if (buffer[i] == '/')
-			buffer[i] = '_';
-	}
-}
+		if (mi->summary == ssummary) {
+			gchar *uid = (gchar *)camel_message_info_uid (mi);
+			gchar *oldkey;
+			gpointer oldval;
 
-/**
- * camel_vee_folder_get_location:
- * @vf:
- * @vinfo:
- * @realuid: if not NULL, set to the uid of the real message, must be
- * g_free'd by caller.
- *
- * Find the real folder (and uid)
- *
- * Returns:
- **/
-CamelFolder *
-camel_vee_folder_get_location (CamelVeeFolder *vf, const CamelVeeMessageInfo *vinfo, gchar **realuid)
-{
-	CamelFolder *folder;
+			camel_folder_change_info_remove_uid (vf->changes, uid);
+			camel_folder_summary_remove (((CamelFolder *)vf)->summary, (CamelMessageInfo *)mi);
 
-	folder = vinfo->summary->folder;
+			/* works since we always append on the end */
+			i--;
+			count--;
 
-	/* locking?  yes?  no?  although the vfolderinfo is valid when obtained
-	   the folder in it might not necessarily be so ...? */
-	if (CAMEL_IS_VEE_FOLDER (folder)) {
-		CamelFolder *res;
-		const CamelVeeMessageInfo *vfinfo;
+			vinfo = vee_folder_add_uid (vf, sub, uid+8, hash);
+			if (vinfo) {
+				camel_folder_change_info_add_uid (vf->changes, camel_message_info_uid (vinfo));
 
-		vfinfo = (CamelVeeMessageInfo *)camel_folder_get_message_info (folder, camel_message_info_uid (vinfo)+8);
-		res = camel_vee_folder_get_location ((CamelVeeFolder *)folder, vfinfo, realuid);
-		camel_folder_free_message_info (folder, (CamelMessageInfo *)vfinfo);
-		return res;
-	} else {
-		if (realuid)
-			*realuid = g_strdup (camel_message_info_uid (vinfo)+8);
+				/* check unmatched uid's table for any matches */
+				if (vf == folder_unmatched
+				    && g_hash_table_lookup_extended (unmatched_uids, uid, (gpointer *)&oldkey, &oldval)) {
+					g_hash_table_remove (unmatched_uids, oldkey);
+					g_hash_table_insert (unmatched_uids, g_strdup (camel_message_info_uid (vinfo)), oldval);
+					g_free (oldkey);
+				}
 
-		return folder;
+				camel_message_info_free ((CamelMessageInfo *) vinfo);
+			}
+		}
+
+		camel_message_info_free ((CamelMessageInfo *)mi);
+	}
+
+	if (camel_folder_change_info_changed (vf->changes)) {
+		changes = vf->changes;
+		vf->changes = camel_folder_change_info_new ();
+	}
+
+	camel_vee_folder_unlock (vf, CVF_SUMMARY_LOCK);
+
+	if (changes) {
+		camel_object_trigger_event ((CamelObject *)vf, "folder_changed", changes);
+		camel_folder_change_info_free (changes);
 	}
 }
 
-static void vee_refresh_info (CamelFolder *folder, CamelException *ex)
+static void
+folder_changed_free (CamelSession *session, CamelSessionThreadMsg *msg)
 {
-	CamelVeeFolder *vf = (CamelVeeFolder *)folder;
-	struct _CamelVeeFolderPrivate *p = _PRIVATE (vf);
-	GList *node, *list;
+	struct _folder_changed_msg *m = (struct _folder_changed_msg *)msg;
 
-	camel_vee_folder_lock (vf, CVF_CHANGED_LOCK);
-	list = p->folders_changed;
-	p->folders_changed = NULL;
-	camel_vee_folder_unlock (vf, CVF_CHANGED_LOCK);
+	camel_folder_change_info_free (m->changes);
+	camel_object_unref (m->vee_folder);
+	camel_object_unref (m->sub);
+}
 
-	node = list;
-	while (node) {
-		CamelFolder *f = node->data;
+static CamelSessionThreadOps folder_changed_ops = {
+	folder_changed_change,
+	folder_changed_free,
+};
 
-		if (camel_vee_folder_rebuild_folder (vf, f, ex) == -1)
-			break;
+static gint
+vee_folder_rebuild_folder (CamelVeeFolder *vee_folder,
+                           CamelFolder *source,
+                           CamelException *ex);
 
-		node = node->next;
-	}
+static void
+unmatched_check_uid (gchar *uidin, gpointer value, struct _update_data *u)
+{
+	gchar *uid;
+	gint n;
 
-	g_list_free (list);
+	uid = alloca (strlen (uidin)+9);
+	memcpy (uid, u->hash, 8);
+	strcpy (uid+8, uidin);
+	n = GPOINTER_TO_INT (g_hash_table_lookup (u->unmatched_uids, uid));
+	if (n == 0) {
+		if (vee_folder_add_uid_test (u->folder_unmatched, u->source, uidin, u->hash))
+			camel_folder_change_info_add_uid (u->folder_unmatched->changes, uid);
+	} else {
+		CamelVeeMessageInfo *mi = (CamelVeeMessageInfo *)camel_folder_summary_uid (((CamelFolder *)u->folder_unmatched)->summary, uid);
+		if (mi) {
+			CamelException ex = CAMEL_EXCEPTION_INITIALISER;
+			camel_db_delete_uid_from_vfolder_transaction (((CamelFolder *)u->folder_unmatched)->parent_store->cdb_w, ((CamelFolder *)u->folder_unmatched)->full_name, uid, &ex);
+			camel_folder_summary_remove_uid_fast (((CamelFolder *)u->folder_unmatched)->summary, uid);
+			camel_folder_change_info_remove_uid (u->folder_unmatched->changes, uid);
+			camel_message_info_free ((CamelMessageInfo *)mi);
+			camel_exception_clear (&ex);
+		}
+	}
 }
 
-static guint32
-count_folder (CamelFolder *f, gchar *expr, CamelException *ex)
+static void
+folder_added_uid (gchar *uidin, gpointer value, struct _update_data *u)
 {
-	return camel_folder_count_by_expression (f, expr, ex);
+	CamelVeeMessageInfo *mi;
+	gchar *oldkey;
+	gpointer oldval;
+	gint n;
+
+	if ((mi = vee_folder_add_uid (u->vee_folder, u->source, uidin, u->hash)) != NULL) {
+		camel_folder_change_info_add_uid (u->vee_folder->changes, camel_message_info_uid (mi));
+		/* FIXME[disk-summary] Handle exceptions */
+		/* FIXME[disk-summary] Make all these as transactions, just
+		 * testing atm */
+		if (u->rebuilt && !u->correlating) {
+			CamelException ex = CAMEL_EXCEPTION_INITIALISER;
+			camel_db_add_to_vfolder_transaction (((CamelFolder *) u->vee_folder)->parent_store->cdb_w, ((CamelFolder *) u->vee_folder)->full_name, camel_message_info_uid (mi), &ex);
+			camel_exception_clear (&ex);
+		}
+		if (!CAMEL_IS_VEE_FOLDER (u->source) && u->unmatched_uids != NULL) {
+			if (g_hash_table_lookup_extended (u->unmatched_uids, camel_message_info_uid (mi), (gpointer *)&oldkey, &oldval)) {
+				n = GPOINTER_TO_INT (oldval);
+				g_hash_table_insert (u->unmatched_uids, oldkey, GINT_TO_POINTER (n+1));
+			} else {
+				g_hash_table_insert (u->unmatched_uids, g_strdup (camel_message_info_uid (mi)), GINT_TO_POINTER (1));
+			}
+		}
+
+		camel_message_info_free ((CamelMessageInfo *) mi);
+	}
 }
+
 static gint
-count_result (CamelFolderSummary *summary, const gchar *query, CamelException *ex)
+count_result (CamelFolderSummary *summary,
+              const gchar *query,
+              CamelException *ex)
 {
 	CamelFolder *folder = summary->folder;
 	CamelVeeFolder *vf = (CamelVeeFolder *)folder;
 	guint32 count=0;
 	gchar *expr = g_strdup_printf ("(and %s %s)", vf->expression ? vf->expression : "", query);
 	GList *node;
-	struct _CamelVeeFolderPrivate *p = _PRIVATE (vf);
+	CamelVeeFolderPrivate *p = CAMEL_VEE_FOLDER_GET_PRIVATE (vf);
 
 	node = p->folders;
 	while (node) {
 		CamelFolder *f = node->data;
-		count += count_folder (f, expr, ex);
+		count += camel_folder_count_by_expression (f, expr, ex);
 		node = node->next;
 	}
 
@@ -502,7 +715,8 @@ count_result (CamelFolderSummary *summary, const gchar *query, CamelException *e
 }
 
 static	CamelFIRecord *
-summary_header_to_db (CamelFolderSummary *s, CamelException *ex)
+summary_header_to_db (CamelFolderSummary *s,
+                      CamelException *ex)
 {
 	CamelFIRecord * record = g_new0 (CamelFIRecord, 1);
 	CamelDB *db;
@@ -562,10 +776,293 @@ summary_header_to_db (CamelFolderSummary *s, CamelException *ex)
 }
 
 static void
-vee_sync (CamelFolder *folder, gboolean expunge, CamelException *ex)
+folder_changed (CamelFolder *sub,
+                CamelFolderChangeInfo *changes,
+                CamelVeeFolder *vee_folder)
+{
+	CamelVeeFolderClass *class;
+
+	class = CAMEL_VEE_FOLDER_GET_CLASS (vee_folder);
+	class->folder_changed (vee_folder, sub, changes);
+}
+
+/* track vanishing folders */
+static void
+subfolder_deleted (CamelFolder *folder,
+                   gpointer event_data,
+                   CamelVeeFolder *vee_folder)
+{
+	camel_vee_folder_remove_folder (vee_folder, folder);
+}
+
+static void
+folder_renamed (CamelFolder *sub,
+                const gchar *old,
+                CamelVeeFolder *vee_folder)
+{
+	CamelVeeFolderClass *class;
+
+	class = CAMEL_VEE_FOLDER_GET_CLASS (vee_folder);
+	class->folder_renamed (vee_folder, sub, old);
+}
+
+static void
+vee_folder_stop_folder (CamelVeeFolder *vf, CamelFolder *sub)
+{
+	CamelVeeFolderPrivate *p = CAMEL_VEE_FOLDER_GET_PRIVATE (vf);
+	gint i;
+	CamelVeeFolder *folder_unmatched = vf->parent_vee_store ? vf->parent_vee_store->folder_unmatched : NULL;
+
+	camel_vee_folder_lock (vf, CVF_SUBFOLDER_LOCK);
+
+	camel_vee_folder_lock (vf, CVF_CHANGED_LOCK);
+	p->folders_changed = g_list_remove (p->folders_changed, sub);
+	camel_vee_folder_unlock (vf, CVF_CHANGED_LOCK);
+
+	if (g_list_find (p->folders, sub) == NULL) {
+		camel_vee_folder_unlock (vf, CVF_SUBFOLDER_LOCK);
+		return;
+	}
+
+	camel_object_unhook_event ((CamelObject *)sub, "folder_changed", (CamelObjectEventHookFunc) folder_changed, vf);
+	camel_object_unhook_event ((CamelObject *)sub, "deleted", (CamelObjectEventHookFunc) subfolder_deleted, vf);
+	camel_object_unhook_event ((CamelObject *)sub, "renamed", (CamelObjectEventHookFunc) folder_renamed, vf);
+
+	p->folders = g_list_remove (p->folders, sub);
+
+	/* undo the freeze state that we have imposed on this source folder */
+	camel_folder_lock (CAMEL_FOLDER (vf), CF_CHANGE_LOCK);
+	for (i = 0; i < camel_folder_get_frozen_count ((CamelFolder *)vf); i++)
+		camel_folder_thaw (sub);
+	camel_folder_unlock (CAMEL_FOLDER (vf), CF_CHANGE_LOCK);
+
+	camel_vee_folder_unlock (vf, CVF_SUBFOLDER_LOCK);
+
+	if (folder_unmatched != NULL) {
+		CamelVeeFolderPrivate *up = CAMEL_VEE_FOLDER_GET_PRIVATE (folder_unmatched);
+
+		camel_vee_folder_lock (folder_unmatched, CVF_SUBFOLDER_LOCK);
+		/* if folder deleted, then blow it away from unmatched always, and remove all refs to it */
+		if (sub->folder_flags & CAMEL_FOLDER_HAS_BEEN_DELETED) {
+			while (g_list_find (up->folders, sub)) {
+				up->folders = g_list_remove (up->folders, sub);
+				camel_object_unref (sub);
+
+				/* undo the freeze state that Unmatched has imposed on this source folder */
+				camel_folder_lock (CAMEL_FOLDER (folder_unmatched), CF_CHANGE_LOCK);
+				for (i = 0; i < camel_folder_get_frozen_count ((CamelFolder *)folder_unmatched); i++)
+					camel_folder_thaw (sub);
+				camel_folder_unlock (CAMEL_FOLDER (folder_unmatched), CF_CHANGE_LOCK);
+			}
+		} else if ((vf->flags & CAMEL_STORE_FOLDER_PRIVATE) == 0) {
+			if (g_list_find (up->folders, sub) != NULL) {
+				up->folders = g_list_remove (up->folders, sub);
+				camel_object_unref (sub);
+
+				/* undo the freeze state that Unmatched has imposed on this source folder */
+				camel_folder_lock (CAMEL_FOLDER (folder_unmatched), CF_CHANGE_LOCK);
+				for (i = 0; i < camel_folder_get_frozen_count ((CamelFolder *)folder_unmatched); i++)
+					camel_folder_thaw (sub);
+				camel_folder_unlock (CAMEL_FOLDER (folder_unmatched), CF_CHANGE_LOCK);
+			}
+		}
+		camel_vee_folder_unlock (folder_unmatched, CVF_SUBFOLDER_LOCK);
+	}
+
+	if (CAMEL_IS_VEE_FOLDER (sub))
+		return;
+
+	camel_object_unref (sub);
+}
+
+static void
+vee_folder_finalize (CamelVeeFolder *vf)
+{
+	CamelVeeFolder *folder_unmatched;
+	GList *node;
+	CamelFIRecord * record;
+
+	vf->priv->destroyed = TRUE;
+
+	folder_unmatched = vf->parent_vee_store ? vf->parent_vee_store->folder_unmatched : NULL;
+
+	/* Save the counts to DB */
+	if (!vf->deleted) {
+		CamelException ex = CAMEL_EXCEPTION_INITIALISER;
+		record = summary_header_to_db (((CamelFolder *)vf)->summary, NULL);
+		camel_db_write_folder_info_record (((CamelFolder *) vf)->parent_store->cdb_w, record, &ex);
+		g_free (record);
+		camel_exception_clear (&ex);
+	}
+
+	/* This may invoke sub-classes with partially destroyed state, they must deal with this */
+	if (vf == folder_unmatched) {
+		for (node = vf->priv->folders;node;node = g_list_next (node))
+			camel_object_unref (node->data);
+	} else {
+		/* FIXME[disk-summary] See if it is really reqd */
+		camel_folder_freeze ((CamelFolder *)vf);
+		while (vf->priv->folders) {
+			CamelFolder *f = vf->priv->folders->data;
+			vee_folder_stop_folder (vf, f);
+		}
+		camel_folder_thaw ((CamelFolder *)vf);
+	}
+
+	g_free (vf->expression);
+
+	g_list_free (vf->priv->folders);
+	g_list_free (vf->priv->folders_changed);
+
+	camel_folder_change_info_free (vf->changes);
+	camel_object_unref (vf->search);
+
+	g_mutex_free (vf->priv->summary_lock);
+	g_mutex_free (vf->priv->subfolder_lock);
+	g_mutex_free (vf->priv->changed_lock);
+	g_hash_table_destroy (vf->hashes);
+	g_free (vf->priv);
+}
+
+/* This entire code will be useless, since we sync the counts always. */
+static gint
+vee_folder_getv (CamelObject *object,
+                 CamelException *ex,
+                 CamelArgGetV *args)
+{
+	CamelFolder *folder = (CamelFolder *)object;
+	CamelVeeFolder *vf = (CamelVeeFolder *)folder;
+	gint i;
+	guint32 tag;
+	gint unread = -1, deleted = 0, junked = 0, visible = 0, count = -1, junked_not_deleted = -1;
+
+	for (i=0;i<args->argc;i++) {
+		CamelArgGet *arg = &args->argv[i];
+
+		tag = arg->tag;
+
+		/* NB: this is a copy of camel-folder.c with the unread count logic altered.
+		   makes sure its still atomically calculated */
+		switch (tag & CAMEL_ARG_TAG) {
+		case CAMEL_FOLDER_ARG_UNREAD:
+		case CAMEL_FOLDER_ARG_DELETED:
+		case CAMEL_FOLDER_ARG_JUNKED:
+		case CAMEL_FOLDER_ARG_JUNKED_NOT_DELETED:
+		case CAMEL_FOLDER_ARG_VISIBLE:
+
+			if (vf->expression && vf->priv->unread_vfolder == -1)
+				camel_vee_summary_load_check_unread_vfolder ((CamelVeeSummary *)folder->summary);
+
+			/* This is so we can get the values atomically, and also so we can calculate them only once */
+			if (unread == -1) {
+				gint j;
+				CamelMessageInfoBase *info;
+				CamelVeeMessageInfo *vinfo;
+
+				unread = deleted = visible = junked = junked_not_deleted = 0;
+				count = camel_folder_summary_count (folder->summary);
+				for (j=0; j<count; j++) {
+					if ((info = (CamelMessageInfoBase *) camel_folder_summary_index (folder->summary, j))) {
+						guint32 flags;
+
+						vinfo = (CamelVeeMessageInfo *) info;
+						flags = vinfo->old_flags; /* ? vinfo->old_flags : camel_message_info_flags (info); */
+
+						if ((flags & (CAMEL_MESSAGE_SEEN)) == 0)
+							unread++;
+						if (flags & CAMEL_MESSAGE_DELETED)
+							deleted++;
+						if (flags & CAMEL_MESSAGE_JUNK) {
+							junked++;
+								if (!(flags & CAMEL_MESSAGE_DELETED))
+									junked_not_deleted++;
+						}
+						if ((flags & (CAMEL_MESSAGE_DELETED|CAMEL_MESSAGE_JUNK)) == 0)
+							visible++;
+						camel_message_info_free (info);
+					}
+				}
+			}
+
+			switch (tag & CAMEL_ARG_TAG) {
+			case CAMEL_FOLDER_ARG_UNREAD:
+				if (vf->priv->unread_vfolder == 1)
+					count = unread == -1 ? 0 : unread - junked_not_deleted;
+				else
+					count = unread == -1 ? 0 : unread;
+				break;
+			case CAMEL_FOLDER_ARG_DELETED:
+				count = deleted == -1 ? 0 : deleted;
+				break;
+			case CAMEL_FOLDER_ARG_JUNKED:
+				count = junked == -1 ? 0 : junked;
+				break;
+			case CAMEL_FOLDER_ARG_JUNKED_NOT_DELETED:
+				count = junked_not_deleted == -1 ? 0 : junked_not_deleted;
+				break;
+			case CAMEL_FOLDER_ARG_VISIBLE:
+				if (vf->priv->unread_vfolder == 1)
+					count = unread == -1 ? 0 : unread - junked_not_deleted;
+				else
+					count = visible == -1 ? 0 : visible;
+
+				break;
+			}
+			folder->summary->unread_count = unread == -1 ? 0 : unread;
+			folder->summary->deleted_count = deleted == -1 ? 0 : deleted;
+			junked = folder->summary->junk_count = junked == -1 ? 0 : junked;
+			folder->summary->junk_not_deleted_count = junked_not_deleted == -1 ? 0 : junked_not_deleted;
+			folder->summary->visible_count = visible == -1 ? 0 : visible;
+			*arg->ca_int = count;
+			break;
+		default:
+			continue;
+		}
+
+		arg->tag = (tag & CAMEL_ARG_TYPE) | CAMEL_ARG_IGNORE;
+	}
+
+	return ((CamelObjectClass *)camel_vee_folder_parent_class)->getv (object, ex, args);
+}
+
+static gboolean
+vee_folder_refresh_info (CamelFolder *folder,
+                         CamelException *ex)
+{
+	CamelVeeFolder *vf = (CamelVeeFolder *)folder;
+	CamelVeeFolderPrivate *p = CAMEL_VEE_FOLDER_GET_PRIVATE (vf);
+	GList *node, *list;
+	gboolean success = TRUE;
+
+	camel_vee_folder_lock (vf, CVF_CHANGED_LOCK);
+	list = p->folders_changed;
+	p->folders_changed = NULL;
+	camel_vee_folder_unlock (vf, CVF_CHANGED_LOCK);
+
+	node = list;
+	while (node) {
+		CamelFolder *f = node->data;
+
+		if (camel_vee_folder_rebuild_folder (vf, f, ex) == -1) {
+			success = FALSE;
+			break;
+		}
+
+		node = node->next;
+	}
+
+	g_list_free (list);
+
+	return success;
+}
+
+static gboolean
+vee_folder_sync (CamelFolder *folder,
+                 gboolean expunge,
+                 CamelException *ex)
 {
 	CamelVeeFolder *vf = (CamelVeeFolder *)folder;
-	struct _CamelVeeFolderPrivate *p = _PRIVATE (vf);
+	CamelVeeFolderPrivate *p = CAMEL_VEE_FOLDER_GET_PRIVATE (vf);
 	GList *node;
 
 	if (((CamelVeeSummary *)folder->summary)->fake_visible_count)
@@ -578,15 +1075,16 @@ vee_sync (CamelFolder *folder, gboolean expunge, CamelException *ex)
 	while (node) {
 		CamelFolder *f = node->data;
 
-		camel_folder_sync (f, expunge, ex);
-		if (camel_exception_is_set (ex) && strncmp (camel_exception_get_description (ex), "no such table", 13)) {
-			const gchar *desc;
+		if (!camel_folder_sync (f, expunge, ex)) {
+			if (strncmp (camel_exception_get_description (ex), "no such table", 13)) {
+				const gchar *desc;
 
-			camel_object_get (f, NULL, CAMEL_OBJECT_DESCRIPTION, &desc, NULL);
-			camel_exception_setv (ex, ex->id, _("Error storing '%s': %s"), desc, ex->desc);
-			g_warning ("%s", camel_exception_get_description (ex));
-		} else
-			camel_exception_clear (ex);
+				camel_object_get (f, NULL, CAMEL_OBJECT_DESCRIPTION, &desc, NULL);
+				camel_exception_setv (ex, ex->id, _("Error storing '%s': %s"), desc, ex->desc);
+				g_warning ("%s", camel_exception_get_description (ex));
+			} else
+				camel_exception_clear (ex);
+		}
 
 		/* auto update vfolders shouldn't need a rebuild */
 /*		if ((vf->flags & CAMEL_STORE_VEE_FOLDER_AUTO) == 0 */
@@ -638,76 +1136,81 @@ vee_sync (CamelFolder *folder, gboolean expunge, CamelException *ex)
 	camel_vee_folder_unlock (vf, CVF_SUBFOLDER_LOCK);
 
 	camel_object_state_write (vf);
+
+	return TRUE;
 }
 
-static void
-vee_expunge (CamelFolder *folder, CamelException *ex)
+static gboolean
+vee_folder_expunge (CamelFolder *folder,
+                    CamelException *ex)
 {
 	/* Force it to rebuild the counts, when some folders were expunged. */
 	((CamelVeeSummary *) folder->summary)->force_counts = TRUE;
-	((CamelFolderClass *)((CamelObject *)folder)->klass)->sync (folder, TRUE, ex);
+
+	return CAMEL_FOLDER_GET_CLASS (folder)->sync (folder, TRUE, ex);
 }
 
 static CamelMimeMessage *
-vee_get_message (CamelFolder *folder, const gchar *uid, CamelException *ex)
+vee_folder_get_message (CamelFolder *folder,
+                        const gchar *uid,
+                        CamelException *ex)
 {
 	CamelVeeMessageInfo *mi;
 	CamelMimeMessage *msg = NULL;
 
 	mi = (CamelVeeMessageInfo *)camel_folder_summary_uid (folder->summary, uid);
 	if (mi) {
-		msg =  camel_folder_get_message (mi->summary->folder, camel_message_info_uid (mi)+8, ex);
+		msg = camel_folder_get_message (mi->summary->folder, camel_message_info_uid (mi)+8, ex);
 		camel_message_info_free ((CamelMessageInfo *)mi);
 	} else {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID,
-				     _("No such message %s in %s"), uid,
-				     folder->name);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID,
+			_("No such message %s in %s"), uid,
+			folder->name);
 	}
 
 	return msg;
 }
 
-static guint32
-vee_count_by_expression (CamelFolder *folder, const gchar *expression, CamelException *ex)
+static gboolean
+vee_folder_append_message (CamelFolder *folder,
+                           CamelMimeMessage *message,
+                           const CamelMessageInfo *info,
+                           gchar **appended_uid,
+                            CamelException *ex)
 {
-	GList *node;
-	gchar *expr;
-	guint32 count = 0;
-	CamelVeeFolder *vf = (CamelVeeFolder *)folder;
-	struct _CamelVeeFolderPrivate *p = _PRIVATE (vf);
-	GHashTable *searched = g_hash_table_new (NULL, NULL);
-	CamelVeeFolder *folder_unmatched = vf->parent_vee_store ? vf->parent_vee_store->folder_unmatched : NULL;
-
-	if (vf != folder_unmatched)
-		expr = g_strdup_printf ("(and %s %s)", vf->expression ? vf->expression : "", expression);
-	else
-		expr = g_strdup (expression);
-
-	node = p->folders;
-	while (node) {
-		CamelFolder *f = node->data;
+	camel_exception_set (
+		ex, CAMEL_EXCEPTION_SYSTEM,
+		_("Cannot copy or move messages into a Virtual Folder"));
 
-		/* make sure we only search each folder once - for unmatched folder to work right */
-		if (g_hash_table_lookup (searched, f) == NULL) {
-			count += camel_folder_count_by_expression (f, expr, ex);
-			g_hash_table_insert (searched, f, f);
-		}
-		node = g_list_next (node);
-	}
+	return FALSE;
+}
 
-	g_free (expr);
+static gboolean
+vee_folder_transfer_messages_to (CamelFolder *folder,
+                                 GPtrArray *uids,
+                                 CamelFolder *dest,
+                                 GPtrArray **transferred_uids,
+                                 gboolean delete_originals,
+                                 CamelException *ex)
+{
+	camel_exception_set (
+		ex, CAMEL_EXCEPTION_SYSTEM,
+		_("Cannot copy or move messages into a Virtual Folder"));
 
-	g_hash_table_destroy (searched);
-	return count;
+	return FALSE;
 }
+
 static GPtrArray *
-vee_search_by_expression (CamelFolder *folder, const gchar *expression, CamelException *ex)
+vee_folder_search_by_expression (CamelFolder *folder,
+                                 const gchar *expression,
+                                 CamelException *ex)
 {
 	GList *node;
 	GPtrArray *matches, *result = g_ptr_array_new ();
 	gchar *expr;
 	CamelVeeFolder *vf = (CamelVeeFolder *)folder;
-	struct _CamelVeeFolderPrivate *p = _PRIVATE (vf);
+	CamelVeeFolderPrivate *p = CAMEL_VEE_FOLDER_GET_PRIVATE (vf);
 	GHashTable *searched = g_hash_table_new (NULL, NULL);
 	CamelVeeFolder *folder_unmatched = vf->parent_vee_store ? vf->parent_vee_store->folder_unmatched : NULL;
 
@@ -754,14 +1257,17 @@ vee_search_by_expression (CamelFolder *folder, const gchar *expression, CamelExc
 }
 
 static GPtrArray *
-vee_search_by_uids (CamelFolder *folder, const gchar *expression, GPtrArray *uids, CamelException *ex)
+vee_folder_search_by_uids (CamelFolder *folder,
+                           const gchar *expression,
+                           GPtrArray *uids,
+                           CamelException *ex)
 {
 	GList *node;
 	GPtrArray *matches, *result = g_ptr_array_new ();
 	GPtrArray *folder_uids = g_ptr_array_new ();
 	gchar *expr;
 	CamelVeeFolder *vf = (CamelVeeFolder *)folder;
-	struct _CamelVeeFolderPrivate *p = _PRIVATE (vf);
+	CamelVeeFolderPrivate *p = CAMEL_VEE_FOLDER_GET_PRIVATE (vf);
 	GHashTable *searched = g_hash_table_new (NULL, NULL);
 
 	camel_vee_folder_lock (vf, CVF_SUBFOLDER_LOCK);
@@ -816,28 +1322,46 @@ vee_search_by_uids (CamelFolder *folder, const gchar *expression, GPtrArray *uid
 	return result;
 }
 
-static void
-vee_append_message (CamelFolder *folder, CamelMimeMessage *message, const CamelMessageInfo *info, gchar **appended_uid, CamelException *ex)
+static guint32
+vee_folder_count_by_expression (CamelFolder *folder,
+                                const gchar *expression,
+                                CamelException *ex)
 {
-	camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM, _("Cannot copy or move messages into a Virtual Folder"));
-}
+	GList *node;
+	gchar *expr;
+	guint32 count = 0;
+	CamelVeeFolder *vf = (CamelVeeFolder *)folder;
+	CamelVeeFolderPrivate *p = CAMEL_VEE_FOLDER_GET_PRIVATE (vf);
+	GHashTable *searched = g_hash_table_new (NULL, NULL);
+	CamelVeeFolder *folder_unmatched = vf->parent_vee_store ? vf->parent_vee_store->folder_unmatched : NULL;
 
-static void
-vee_transfer_messages_to (CamelFolder *folder, GPtrArray *uids, CamelFolder *dest, GPtrArray **transferred_uids, gboolean delete_originals, CamelException *ex)
-{
-	camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM, _("Cannot copy or move messages into a Virtual Folder"));
-}
+	if (vf != folder_unmatched)
+		expr = g_strdup_printf ("(and %s %s)", vf->expression ? vf->expression : "", expression);
+	else
+		expr = g_strdup (expression);
 
-static void vee_rename (CamelFolder *folder, const gchar *new)
-{
-	/*CamelVeeFolder *vf = (CamelVeeFolder *)folder;*/
+	node = p->folders;
+	while (node) {
+		CamelFolder *f = node->data;
+
+		/* make sure we only search each folder once - for unmatched folder to work right */
+		if (g_hash_table_lookup (searched, f) == NULL) {
+			count += camel_folder_count_by_expression (f, expr, ex);
+			g_hash_table_insert (searched, f, f);
+		}
+		node = g_list_next (node);
+	}
 
-	((CamelFolderClass *)camel_vee_folder_parent)->rename (folder, new);
+	g_free (expr);
+
+	g_hash_table_destroy (searched);
+	return count;
 }
 
-static void vee_delete (CamelFolder *folder)
+static void
+vee_folder_delete (CamelFolder *folder)
 {
-	struct _CamelVeeFolderPrivate *p = _PRIVATE (folder);
+	CamelVeeFolderPrivate *p = CAMEL_VEE_FOLDER_GET_PRIVATE (folder);
 
 	/* NB: this is never called on UNMTACHED */
 
@@ -854,55 +1378,125 @@ static void vee_delete (CamelFolder *folder)
 	}
 	camel_vee_folder_unlock (CAMEL_VEE_FOLDER (folder), CVF_SUBFOLDER_LOCK);
 
-	((CamelFolderClass *)camel_vee_folder_parent)->delete (folder);
+	((CamelFolderClass *)camel_vee_folder_parent_class)->delete (folder);
 	((CamelVeeFolder *)folder)->deleted = TRUE;
 }
 
-/* ********************************************************************** *
-   utility functions */
-
-/* A "correlating" expression has the property that whether a message matches
- * depends on the other messages being searched.  folder_changed_change on a
- * vfolder with a correlating expression may not make all the necessary updates,
- * so the query is redone on the entire changed source folder the next time
- * the vfolder is opened.
- *
- * The only current example of a correlating expression is one that uses
- * "match-threads". */
-static gboolean
-expression_is_correlating (const gchar *expr)
+static void
+vee_folder_freeze (CamelFolder *folder)
 {
-	/* XXX: Actually parse the expression to avoid triggering on
-	 * "match-threads" in the text the user is searching for! */
-	return (strstr (expr, "match-threads") != NULL);
+	CamelVeeFolder *vfolder = (CamelVeeFolder *)folder;
+	CamelVeeFolderPrivate *p = CAMEL_VEE_FOLDER_GET_PRIVATE (vfolder);
+	GList *node;
+
+	camel_vee_folder_lock (vfolder, CVF_SUBFOLDER_LOCK);
+
+	node = p->folders;
+	while (node) {
+		CamelFolder *f = node->data;
+
+		camel_folder_freeze (f);
+		node = node->next;
+	}
+
+	camel_vee_folder_unlock (vfolder, CVF_SUBFOLDER_LOCK);
+
+	/* call parent implementation */
+	CAMEL_FOLDER_CLASS (camel_vee_folder_parent_class)->freeze (folder);
 }
 
-/* must be called with summary_lock held */
-static CamelVeeMessageInfo *
-vee_folder_add_uid (CamelVeeFolder *vf, CamelFolder *f, const gchar *inuid, const gchar hash[8])
+static void
+vee_folder_thaw (CamelFolder *folder)
 {
-	CamelVeeMessageInfo *mi = NULL;
+	CamelVeeFolder *vfolder = (CamelVeeFolder *)folder;
+	CamelVeeFolderPrivate *p = CAMEL_VEE_FOLDER_GET_PRIVATE (vfolder);
+	GList *node;
 
-	mi = camel_vee_summary_add ((CamelVeeSummary *)((CamelFolder *)vf)->summary, f->summary, (gchar *)inuid, hash);
-	return mi;
+	camel_vee_folder_lock (vfolder, CVF_SUBFOLDER_LOCK);
+
+	node = p->folders;
+	while (node) {
+		CamelFolder *f = node->data;
+
+		camel_folder_thaw (f);
+		node = node->next;
+	}
+
+	camel_vee_folder_unlock (vfolder, CVF_SUBFOLDER_LOCK);
+
+	/* call parent implementation */
+	CAMEL_FOLDER_CLASS (camel_vee_folder_parent_class)->thaw (folder);
 }
 
-/* same as vee_folder_add_uid, only returns whether uid was added or not */
-static gboolean
-vee_folder_add_uid_test (CamelVeeFolder *vf, CamelFolder *f, const gchar *inuid, const gchar hash[8])
+static void
+vee_folder_set_expression (CamelVeeFolder *vee_folder,
+                           const gchar *query)
 {
-	CamelVeeMessageInfo *mi;
+	CamelVeeFolderPrivate *p = CAMEL_VEE_FOLDER_GET_PRIVATE (vee_folder);
+	GList *node;
+	CamelException ex = CAMEL_EXCEPTION_INITIALISER;
 
-	mi = vee_folder_add_uid (vf, f, inuid, hash);
+	camel_vee_folder_lock (vee_folder, CVF_SUBFOLDER_LOCK);
 
-	if (mi != NULL)
-		camel_message_info_free ((CamelMessageInfo *) mi);
+	/* no change, do nothing */
+	if ((vee_folder->expression && query && strcmp (vee_folder->expression, query) == 0)
+	    || (vee_folder->expression == NULL && query == NULL)) {
+		camel_vee_folder_unlock (vee_folder, CVF_SUBFOLDER_LOCK);
+		return;
+	}
 
-	return mi != NULL;
+	/* Recreate the table when the query changes, only if we are not setting it first */
+	if (vee_folder->expression) {
+		CamelFolderSummary *s = ((CamelFolder *)vee_folder)->summary;
+		camel_folder_summary_clear (s);
+		camel_db_recreate_vfolder (((CamelFolder *) vee_folder)->parent_store->cdb_w, ((CamelFolder *) vee_folder)->full_name, &ex);
+		camel_exception_clear (&ex);
+		s->junk_count = 0;
+		s->deleted_count = 0;
+		s->unread_count = 0;
+		s->visible_count = 0;
+		s->junk_not_deleted_count = 0;
+	}
+
+	g_free (vee_folder->expression);
+	if (query)
+		vee_folder->expression = g_strdup (query);
+
+	node = p->folders;
+	while (node) {
+		CamelFolder *f = node->data;
+
+		if (camel_vee_folder_rebuild_folder (vee_folder, f, &ex) == -1)
+			break;
+
+		camel_exception_clear (&ex);
+
+		node = node->next;
+	}
+
+	camel_exception_clear (&ex);
+
+	camel_vee_folder_lock (vee_folder, CVF_CHANGED_LOCK);
+	g_list_free (p->folders_changed);
+	p->folders_changed = NULL;
+	camel_vee_folder_unlock (vee_folder, CVF_CHANGED_LOCK);
+
+	camel_vee_folder_unlock (vee_folder, CVF_SUBFOLDER_LOCK);
+}
+
+static void
+vee_folder_add_folder (CamelVeeFolder *vee_folder,
+                       CamelFolder *sub)
+{
+	CamelException ex = CAMEL_EXCEPTION_INITIALISER;
+
+	vee_folder_rebuild_folder (vee_folder, sub, &ex);
+
+	camel_exception_clear (&ex);
 }
 
 static void
-vee_folder_remove_folder (CamelVeeFolder *vf, CamelFolder *source)
+vee_folder_remove_folder_helper (CamelVeeFolder *vf, CamelFolder *source)
 {
 	gint i, count, n, still = FALSE, start, last;
 	gchar *oldkey;
@@ -927,7 +1521,7 @@ vee_folder_remove_folder (CamelVeeFolder *vf, CamelFolder *source)
 		/* check if this folder is still to be part of unmatched */
 		if ((vf->flags & CAMEL_STORE_FOLDER_PRIVATE) == 0 && !killun) {
 			camel_vee_folder_lock (folder_unmatched, CVF_SUBFOLDER_LOCK);
-			still = g_list_find (_PRIVATE (folder_unmatched)->folders, source) != NULL;
+			still = g_list_find (CAMEL_VEE_FOLDER_GET_PRIVATE (folder_unmatched)->folders, source) != NULL;
 			camel_vee_folder_unlock (folder_unmatched, CVF_SUBFOLDER_LOCK);
 			camel_vee_folder_hash_folder (source, hash);
 		}
@@ -1040,85 +1634,44 @@ vee_folder_remove_folder (CamelVeeFolder *vf, CamelFolder *source)
 	}
 }
 
-struct _update_data {
-	CamelFolder *source;
-	CamelVeeFolder *vf;
-	gchar hash[8];
-	CamelVeeFolder *folder_unmatched;
-	GHashTable *unmatched_uids;
-	gboolean rebuilt, correlating;
-};
-
 static void
-unmatched_check_uid (gchar *uidin, gpointer value, struct _update_data *u)
+vee_folder_remove_folder (CamelVeeFolder *vee_folder,
+                          CamelFolder *sub)
 {
-	gchar *uid;
-	gint n;
+	gchar *shash, hash[8];
+	CamelVeeFolder *folder_unmatched = vee_folder->parent_vee_store ? vee_folder->parent_vee_store->folder_unmatched : NULL;
 
-	uid = alloca (strlen (uidin)+9);
-	memcpy (uid, u->hash, 8);
-	strcpy (uid+8, uidin);
-	n = GPOINTER_TO_INT (g_hash_table_lookup (u->unmatched_uids, uid));
-	if (n == 0) {
-		if (vee_folder_add_uid_test (u->folder_unmatched, u->source, uidin, u->hash))
-			camel_folder_change_info_add_uid (u->folder_unmatched->changes, uid);
-	} else {
-		CamelVeeMessageInfo *mi = (CamelVeeMessageInfo *)camel_folder_summary_uid (((CamelFolder *)u->folder_unmatched)->summary, uid);
-		if (mi) {
-			CamelException ex = CAMEL_EXCEPTION_INITIALISER;
-			camel_db_delete_uid_from_vfolder_transaction (((CamelFolder *)u->folder_unmatched)->parent_store->cdb_w, ((CamelFolder *)u->folder_unmatched)->full_name, uid, &ex);
-			camel_folder_summary_remove_uid_fast (((CamelFolder *)u->folder_unmatched)->summary, uid);
-			camel_folder_change_info_remove_uid (u->folder_unmatched->changes, uid);
-			camel_message_info_free ((CamelMessageInfo *)mi);
-			camel_exception_clear (&ex);
-		}
+	camel_vee_folder_hash_folder (sub, hash);
+	vee_folder_remove_folder_helper (vee_folder, sub);
+	shash = g_strdup_printf (
+		"%c%c%c%c%c%c%c%c",
+		hash[0], hash[1], hash[2], hash[3],
+		hash[4], hash[5], hash[6], hash[7]);
+	if (g_hash_table_lookup (vee_folder->hashes, shash)) {
+		g_hash_table_remove (vee_folder->hashes, shash);
 	}
-}
-
-static void
-folder_added_uid (gchar *uidin, gpointer value, struct _update_data *u)
-{
-	CamelVeeMessageInfo *mi;
-	gchar *oldkey;
-	gpointer oldval;
-	gint n;
-
-	if ((mi = vee_folder_add_uid (u->vf, u->source, uidin, u->hash)) != NULL) {
-		camel_folder_change_info_add_uid (u->vf->changes, camel_message_info_uid (mi));
-		/* FIXME[disk-summary] Handle exceptions */
-		/* FIXME[disk-summary] Make all these as transactions, just
-		 * testing atm */
-		if (u->rebuilt && !u->correlating) {
-			CamelException ex = CAMEL_EXCEPTION_INITIALISER;
-			camel_db_add_to_vfolder_transaction (((CamelFolder *) u->vf)->parent_store->cdb_w, ((CamelFolder *) u->vf)->full_name, camel_message_info_uid (mi), &ex);
-			camel_exception_clear (&ex);
-		}
-		if (!CAMEL_IS_VEE_FOLDER (u->source) && u->unmatched_uids != NULL) {
-			if (g_hash_table_lookup_extended (u->unmatched_uids, camel_message_info_uid (mi), (gpointer *)&oldkey, &oldval)) {
-				n = GPOINTER_TO_INT (oldval);
-				g_hash_table_insert (u->unmatched_uids, oldkey, GINT_TO_POINTER (n+1));
-			} else {
-				g_hash_table_insert (u->unmatched_uids, g_strdup (camel_message_info_uid (mi)), GINT_TO_POINTER (1));
-			}
-		}
 
-		camel_message_info_free ((CamelMessageInfo *) mi);
+	if (folder_unmatched && g_hash_table_lookup (folder_unmatched->hashes, shash)) {
+		g_hash_table_remove (folder_unmatched->hashes, shash);
 	}
+
+	g_free (shash);
 }
 
-/* build query contents for a single folder */
 static gint
-vee_rebuild_folder (CamelVeeFolder *vf, CamelFolder *source, CamelException *ex)
+vee_folder_rebuild_folder (CamelVeeFolder *vee_folder,
+                           CamelFolder *source,
+                           CamelException *ex)
 {
 	GPtrArray *match, *all;
 	GHashTable *allhash, *matchhash, *fullhash;
 	GSList *del_list = NULL;
-	CamelFolder *folder = (CamelFolder *)vf;
+	CamelFolder *folder = (CamelFolder *)vee_folder;
 	gint i, n, count, start, last;
 	struct _update_data u;
-	CamelFolderChangeInfo *vf_changes = NULL, *unmatched_changes = NULL;
-	CamelVeeFolder *folder_unmatched = vf->parent_vee_store ? vf->parent_vee_store->folder_unmatched : NULL;
-	GHashTable *unmatched_uids = vf->parent_vee_store ? vf->parent_vee_store->unmatched_uids : NULL;
+	CamelFolderChangeInfo *vee_folder_changes = NULL, *unmatched_changes = NULL;
+	CamelVeeFolder *folder_unmatched = vee_folder->parent_vee_store ? vee_folder->parent_vee_store->folder_unmatched : NULL;
+	GHashTable *unmatched_uids = vee_folder->parent_vee_store ? vee_folder->parent_vee_store->unmatched_uids : NULL;
 	CamelFolderSummary *ssummary = source->summary;
 	gboolean rebuilded = FALSE;
 	gchar *shash;
@@ -1126,22 +1679,22 @@ vee_rebuild_folder (CamelVeeFolder *vf, CamelFolder *source, CamelException *ex)
 	/* Since the source of a correlating vfolder has to be requeried in
 	 * full every time it changes, caching the results in the db is not
 	 * worth the effort.  Thus, DB use is conditioned on !correlating. */
-	gboolean correlating = expression_is_correlating (vf->expression);
+	gboolean correlating = expression_is_correlating (vee_folder->expression);
 
-	if (vf == folder_unmatched)
+	if (vee_folder == folder_unmatched)
 		return 0;
 
 	camel_vee_folder_hash_folder (source, u.hash);
 	shash = g_strdup_printf ("%c%c%c%c%c%c%c%c", u.hash[0], u.hash[1], u.hash[2], u.hash[3], u.hash[4], u.hash[5], u.hash[6], u.hash[7]);
-	if (!g_hash_table_lookup (vf->hashes, shash)) {
-		g_hash_table_insert (vf->hashes, g_strdup (shash), source->summary);
+	if (!g_hash_table_lookup (vee_folder->hashes, shash)) {
+		g_hash_table_insert (vee_folder->hashes, g_strdup (shash), source->summary);
 	}
 	if (folder_unmatched && !g_hash_table_lookup (folder_unmatched->hashes, shash)) {
 		g_hash_table_insert (folder_unmatched->hashes, g_strdup (shash), source->summary);
 	}
 
 	/* if we have no expression, or its been cleared, then act as if no matches */
-	if (vf->expression == NULL) {
+	if (vee_folder->expression == NULL) {
 		match = g_ptr_array_new ();
 	} else {
 		if (!correlating) {
@@ -1152,24 +1705,24 @@ vee_rebuild_folder (CamelVeeFolder *vf, CamelFolder *source, CamelException *ex)
 			/* We take this to mean the results have not been cached.
 			 * XXX: It will also trigger if the result set is empty. */
 			match == NULL) {
-			match = camel_folder_search_by_expression (source, vf->expression, ex);
+			match = camel_folder_search_by_expression (source, vee_folder->expression, ex);
 			if (match == NULL) /* Search failed */
 				return 0;
 			rebuilded = TRUE;
 		}
 
 	}
-	dd (printf ("vee_rebuild_folder (%s <- %s %s): match %d, correlating %d, rebuilded %d\n",
+	dd (printf ("vee_folder_rebuild_folder (%s <- %s %s): match %d, correlating %d, rebuilded %d\n",
 		folder->full_name, source->full_name, shash, match->len, correlating, rebuilded));
 
 	u.source = source;
-	u.vf = vf;
+	u.vee_folder = vee_folder;
 	u.folder_unmatched = folder_unmatched;
 	u.unmatched_uids = unmatched_uids;
 	u.rebuilt = rebuilded;
 	u.correlating = correlating;
 
-	camel_vee_folder_lock (vf, CVF_SUMMARY_LOCK);
+	camel_vee_folder_lock (vee_folder, CVF_SUMMARY_LOCK);
 
 	/* we build 2 hash tables, one for all uid's not matched, the
 	   other for all matched uid's, we just ref the real memory */
@@ -1226,7 +1779,7 @@ vee_rebuild_folder (CamelVeeFolder *vf, CamelFolder *source, CamelException *ex)
 						i -= (last-start)+1;
 						start = last = i;
 					}
-					camel_folder_change_info_remove_uid (vf->changes, camel_message_info_uid (mi));
+					camel_folder_change_info_remove_uid (vee_folder->changes, camel_message_info_uid (mi));
 					if (!CAMEL_IS_VEE_FOLDER (source)
 					    && unmatched_uids != NULL
 					    && g_hash_table_lookup_extended (unmatched_uids, uid, (gpointer *)&oldkey, &oldval)) {
@@ -1292,18 +1845,20 @@ vee_rebuild_folder (CamelVeeFolder *vf, CamelFolder *source, CamelException *ex)
 		camel_vee_folder_unlock (folder_unmatched, CVF_SUMMARY_LOCK);
 	}
 
-	if (camel_folder_change_info_changed (vf->changes)) {
-		vf_changes = vf->changes;
-		vf->changes = camel_folder_change_info_new ();
+	if (camel_folder_change_info_changed (vee_folder->changes)) {
+		vee_folder_changes = vee_folder->changes;
+		vee_folder->changes = camel_folder_change_info_new ();
 	}
 
-	camel_vee_folder_unlock (vf, CVF_SUMMARY_LOCK);
+	camel_vee_folder_unlock (vee_folder, CVF_SUMMARY_LOCK);
 
 	/* Del the unwanted things from the summary, we don't hold any locks now. */
 	if (del_list) {
 		if (!correlating) {
 			CamelException ex = CAMEL_EXCEPTION_INITIALISER;
-			camel_db_delete_vuids (folder->parent_store->cdb_w, folder->full_name, shash, del_list, &ex);
+			camel_db_delete_vuids (
+				folder->parent_store->cdb_w,
+				folder->full_name, shash, del_list, &ex);
 			camel_exception_clear (&ex);
 		}
 		((CamelVeeSummary *)folder->summary)->force_counts = TRUE;
@@ -1317,7 +1872,7 @@ vee_rebuild_folder (CamelVeeFolder *vf, CamelFolder *source, CamelException *ex)
 
 	g_free (shash);
 	/* if expression not set, we only had a null list */
-	if (vf->expression == NULL || !rebuilded) {
+	if (vee_folder->expression == NULL || !rebuilded) {
 		g_ptr_array_foreach (match, (GFunc) camel_pstring_free, NULL);
 		g_ptr_array_free (match, TRUE);
 	} else
@@ -1329,469 +1884,22 @@ vee_rebuild_folder (CamelVeeFolder *vf, CamelFolder *source, CamelException *ex)
 		camel_folder_change_info_free (unmatched_changes);
 	}
 
-	if (vf_changes) {
-		camel_object_trigger_event ((CamelObject *)vf, "folder_changed", vf_changes);
-		camel_folder_change_info_free (vf_changes);
+	if (vee_folder_changes) {
+		camel_object_trigger_event ((CamelObject *)vee_folder, "folder_changed", vee_folder_changes);
+		camel_folder_change_info_free (vee_folder_changes);
 	}
 
 	return 0;
 }
 
-/* Hold all these with summary lock and unmatched summary lock held */
-static void
-folder_changed_add_uid (CamelFolder *sub, const gchar *uid, const gchar hash[8], CamelVeeFolder *vf, gboolean use_db)
-{
-	CamelFolder *folder = (CamelFolder *)vf;
-	CamelVeeMessageInfo *vinfo;
-	const gchar *vuid;
-	gchar *oldkey;
-	gpointer oldval;
-	gint n;
-	CamelVeeFolder *folder_unmatched = vf->parent_vee_store ? vf->parent_vee_store->folder_unmatched : NULL;
-	GHashTable *unmatched_uids = vf->parent_vee_store ? vf->parent_vee_store->unmatched_uids : NULL;
-
-	vinfo = vee_folder_add_uid (vf, sub, uid, hash);
-	if (vinfo == NULL)
-		return;
-
-	vuid = camel_pstring_strdup (camel_message_info_uid (vinfo));
-	camel_message_info_free ((CamelMessageInfo *) vinfo);
-	if (use_db) {
-		CamelException ex = CAMEL_EXCEPTION_INITIALISER;
-		camel_db_add_to_vfolder_transaction (folder->parent_store->cdb_w, folder->full_name, vuid, &ex);
-		camel_exception_clear (&ex);
-	}
-	camel_folder_change_info_add_uid (vf->changes,  vuid);
-	if ((vf->flags & CAMEL_STORE_FOLDER_PRIVATE) == 0 && !CAMEL_IS_VEE_FOLDER (sub) && folder_unmatched != NULL) {
-		if (g_hash_table_lookup_extended (unmatched_uids, vuid, (gpointer *)&oldkey, &oldval)) {
-			n = GPOINTER_TO_INT (oldval);
-			g_hash_table_insert (unmatched_uids, oldkey, GINT_TO_POINTER (n+1));
-		} else {
-			g_hash_table_insert (unmatched_uids, g_strdup (vuid), GINT_TO_POINTER (1));
-		}
-		vinfo = (CamelVeeMessageInfo *)camel_folder_get_message_info ((CamelFolder *)folder_unmatched, vuid);
-		if (vinfo) {
-			CamelException ex = CAMEL_EXCEPTION_INITIALISER;
-			camel_folder_change_info_remove_uid (folder_unmatched->changes, vuid);
-			camel_db_delete_uid_from_vfolder_transaction (folder->parent_store->cdb_w, ((CamelFolder *)folder_unmatched)->full_name, vuid, &ex);
-			camel_folder_summary_remove_uid_fast (((CamelFolder *)folder_unmatched)->summary, vuid);
-			camel_folder_free_message_info ((CamelFolder *)folder_unmatched, (CamelMessageInfo *)vinfo);
-			camel_exception_clear (&ex);
-		}
-	}
-
-	camel_pstring_free (vuid);
-}
-
-static void
-folder_changed_remove_uid (CamelFolder *sub, const gchar *uid, const gchar hash[8], gint keep, CamelVeeFolder *vf, gboolean use_db)
-{
-	CamelFolder *folder = (CamelFolder *)vf;
-	gchar *vuid, *oldkey;
-	gpointer oldval;
-	gint n;
-	CamelVeeMessageInfo *vinfo;
-	CamelVeeFolder *folder_unmatched = vf->parent_vee_store ? vf->parent_vee_store->folder_unmatched : NULL;
-	GHashTable *unmatched_uids = vf->parent_vee_store ? vf->parent_vee_store->unmatched_uids : NULL;
-
-	vuid = alloca (strlen (uid)+9);
-	memcpy (vuid, hash, 8);
-	strcpy (vuid+8, uid);
-
-	camel_folder_change_info_remove_uid (vf->changes, vuid);
-	if (use_db) {
-		/* FIXME[disk-summary] Handle exception */
-		CamelException ex = CAMEL_EXCEPTION_INITIALISER;
-		camel_db_delete_uid_from_vfolder_transaction (folder->parent_store->cdb_w, folder->full_name, vuid, &ex);
-		camel_exception_clear (&ex);
-	}
-	camel_folder_summary_remove_uid_fast (folder->summary, vuid);
-
-	if ((vf->flags & CAMEL_STORE_FOLDER_PRIVATE) == 0 && !CAMEL_IS_VEE_FOLDER (sub) && folder_unmatched != NULL) {
-		if (keep) {
-			if (g_hash_table_lookup_extended (unmatched_uids, vuid, (gpointer *)&oldkey, &oldval)) {
-				n = GPOINTER_TO_INT (oldval);
-				if (n == 1) {
-					g_hash_table_remove (unmatched_uids, oldkey);
-					if (vee_folder_add_uid_test (folder_unmatched, sub, uid, hash))
-						camel_folder_change_info_add_uid (folder_unmatched->changes, oldkey);
-					g_free (oldkey);
-				} else {
-					g_hash_table_insert (unmatched_uids, oldkey, GINT_TO_POINTER (n-1));
-				}
-			} else {
-				if (vee_folder_add_uid_test (folder_unmatched, sub, uid, hash))
-					camel_folder_change_info_add_uid (folder_unmatched->changes, oldkey);
-			}
-		} else {
-			if (g_hash_table_lookup_extended (unmatched_uids, vuid, (gpointer *)&oldkey, &oldval)) {
-				g_hash_table_remove (unmatched_uids, oldkey);
-				g_free (oldkey);
-			}
-
-			vinfo = (CamelVeeMessageInfo *)camel_folder_get_message_info ((CamelFolder *)folder_unmatched, vuid);
-			if (vinfo) {
-				CamelException ex = CAMEL_EXCEPTION_INITIALISER;
-				camel_folder_change_info_remove_uid (folder_unmatched->changes, vuid);
-				camel_db_delete_uid_from_vfolder_transaction (folder->parent_store->cdb_w, ((CamelFolder *)folder_unmatched)->full_name, vuid, &ex);
-				camel_folder_summary_remove_uid_fast (((CamelFolder *)folder_unmatched)->summary, vuid);
-				camel_folder_free_message_info ((CamelFolder *)folder_unmatched, (CamelMessageInfo *)vinfo);
-				camel_exception_clear (&ex);
-			}
-		}
-	}
-}
-
-static void
-folder_changed_change_uid (CamelFolder *sub, const gchar *uid, const gchar hash[8], CamelVeeFolder *vf, gboolean use_db)
-{
-	gchar *vuid;
-	CamelVeeMessageInfo *vinfo, *uinfo = NULL;
-	CamelMessageInfo *info;
-	CamelFolder *folder = (CamelFolder *)vf;
-	CamelVeeFolder *folder_unmatched = vf->parent_vee_store ? vf->parent_vee_store->folder_unmatched : NULL;
-
-	vuid = alloca (strlen (uid)+9);
-	memcpy (vuid, hash, 8);
-	strcpy (vuid+8, uid);
-
-	vinfo = (CamelVeeMessageInfo *)camel_folder_summary_uid (folder->summary, vuid);
-	if (folder_unmatched != NULL)
-		uinfo = (CamelVeeMessageInfo *)camel_folder_summary_uid (((CamelFolder *)folder_unmatched)->summary, vuid);
-	if (vinfo || uinfo) {
-		info = camel_folder_get_message_info (sub, uid);
-		if (info) {
-			if (vinfo) {
-				camel_folder_change_info_change_uid (vf->changes, vuid);
-				camel_message_info_free ((CamelMessageInfo *)vinfo);
-			}
-
-			if (uinfo) {
-				camel_folder_change_info_change_uid (folder_unmatched->changes, vuid);
-				camel_message_info_free ((CamelMessageInfo *)uinfo);
-			}
-
-			camel_folder_free_message_info (sub, info);
-		} else {
-			if (vinfo) {
-				folder_changed_remove_uid (sub, uid, hash, FALSE, vf, use_db);
-				camel_message_info_free ((CamelMessageInfo *)vinfo);
-			}
-			if (uinfo)
-				camel_message_info_free ((CamelMessageInfo *)uinfo);
-		}
-	}
-}
-
-struct _folder_changed_msg {
-	CamelSessionThreadMsg msg;
-	CamelFolderChangeInfo *changes;
-	CamelFolder *sub;
-	CamelVeeFolder *vf;
-};
-
-static void
-folder_changed_change (CamelSession *session, CamelSessionThreadMsg *msg)
-{
-	struct _folder_changed_msg *m = (struct _folder_changed_msg *)msg;
-	CamelFolder *sub = m->sub;
-	CamelFolder *folder = (CamelFolder *)m->vf;
-	CamelVeeFolder *vf = m->vf;
-	CamelFolderChangeInfo *changes = m->changes;
-	gchar *vuid = NULL, hash[8];
-	const gchar *uid;
-	CamelVeeMessageInfo *vinfo;
-	gint i, vuidlen = 0;
-	CamelFolderChangeInfo *vf_changes = NULL, *unmatched_changes = NULL;
-	GPtrArray *matches_added = NULL, /* newly added, that match */
-		*matches_changed = NULL, /* newly changed, that now match */
-		*newchanged = NULL,
-		*changed;
-	GPtrArray *always_changed = NULL;
-	GHashTable *matches_hash;
-	CamelVeeFolder *folder_unmatched = vf->parent_vee_store ? vf->parent_vee_store->folder_unmatched : NULL;
-	GHashTable *unmatched_uids = vf->parent_vee_store ? vf->parent_vee_store->unmatched_uids : NULL;
-	GPtrArray *present = NULL;
-
-	/* See vee_rebuild_folder. */
-	gboolean correlating = expression_is_correlating (vf->expression);
-
-	/* Check the folder hasn't beem removed while we weren't watching */
-	camel_vee_folder_lock (vf, CVF_SUBFOLDER_LOCK);
-	if (g_list_find (_PRIVATE (vf)->folders, sub) == NULL) {
-		camel_vee_folder_unlock (vf, CVF_SUBFOLDER_LOCK);
-		return;
-	}
-
-	camel_vee_folder_hash_folder (sub, hash);
-
-	/* Lookup anything before we lock anything, to avoid deadlock with build_folder */
-
-	/* Find newly added that match */
-	if (changes->uid_added->len > 0) {
-		CamelException ex = CAMEL_EXCEPTION_INITIALISER;
-		dd (printf (" Searching for added matches '%s'\n", vf->expression));
-		matches_added = camel_folder_search_by_uids (sub, vf->expression, changes->uid_added, &ex);
-		camel_exception_clear (&ex);
-	}
-
-	/* TODO:
-	   In this code around here, we can work out if the search will affect the changes
-	   we had, and only re-search against them if they might have */
-
-	/* Search for changed items that newly match, but only if we dont have them */
-	changed = changes->uid_changed;
-	if (changed->len > 0) {
-		CamelException ex = CAMEL_EXCEPTION_INITIALISER;
-		dd (printf (" Searching for changed matches '%s'\n", vf->expression));
-
-		if ((vf->flags & CAMEL_STORE_VEE_FOLDER_AUTO) == 0) {
-			newchanged = g_ptr_array_new ();
-			always_changed = g_ptr_array_new ();
-			for (i=0;i<changed->len;i++) {
-				uid = changed->pdata[i];
-				if (strlen (uid)+9 > vuidlen) {
-					vuidlen = strlen (uid)+64;
-					vuid = g_realloc (vuid, vuidlen);
-				}
-				memcpy (vuid, hash, 8);
-				strcpy (vuid+8, uid);
-				vinfo = (CamelVeeMessageInfo *)camel_folder_summary_uid (folder->summary, vuid);
-				if (vinfo == NULL) {
-					g_ptr_array_add (newchanged, (gchar *)uid);
-				} else {
-					g_ptr_array_add (always_changed, (gchar *)uid);
-					camel_message_info_free ((CamelMessageInfo *)vinfo);
-				}
-			}
-			changed = newchanged;
-		}
-
-		if (changed->len)
-			matches_changed = camel_folder_search_by_uids (sub, vf->expression, changed, &ex);
-		camel_exception_clear (&ex);
-		if (always_changed && always_changed->len)
-			present = camel_folder_search_by_uids (sub, vf->expression, always_changed, &ex);
-		camel_exception_clear (&ex);
-	}
-
-	camel_vee_folder_lock (vf, CVF_SUMMARY_LOCK);
-
-	if (folder_unmatched != NULL)
-		camel_vee_folder_lock (folder_unmatched, CVF_SUMMARY_LOCK);
-
-	if (matches_changed || matches_added || changes->uid_removed->len||present)
-		camel_db_begin_transaction (folder->parent_store->cdb_w, NULL);
-
-	dd (printf ("Vfolder '%s' subfolder changed '%s'\n", folder->full_name, sub->full_name));
-	dd (printf (" changed %u added %u removed %u\n", changes->uid_changed->len, changes->uid_added->len, changes->uid_removed->len));
-
-	/* Always remove removed uid's, in any case */
-	for (i=0;i<changes->uid_removed->len;i++) {
-		dd (printf ("  removing uid '%s'\n", (gchar *)changes->uid_removed->pdata[i]));
-		folder_changed_remove_uid (sub, changes->uid_removed->pdata[i], hash, FALSE, vf, !correlating);
-	}
-
-	/* Add any newly matched or to unmatched folder if they dont */
-	if (matches_added) {
-		matches_hash = g_hash_table_new (g_str_hash, g_str_equal);
-		for (i=0;i<matches_added->len;i++) {
-			dd (printf (" %s", (gchar *)matches_added->pdata[i]));
-			g_hash_table_insert (matches_hash, matches_added->pdata[i], matches_added->pdata[i]);
-		}
-		for (i=0;i<changes->uid_added->len;i++) {
-			uid = changes->uid_added->pdata[i];
-			if (g_hash_table_lookup (matches_hash, uid)) {
-				dd (printf ("  adding uid '%s' [newly matched]\n", (gchar *)uid));
-				folder_changed_add_uid (sub, uid, hash, vf, !correlating);
-			} else if ((vf->flags & CAMEL_STORE_FOLDER_PRIVATE) == 0) {
-				if (strlen (uid)+9 > vuidlen) {
-					vuidlen = strlen (uid)+64;
-					vuid = g_realloc (vuid, vuidlen);
-				}
-				memcpy (vuid, hash, 8);
-				strcpy (vuid+8, uid);
-
-				if (!CAMEL_IS_VEE_FOLDER (sub) && folder_unmatched != NULL && g_hash_table_lookup (unmatched_uids, vuid) == NULL) {
-					dd (printf ("  adding uid '%s' to Unmatched [newly unmatched]\n", (gchar *)uid));
-					vinfo = (CamelVeeMessageInfo *)camel_folder_get_message_info ((CamelFolder *)folder_unmatched, vuid);
-					if (vinfo == NULL) {
-						if (vee_folder_add_uid_test (folder_unmatched, sub, uid, hash))
-							camel_folder_change_info_add_uid (folder_unmatched->changes, vuid);
-					} else {
-						camel_folder_free_message_info ((CamelFolder *)folder_unmatched, (CamelMessageInfo *)vinfo);
-					}
-				}
-			}
-		}
-		g_hash_table_destroy (matches_hash);
-	}
-
-	/* Change any newly changed */
-	if (always_changed) {
-		if (correlating) {
-			/* Messages may be pulled in by the correlation even if
-			 * they do not match the expression individually, so it
-			 * would be wrong to preemptively remove anything here.
-			 * vee_rebuild_folder will make any necessary removals
-			 * when it re-queries the entire source folder. */
-			for (i=0;i<always_changed->len;i++)
-				folder_changed_change_uid (sub, always_changed->pdata[i], hash, vf, !correlating);
-		} else {
-			GHashTable *ht_present = g_hash_table_new (g_str_hash, g_str_equal);
-
-			for (i=0;present && i<present->len;i++) {
-				folder_changed_change_uid (sub, present->pdata[i], hash, vf, !correlating);
-				g_hash_table_insert (ht_present, present->pdata[i], present->pdata[i]);
-			}
-
-			for (i=0; i<always_changed->len; i++) {
-				if (!present || !g_hash_table_lookup (ht_present, always_changed->pdata[i]))
-					/* XXX: IIUC, these messages haven't been deleted from the
-					 * source folder, so shouldn't "keep" be set to TRUE? */
-					folder_changed_remove_uid (sub, always_changed->pdata[i], hash, TRUE, vf, !correlating);
-			}
-
-			g_hash_table_destroy (ht_present);
-		}
-		g_ptr_array_free (always_changed, TRUE);
-	}
-
-	/* Change/add/remove any changed */
-	if (changes->uid_changed->len) {
-		/* If we are auto-updating, then re-check changed uids still match */
-		dd (printf (" Vfolder %supdate\nuids match:", (vf->flags & CAMEL_STORE_VEE_FOLDER_AUTO)?"auto-":""));
-		matches_hash = g_hash_table_new (g_str_hash, g_str_equal);
-		for (i=0;matches_changed && i<matches_changed->len;i++) {
-			dd (printf (" %s", (gchar *)matches_changed->pdata[i]));
-			g_hash_table_insert (matches_hash, matches_changed->pdata[i], matches_changed->pdata[i]);
-		}
-		dd (printf ("\n"));
-
-		for (i=0;i<changed->len;i++) {
-			uid = changed->pdata[i];
-			if (strlen (uid)+9 > vuidlen) {
-				vuidlen = strlen (uid)+64;
-				vuid = g_realloc (vuid, vuidlen);
-			}
-			memcpy (vuid, hash, 8);
-			strcpy (vuid+8, uid);
-			vinfo = (CamelVeeMessageInfo *)camel_folder_summary_uid (folder->summary, vuid);
-			if (vinfo == NULL) {
-				if (g_hash_table_lookup (matches_hash, uid)) {
-					/* A uid we dont have, but now it matches, add it */
-					dd (printf ("  adding uid '%s' [newly matched]\n", uid));
-					folder_changed_add_uid (sub, uid, hash, vf, !correlating);
-				} else {
-					/* A uid we still don't have, just change it (for unmatched) */
-					folder_changed_change_uid (sub, uid, hash, vf, !correlating);
-				}
-			} else {
-				if ((vf->flags & CAMEL_STORE_VEE_FOLDER_AUTO) == 0
-				    || g_hash_table_lookup (matches_hash, uid)) {
-					/* still match, or we're not auto-updating, change event, (if it changed) */
-					dd (printf ("  changing uid '%s' [still matches]\n", uid));
-					folder_changed_change_uid (sub, uid, hash, vf, !correlating);
-				} else {
-					/* No longer matches, remove it, but keep it in unmatched (potentially) */
-					dd (printf ("  removing uid '%s' [did match]\n", uid));
-					folder_changed_remove_uid (sub, uid, hash, TRUE, vf, !correlating);
-				}
-				camel_message_info_free ((CamelMessageInfo *)vinfo);
-			}
-		}
-		g_hash_table_destroy (matches_hash);
-	} else {
-		/* stuff didn't match but it changed - check unmatched folder for changes */
-		for (i=0;i<changed->len;i++)
-			folder_changed_change_uid (sub, changed->pdata[i], hash, vf, !correlating);
-	}
-
-	if (folder_unmatched != NULL) {
-		if (camel_folder_change_info_changed (folder_unmatched->changes)) {
-			unmatched_changes = folder_unmatched->changes;
-			folder_unmatched->changes = camel_folder_change_info_new ();
-		}
-
-		camel_vee_folder_unlock (folder_unmatched, CVF_SUMMARY_LOCK);
-	}
-
-	if (camel_folder_change_info_changed (vf->changes)) {
-		vf_changes = vf->changes;
-		vf->changes = camel_folder_change_info_new ();
-	}
-
-	if (matches_changed || matches_added || changes->uid_removed->len || present)
-		camel_db_end_transaction (folder->parent_store->cdb_w, NULL);
-	camel_vee_folder_unlock (vf, CVF_SUMMARY_LOCK);
-
-	/* Cleanup stuff on our folder */
-	if (matches_added)
-		camel_folder_search_free (sub, matches_added);
-	if (present)
-		camel_folder_search_free (sub, present);
-
-	if (matches_changed)
-		camel_folder_search_free (sub, matches_changed);
-
-	camel_vee_folder_unlock (vf, CVF_SUBFOLDER_LOCK);
-
-	/* cleanup the rest */
-	if (newchanged)
-		g_ptr_array_free (newchanged, TRUE);
-
-	g_free (vuid);
-
-	if (unmatched_changes) {
-		camel_object_trigger_event ((CamelObject *)folder_unmatched, "folder_changed", unmatched_changes);
-		camel_folder_change_info_free (unmatched_changes);
-	}
-
-	/* Add to folders_changed if we need to call vee_rebuild_folder, which
-	 * could be the case for two reasons:
-	 * - We changed the vfolder and it is not auto-updating.  Need to re-sync.
-	 * - Vfolder is correlating.  Changes to non-matching source messages
-	 *   won't be processed here and won't show up in vf_changes but may
-	 *   still affect the vfolder contents (e.g., non-matching messages
-	 *   added to a matching thread), so we re-run the query on the whole
-	 *   source folder.  (For match-threads, it may be enough to do this if
-	 *   changes->uid_added->len > 0, but I'm not completely sure and I'd
-	 *   rather be safe than sorry.)
-	 */
-	if ((vf_changes && (vf->flags & CAMEL_STORE_VEE_FOLDER_AUTO) == 0) || correlating) {
-		camel_vee_folder_lock (vf, CVF_CHANGED_LOCK);
-		if (g_list_find (vf->priv->folders_changed, sub) == NULL)
-			vf->priv->folders_changed = g_list_prepend (vf->priv->folders_changed, sub);
-		camel_vee_folder_unlock (vf, CVF_CHANGED_LOCK);
-	}
-
-	if (vf_changes) {
-		camel_object_trigger_event ((CamelObject *)vf, "folder_changed", vf_changes);
-		camel_folder_change_info_free (vf_changes);
-	}
-}
-
-static void
-folder_changed_free (CamelSession *session, CamelSessionThreadMsg *msg)
-{
-	struct _folder_changed_msg *m = (struct _folder_changed_msg *)msg;
-
-	camel_folder_change_info_free (m->changes);
-	camel_object_unref (m->vf);
-	camel_object_unref (m->sub);
-}
-
-static CamelSessionThreadOps folder_changed_ops = {
-	folder_changed_change,
-	folder_changed_free,
-};
-
 static void
-folder_changed_base (CamelVeeFolder *vf, CamelFolder *sub, CamelFolderChangeInfo *changes)
+vee_folder_folder_changed (CamelVeeFolder *vee_folder,
+                           CamelFolder *sub,
+                           CamelFolderChangeInfo *changes)
 {
-	struct _CamelVeeFolderPrivate *p = _PRIVATE (vf);
+	CamelVeeFolderPrivate *p = CAMEL_VEE_FOLDER_GET_PRIVATE (vee_folder);
 	struct _folder_changed_msg *m;
-	CamelSession *session = ((CamelService *)((CamelFolder *)vf)->parent_store)->session;
+	CamelSession *session = ((CamelService *)((CamelFolder *)vee_folder)->parent_store)->session;
 
 	if (p->destroyed)
 		return;
@@ -1800,91 +1908,17 @@ folder_changed_base (CamelVeeFolder *vf, CamelFolder *sub, CamelFolderChangeInfo
 	m->changes = camel_folder_change_info_new ();
 	camel_folder_change_info_cat (m->changes, changes);
 	m->sub = camel_object_ref (sub);
-	m->vf = camel_object_ref (vf);
+	m->vee_folder = camel_object_ref (vee_folder);
 	camel_session_thread_queue (session, &m->msg, 0);
 }
 
 static void
-folder_changed (CamelFolder *sub, CamelFolderChangeInfo *changes, CamelVeeFolder *vf)
-{
-	((CamelVeeFolderClass *)((CamelObject *)vf)->klass)->folder_changed (vf, sub, changes);
-}
-
-/* track vanishing folders */
-static void
-subfolder_deleted (CamelFolder *f, gpointer event_data, CamelVeeFolder *vf)
-{
-	camel_vee_folder_remove_folder (vf, f);
-}
-
-static void
-subfolder_renamed_update (CamelVeeFolder *vf, CamelFolder *sub, gchar hash[8])
-{
-	gint count, i;
-	CamelFolderChangeInfo *changes = NULL;
-	CamelVeeFolder *folder_unmatched = vf->parent_vee_store ? vf->parent_vee_store->folder_unmatched : NULL;
-	GHashTable *unmatched_uids = vf->parent_vee_store ? vf->parent_vee_store->unmatched_uids : NULL;
-	CamelFolderSummary *ssummary = sub->summary;
-
-	camel_vee_folder_lock (vf, CVF_SUMMARY_LOCK);
-
-	count = camel_folder_summary_count (((CamelFolder *)vf)->summary);
-	for (i=0;i<count;i++) {
-		CamelVeeMessageInfo *mi = (CamelVeeMessageInfo *)camel_folder_summary_index (((CamelFolder *)vf)->summary, i);
-		CamelVeeMessageInfo *vinfo;
-
-		if (mi == NULL)
-			continue;
-
-		if (mi->summary == ssummary) {
-			gchar *uid = (gchar *)camel_message_info_uid (mi);
-			gchar *oldkey;
-			gpointer oldval;
-
-			camel_folder_change_info_remove_uid (vf->changes, uid);
-			camel_folder_summary_remove (((CamelFolder *)vf)->summary, (CamelMessageInfo *)mi);
-
-			/* works since we always append on the end */
-			i--;
-			count--;
-
-			vinfo = vee_folder_add_uid (vf, sub, uid+8, hash);
-			if (vinfo) {
-				camel_folder_change_info_add_uid (vf->changes, camel_message_info_uid (vinfo));
-
-				/* check unmatched uid's table for any matches */
-				if (vf == folder_unmatched
-				    && g_hash_table_lookup_extended (unmatched_uids, uid, (gpointer *)&oldkey, &oldval)) {
-					g_hash_table_remove (unmatched_uids, oldkey);
-					g_hash_table_insert (unmatched_uids, g_strdup (camel_message_info_uid (vinfo)), oldval);
-					g_free (oldkey);
-				}
-
-				camel_message_info_free ((CamelMessageInfo *) vinfo);
-			}
-		}
-
-		camel_message_info_free ((CamelMessageInfo *)mi);
-	}
-
-	if (camel_folder_change_info_changed (vf->changes)) {
-		changes = vf->changes;
-		vf->changes = camel_folder_change_info_new ();
-	}
-
-	camel_vee_folder_unlock (vf, CVF_SUMMARY_LOCK);
-
-	if (changes) {
-		camel_object_trigger_event ((CamelObject *)vf, "folder_changed", changes);
-		camel_folder_change_info_free (changes);
-	}
-}
-
-static void
-folder_renamed_base (CamelVeeFolder *vf, CamelFolder *f, const gchar *old)
+vee_folder_folder_renamed (CamelVeeFolder *vee_folder,
+                           CamelFolder *f,
+                           const gchar *old)
 {
 	gchar hash[8];
-	CamelVeeFolder *folder_unmatched = vf->parent_vee_store ? vf->parent_vee_store->folder_unmatched : NULL;
+	CamelVeeFolder *folder_unmatched = vee_folder->parent_vee_store ? vee_folder->parent_vee_store->folder_unmatched : NULL;
 
 	/* TODO: This could probably be done in another thread, tho it is pretty quick/memory bound */
 
@@ -1893,341 +1927,226 @@ folder_renamed_base (CamelVeeFolder *vf, CamelFolder *f, const gchar *old)
 
 	camel_vee_folder_hash_folder (f, hash);
 
-	subfolder_renamed_update (vf, f, hash);
+	subfolder_renamed_update (vee_folder, f, hash);
 	if (folder_unmatched != NULL)
 		subfolder_renamed_update (folder_unmatched, f, hash);
 }
 
 static void
-folder_renamed (CamelFolder *sub, const gchar *old, CamelVeeFolder *vf)
+camel_vee_folder_class_init (CamelVeeFolderClass *class)
 {
-	((CamelVeeFolderClass *)((CamelObject *)vf)->klass)->folder_renamed (vf, sub, old);
+	CamelObjectClass *camel_object_class;
+	CamelFolderClass *folder_class;
+
+	camel_vee_folder_parent_class = CAMEL_FOLDER_CLASS (camel_type_get_global_classfuncs (camel_folder_get_type ()));
+
+	camel_object_class = CAMEL_OBJECT_CLASS (class);
+	camel_object_class->getv = vee_folder_getv;
+
+	folder_class = CAMEL_FOLDER_CLASS (class);
+	folder_class->refresh_info = vee_folder_refresh_info;
+	folder_class->sync = vee_folder_sync;
+	folder_class->expunge = vee_folder_expunge;
+	folder_class->get_message = vee_folder_get_message;
+	folder_class->append_message = vee_folder_append_message;
+	folder_class->transfer_messages_to = vee_folder_transfer_messages_to;
+	folder_class->search_by_expression = vee_folder_search_by_expression;
+	folder_class->search_by_uids = vee_folder_search_by_uids;
+	folder_class->count_by_expression = vee_folder_count_by_expression;
+	folder_class->delete = vee_folder_delete;
+	folder_class->freeze = vee_folder_freeze;
+	folder_class->thaw = vee_folder_thaw;
+
+	class->set_expression = vee_folder_set_expression;
+	class->add_folder = vee_folder_add_folder;
+	class->remove_folder = vee_folder_remove_folder;
+	class->rebuild_folder = vee_folder_rebuild_folder;
+	class->folder_changed = vee_folder_folder_changed;
+	class->folder_renamed = vee_folder_folder_renamed;
 }
 
 static void
-vee_freeze (CamelFolder *folder)
+camel_vee_folder_init (CamelVeeFolder *vee_folder)
 {
-	CamelVeeFolder *vfolder = (CamelVeeFolder *)folder;
-	struct _CamelVeeFolderPrivate *p = _PRIVATE (vfolder);
-	GList *node;
+	CamelFolder *folder = CAMEL_FOLDER (vee_folder);
 
-	camel_vee_folder_lock (vfolder, CVF_SUBFOLDER_LOCK);
+	vee_folder->priv = g_new0 (CamelVeeFolderPrivate, 1);
 
-	node = p->folders;
-	while (node) {
-		CamelFolder *f = node->data;
+	folder->folder_flags |= (CAMEL_FOLDER_HAS_SUMMARY_CAPABILITY |
+				 CAMEL_FOLDER_HAS_SEARCH_CAPABILITY);
 
-		camel_folder_freeze (f);
-		node = node->next;
-	}
+	/* FIXME: what to do about user flags if the subfolder doesn't support them? */
+	folder->permanent_flags = CAMEL_MESSAGE_ANSWERED |
+		CAMEL_MESSAGE_DELETED |
+		CAMEL_MESSAGE_DRAFT |
+		CAMEL_MESSAGE_FLAGGED |
+		CAMEL_MESSAGE_SEEN;
 
-	camel_vee_folder_unlock (vfolder, CVF_SUBFOLDER_LOCK);
+	vee_folder->changes = camel_folder_change_info_new ();
+	vee_folder->search = camel_folder_search_new ();
+	vee_folder->hashes = g_hash_table_new_full (
+		g_str_hash, g_str_equal, g_free, NULL);
 
-	/* call parent implementation */
-	CAMEL_FOLDER_CLASS (camel_vee_folder_parent)->freeze (folder);
+	/* Loaded is no longer used.*/
+	vee_folder->loaded = NULL;
+	vee_folder->deleted = FALSE;
+	vee_folder->priv->summary_lock = g_mutex_new ();
+	vee_folder->priv->subfolder_lock = g_mutex_new ();
+	vee_folder->priv->changed_lock = g_mutex_new ();
+	vee_folder->priv->unread_vfolder = -1;
 }
 
-static void
-vee_thaw (CamelFolder *folder)
+CamelType
+camel_vee_folder_get_type (void)
 {
-	CamelVeeFolder *vfolder = (CamelVeeFolder *)folder;
-	struct _CamelVeeFolderPrivate *p = _PRIVATE (vfolder);
-	GList *node;
-
-	camel_vee_folder_lock (vfolder, CVF_SUBFOLDER_LOCK);
-
-	node = p->folders;
-	while (node) {
-		CamelFolder *f = node->data;
+	static CamelType type = CAMEL_INVALID_TYPE;
 
-		camel_folder_thaw (f);
-		node = node->next;
+	if (type == CAMEL_INVALID_TYPE) {
+		type = camel_type_register (camel_folder_get_type (), "CamelVeeFolder",
+					    sizeof (CamelVeeFolder),
+					    sizeof (CamelVeeFolderClass),
+					    (CamelObjectClassInitFunc) camel_vee_folder_class_init,
+					    NULL,
+					    (CamelObjectInitFunc) camel_vee_folder_init,
+					    (CamelObjectFinalizeFunc) vee_folder_finalize);
 	}
 
-	camel_vee_folder_unlock (vfolder, CVF_SUBFOLDER_LOCK);
-
-	/* call parent implementation */
-	CAMEL_FOLDER_CLASS (camel_vee_folder_parent)->thaw (folder);
-}
-
-/* vfolder base implementaitons */
-static void
-vee_add_folder (CamelVeeFolder *vf, CamelFolder *sub)
-{
-	CamelException ex = CAMEL_EXCEPTION_INITIALISER;
-
-	vee_rebuild_folder (vf, sub, &ex);
-
-	camel_exception_clear (&ex);
+	return type;
 }
 
-static void
-vee_remove_folder (CamelVeeFolder *vf, CamelFolder *sub)
+void
+camel_vee_folder_construct (CamelVeeFolder *vf, CamelStore *parent_store, const gchar *full, const gchar *name, guint32 flags)
 {
-	gchar *shash, hash[8];
-	CamelVeeFolder *folder_unmatched = vf->parent_vee_store ? vf->parent_vee_store->folder_unmatched : NULL;
-
-	camel_vee_folder_hash_folder (sub, hash);
-	vee_folder_remove_folder (vf, sub);
-	shash = g_strdup_printf ("%c%c%c%c%c%c%c%c", hash[0], hash[1], hash[2], hash[3], hash[4], hash[5], hash[6], hash[7]);
-	if (g_hash_table_lookup (vf->hashes, shash)) {
-		g_hash_table_remove (vf->hashes, shash);
-	}
+	CamelFolder *folder = (CamelFolder *)vf;
 
-	if (folder_unmatched && g_hash_table_lookup (folder_unmatched->hashes, shash)) {
-		g_hash_table_remove (folder_unmatched->hashes, shash);
-	}
+	vf->flags = flags;
+	camel_folder_construct (folder, parent_store, full, name);
 
-	g_free (shash);
+	folder->summary = camel_vee_summary_new (folder);
 
+	if (CAMEL_IS_VEE_STORE (parent_store))
+		vf->parent_vee_store = (CamelVeeStore *)parent_store;
 }
 
-static void
-vee_set_expression (CamelVeeFolder *vf, const gchar *query)
+/**
+ * camel_vee_folder_new:
+ * @parent_store: the parent CamelVeeStore
+ * @full: the full path to the vfolder.
+ * @flags: flags of some kind
+ *
+ * Create a new CamelVeeFolder object.
+ *
+ * Returns: A new CamelVeeFolder widget.
+ **/
+CamelFolder *
+camel_vee_folder_new (CamelStore *parent_store, const gchar *full, guint32 flags)
 {
-	struct _CamelVeeFolderPrivate *p = _PRIVATE (vf);
-	GList *node;
-	CamelException ex = CAMEL_EXCEPTION_INITIALISER;
-
-	camel_vee_folder_lock (vf, CVF_SUBFOLDER_LOCK);
+	CamelVeeFolder *vf;
+	gchar *tmp;
 
-	/* no change, do nothing */
-	if ((vf->expression && query && strcmp (vf->expression, query) == 0)
-	    || (vf->expression == NULL && query == NULL)) {
-		camel_vee_folder_unlock (vf, CVF_SUBFOLDER_LOCK);
-		return;
-	}
+	if (CAMEL_IS_VEE_STORE (parent_store) && strcmp (full, CAMEL_UNMATCHED_NAME) == 0) {
+		vf = ((CamelVeeStore *)parent_store)->folder_unmatched;
+		camel_object_ref (vf);
+	} else {
+		const gchar *name = strrchr (full, '/');
 
-	/* Recreate the table when the query changes, only if we are not setting it first */
-	if (vf->expression) {
-		CamelFolderSummary *s = ((CamelFolder *)vf)->summary;
-		camel_folder_summary_clear (s);
-		camel_db_recreate_vfolder (((CamelFolder *) vf)->parent_store->cdb_w, ((CamelFolder *) vf)->full_name, &ex);
-		camel_exception_clear (&ex);
-		s->junk_count = 0;
-		s->deleted_count = 0;
-		s->unread_count = 0;
-		s->visible_count = 0;
-		s->junk_not_deleted_count = 0;
+		if (name == NULL)
+			name = full;
+		else
+			name++;
+		vf = (CamelVeeFolder *)camel_object_new (camel_vee_folder_get_type ());
+		camel_vee_folder_construct (vf, parent_store, full, name, flags);
 	}
 
-	g_free (vf->expression);
-	if (query)
-		vf->expression = g_strdup (query);
-
-	node = p->folders;
-	while (node) {
-		CamelFolder *f = node->data;
-
-		if (camel_vee_folder_rebuild_folder (vf, f, &ex) == -1)
-			break;
-
-		camel_exception_clear (&ex);
+	d (printf ("returning folder %s %p, count = %d\n", full, vf, camel_folder_get_message_count ((CamelFolder *)vf)));
 
-		node = node->next;
+	if (vf) {
+		tmp = g_strdup_printf ("%s/%s.cmeta", ((CamelService *)parent_store)->url->path, full);
+		camel_object_set (vf, NULL, CAMEL_OBJECT_STATE_FILE, tmp, NULL);
+		g_free (tmp);
+		if (camel_object_state_read (vf) == -1) {
+			/* setup defaults: we have none currently */
+		}
 	}
-
-	camel_exception_clear (&ex);
-
-	camel_vee_folder_lock (vf, CVF_CHANGED_LOCK);
-	g_list_free (p->folders_changed);
-	p->folders_changed = NULL;
-	camel_vee_folder_unlock (vf, CVF_CHANGED_LOCK);
-
-	camel_vee_folder_unlock (vf, CVF_SUBFOLDER_LOCK);
+	return (CamelFolder *)vf;
 }
 
-/* This entire code will be useless, since we sync the counts always. */
-static gint
-vf_getv (CamelObject *object, CamelException *ex, CamelArgGetV *args)
+void
+camel_vee_folder_set_expression (CamelVeeFolder *vf, const gchar *query)
 {
-	CamelFolder *folder = (CamelFolder *)object;
-	CamelVeeFolder *vf = (CamelVeeFolder *)folder;
-	gint i;
-	guint32 tag;
-	gint unread = -1, deleted = 0, junked = 0, visible = 0, count = -1, junked_not_deleted = -1;
-
-	for (i=0;i<args->argc;i++) {
-		CamelArgGet *arg = &args->argv[i];
-
-		tag = arg->tag;
-
-		/* NB: this is a copy of camel-folder.c with the unread count logic altered.
-		   makes sure its still atomically calculated */
-		switch (tag & CAMEL_ARG_TAG) {
-		case CAMEL_FOLDER_ARG_UNREAD:
-		case CAMEL_FOLDER_ARG_DELETED:
-		case CAMEL_FOLDER_ARG_JUNKED:
-		case CAMEL_FOLDER_ARG_JUNKED_NOT_DELETED:
-		case CAMEL_FOLDER_ARG_VISIBLE:
-
-			if (vf->expression && vf->priv->unread_vfolder == -1)
-				camel_vee_summary_load_check_unread_vfolder ((CamelVeeSummary *)folder->summary);
-
-			/* This is so we can get the values atomically, and also so we can calculate them only once */
-			if (unread == -1) {
-				gint j;
-				CamelMessageInfoBase *info;
-				CamelVeeMessageInfo *vinfo;
-
-				unread = deleted = visible = junked = junked_not_deleted = 0;
-				count = camel_folder_summary_count (folder->summary);
-				for (j=0; j<count; j++) {
-					if ((info = (CamelMessageInfoBase *) camel_folder_summary_index (folder->summary, j))) {
-						guint32 flags;
-
-						vinfo = (CamelVeeMessageInfo *) info;
-						flags = vinfo->old_flags; /* ? vinfo->old_flags : camel_message_info_flags (info); */
-
-						if ((flags & (CAMEL_MESSAGE_SEEN)) == 0)
-							unread++;
-						if (flags & CAMEL_MESSAGE_DELETED)
-							deleted++;
-						if (flags & CAMEL_MESSAGE_JUNK) {
-							junked++;
-								if (!(flags & CAMEL_MESSAGE_DELETED))
-									junked_not_deleted++;
-						}
-						if ((flags & (CAMEL_MESSAGE_DELETED|CAMEL_MESSAGE_JUNK)) == 0)
-							visible++;
-						camel_message_info_free (info);
-					}
-				}
-			}
-
-			switch (tag & CAMEL_ARG_TAG) {
-			case CAMEL_FOLDER_ARG_UNREAD:
-				if (vf->priv->unread_vfolder == 1)
-					count = unread == -1 ? 0 : unread - junked_not_deleted;
-				else
-					count = unread == -1 ? 0 : unread;
-				break;
-			case CAMEL_FOLDER_ARG_DELETED:
-				count = deleted == -1 ? 0 : deleted;
-				break;
-			case CAMEL_FOLDER_ARG_JUNKED:
-				count = junked == -1 ? 0 : junked;
-				break;
-			case CAMEL_FOLDER_ARG_JUNKED_NOT_DELETED:
-				count = junked_not_deleted == -1 ? 0 : junked_not_deleted;
-				break;
-			case CAMEL_FOLDER_ARG_VISIBLE:
-				if (vf->priv->unread_vfolder == 1)
-					count = unread == -1 ? 0 : unread - junked_not_deleted;
-				else
-					count = visible == -1 ? 0 : visible;
-
-				break;
-			}
-			folder->summary->unread_count = unread == -1 ? 0 : unread;
-			folder->summary->deleted_count = deleted == -1 ? 0 : deleted;
-			junked = folder->summary->junk_count = junked == -1 ? 0 : junked;
-			folder->summary->junk_not_deleted_count = junked_not_deleted == -1 ? 0 : junked_not_deleted;
-			folder->summary->visible_count = visible == -1 ? 0 : visible;
-			*arg->ca_int = count;
-			break;
-		default:
-			continue;
-		}
-
-		arg->tag = (tag & CAMEL_ARG_TYPE) | CAMEL_ARG_IGNORE;
-	}
-
-	return ((CamelObjectClass *)camel_vee_folder_parent)->getv (object, ex, args);
+	CAMEL_VEE_FOLDER_GET_CLASS (vf)->set_expression (vf, query);
 }
 
-static void
-camel_vee_folder_class_init (CamelVeeFolderClass *klass)
+/**
+ * camel_vee_folder_add_folder:
+ * @vf: Virtual Folder object
+ * @sub: source CamelFolder to add to @vf
+ *
+ * Adds @sub as a source folder to @vf.
+ **/
+void
+camel_vee_folder_add_folder (CamelVeeFolder *vf, CamelFolder *sub)
 {
-	CamelFolderClass *folder_class = (CamelFolderClass *) klass;
-
-	camel_vee_folder_parent = CAMEL_FOLDER_CLASS (camel_type_get_global_classfuncs (camel_folder_get_type ()));
-
-	((CamelObjectClass *)klass)->getv = vf_getv;
+	CamelVeeFolderPrivate *p = CAMEL_VEE_FOLDER_GET_PRIVATE (vf);
+	gint i;
+	CamelVeeFolder *folder_unmatched = vf->parent_vee_store ? vf->parent_vee_store->folder_unmatched : NULL;
 
-	folder_class->refresh_info = vee_refresh_info;
-	folder_class->sync = vee_sync;
-	folder_class->expunge = vee_expunge;
+	if (vf == (CamelVeeFolder *)sub) {
+		g_warning ("Adding a virtual folder to itself as source, ignored");
+		return;
+	}
 
-	folder_class->get_message = vee_get_message;
-	folder_class->append_message = vee_append_message;
-	folder_class->transfer_messages_to = vee_transfer_messages_to;
+	camel_vee_folder_lock (vf, CVF_SUBFOLDER_LOCK);
 
-	folder_class->search_by_expression = vee_search_by_expression;
-	folder_class->search_by_uids = vee_search_by_uids;
-	folder_class->count_by_expression = vee_count_by_expression;
+	/* for normal vfolders we want only unique ones, for unmatched we want them all recorded */
+	if (g_list_find (p->folders, sub) == NULL) {
+		p->folders = g_list_append (
+			p->folders, camel_object_ref (sub));
 
-	folder_class->rename = vee_rename;
-	folder_class->delete = vee_delete;
+		camel_folder_lock (CAMEL_FOLDER (vf), CF_CHANGE_LOCK);
 
-	folder_class->freeze = vee_freeze;
-	folder_class->thaw = vee_thaw;
+		/* update the freeze state of 'sub' to match our freeze state */
+		for (i = 0; i < camel_folder_get_frozen_count ((CamelFolder *)vf); i++)
+			camel_folder_freeze (sub);
 
-	klass->set_expression = vee_set_expression;
-	klass->add_folder = vee_add_folder;
-	klass->remove_folder = vee_remove_folder;
-	klass->rebuild_folder = vee_rebuild_folder;
-	klass->folder_changed = folder_changed_base;
-	klass->folder_renamed = folder_renamed_base;
-}
+		camel_folder_unlock (CAMEL_FOLDER (vf), CF_CHANGE_LOCK);
+	}
+	if ((vf->flags & CAMEL_STORE_FOLDER_PRIVATE) == 0 && !CAMEL_IS_VEE_FOLDER (sub) && folder_unmatched != NULL) {
+		CamelVeeFolderPrivate *up = CAMEL_VEE_FOLDER_GET_PRIVATE (folder_unmatched);
+		up->folders = g_list_append (
+			up->folders, camel_object_ref (sub));
 
-static void
-camel_vee_folder_init (CamelVeeFolder *obj)
-{
-	struct _CamelVeeFolderPrivate *p;
-	CamelFolder *folder = (CamelFolder *)obj;
+		camel_folder_lock (CAMEL_FOLDER (folder_unmatched), CF_CHANGE_LOCK);
 
-	p = _PRIVATE (obj) = g_malloc0 (sizeof (*p));
+		/* update the freeze state of 'sub' to match Unmatched's freeze state */
+		for (i = 0; i < camel_folder_get_frozen_count ((CamelFolder *)folder_unmatched); i++)
+			camel_folder_freeze (sub);
 
-	folder->folder_flags |= (CAMEL_FOLDER_HAS_SUMMARY_CAPABILITY |
-				 CAMEL_FOLDER_HAS_SEARCH_CAPABILITY);
+		camel_folder_unlock (CAMEL_FOLDER (folder_unmatched), CF_CHANGE_LOCK);
+	}
 
-	/* FIXME: what to do about user flags if the subfolder doesn't support them? */
-	folder->permanent_flags = CAMEL_MESSAGE_ANSWERED |
-		CAMEL_MESSAGE_DELETED |
-		CAMEL_MESSAGE_DRAFT |
-		CAMEL_MESSAGE_FLAGGED |
-		CAMEL_MESSAGE_SEEN;
+	camel_vee_folder_unlock (vf, CVF_SUBFOLDER_LOCK);
 
-	obj->changes = camel_folder_change_info_new ();
-	obj->search = camel_folder_search_new ();
-	obj->hashes = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
-	/* Loaded is no longer used.*/
-	obj->loaded = NULL;
-	obj->deleted = FALSE;
-	p->summary_lock = g_mutex_new ();
-	p->subfolder_lock = g_mutex_new ();
-	p->changed_lock = g_mutex_new ();
-	p->unread_vfolder = -1;
-}
+	d (printf ("camel_vee_folder_add_folder (%s, %s)\n", ((CamelFolder *)vf)->full_name, sub->full_name));
 
-/**
- * camel_vee_folder_mask_event_folder_changed:
- *
- * Since: 2.26
- **/
-void
-camel_vee_folder_mask_event_folder_changed (CamelVeeFolder *vf, CamelFolder *sub)
-{
-	camel_object_unhook_event ((CamelObject *)sub, "folder_changed", (CamelObjectEventHookFunc) folder_changed, vf);
+	camel_object_hook_event ((CamelObject *)sub, "folder_changed", (CamelObjectEventHookFunc)folder_changed, vf);
+	camel_object_hook_event ((CamelObject *)sub, "deleted", (CamelObjectEventHookFunc)subfolder_deleted, vf);
+	camel_object_hook_event ((CamelObject *)sub, "renamed", (CamelObjectEventHookFunc)folder_renamed, vf);
 
+	CAMEL_VEE_FOLDER_GET_CLASS (vf)->add_folder (vf, sub);
 }
 
 /**
- * camel_vee_folder_unmask_event_folder_changed:
+ * camel_vee_folder_remove_folder:
+ * @vf: Virtual Folder object
+ * @sub: source CamelFolder to remove from @vf
  *
- * Since: 2.26
+ * Removed the source folder, @sub, from the virtual folder, @vf.
  **/
 void
-camel_vee_folder_unmask_event_folder_changed (CamelVeeFolder *vf, CamelFolder *sub)
-{
-	camel_object_hook_event ((CamelObject *)sub, "folder_changed", (CamelObjectEventHookFunc) folder_changed, vf);
-}
-
-static void
-vee_folder_stop_folder (CamelVeeFolder *vf, CamelFolder *sub)
+camel_vee_folder_remove_folder (CamelVeeFolder *vf, CamelFolder *sub)
 {
-	struct _CamelVeeFolderPrivate *p = _PRIVATE (vf);
+	CamelVeeFolderPrivate *p = CAMEL_VEE_FOLDER_GET_PRIVATE (vf);
 	gint i;
 	CamelVeeFolder *folder_unmatched = vf->parent_vee_store ? vf->parent_vee_store->folder_unmatched : NULL;
 
@@ -2257,7 +2176,7 @@ vee_folder_stop_folder (CamelVeeFolder *vf, CamelFolder *sub)
 	camel_vee_folder_unlock (vf, CVF_SUBFOLDER_LOCK);
 
 	if (folder_unmatched != NULL) {
-		struct _CamelVeeFolderPrivate *up = _PRIVATE (folder_unmatched);
+		CamelVeeFolderPrivate *up = CAMEL_VEE_FOLDER_GET_PRIVATE (folder_unmatched);
 
 		camel_vee_folder_lock (folder_unmatched, CVF_SUBFOLDER_LOCK);
 		/* if folder deleted, then blow it away from unmatched always, and remove all refs to it */
@@ -2287,6 +2206,8 @@ vee_folder_stop_folder (CamelVeeFolder *vf, CamelFolder *sub)
 		camel_vee_folder_unlock (folder_unmatched, CVF_SUBFOLDER_LOCK);
 	}
 
+	CAMEL_VEE_FOLDER_GET_CLASS (vf)->remove_folder (vf, sub);
+
 	if (CAMEL_IS_VEE_FOLDER (sub))
 		return;
 
@@ -2294,73 +2215,190 @@ vee_folder_stop_folder (CamelVeeFolder *vf, CamelFolder *sub)
 }
 
 /**
- * camel_vee_folder_sync_headers:
+ * camel_vee_folder_rebuild_folder:
+ * @vf: Virtual Folder object
+ * @sub: source CamelFolder to add to @vf
+ * @ex: Exception.
  *
- * Since: 2.24
+ * Rebuild the folder @sub, if it should be.
+ **/
+gint
+camel_vee_folder_rebuild_folder (CamelVeeFolder *vf,
+                                 CamelFolder *sub,
+                                 CamelException *ex)
+{
+	return CAMEL_VEE_FOLDER_GET_CLASS (vf)->rebuild_folder (vf, sub, ex);
+}
+
+static void
+remove_folders (CamelFolder *folder, CamelFolder *foldercopy, CamelVeeFolder *vf)
+{
+	camel_vee_folder_remove_folder (vf, folder);
+	camel_object_unref (folder);
+}
+
+/**
+ * camel_vee_folder_set_folders:
+ * @vf:
+ * @folders:
+ *
+ * Set the whole list of folder sources on a vee folder.
  **/
 void
-camel_vee_folder_sync_headers (CamelFolder *vf, CamelException *ex)
+camel_vee_folder_set_folders (CamelVeeFolder *vf, GList *folders)
 {
-	CamelFIRecord * record;
-	time_t start, end;
+	CamelVeeFolderPrivate *p = CAMEL_VEE_FOLDER_GET_PRIVATE (vf);
+	GHashTable *remove = g_hash_table_new (NULL, NULL);
+	GList *l;
+	CamelFolder *folder;
 
-	/* Save the counts to DB */
-	start = time (NULL);
-	record = summary_header_to_db (vf->summary, ex);
-	camel_db_write_folder_info_record (vf->parent_store->cdb_w, record, ex);
-	end = time (NULL);
-	dd (printf ("Sync for vfolder '%s': %ld secs\n", vf->full_name, end-start));
+	/* setup a table of all folders we have currently */
+	camel_vee_folder_lock (vf, CVF_SUBFOLDER_LOCK);
+	l = p->folders;
+	while (l) {
+		g_hash_table_insert (remove, l->data, l->data);
+		camel_object_ref (l->data);
+		l = l->next;
+	}
+	camel_vee_folder_unlock (vf, CVF_SUBFOLDER_LOCK);
 
-	g_free (record);
+	/* if we already have the folder, ignore it, otherwise add it */
+	l = folders;
+	while (l) {
+		if ((folder = g_hash_table_lookup (remove, l->data))) {
+			g_hash_table_remove (remove, folder);
+			camel_object_unref (folder);
+		} else {
+			camel_vee_folder_add_folder (vf, l->data);
+		}
+		l = l->next;
+	}
+
+	/* then remove any we still have */
+	g_hash_table_foreach (remove, (GHFunc)remove_folders, vf);
+	g_hash_table_destroy (remove);
 }
 
-static void
-camel_vee_folder_finalize (CamelObject *obj)
+/**
+ * camel_vee_folder_hash_folder:
+ * @folder:
+ * @:
+ *
+ * Create a hash string representing the folder name, which should be
+ * unique, and remain static for a given folder.
+ **/
+void
+camel_vee_folder_hash_folder (CamelFolder *folder, gchar buffer[8])
 {
-	CamelVeeFolder *vf = (CamelVeeFolder *)obj;
-	struct _CamelVeeFolderPrivate *p = _PRIVATE (vf);
-	CamelVeeFolder *folder_unmatched = vf->parent_vee_store ? vf->parent_vee_store->folder_unmatched : NULL;
-	GList *node;
-	CamelFIRecord * record;
+	GChecksum *checksum;
+	guint8 *digest;
+	gsize length;
+	gint state = 0, save = 0;
+	gchar *tmp;
+	gint i;
 
-	p->destroyed = TRUE;
+	length = g_checksum_type_get_length (G_CHECKSUM_MD5);
+	digest = g_alloca (length);
 
-	/* Save the counts to DB */
-	if (!vf->deleted) {
-		CamelException ex = CAMEL_EXCEPTION_INITIALISER;
-		record = summary_header_to_db (((CamelFolder *)vf)->summary, NULL);
-		camel_db_write_folder_info_record (((CamelFolder *) vf)->parent_store->cdb_w, record, &ex);
-		g_free (record);
-		camel_exception_clear (&ex);
+	checksum = g_checksum_new (G_CHECKSUM_MD5);
+	tmp = camel_service_get_url ((CamelService *)folder->parent_store);
+	g_checksum_update (checksum, (guchar *) tmp, -1);
+	g_free (tmp);
+	tmp = folder->full_name;
+	g_checksum_update (checksum, (guchar *) tmp, -1);
+	g_checksum_get_digest (checksum, digest, &length);
+	g_checksum_free (checksum);
+
+	g_base64_encode_step (digest, 6, FALSE, buffer, &state, &save);
+	g_base64_encode_close (FALSE, buffer, &state, &save);
+
+	for (i=0;i<8;i++) {
+		if (buffer[i] == '+')
+			buffer[i] = '.';
+		if (buffer[i] == '/')
+			buffer[i] = '_';
 	}
+}
 
-	/* This may invoke sub-classes with partially destroyed state, they must deal with this */
-	if (vf == folder_unmatched) {
-		for (node = p->folders;node;node = g_list_next (node))
-			camel_object_unref (node->data);
+/**
+ * camel_vee_folder_get_location:
+ * @vf:
+ * @vinfo:
+ * @realuid: if not NULL, set to the uid of the real message, must be
+ * g_free'd by caller.
+ *
+ * Find the real folder (and uid)
+ *
+ * Returns:
+ **/
+CamelFolder *
+camel_vee_folder_get_location (CamelVeeFolder *vf, const CamelVeeMessageInfo *vinfo, gchar **realuid)
+{
+	CamelFolder *folder;
+
+	folder = vinfo->summary->folder;
+
+	/* locking?  yes?  no?  although the vfolderinfo is valid when obtained
+	   the folder in it might not necessarily be so ...? */
+	if (CAMEL_IS_VEE_FOLDER (folder)) {
+		CamelFolder *res;
+		const CamelVeeMessageInfo *vfinfo;
+
+		vfinfo = (CamelVeeMessageInfo *)camel_folder_get_message_info (folder, camel_message_info_uid (vinfo)+8);
+		res = camel_vee_folder_get_location ((CamelVeeFolder *)folder, vfinfo, realuid);
+		camel_folder_free_message_info (folder, (CamelMessageInfo *)vfinfo);
+		return res;
 	} else {
-		/* FIXME[disk-summary] See if it is really reqd */
-		camel_folder_freeze ((CamelFolder *)vf);
-		while (p->folders) {
-			CamelFolder *f = p->folders->data;
-			vee_folder_stop_folder (vf, f);
-		}
-		camel_folder_thaw ((CamelFolder *)vf);
+		if (realuid)
+			*realuid = g_strdup (camel_message_info_uid (vinfo)+8);
+
+		return folder;
 	}
+}
 
-	g_free (vf->expression);
+/**
+ * camel_vee_folder_mask_event_folder_changed:
+ *
+ * Since: 2.26
+ **/
+void
+camel_vee_folder_mask_event_folder_changed (CamelVeeFolder *vf, CamelFolder *sub)
+{
+	camel_object_unhook_event ((CamelObject *)sub, "folder_changed", (CamelObjectEventHookFunc) folder_changed, vf);
 
-	g_list_free (p->folders);
-	g_list_free (p->folders_changed);
+}
 
-	camel_folder_change_info_free (vf->changes);
-	camel_object_unref (vf->search);
+/**
+ * camel_vee_folder_unmask_event_folder_changed:
+ *
+ * Since: 2.26
+ **/
+void
+camel_vee_folder_unmask_event_folder_changed (CamelVeeFolder *vf, CamelFolder *sub)
+{
+	camel_object_hook_event ((CamelObject *)sub, "folder_changed", (CamelObjectEventHookFunc) folder_changed, vf);
+}
 
-	g_mutex_free (p->summary_lock);
-	g_mutex_free (p->subfolder_lock);
-	g_mutex_free (p->changed_lock);
-	g_hash_table_destroy (vf->hashes);
-	g_free (p);
+/**
+ * camel_vee_folder_sync_headers:
+ *
+ * Since: 2.24
+ **/
+void
+camel_vee_folder_sync_headers (CamelFolder *vf,
+                               CamelException *ex)
+{
+	CamelFIRecord * record;
+	time_t start, end;
+
+	/* Save the counts to DB */
+	start = time (NULL);
+	record = summary_header_to_db (vf->summary, ex);
+	camel_db_write_folder_info_record (vf->parent_store->cdb_w, record, ex);
+	end = time (NULL);
+	dd (printf ("Sync for vfolder '%s': %ld secs\n", vf->full_name, end-start));
+
+	g_free (record);
 }
 
 /* FIXME: This shouldn't be needed */
diff --git a/camel/camel-vee-folder.h b/camel/camel-vee-folder.h
index db3c90b..d3c6020 100644
--- a/camel/camel-vee-folder.h
+++ b/camel/camel-vee-folder.h
@@ -34,6 +34,8 @@
 #define CAMEL_VEE_FOLDER(obj)         CAMEL_CHECK_CAST (obj, camel_vee_folder_get_type (), CamelVeeFolder)
 #define CAMEL_VEE_FOLDER_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_vee_folder_get_type (), CamelVeeFolderClass)
 #define CAMEL_IS_VEE_FOLDER(obj)      CAMEL_CHECK_TYPE (obj, camel_vee_folder_get_type ())
+#define CAMEL_VEE_FOLDER_GET_CLASS(obj) \
+	((CamelVeeFolderClass *) CAMEL_OBJECT_GET_CLASS (obj))
 
 G_BEGIN_DECLS
 
diff --git a/camel/camel-vee-store.c b/camel/camel-vee-store.c
index a5b2884..e22972b 100644
--- a/camel/camel-vee-store.c
+++ b/camel/camel-vee-store.c
@@ -43,7 +43,7 @@
 #define CHANGE_DELETE (1)
 #define CHANGE_NOSELECT (2)
 
-static CamelStoreClass *camel_vee_store_parent;
+static gpointer camel_vee_store_parent_class;
 
 static gint
 vee_folder_cmp (gconstpointer ap,
@@ -100,20 +100,24 @@ vee_store_finalize (CamelVeeStore *vee_store)
 	camel_object_unref (vee_store->folder_unmatched);
 }
 
-static void
+static gboolean
 vee_store_construct (CamelService *service,
                      CamelSession *session,
                      CamelProvider *provider,
                      CamelURL *url,
                      CamelException *ex)
 {
+	CamelServiceClass *service_class;
 	CamelStore *store;
 	CamelVeeStore *vee_store;
 
 	store = CAMEL_STORE (service);
 	vee_store = CAMEL_VEE_STORE (service);
 
-	 ((CamelServiceClass *) camel_vee_store_parent)->construct (service, session, provider, url, ex);
+	/* Chain up to parent's construct() method. */
+	service_class = CAMEL_SERVICE_CLASS (camel_vee_store_parent_class);
+	if (!service_class->construct (service, session, provider, url, ex))
+		return FALSE;
 
 	/* Set up unmatched folder */
 #ifndef VEE_UNMATCHED_ENABLE
@@ -122,6 +126,8 @@ vee_store_construct (CamelService *service,
 	camel_vee_folder_construct (vee_store->folder_unmatched, store, CAMEL_UNMATCHED_NAME, _("Unmatched"), CAMEL_STORE_FOLDER_PRIVATE);
 	camel_db_create_vfolder (store->cdb_r, _("Unmatched"), NULL);
 #endif
+
+	return TRUE;
 }
 
 static gchar *
@@ -169,7 +175,7 @@ vee_store_get_folder (CamelStore *store,
 	return (CamelFolder *)vf;
 }
 
-static void
+static gboolean
 vee_store_rename_folder (CamelStore *store,
                          const gchar *old,
                          const gchar *new,
@@ -184,7 +190,7 @@ vee_store_rename_folder (CamelStore *store,
 		camel_exception_setv (
 			ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
 			_("Cannot rename folder: %s: Invalid operation"), old);
-		return;
+		return FALSE;
 	}
 
 	/* See if it exists, for vfolders, all folders are in the folders hash */
@@ -193,7 +199,7 @@ vee_store_rename_folder (CamelStore *store,
 		camel_exception_setv (
 			ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
 			_("Cannot rename folder: %s: No such folder"), old);
-		return;
+		return FALSE;
 	}
 
 	/* Check that new parents exist, if not, create dummy ones */
@@ -217,9 +223,11 @@ vee_store_rename_folder (CamelStore *store,
 	}
 
 	camel_object_unref (oldfolder);
+
+	return TRUE;
 }
 
-static void
+static gboolean
 vee_store_delete_folder (CamelStore *store,
                          const gchar *folder_name,
                          CamelException *ex)
@@ -231,7 +239,7 @@ vee_store_delete_folder (CamelStore *store,
 			ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
 			_("Cannot delete folder: %s: Invalid operation"),
 			folder_name);
-		return;
+		return FALSE;
 	}
 
 	folder = camel_object_bag_get (store->folders, folder_name);
@@ -256,7 +264,10 @@ vee_store_delete_folder (CamelStore *store,
 			ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
 			_("Cannot delete folder: %s: No such folder"),
 			folder_name);
+		return FALSE;
 	}
+
+	return TRUE;
 }
 
 static CamelFolderInfo *
@@ -412,7 +423,7 @@ camel_vee_store_class_init (CamelVeeStoreClass *class)
 	CamelServiceClass *service_class;
 	CamelStoreClass *store_class;
 
-	camel_vee_store_parent = (CamelStoreClass *)camel_store_get_type ();
+	camel_vee_store_parent_class = (CamelStoreClass *)camel_store_get_type ();
 
 	service_class = CAMEL_SERVICE_CLASS (class);
 	service_class->construct = vee_store_construct;
diff --git a/camel/camel-vtrash-folder.c b/camel/camel-vtrash-folder.c
index 7dbdece..f7e5bf0 100644
--- a/camel/camel-vtrash-folder.c
+++ b/camel/camel-vtrash-folder.c
@@ -169,7 +169,7 @@ vtrash_folder_getv (CamelObject *object,
 	return CAMEL_OBJECT_CLASS (camel_vtrash_folder_parent)->getv (object, ex, args);
 }
 
-static void
+static gboolean
 vtrash_folder_append_message (CamelFolder *folder,
                               CamelMimeMessage *message,
                               const CamelMessageInfo *info,
@@ -179,9 +179,11 @@ vtrash_folder_append_message (CamelFolder *folder,
 	camel_exception_setv (
 		ex, CAMEL_EXCEPTION_SYSTEM, "%s",
 		_(vdata[((CamelVTrashFolder *)folder)->type].error_copy));
+
+	return FALSE;
 }
 
-static void
+static gboolean
 vtrash_folder_transfer_messages_to (CamelFolder *source,
                                     GPtrArray *uids,
                                     CamelFolder *dest,
@@ -210,13 +212,13 @@ vtrash_folder_transfer_messages_to (CamelFolder *source,
 			camel_exception_setv (
 				ex, CAMEL_EXCEPTION_SYSTEM, "%s",
 				_(vdata[((CamelVTrashFolder *)dest)->type].error_copy));
-			return;
+			return FALSE;
 		}
 
 		/* Move to trash is the same as setting the message flag */
 		for (i = 0; i < uids->len; i++)
 			camel_folder_set_message_flags(source, uids->pdata[i], ((CamelVTrashFolder *)dest)->bit, ~0);
-		return;
+		return TRUE;
 	}
 
 	/* Moving/Copying from the trash to the original folder = undelete.
@@ -259,6 +261,8 @@ vtrash_folder_transfer_messages_to (CamelFolder *source,
 		g_hash_table_foreach(batch, (GHFunc)transfer_messages, ex);
 		g_hash_table_destroy(batch);
 	}
+
+	return TRUE;
 }
 
 static void
diff --git a/camel/camel-vtrash-folder.h b/camel/camel-vtrash-folder.h
index f2f14e6..87112ca 100644
--- a/camel/camel-vtrash-folder.h
+++ b/camel/camel-vtrash-folder.h
@@ -34,14 +34,14 @@
 #define CAMEL_VTRASH_FOLDER_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_vtrash_folder_get_type (), CamelVTrashFolderClass)
 #define CAMEL_IS_VTRASH_FOLDER(obj)      CAMEL_CHECK_TYPE (obj, camel_vtrash_folder_get_type ())
 
+#define CAMEL_VTRASH_NAME	".#evolution/Trash"
+#define CAMEL_VJUNK_NAME	".#evolution/Junk"
+
 G_BEGIN_DECLS
 
 typedef struct _CamelVTrashFolder CamelVTrashFolder;
 typedef struct _CamelVTrashFolderClass CamelVTrashFolderClass;
 
-#define CAMEL_VTRASH_NAME	".#evolution/Trash"
-#define CAMEL_VJUNK_NAME	".#evolution/Junk"
-
 typedef enum {
 	CAMEL_VTRASH_FOLDER_TRASH,
 	CAMEL_VTRASH_FOLDER_JUNK,
diff --git a/camel/providers/groupwise/camel-groupwise-folder.c b/camel/providers/groupwise/camel-groupwise-folder.c
index 0bae726..d678fb1 100644
--- a/camel/providers/groupwise/camel-groupwise-folder.c
+++ b/camel/providers/groupwise/camel-groupwise-folder.c
@@ -42,7 +42,6 @@ which needs to be better organized via functions */
 #include <sys/stat.h>
 #include <sys/types.h>
 
-#include <glib.h>
 #include <glib/gi18n-lib.h>
 
 #include <e-gw-connection.h>
@@ -62,7 +61,7 @@ which needs to be better organized via functions */
 #define MAX_ATTACHMENT_SIZE 1*1024*1024   /*In bytes*/
 #define GROUPWISE_BULK_DELETE_LIMIT 100
 
-static CamelOfflineFolderClass *parent_class = NULL;
+static gpointer camel_groupwise_folder_parent_class;
 
 struct _CamelGroupwiseFolderPrivate {
 
@@ -76,7 +75,7 @@ struct _CamelGroupwiseFolderPrivate {
 extern gint camel_application_is_exiting;
 
 /*prototypes*/
-static void groupwise_transfer_messages_to (CamelFolder *source, GPtrArray *uids, CamelFolder *destination, GPtrArray **transferred_uids, gboolean delete_originals, CamelException *ex);
+static gboolean groupwise_transfer_messages_to (CamelFolder *source, GPtrArray *uids, CamelFolder *destination, GPtrArray **transferred_uids, gboolean delete_originals, CamelException *ex);
 static gint gw_getv (CamelObject *object, CamelException *ex, CamelArgGetV *args);
 void convert_to_calendar (EGwItem *item, gchar **str, gint *len);
 static void convert_to_task (EGwItem *item, gchar **str, gint *len);
@@ -90,7 +89,7 @@ static CamelMimeMessage *groupwise_folder_item_to_msg ( CamelFolder *folder, EGw
 static gchar * groupwise_get_filename (CamelFolder *folder, const gchar *uid, CamelException *ex);
 static const gchar *get_from_from_org (EGwItemOrganizer *org);
 static void groupwise_refresh_folder(CamelFolder *folder, CamelException *ex);
-static void groupwise_sync (CamelFolder *folder, gboolean expunge, CamelMessageInfo *update_single, CamelException *ex);
+static gboolean groupwise_sync (CamelFolder *folder, gboolean expunge, CamelMessageInfo *update_single, CamelException *ex);
 
 #define d(x)
 
@@ -124,8 +123,9 @@ groupwise_folder_get_message( CamelFolder *folder, const gchar *uid, CamelExcept
 
 	mi = (CamelGroupwiseMessageInfo *) camel_folder_summary_uid (folder->summary, uid);
 	if (mi == NULL) {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID,
-				_("Cannot get message: %s\n  %s"), uid, _("No such message"));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID,
+			_("Cannot get message: %s\n  %s"), uid, _("No such message"));
 		return NULL;
 	}
 	cache_stream  = camel_data_cache_get (gw_folder->cache, "cache", uid, ex);
@@ -137,15 +137,19 @@ groupwise_folder_get_message( CamelFolder *folder, const gchar *uid, CamelExcept
 		camel_stream_reset (stream);
 		if (camel_data_wrapper_construct_from_stream ((CamelDataWrapper *) msg, stream) == -1) {
 			if (errno == EINTR) {
-				camel_exception_setv (ex, CAMEL_EXCEPTION_USER_CANCEL, _("User canceled"));
+				camel_exception_setv (
+					ex, CAMEL_EXCEPTION_USER_CANCEL,
+					_("User canceled"));
 				camel_object_unref (msg);
 				camel_object_unref (cache_stream);
 				camel_object_unref (stream);
 				camel_message_info_free (&mi->info);
 				return NULL;
 			} else {
-				camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, _("Cannot get message %s: %s"),
-						uid, g_strerror (errno));
+				camel_exception_setv (
+					ex, CAMEL_EXCEPTION_SYSTEM,
+					_("Cannot get message %s: %s"),
+					uid, g_strerror (errno));
 				camel_object_unref (msg);
 				msg = NULL;
 			}
@@ -160,16 +164,18 @@ groupwise_folder_get_message( CamelFolder *folder, const gchar *uid, CamelExcept
 	}
 
 	if (((CamelOfflineStore *) gw_store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) {
-		camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				_("This message is not available in offline mode."));
+		camel_exception_set (
+			ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+			_("This message is not available in offline mode."));
 		camel_message_info_free (&mi->info);
 		return NULL;
 	}
 
 	/* Check if we are really offline */
 	if (!camel_groupwise_store_connected (gw_store, ex)) {
-		camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				_("This message is not available in offline mode."));
+		camel_exception_set (
+			ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+			_("This message is not available in offline mode."));
 		camel_message_info_free (&mi->info);
 		return NULL;
 	}
@@ -183,14 +189,18 @@ groupwise_folder_get_message( CamelFolder *folder, const gchar *uid, CamelExcept
 		status = e_gw_connection_get_item (cnc, container_id, uid, GET_ITEM_VIEW_WITH_CACHE, &item);
 	if (status != E_GW_CONNECTION_STATUS_OK) {
 		g_free (container_id);
-		camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_INVALID, _("Could not get message"));
+		camel_exception_set (
+			ex, CAMEL_EXCEPTION_SERVICE_INVALID,
+			_("Could not get message"));
 		camel_message_info_free (&mi->info);
 		return NULL;
 	}
 
 	msg = groupwise_folder_item_to_msg (folder, item, ex);
 	if (!msg) {
-		camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_INVALID, _("Could not get message"));
+		camel_exception_set (
+			ex, CAMEL_EXCEPTION_SERVICE_INVALID,
+			_("Could not get message"));
 		g_free (container_id);
 		camel_message_info_free (&mi->info);
 
@@ -456,7 +466,7 @@ groupwise_folder_rename (CamelFolder *folder, const gchar *new)
 	camel_data_cache_set_path (gw_folder->cache, folder_dir);
 	CAMEL_GROUPWISE_FOLDER_REC_UNLOCK (folder, cache_lock);
 
-	((CamelFolderClass *)parent_class)->rename(folder, new);
+	((CamelFolderClass *)camel_groupwise_folder_parent_class)->rename(folder, new);
 	camel_folder_summary_set_filename (folder->summary, summary_path);
 
 	state_file = g_strdup_printf ("%s/cmeta", folder_dir);
@@ -647,12 +657,12 @@ move_to_junk (CamelFolder *folder, CamelMessageInfo *info, CamelException *ex)
 
 /********************* back to folder functions*************************/
 
-static void
+static gboolean
 groupwise_sync_summary (CamelFolder *folder, CamelException *ex)
 {
 	CamelStoreInfo *si;
 	guint32 unread, total;
-	
+
 	camel_folder_summary_save_to_db (folder->summary, ex);
 
 	si = camel_store_summary_path ((CamelStoreSummary *) ((CamelGroupwiseStore *) folder->parent_store)->summary, folder->full_name);
@@ -665,6 +675,8 @@ groupwise_sync_summary (CamelFolder *folder, CamelException *ex)
 
 	camel_store_summary_touch ((CamelStoreSummary *)((CamelGroupwiseStore *)folder->parent_store)->summary);
 	camel_store_summary_save ((CamelStoreSummary *)((CamelGroupwiseStore *)folder->parent_store)->summary);
+
+	return TRUE;
 }
 
 static void
@@ -720,14 +732,14 @@ groupwise_set_message_flags (CamelFolder *folder, const gchar *uid, guint32 flag
 	return res;
 }
 
-static void
+static gboolean
 groupwise_sync_all (CamelFolder *folder, gboolean expunge, CamelException *ex)
 {
-	groupwise_sync (folder, expunge, NULL, ex);
+	return groupwise_sync (folder, expunge, NULL, ex);
 }
 
 /* This may need to be reorganized. */
-static void
+static gboolean
 groupwise_sync (CamelFolder *folder, gboolean expunge, CamelMessageInfo *update_single, CamelException *ex)
 {
 	CamelGroupwiseStore *gw_store = CAMEL_GROUPWISE_STORE (folder->parent_store);
@@ -742,21 +754,20 @@ groupwise_sync (CamelFolder *folder, gboolean expunge, CamelMessageInfo *update_
 	EGwConnectionStatus status;
 	EGwConnection *cnc;
 	gint count, i;
+	gboolean success;
 
 	GList *deleted_items, *deleted_head;
 
 	deleted_items = deleted_head = NULL;
 
-	if (((CamelOfflineStore *) gw_store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) {
-		groupwise_sync_summary (folder, ex);
-		return;
-	}
+	if (((CamelOfflineStore *) gw_store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL)
+		return groupwise_sync_summary (folder, ex);
 
 	camel_service_lock (CAMEL_SERVICE (gw_store), CS_REC_CONNECT_LOCK);
 	if (!camel_groupwise_store_connected (gw_store, ex)) {
 		camel_service_unlock (CAMEL_SERVICE (gw_store), CS_REC_CONNECT_LOCK);
 		camel_exception_clear (ex);
-		return;
+		return TRUE;
 	}
 	camel_service_unlock (CAMEL_SERVICE (gw_store), CS_REC_CONNECT_LOCK);
 
@@ -764,7 +775,7 @@ groupwise_sync (CamelFolder *folder, gboolean expunge, CamelMessageInfo *update_
 	container_id =  camel_groupwise_store_container_id_lookup (gw_store, folder->full_name);
 
 	if (folder->folder_flags & CAMEL_FOLDER_HAS_BEEN_DELETED)
-		return;
+		return TRUE;
 
 	changes = camel_folder_change_info_new ();
 	count = camel_folder_summary_count (folder->summary);
@@ -957,11 +968,13 @@ groupwise_sync (CamelFolder *folder, gboolean expunge, CamelMessageInfo *update_
 	}
 
 	camel_service_lock (CAMEL_SERVICE (gw_store), CS_REC_CONNECT_LOCK);
-	groupwise_sync_summary (folder, ex);
+	success = groupwise_sync_summary (folder, ex);
 	camel_service_unlock (CAMEL_SERVICE (gw_store), CS_REC_CONNECT_LOCK);
 	
 	camel_object_trigger_event (CAMEL_OBJECT (folder), "folder_changed", changes);
 	camel_folder_change_info_free (changes);
+
+	return success;
 }
 
 CamelFolder *
@@ -987,9 +1000,9 @@ camel_gw_folder_new(CamelStore *store, const gchar *folder_name, const gchar *fo
 	g_free(summary_file);
 	if (!folder->summary) {
 		camel_object_unref (CAMEL_OBJECT (folder));
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				_("Could not load summary for %s"),
-				folder_name);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not load summary for %s"), folder_name);
 		return NULL;
 	}
 
@@ -1040,7 +1053,6 @@ struct _folder_update_msg {
 static void
 update_update (CamelSession *session, CamelSessionThreadMsg *msg)
 {
-
 	struct _folder_update_msg *m = (struct _folder_update_msg *)msg;
 	EGwConnectionStatus status;
 	CamelException *ex = NULL;
@@ -1162,7 +1174,7 @@ static CamelSessionThreadOps update_ops = {
 	update_free,
 };
 
-static void
+static gboolean
 groupwise_refresh_info(CamelFolder *folder, CamelException *ex)
 {
 	CamelGroupwiseSummary *summary = (CamelGroupwiseSummary *) folder->summary;
@@ -1195,6 +1207,8 @@ groupwise_refresh_info(CamelFolder *folder, CamelException *ex)
 		g_print("Reloading folder...something wrong with the summary....\n");
 		gw_store_reload_folder (gw_store, folder, 0, ex);
 	}
+
+	return TRUE;
 }
 
 static gint
@@ -1375,7 +1389,9 @@ groupwise_refresh_folder(CamelFolder *folder, CamelException *ex)
 					"peek id",
 					&new_sync_time, "New", NULL, source, -1, &new_items);
 		if (status != E_GW_CONNECTION_STATUS_OK) {
-			camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_INVALID, _("Authentication failed"));
+			camel_exception_set (
+				ex, CAMEL_EXCEPTION_SERVICE_INVALID,
+				_("Authentication failed"));
 			goto end2;
 		}
 
@@ -1808,7 +1824,7 @@ get_from_from_org (EGwItemOrganizer *org)
 
 /* Update summary, if there is none existing, create one */
 void
-gw_update_summary ( CamelFolder *folder, GList *list,CamelException *ex)
+gw_update_summary (CamelFolder *folder, GList *list,CamelException *ex)
 {
 	CamelGroupwiseMessageInfo *mi = NULL;
 	CamelGroupwiseStore *gw_store = CAMEL_GROUPWISE_STORE (folder->parent_store);
@@ -2021,7 +2037,9 @@ groupwise_folder_item_to_msg( CamelFolder *folder,
 					(const gchar **)&attachment, &len);
 			if (status != E_GW_CONNECTION_STATUS_OK) {
 				g_warning ("Could not get attachment\n");
-				camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_INVALID, _("Could not get message"));
+				camel_exception_set (
+					ex, CAMEL_EXCEPTION_SERVICE_INVALID,
+					_("Could not get message"));
 				return NULL;
 			}
 			if (attachment && attachment[0] && (len !=0) ) {
@@ -2072,7 +2090,9 @@ groupwise_folder_item_to_msg( CamelFolder *folder,
 								(const gchar **)&attachment, &len);
 						if (status != E_GW_CONNECTION_STATUS_OK) {
 							g_warning ("Could not get attachment\n");
-							camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_INVALID, _("Could not get message"));
+							camel_exception_set (
+								ex, CAMEL_EXCEPTION_SERVICE_INVALID,
+								_("Could not get message"));
 							return NULL;
 						}
 						body = g_strdup (attachment);
@@ -2188,7 +2208,7 @@ groupwise_folder_item_to_msg( CamelFolder *folder,
 					part = camel_mime_part_new ();
 					camel_data_wrapper_set_mime_type_field(CAMEL_DATA_WRAPPER (temp_msg), ct);
 					camel_content_type_unref(ct);
-					camel_medium_set_content ( CAMEL_MEDIUM (part),CAMEL_DATA_WRAPPER(temp_msg));
+					camel_medium_set_content (CAMEL_MEDIUM (part),CAMEL_DATA_WRAPPER(temp_msg));
 
 					camel_multipart_add_part (multipart,part);
 					camel_object_unref (temp_msg);
@@ -2352,7 +2372,7 @@ gw_update_all_items (CamelFolder *folder, GList *item_list, CamelException *ex)
 	camel_folder_free_summary (folder, summary);
 }
 
-static void
+static gboolean
 groupwise_append_message (CamelFolder *folder, CamelMimeMessage *message,
 		const CamelMessageInfo *info, gchar **appended_uid,
 		CamelException *ex)
@@ -2373,14 +2393,16 @@ groupwise_append_message (CamelFolder *folder, CamelMimeMessage *message,
 		is_ok = TRUE;
 
 	if (!is_ok) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, _("Cannot append message to folder '%s': %s"),
-				folder->full_name, e_gw_connection_get_error_message (status));
-		return;
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Cannot append message to folder '%s': %s"),
+			folder->full_name, e_gw_connection_get_error_message (status));
+		return FALSE;
 	}
 
 	if (offline->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) {
 		camel_groupwise_journal_append ((CamelGroupwiseJournal *) ((CamelGroupwiseFolder *)folder)->journal, message, info, appended_uid, ex);
-		return;
+		return FALSE;
 	}
 	cnc = cnc_lookup (priv);
 
@@ -2404,32 +2426,37 @@ groupwise_append_message (CamelFolder *folder, CamelMimeMessage *message,
 
 	status = e_gw_connection_create_item (cnc, item, &id);
 	if (status != E_GW_CONNECTION_STATUS_OK) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, _("Cannot create message: %s"),
-				e_gw_connection_get_error_message (status));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM, _("Cannot create message: %s"),
+			e_gw_connection_get_error_message (status));
 
 		if (appended_uid)
 			*appended_uid = NULL;
 		camel_service_unlock (CAMEL_SERVICE (folder->parent_store), CS_REC_CONNECT_LOCK);
-		return;
+		return FALSE;
 	}
 
 	status = e_gw_connection_add_item (cnc, container_id, id);
 	g_message ("Adding %s to %s", id, container_id);
 	if (status != E_GW_CONNECTION_STATUS_OK) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, _("Cannot append message to folder '%s': %s"),
-				folder->full_name, e_gw_connection_get_error_message (status));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Cannot append message to folder '%s': %s"),
+			folder->full_name, e_gw_connection_get_error_message (status));
 
 		if (appended_uid)
 			*appended_uid = NULL;
 
 		camel_service_unlock (CAMEL_SERVICE (folder->parent_store), CS_REC_CONNECT_LOCK);
-		return;
+		return FALSE;
 	}
 
 	if (appended_uid)
 		*appended_uid = g_strdup (id);
 	g_free (id);
 	camel_service_unlock (CAMEL_SERVICE (folder->parent_store), CS_REC_CONNECT_LOCK);
+
+	return TRUE;
 }
 
 /* A function to compare uids, inspired by strcmp .
@@ -2451,7 +2478,7 @@ uid_compar (gconstpointer va, gconstpointer vb)
 }
 
 /* move messages */
-static void
+static gboolean
 groupwise_transfer_messages_to (CamelFolder *source, GPtrArray *uids,
 		CamelFolder *destination, GPtrArray **transferred_uids,
 		gboolean delete_originals, CamelException *ex)
@@ -2518,8 +2545,9 @@ groupwise_transfer_messages_to (CamelFolder *source, GPtrArray *uids,
 
 			if (delete_originals) {
 				if (!strcmp(source->full_name, SENT)) {
-					camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-							_("This message is not available in offline mode."));
+					camel_exception_set (
+						ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+						_("This message is not available in offline mode."));
 
 				} else {
 					camel_folder_summary_remove_uid (source->summary, uids->pdata[i]);
@@ -2529,7 +2557,7 @@ groupwise_transfer_messages_to (CamelFolder *source, GPtrArray *uids,
 		}
 
 		camel_service_unlock (CAMEL_SERVICE (source->parent_store), CS_REC_CONNECT_LOCK);
-		return;
+		return TRUE;
 	}
 
 	cnc = cnc_lookup (priv);
@@ -2650,9 +2678,11 @@ groupwise_transfer_messages_to (CamelFolder *source, GPtrArray *uids,
 	groupwise_store_set_current_folder (gw_store, source);
 
 	camel_service_unlock (CAMEL_SERVICE (source->parent_store), CS_REC_CONNECT_LOCK);
+
+	return TRUE;
 }
 
-static void
+static gboolean
 groupwise_expunge (CamelFolder *folder, CamelException *ex)
 {
 	CamelGroupwiseStore *groupwise_store = CAMEL_GROUPWISE_STORE(folder->parent_store);
@@ -2671,7 +2701,7 @@ groupwise_expunge (CamelFolder *folder, CamelException *ex)
 	deleted_items = deleted_head = NULL;
 	cnc = cnc_lookup (priv);
 	if (!cnc)
-		return;
+		return TRUE;
 
 	if (!strcmp (folder->full_name, "Trash")) {
 		camel_service_lock (CAMEL_SERVICE (groupwise_store), CS_REC_CONNECT_LOCK);
@@ -2683,7 +2713,7 @@ groupwise_expunge (CamelFolder *folder, CamelException *ex)
 		} else
 			g_warning ("Could not Empty Trash\n");
 		camel_service_unlock (CAMEL_SERVICE (groupwise_store), CS_REC_CONNECT_LOCK);
-		return;
+		return TRUE;
 	}
 
 	changes = camel_folder_change_info_new ();
@@ -2754,6 +2784,8 @@ groupwise_expunge (CamelFolder *folder, CamelException *ex)
 
 	g_free (container_id);
 	camel_folder_change_info_free (changes);
+
+	return TRUE;
 }
 
 static gint
@@ -2766,43 +2798,56 @@ groupwise_cmp_uids (CamelFolder *folder, const gchar *uid1, const gchar *uid2)
 }
 
 static void
-camel_groupwise_folder_class_init (CamelGroupwiseFolderClass *camel_groupwise_folder_class)
+groupwise_folder_finalize (CamelGroupwiseFolder *gw_folder)
+{
+	g_free (gw_folder->priv);
+
+	if (gw_folder->cache)
+		camel_object_unref (gw_folder->cache);
+	if (gw_folder->search)
+		camel_object_unref (gw_folder->search);
+}
+
+static void
+camel_groupwise_folder_class_init (CamelGroupwiseFolderClass *class)
 {
-	CamelFolderClass *camel_folder_class = CAMEL_FOLDER_CLASS (camel_groupwise_folder_class);
-
-	parent_class = CAMEL_OFFLINE_FOLDER_CLASS (camel_type_get_global_classfuncs (camel_offline_folder_get_type ()));
-
-	((CamelObjectClass *) camel_groupwise_folder_class)->getv = gw_getv;
-
-	camel_folder_class->get_message = groupwise_folder_get_message;
-	camel_folder_class->rename = groupwise_folder_rename;
-	camel_folder_class->search_by_expression = groupwise_folder_search_by_expression;
-	camel_folder_class->count_by_expression = groupwise_folder_count_by_expression;
-	camel_folder_class->cmp_uids = groupwise_cmp_uids;
-	camel_folder_class->search_by_uids = groupwise_folder_search_by_uids;
-	camel_folder_class->search_free = groupwise_folder_search_free;
-	camel_folder_class->append_message = groupwise_append_message;
-	camel_folder_class->refresh_info = groupwise_refresh_info;
-	camel_folder_class->sync = groupwise_sync_all;
-	camel_folder_class->set_message_flags = groupwise_set_message_flags;
-	camel_folder_class->expunge = groupwise_expunge;
-	camel_folder_class->transfer_messages_to = groupwise_transfer_messages_to;
-	camel_folder_class->get_filename = groupwise_get_filename;
+	CamelObjectClass *camel_object_class;
+	CamelFolderClass *folder_class;
+
+	camel_groupwise_folder_parent_class = CAMEL_OFFLINE_FOLDER_CLASS (camel_type_get_global_classfuncs (camel_offline_folder_get_type ()));
+
+	camel_object_class = CAMEL_OBJECT_CLASS (class);
+	camel_object_class->getv = gw_getv;
+
+	folder_class = CAMEL_FOLDER_CLASS (class);
+	folder_class->get_message = groupwise_folder_get_message;
+	folder_class->rename = groupwise_folder_rename;
+	folder_class->search_by_expression = groupwise_folder_search_by_expression;
+	folder_class->count_by_expression = groupwise_folder_count_by_expression;
+	folder_class->cmp_uids = groupwise_cmp_uids;
+	folder_class->search_by_uids = groupwise_folder_search_by_uids;
+	folder_class->search_free = groupwise_folder_search_free;
+	folder_class->append_message = groupwise_append_message;
+	folder_class->refresh_info = groupwise_refresh_info;
+	folder_class->sync = groupwise_sync_all;
+	folder_class->set_message_flags = groupwise_set_message_flags;
+	folder_class->expunge = groupwise_expunge;
+	folder_class->transfer_messages_to = groupwise_transfer_messages_to;
+	folder_class->get_filename = groupwise_get_filename;
 }
 
 static void
-camel_groupwise_folder_init (gpointer object, gpointer klass)
+camel_groupwise_folder_init (CamelGroupwiseFolder *gw_folder)
 {
-	CamelGroupwiseFolder *gw_folder = CAMEL_GROUPWISE_FOLDER (object);
-	CamelFolder *folder = CAMEL_FOLDER (object);
+	CamelFolder *folder = CAMEL_FOLDER (gw_folder);
+
+	gw_folder->priv = g_malloc0 (sizeof(*gw_folder->priv));
 
 	folder->permanent_flags = CAMEL_MESSAGE_ANSWERED | CAMEL_MESSAGE_DELETED |
 		CAMEL_MESSAGE_DRAFT | CAMEL_MESSAGE_FLAGGED | CAMEL_MESSAGE_SEEN;
 
 	folder->folder_flags = CAMEL_FOLDER_HAS_SUMMARY_CAPABILITY | CAMEL_FOLDER_HAS_SEARCH_CAPABILITY;
 
-	gw_folder->priv = g_malloc0 (sizeof(*gw_folder->priv));
-
 #ifdef ENABLE_THREADS
 	g_static_mutex_init(&gw_folder->priv->search_lock);
 	g_static_rec_mutex_init(&gw_folder->priv->cache_lock);
@@ -2811,20 +2856,6 @@ camel_groupwise_folder_init (gpointer object, gpointer klass)
 	gw_folder->need_rescan = TRUE;
 }
 
-static void
-camel_groupwise_folder_finalize (CamelObject *object)
-{
-	CamelGroupwiseFolder *gw_folder = CAMEL_GROUPWISE_FOLDER (object);
-
-	if (gw_folder->priv)
-		g_free(gw_folder->priv);
-	if (gw_folder->cache)
-		camel_object_unref (gw_folder->cache);
-	if (gw_folder->search)
-		camel_object_unref (gw_folder->search);
-
-}
-
 CamelType
 camel_groupwise_folder_get_type (void)
 {
@@ -2839,7 +2870,7 @@ camel_groupwise_folder_get_type (void)
 					(CamelObjectClassInitFunc) camel_groupwise_folder_class_init,
 					NULL,
 					(CamelObjectInitFunc) camel_groupwise_folder_init,
-					(CamelObjectFinalizeFunc) camel_groupwise_folder_finalize);
+					(CamelObjectFinalizeFunc) groupwise_folder_finalize);
 	}
 
 	return camel_groupwise_folder_type;
@@ -2876,7 +2907,7 @@ gw_getv (CamelObject *object, CamelException *ex, CamelArgGetV *args)
 	}
 
 	if (count)
-		return ((CamelObjectClass *)parent_class)->getv(object, ex, args);
+		return ((CamelObjectClass *)camel_groupwise_folder_parent_class)->getv(object, ex, args);
 
 	return 0;
 
diff --git a/camel/providers/groupwise/camel-groupwise-folder.h b/camel/providers/groupwise/camel-groupwise-folder.h
index d5ae92c..aed6b14 100644
--- a/camel/providers/groupwise/camel-groupwise-folder.h
+++ b/camel/providers/groupwise/camel-groupwise-folder.h
@@ -38,12 +38,13 @@
 
 G_BEGIN_DECLS
 
-typedef struct  _CamelGroupwiseFolder CamelGroupwiseFolder;
-typedef struct  _CamelGroupwiseFolderClass CamelGroupwiseFolderClass;
+typedef struct _CamelGroupwiseFolder CamelGroupwiseFolder;
+typedef struct _CamelGroupwiseFolderClass CamelGroupwiseFolderClass;
+typedef struct _CamelGroupwiseFolderPrivate CamelGroupwiseFolderPrivate;
+
 struct _CamelGroupwiseFolder {
 	CamelOfflineFolder parent;
-
-	struct _CamelGroupwiseFolderPrivate *priv;
+	CamelGroupwiseFolderPrivate *priv;
 
 	CamelFolderSearch *search;
 
@@ -63,7 +64,6 @@ struct _CamelGroupwiseFolderClass {
 
 } ;
 
-/* Standard Camel function */
 CamelType camel_groupwise_folder_get_type (void);
 
 /* implemented */
diff --git a/camel/providers/groupwise/camel-groupwise-journal.c b/camel/providers/groupwise/camel-groupwise-journal.c
index 171963e..558a604 100644
--- a/camel/providers/groupwise/camel-groupwise-journal.c
+++ b/camel/providers/groupwise/camel-groupwise-journal.c
@@ -33,7 +33,6 @@
 #include <sys/stat.h>
 #include <sys/types.h>
 
-#include <glib.h>
 #include <glib/gi18n-lib.h>
 
 #include "camel-groupwise-folder.h"
@@ -42,16 +41,31 @@
 
 #define d(x)
 
-static void camel_groupwise_journal_class_init (CamelGroupwiseJournalClass *klass);
-static void camel_groupwise_journal_init (CamelGroupwiseJournal *journal, CamelGroupwiseJournalClass *klass);
-static void camel_groupwise_journal_finalize (CamelObject *object);
-
 static void groupwise_entry_free (CamelOfflineJournal *journal, CamelDListNode *entry);
 static CamelDListNode *groupwise_entry_load (CamelOfflineJournal *journal, FILE *in);
 static gint groupwise_entry_write (CamelOfflineJournal *journal, CamelDListNode *entry, FILE *out);
 static gint groupwise_entry_play (CamelOfflineJournal *journal, CamelDListNode *entry, CamelException *ex);
 
-static CamelOfflineJournalClass *parent_class = NULL;
+static gpointer camel_groupwise_journal_parent_class;
+
+static void
+camel_groupwise_journal_class_init (CamelGroupwiseJournalClass *class)
+{
+	CamelOfflineJournalClass *offline_journal_class;
+
+	camel_groupwise_journal_parent_class = (CamelOfflineJournalClass *) camel_type_get_global_classfuncs (CAMEL_TYPE_OFFLINE_JOURNAL);
+
+	offline_journal_class = CAMEL_OFFLINE_JOURNAL_CLASS (class);
+	offline_journal_class->entry_free = groupwise_entry_free;
+	offline_journal_class->entry_load = groupwise_entry_load;
+	offline_journal_class->entry_write = groupwise_entry_write;
+	offline_journal_class->entry_play = groupwise_entry_play;
+}
+
+static void
+camel_groupwise_journal_init (CamelGroupwiseJournal *groupwise_journal)
+{
+}
 
 CamelType
 camel_groupwise_journal_get_type (void)
@@ -66,38 +80,13 @@ camel_groupwise_journal_get_type (void)
 					    (CamelObjectClassInitFunc) camel_groupwise_journal_class_init,
 					    NULL,
 					    (CamelObjectInitFunc) camel_groupwise_journal_init,
-					    (CamelObjectFinalizeFunc) camel_groupwise_journal_finalize);
+					    (CamelObjectFinalizeFunc) NULL);
 	}
 
 	return type;
 }
 
 static void
-camel_groupwise_journal_class_init (CamelGroupwiseJournalClass *klass)
-{
-	CamelOfflineJournalClass *journal_class = (CamelOfflineJournalClass *) klass;
-
-	parent_class = (CamelOfflineJournalClass *) camel_type_get_global_classfuncs (CAMEL_TYPE_OFFLINE_JOURNAL);
-
-	journal_class->entry_free = groupwise_entry_free;
-	journal_class->entry_load = groupwise_entry_load;
-	journal_class->entry_write = groupwise_entry_write;
-	journal_class->entry_play = groupwise_entry_play;
-}
-
-static void
-camel_groupwise_journal_init (CamelGroupwiseJournal *journal, CamelGroupwiseJournalClass *klass)
-{
-
-}
-
-static void
-camel_groupwise_journal_finalize (CamelObject *object)
-{
-
-}
-
-static void
 groupwise_entry_free (CamelOfflineJournal *journal, CamelDListNode *entry)
 {
 	CamelGroupwiseJournalEntry *groupwise_entry = (CamelGroupwiseJournalEntry *) entry;
@@ -195,7 +184,7 @@ groupwise_entry_play_append (CamelOfflineJournal *journal, CamelGroupwiseJournal
 	CamelMimeMessage *message;
 	CamelMessageInfo *info;
 	CamelStream *stream;
-	CamelException lex;
+	gboolean success;
 
 	/* if the message isn't in the cache, the user went behind our backs so "not our problem" */
 	if (!gw_folder->cache || !(stream = camel_data_cache_get (gw_folder->cache, "cache", entry->uid, ex)))
@@ -215,15 +204,12 @@ groupwise_entry_play_append (CamelOfflineJournal *journal, CamelGroupwiseJournal
 		info = camel_message_info_new (NULL);
 	}
 
-	camel_exception_init (&lex);
-	camel_folder_append_message (folder, message, info, NULL, &lex);
+	success = camel_folder_append_message (folder, message, info, NULL, ex);
 	camel_message_info_free (info);
 	camel_object_unref (message);
 
-	if (camel_exception_is_set (&lex)) {
-		camel_exception_xfer (ex, &lex);
+	if (!success)
 		return -1;
-	}
 
  done:
 
@@ -241,7 +227,6 @@ groupwise_entry_play_transfer (CamelOfflineJournal *journal, CamelGroupwiseJourn
 	CamelGroupwiseMessageInfo *real;
 	CamelMessageInfoBase *info;
 	GPtrArray *xuids, *uids;
-	CamelException lex;
 	CamelFolder *src;
 	const gchar *name;
 
@@ -255,16 +240,13 @@ groupwise_entry_play_transfer (CamelOfflineJournal *journal, CamelGroupwiseJourn
 		uids = g_ptr_array_sized_new (1);
 		g_ptr_array_add (uids, entry->original_uid);
 
-		camel_exception_init (&lex);
-		camel_folder_transfer_messages_to (src, uids, folder, &xuids, FALSE, &lex);
-		if (!camel_exception_is_set (&lex)) {
+		if (camel_folder_transfer_messages_to (src, uids, folder, &xuids, FALSE, ex)) {
 			real = (CamelGroupwiseMessageInfo *) camel_folder_summary_uid (folder->summary, xuids->pdata[0]);
 
 			/* transfer all the system flags, user flags/tags, etc */
 			gw_message_info_dup_to ((CamelMessageInfoBase *) real, (CamelMessageInfoBase *) info);
 			camel_message_info_free (real);
 		} else {
-			camel_exception_xfer (ex, &lex);
 			goto exception;
 		}
 
@@ -272,8 +254,10 @@ groupwise_entry_play_transfer (CamelOfflineJournal *journal, CamelGroupwiseJourn
 		g_ptr_array_free (uids, TRUE);
 		camel_object_unref (src);
 	} else if (!name) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, _("Cannot get folder container %s"),
-				      entry->source_container);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Cannot get folder container %s"),
+			entry->source_container);
 		goto exception;
 	}
 
@@ -333,8 +317,9 @@ update_cache (CamelGroupwiseJournal *groupwise_journal, CamelMimeMessage *messag
 	gchar *uid;
 
 	if (groupwise_folder->cache == NULL) {
-		camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM,
-				     _("Cannot append message in offline mode: cache unavailable"));
+		camel_exception_set (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Cannot append message in offline mode: cache unavailable"));
 		return FALSE;
 	}
 
@@ -349,9 +334,10 @@ update_cache (CamelGroupwiseJournal *groupwise_journal, CamelMimeMessage *messag
 
 	if (camel_data_wrapper_write_to_stream ((CamelDataWrapper *) message, cache) == -1
 	    || camel_stream_flush (cache) == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Cannot append message in offline mode: %s"),
-				      g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Cannot append message in offline mode: %s"),
+			g_strerror (errno));
 		camel_data_cache_remove (groupwise_folder->cache, "cache", uid, NULL);
 		folder->summary->nextuid--;
 		camel_object_unref (cache);
diff --git a/camel/providers/groupwise/camel-groupwise-provider.c b/camel/providers/groupwise/camel-groupwise-provider.c
index 73e8c61..e3a5d36 100644
--- a/camel/providers/groupwise/camel-groupwise-provider.c
+++ b/camel/providers/groupwise/camel-groupwise-provider.c
@@ -30,7 +30,6 @@
 
 #include <string.h>
 
-#include <glib.h>
 #include <glib/gi18n-lib.h>
 #include <gmodule.h>
 
@@ -136,8 +135,8 @@ camel_provider_module_init(void)
 	if (use_imap)
 		groupwise_provider.object_types[CAMEL_PROVIDER_STORE] = imap_provider->object_types [CAMEL_PROVIDER_STORE];
 	else	{
-		groupwise_provider.object_types[CAMEL_PROVIDER_STORE] =  camel_groupwise_store_get_type();
-		groupwise_provider.object_types[CAMEL_PROVIDER_TRANSPORT] = camel_groupwise_transport_get_type();
+		groupwise_provider.object_types[CAMEL_PROVIDER_STORE] =  camel_groupwise_store_get_type ();
+		groupwise_provider.object_types[CAMEL_PROVIDER_TRANSPORT] = camel_groupwise_transport_get_type ();
 	}
 
 	camel_provider_register (&groupwise_provider);
diff --git a/camel/providers/groupwise/camel-groupwise-store-summary.c b/camel/providers/groupwise/camel-groupwise-store-summary.c
index acdabd7..5bdf956 100644
--- a/camel/providers/groupwise/camel-groupwise-store-summary.c
+++ b/camel/providers/groupwise/camel-groupwise-store-summary.c
@@ -50,40 +50,32 @@ static void store_info_set_string(CamelStoreSummary *s, CamelStoreInfo *mi, gint
 static const gchar *store_info_string(CamelStoreSummary *s, const CamelStoreInfo *mi, gint type);
 CamelGroupwiseStoreNamespace *camel_groupwise_store_summary_namespace_find_full(CamelGroupwiseStoreSummary *s, const gchar *full);
 
-static void camel_groupwise_store_summary_class_init (CamelGroupwiseStoreSummaryClass *klass);
-static void camel_groupwise_store_summary_init       (CamelGroupwiseStoreSummary *obj);
-static void camel_groupwise_store_summary_finalize   (CamelObject *obj);
-
-static CamelStoreSummaryClass *camel_groupwise_store_summary_parent;
+static gpointer camel_groupwise_store_summary_parent_class;
 
 static void
-camel_groupwise_store_summary_class_init (CamelGroupwiseStoreSummaryClass *klass)
+camel_groupwise_store_summary_class_init (CamelGroupwiseStoreSummaryClass *class)
 {
-	CamelStoreSummaryClass *ssklass = (CamelStoreSummaryClass *)klass;
-
-	ssklass->summary_header_load = summary_header_load;
-	ssklass->summary_header_save = summary_header_save;
-
-	ssklass->store_info_load = store_info_load;
-	ssklass->store_info_save = store_info_save;
-	ssklass->store_info_free = store_info_free;
-
-	ssklass->store_info_string = store_info_string;
-	ssklass->store_info_set_string = store_info_set_string;
-
+	CamelStoreSummaryClass *store_summary_class;
+
+	camel_groupwise_store_summary_parent_class = (CamelStoreSummaryClass *)camel_store_summary_get_type();
+
+	store_summary_class = CAMEL_STORE_SUMMARY_CLASS (class);
+	store_summary_class->summary_header_load = summary_header_load;
+	store_summary_class->summary_header_save = summary_header_save;
+	store_summary_class->store_info_load = store_info_load;
+	store_summary_class->store_info_save = store_info_save;
+	store_summary_class->store_info_free = store_info_free;
+	store_summary_class->store_info_string = store_info_string;
+	store_summary_class->store_info_set_string = store_info_set_string;
 }
 
 static void
-camel_groupwise_store_summary_init (CamelGroupwiseStoreSummary *s)
+camel_groupwise_store_summary_init (CamelGroupwiseStoreSummary *gw_summary)
 {
+	CamelStoreSummary *summary = CAMEL_STORE_SUMMARY (gw_summary);
 
-	((CamelStoreSummary *)s)->store_info_size = sizeof(CamelGroupwiseStoreInfo);
-	s->version = CAMEL_GW_STORE_SUMMARY_VERSION;
-}
-
-static void
-camel_groupwise_store_summary_finalize (CamelObject *obj)
-{
+	summary->store_info_size = sizeof (CamelGroupwiseStoreInfo);
+	gw_summary->version = CAMEL_GW_STORE_SUMMARY_VERSION;
 }
 
 CamelType
@@ -92,14 +84,14 @@ camel_groupwise_store_summary_get_type (void)
 	static CamelType type = CAMEL_INVALID_TYPE;
 
 	if (type == CAMEL_INVALID_TYPE) {
-		camel_groupwise_store_summary_parent = (CamelStoreSummaryClass *)camel_store_summary_get_type();
-		type = camel_type_register((CamelType)camel_groupwise_store_summary_parent, "CamelGroupwiseStoreSummary",
+		type = camel_type_register(camel_store_summary_get_type (),
+				"CamelGroupwiseStoreSummary",
 				sizeof (CamelGroupwiseStoreSummary),
 				sizeof (CamelGroupwiseStoreSummaryClass),
 				(CamelObjectClassInitFunc) camel_groupwise_store_summary_class_init,
 				NULL,
 				(CamelObjectInitFunc) camel_groupwise_store_summary_init,
-				(CamelObjectFinalizeFunc) camel_groupwise_store_summary_finalize);
+				(CamelObjectFinalizeFunc) NULL);
 	}
 
 	return type;
@@ -108,9 +100,7 @@ camel_groupwise_store_summary_get_type (void)
 CamelGroupwiseStoreSummary *
 camel_groupwise_store_summary_new (void)
 {
-	CamelGroupwiseStoreSummary *new = CAMEL_GW_STORE_SUMMARY ( camel_object_new (camel_groupwise_store_summary_get_type ()));
-
-	return new;
+	return CAMEL_GW_STORE_SUMMARY ( camel_object_new (camel_groupwise_store_summary_get_type ()));
 }
 
 CamelGroupwiseStoreInfo *
@@ -454,7 +444,7 @@ summary_header_load(CamelStoreSummary *s, FILE *in)
 
 	namespace_clear (s);
 
-	if (camel_groupwise_store_summary_parent->summary_header_load ((CamelStoreSummary *)s, in) == -1
+	if (CAMEL_STORE_SUMMARY_CLASS (camel_groupwise_store_summary_parent_class)->summary_header_load ((CamelStoreSummary *)s, in) == -1
 			|| camel_file_util_decode_fixed_int32(in, &version) == -1)
 		return -1;
 
@@ -480,7 +470,7 @@ summary_header_save(CamelStoreSummary *s, FILE *out)
 	guint32 count;
 
 	count = summary->namespace?1:0;
-	if (camel_groupwise_store_summary_parent->summary_header_save((CamelStoreSummary *)s, out) == -1
+	if (CAMEL_STORE_SUMMARY_CLASS (camel_groupwise_store_summary_parent_class)->summary_header_save((CamelStoreSummary *)s, out) == -1
 			|| camel_file_util_encode_fixed_int32(out, 0) == -1
 			|| camel_file_util_encode_fixed_int32(out, summary->capabilities) == -1
 			|| camel_file_util_encode_fixed_int32(out, count) == -1)
@@ -497,7 +487,7 @@ store_info_load(CamelStoreSummary *s, FILE *in)
 {
 	CamelGroupwiseStoreInfo *si;
 
-	si = (CamelGroupwiseStoreInfo *)camel_groupwise_store_summary_parent->store_info_load(s, in);
+	si = (CamelGroupwiseStoreInfo *)CAMEL_STORE_SUMMARY_CLASS (camel_groupwise_store_summary_parent_class)->store_info_load(s, in);
 	if (si) {
 		if (camel_file_util_decode_string(in, &si->full_name) == -1) {
 			camel_store_summary_info_free(s, (CamelStoreInfo *)si);
@@ -513,7 +503,7 @@ store_info_save(CamelStoreSummary *s, FILE *out, CamelStoreInfo *mi)
 {
 	CamelGroupwiseStoreInfo *summary = (CamelGroupwiseStoreInfo *)mi;
 
-	if (camel_groupwise_store_summary_parent->store_info_save(s, out, mi) == -1
+	if (CAMEL_STORE_SUMMARY_CLASS (camel_groupwise_store_summary_parent_class)->store_info_save(s, out, mi) == -1
 			|| camel_file_util_encode_string(out, summary->full_name) == -1)
 		return -1;
 
@@ -526,7 +516,7 @@ store_info_free(CamelStoreSummary *s, CamelStoreInfo *mi)
 	CamelGroupwiseStoreInfo *si = (CamelGroupwiseStoreInfo *)mi;
 
 	g_free(si->full_name);
-	camel_groupwise_store_summary_parent->store_info_free(s, mi);
+	CAMEL_STORE_SUMMARY_CLASS (camel_groupwise_store_summary_parent_class)->store_info_free(s, mi);
 }
 
 static const gchar *
@@ -542,7 +532,7 @@ store_info_string(CamelStoreSummary *s, const CamelStoreInfo *mi, gint type)
 		case CAMEL_STORE_INFO_LAST:
 			return isi->full_name;
 		default:
-			return camel_groupwise_store_summary_parent->store_info_string(s, mi, type);
+			return CAMEL_STORE_SUMMARY_CLASS (camel_groupwise_store_summary_parent_class)->store_info_string(s, mi, type);
 	}
 }
 
@@ -562,7 +552,7 @@ store_info_set_string(CamelStoreSummary *s, CamelStoreInfo *mi, gint type, const
 			camel_store_summary_unlock (s, CSS_SUMMARY_LOCK);
 			break;
 		default:
-			camel_groupwise_store_summary_parent->store_info_set_string(s, mi, type, str);
+			CAMEL_STORE_SUMMARY_CLASS (camel_groupwise_store_summary_parent_class)->store_info_set_string(s, mi, type, str);
 			break;
 	}
 }
diff --git a/camel/providers/groupwise/camel-groupwise-store-summary.h b/camel/providers/groupwise/camel-groupwise-store-summary.h
index 958cf3a..59a0b91 100644
--- a/camel/providers/groupwise/camel-groupwise-store-summary.h
+++ b/camel/providers/groupwise/camel-groupwise-store-summary.h
@@ -19,8 +19,8 @@
  * Boston, MA 02110-1301, USA.
  */
 
-#ifndef CAMEL_GW_STORE_SUMMARY_H
-#define CAMEL_GW_STORE_SUMMARY_H
+#ifndef CAMEL_GROUPWISE_STORE_SUMMARY_H
+#define CAMEL_GROUPWISE_STORE_SUMMARY_H
 
 #include <camel/camel.h>
 
@@ -30,8 +30,9 @@
 
 G_BEGIN_DECLS
 
-typedef struct _CamelGroupwiseStoreSummary      CamelGroupwiseStoreSummary;
+typedef struct _CamelGroupwiseStoreSummary CamelGroupwiseStoreSummary;
 typedef struct _CamelGroupwiseStoreSummaryClass CamelGroupwiseStoreSummaryClass;
+typedef struct _CamelGroupwiseStoreSummaryPrivate CamelGroupwiseStoreSummaryPrivate;
 
 typedef struct _CamelGroupwiseStoreInfo CamelGroupwiseStoreInfo;
 
@@ -55,8 +56,7 @@ struct _CamelGroupwiseStoreNamespace {
 
 struct _CamelGroupwiseStoreSummary {
 	CamelStoreSummary summary;
-
-	struct _CamelGroupwiseStoreSummaryPrivate *priv;
+	CamelGroupwiseStoreSummaryPrivate *priv;
 
 	/* header info */
 	guint32 version;        /* version of base part of file */
@@ -85,4 +85,4 @@ void camel_groupwise_store_summary_namespace_set(CamelGroupwiseStoreSummary *s,
 
 G_END_DECLS
 
-#endif /* CAMEL_IMAP_STORE_SUMMARY_H */
+#endif /* CAMEL_GROUPWISE_STORE_SUMMARY_H */
diff --git a/camel/providers/groupwise/camel-groupwise-store.c b/camel/providers/groupwise/camel-groupwise-store.c
index 2df4015..995ed8b 100644
--- a/camel/providers/groupwise/camel-groupwise-store.c
+++ b/camel/providers/groupwise/camel-groupwise-store.c
@@ -34,7 +34,6 @@
 #include <sys/types.h>
 #include <unistd.h>
 
-#include <glib.h>
 #include <glib/gi18n-lib.h>
 #include <glib/gstdio.h>
 
@@ -71,18 +70,19 @@ struct _CamelGroupwiseStorePrivate {
 	EGwConnection *cnc;
 };
 
-static CamelOfflineStoreClass *parent_class = NULL;
+static gpointer camel_groupwise_store_parent_class;
 
 extern CamelServiceAuthType camel_groupwise_password_authtype; /*for the query_auth_types function*/
 static CamelFolderInfo *convert_to_folder_info (CamelGroupwiseStore *store, EGwContainer *container, const gchar *url, CamelException *ex);
-static void groupwise_folders_sync (CamelGroupwiseStore *store, CamelException *ex);
+static gboolean groupwise_folders_sync (CamelGroupwiseStore *store, CamelException *ex);
 static gint match_path(const gchar *path, const gchar *name);
 
-static void
+static gboolean
 groupwise_store_construct (CamelService *service, CamelSession *session,
 			   CamelProvider *provider, CamelURL *url,
 			   CamelException *ex)
 {
+	CamelServiceClass *service_class;
 	CamelGroupwiseStore *groupwise_store = CAMEL_GROUPWISE_STORE (service);
 	CamelStore *store = CAMEL_STORE (service);
 	const gchar *property_value;
@@ -91,19 +91,21 @@ groupwise_store_construct (CamelService *service, CamelSession *session,
 
 	d(printf ("\nin groupwise store constrcut\n"));
 
-	CAMEL_SERVICE_CLASS (parent_class)->construct (service, session, provider, url, ex);
-	if (camel_exception_is_set (ex))
-		return;
+	/* Chain up to parent's construct() method. */
+	service_class = CAMEL_SERVICE_CLASS (camel_groupwise_store_parent_class);
+	if (!service_class->construct (service, session, provider, url, ex))
+		return FALSE;
 
 	if (!(url->host || url->user)) {
-		camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_INVALID,
-				     _("Host or user not available in url"));
+		camel_exception_set (
+			ex, CAMEL_EXCEPTION_SERVICE_INVALID,
+			_("Host or user not available in url"));
 	}
 
 	/*storage path*/
 	priv->storage_path = camel_session_get_storage_path (session, service, ex);
 	if (!priv->storage_path)
-		return;
+		return FALSE;
 
 	/*store summary*/
 	path = g_alloca (strlen (priv->storage_path) + 32);
@@ -145,6 +147,8 @@ groupwise_store_construct (CamelService *service, CamelSession *session,
 
 	store->flags &= ~CAMEL_STORE_VJUNK;
 	store->flags &= ~CAMEL_STORE_VTRASH;
+
+	return TRUE;
 }
 
 static guint
@@ -191,8 +195,9 @@ groupwise_auth_loop (CamelService *service, CamelException *ex)
 			g_free (prompt);
 
 			if (!service->url->passwd) {
-				camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL,
-						     _("You did not enter a password."));
+				camel_exception_set (
+					ex, CAMEL_EXCEPTION_USER_CANCEL,
+					_("You did not enter a password."));
 				return FALSE;
 			}
 		}
@@ -211,7 +216,11 @@ groupwise_auth_loop (CamelService *service, CamelException *ex)
 				service->url->passwd = NULL;
 				camel_exception_clear (ex);
 			} else {
-				camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE, errors.description ? errors.description : _("You must be working online to complete this operation"));
+				camel_exception_set (
+					ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+					errors.description ?
+					errors.description :
+					_("You must be working online to complete this operation"));
 				return FALSE;
 			}
 		} else
@@ -525,8 +534,9 @@ groupwise_get_folder_from_disk (CamelStore *store, const gchar *folder_name, gui
 	g_free(storage_path);
 	if (!folder_dir || g_access (folder_dir, F_OK) != 0) {
 		g_free (folder_dir);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-				_("No such folder %s"), folder_name);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
+			_("No such folder %s"), folder_name);
 		return NULL;
 	}
 
@@ -584,7 +594,9 @@ groupwise_get_folder (CamelStore *store, const gchar *folder_name, guint32 flags
 	folder = camel_gw_folder_new (store, folder_name, folder_dir, ex);
 	if (!folder) {
 		camel_service_unlock (CAMEL_SERVICE (gw_store), CS_REC_CONNECT_LOCK);
-		camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_INVALID, _("Authentication failed"));
+		camel_exception_set (
+			ex, CAMEL_EXCEPTION_SERVICE_INVALID,
+			_("Authentication failed"));
 		g_free (folder_dir);
 		g_free (container_id);
 		return NULL;
@@ -759,7 +771,9 @@ gw_store_reload_folder (CamelGroupwiseStore *gw_store, CamelFolder *folder, guin
 							camel_service_unlock (CAMEL_SERVICE (gw_store), CS_REC_CONNECT_LOCK);
 							e_gw_connection_destroy_cursor (priv->cnc, container_id, cursor);
 							camel_folder_summary_save_to_db (folder->summary, ex);
-							camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_INVALID, _("Authentication failed"));
+							camel_exception_set (
+								ex, CAMEL_EXCEPTION_SERVICE_INVALID,
+								_("Authentication failed"));
 							camel_operation_end (NULL);
 							g_free (container_id);
 							return;
@@ -903,7 +917,7 @@ convert_to_folder_info (CamelGroupwiseStore *store, EGwContainer *container, con
 	if (store->current_folder
 	    && !strcmp (store->current_folder->full_name, fi->full_name)
 	    && type != E_GW_CONTAINER_TYPE_INBOX) {
-		CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS (store->current_folder))->refresh_info(store->current_folder, ex);
+		CAMEL_FOLDER_GET_CLASS (store->current_folder)->refresh_info (store->current_folder, ex);
 	}
 	return fi;
 }
@@ -915,7 +929,7 @@ get_folders_free (gpointer k, gpointer v, gpointer d)
 	camel_folder_info_free (fi);
 }
 
-static void
+static gboolean
 groupwise_folders_sync (CamelGroupwiseStore *store, CamelException *ex)
 {
 	CamelGroupwiseStorePrivate  *priv = store->priv;
@@ -932,7 +946,7 @@ groupwise_folders_sync (CamelGroupwiseStore *store, CamelException *ex)
 		status = e_gw_connection_get_container_list (priv->cnc, "folders", &folder_list);
 	if (status != E_GW_CONNECTION_STATUS_OK) {
 		g_warning ("Could not get folder list..\n");
-		return;
+		return TRUE;
 	}
 
 	temp_list = folder_list;
@@ -1017,6 +1031,8 @@ groupwise_folders_sync (CamelGroupwiseStore *store, CamelException *ex)
 
 	g_hash_table_foreach (present, get_folders_free, NULL);
 	g_hash_table_destroy (present);
+
+	return TRUE;
 }
 
 static CamelFolderInfo *
@@ -1194,21 +1210,27 @@ groupwise_create_folder(CamelStore *store,
 	gint status;
 
 	if (((CamelOfflineStore *) store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) {
-		camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM, _("Cannot create GroupWise folders in offline mode."));
+		camel_exception_set (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Cannot create GroupWise folders in offline mode."));
 		return NULL;
 	}
 
 	if (parent_name == NULL) {
 		parent_name = "";
 		if (groupwise_is_system_folder (folder_name)) {
-			camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM, NULL);
+			camel_exception_set (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				NULL  /* XXX Um, hello?  Error message? */);
 			return NULL;
 		}
 	}
 
 	if (parent_name && (strlen(parent_name) > 0) ) {
 		if (strcmp (parent_name, "Cabinet") && groupwise_is_system_folder (parent_name)) {
-			camel_exception_set (ex, CAMEL_EXCEPTION_FOLDER_INVALID_STATE, _("The parent folder is not allowed to contain subfolders"));
+			camel_exception_set (
+				ex, CAMEL_EXCEPTION_FOLDER_INVALID_STATE,
+				_("The parent folder is not allowed to contain subfolders"));
 			return NULL;
 		}
 		parent_id = g_hash_table_lookup (priv->name_hash, parent_name);
@@ -1238,7 +1260,7 @@ groupwise_create_folder(CamelStore *store,
 	return root;
 }
 
-static void
+static gboolean
 groupwise_delete_folder(CamelStore *store,
 				   const gchar *folder_name,
 				   CamelException *ex)
@@ -1252,7 +1274,7 @@ groupwise_delete_folder(CamelStore *store,
 
 	if (!camel_groupwise_store_connected (groupwise_store, ex)) {
 		camel_service_unlock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
-		return;
+		return FALSE;
 	}
 
 	container = g_hash_table_lookup (priv->name_hash, folder_name);
@@ -1272,9 +1294,11 @@ groupwise_delete_folder(CamelStore *store,
 		g_hash_table_remove (priv->parent_hash, container);
 	}
 	camel_service_unlock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
+
+	return TRUE;
 }
 
-static void
+static gboolean
 groupwise_rename_folder(CamelStore *store,
 			const gchar *old_name,
 			const gchar *new_name,
@@ -1287,16 +1311,18 @@ groupwise_rename_folder(CamelStore *store,
 	gchar *temp_new = NULL;
 
 	if (groupwise_is_system_folder (old_name)) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, _("Cannot rename GroupWise folder '%s' to '%s'"),
-				      old_name, new_name);
-		return;
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Cannot rename GroupWise folder '%s' to '%s'"),
+			old_name, new_name);
+		return FALSE;
 	}
 
 	camel_service_lock (CAMEL_SERVICE (groupwise_store), CS_REC_CONNECT_LOCK);
 
 	if (!camel_groupwise_store_connected (groupwise_store, ex)) {
 		camel_service_unlock (CAMEL_SERVICE (groupwise_store), CS_REC_CONNECT_LOCK);
-		return;
+		return FALSE;
 	}
 
 	groupwise_store_set_current_folder (groupwise_store, NULL);
@@ -1310,10 +1336,12 @@ groupwise_rename_folder(CamelStore *store,
 
 	if (!container_id || e_gw_connection_rename_folder (priv->cnc, container_id , temp_new) != E_GW_CONNECTION_STATUS_OK)
 	{
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, _("Cannot rename GroupWise folder '%s' to '%s'"),
-				      old_name, new_name);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Cannot rename GroupWise folder '%s' to '%s'"),
+			old_name, new_name);
 		camel_service_unlock (CAMEL_SERVICE (groupwise_store), CS_REC_CONNECT_LOCK);
-		return;
+		return FALSE;
 	}
 
 	g_hash_table_replace (priv->id_hash, g_strdup(container_id), g_strdup(temp_new));
@@ -1336,6 +1364,8 @@ groupwise_rename_folder(CamelStore *store,
 	g_free (oldpath);
 	g_free (newpath);
 	camel_service_unlock (CAMEL_SERVICE (groupwise_store), CS_REC_CONNECT_LOCK);
+
+	return TRUE;
 }
 
 gchar *
@@ -1403,7 +1433,7 @@ groupwise_can_refresh_folder (CamelStore *store, CamelFolderInfo *info, CamelExc
 {
 	gboolean res;
 
-	res = CAMEL_STORE_CLASS(parent_class)->can_refresh_folder (store, info, ex) ||
+	res = CAMEL_STORE_CLASS(camel_groupwise_store_parent_class)->can_refresh_folder (store, info, ex) ||
 	      (camel_url_get_param (((CamelService *)store)->url, "check_all") != NULL);
 
 	return res;
@@ -1456,112 +1486,82 @@ match_path(const gchar *path, const gchar *name)
 	return n == 0 && (p == '%' || p == 0);
 }
 
-/* GObject Init and finalize methods */
 static void
-camel_groupwise_store_class_init (CamelGroupwiseStoreClass *camel_groupwise_store_class)
+groupwise_store_finalize (CamelGroupwiseStore *groupwise_store)
 {
-	CamelServiceClass *camel_service_class =
-		CAMEL_SERVICE_CLASS (camel_groupwise_store_class);
-	CamelStoreClass *camel_store_class =
-		CAMEL_STORE_CLASS (camel_groupwise_store_class);
-
-	parent_class = CAMEL_OFFLINE_STORE_CLASS (camel_type_get_global_classfuncs (camel_offline_store_get_type ()));
-
-	camel_service_class->construct = groupwise_store_construct;
-	camel_service_class->query_auth_types = groupwise_store_query_auth_types;
-	camel_service_class->get_name = groupwise_get_name;
-	camel_service_class->connect = groupwise_connect;
-	camel_service_class->disconnect = groupwise_disconnect;
-
-	camel_store_class->hash_folder_name = groupwise_hash_folder_name;
-	camel_store_class->compare_folder_name = groupwise_compare_folder_name;
-
-	camel_store_class->get_folder = groupwise_get_folder;
-	camel_store_class->create_folder = groupwise_create_folder;
-	camel_store_class->delete_folder = groupwise_delete_folder;
-	camel_store_class->rename_folder = groupwise_rename_folder;
-	camel_store_class->get_folder_info = groupwise_get_folder_info;
-	camel_store_class->free_folder_info = camel_store_free_folder_info_full;
-	camel_store_class->get_trash = groupwise_get_trash;
-	camel_store_class->can_refresh_folder = groupwise_can_refresh_folder;
-}
-
-/*This frees the private structure*/
-static void
-camel_groupwise_store_finalize (CamelObject *object)
-{
-	CamelGroupwiseStore *groupwise_store = CAMEL_GROUPWISE_STORE (object);
 	CamelGroupwiseStorePrivate *priv = groupwise_store->priv;
 
-	g_print ("camel_groupwise_store_finalize\n");
-	if (groupwise_store->summary) {
+	if (groupwise_store->summary != NULL) {
 		camel_store_summary_save ((CamelStoreSummary *)groupwise_store->summary);
 		camel_object_unref (groupwise_store->summary);
 	}
 
-	if (priv) {
-		if (priv->user) {
-			g_free (priv->user);
-			priv->user = NULL;
-		}
-		if (priv->server_name) {
-			g_free (priv->server_name);
-			priv->server_name = NULL;
-		}
-		if (priv->port) {
-			g_free (priv->port);
-			priv->port = NULL;
-		}
-		if (priv->use_ssl) {
-			g_free (priv->use_ssl);
-			priv->use_ssl = NULL;
-		}
-		if (priv->base_url) {
-			g_free (priv->base_url);
-			priv->base_url = NULL;
-		}
-
-		if (E_IS_GW_CONNECTION (priv->cnc)) {
-			g_object_unref (priv->cnc);
-			priv->cnc = NULL;
-		}
+	g_free (groupwise_store->priv->user);
+	g_free (groupwise_store->priv->server_name);
+	g_free (groupwise_store->priv->port);
+	g_free (groupwise_store->priv->use_ssl);
+	g_free (groupwise_store->priv->base_url);
+	g_free (groupwise_store->priv->storage_path);
+	g_free (groupwise_store->root_container);
 
-		if (priv->storage_path)
-			g_free(priv->storage_path);
 
-		if (groupwise_store->root_container)
-			g_free (groupwise_store->root_container);
+	if (E_IS_GW_CONNECTION (groupwise_store->priv->cnc)) {
+		g_object_unref (groupwise_store->priv->cnc);
+		groupwise_store->priv->cnc = NULL;
+	}
 
-		if (priv->id_hash)
-			g_hash_table_destroy (priv->id_hash);
+	if (groupwise_store->priv->id_hash != NULL)
+		g_hash_table_destroy (priv->id_hash);
 
-		if (priv->name_hash)
-			g_hash_table_destroy (priv->name_hash);
+	if (groupwise_store->priv->name_hash != NULL)
+		g_hash_table_destroy (priv->name_hash);
 
-		if (priv->parent_hash)
-			g_hash_table_destroy (priv->parent_hash);
+	if (groupwise_store->priv->parent_hash != NULL)
+		g_hash_table_destroy (priv->parent_hash);
 
-		g_free (groupwise_store->priv);
-		groupwise_store->priv = NULL;
-	}
+	g_free (groupwise_store->priv);
+}
 
+static void
+camel_groupwise_store_class_init (CamelGroupwiseStoreClass *class)
+{
+	CamelServiceClass *service_class;
+	CamelStoreClass *store_class;
+
+	camel_groupwise_store_parent_class = CAMEL_OFFLINE_STORE_CLASS (camel_type_get_global_classfuncs (camel_offline_store_get_type ()));
+
+	service_class = CAMEL_SERVICE_CLASS (class);
+	service_class->construct = groupwise_store_construct;
+	service_class->query_auth_types = groupwise_store_query_auth_types;
+	service_class->get_name = groupwise_get_name;
+	service_class->connect = groupwise_connect;
+	service_class->disconnect = groupwise_disconnect;
+
+	store_class = CAMEL_STORE_CLASS (class);
+	store_class->hash_folder_name = groupwise_hash_folder_name;
+	store_class->compare_folder_name = groupwise_compare_folder_name;
+	store_class->get_folder = groupwise_get_folder;
+	store_class->create_folder = groupwise_create_folder;
+	store_class->delete_folder = groupwise_delete_folder;
+	store_class->rename_folder = groupwise_rename_folder;
+	store_class->get_folder_info = groupwise_get_folder_info;
+	store_class->free_folder_info = camel_store_free_folder_info_full;
+	store_class->get_trash = groupwise_get_trash;
+	store_class->can_refresh_folder = groupwise_can_refresh_folder;
 }
 
 static void
-camel_groupwise_store_init (gpointer object, gpointer klass)
+camel_groupwise_store_init (CamelGroupwiseStore *groupwise_store)
 {
-	CamelGroupwiseStore *groupwise_store = CAMEL_GROUPWISE_STORE (object);
-	CamelGroupwiseStorePrivate *priv = g_new0 (CamelGroupwiseStorePrivate, 1);
+	groupwise_store->priv = g_new0 (CamelGroupwiseStorePrivate, 1);
 
 	d("in groupwise store init\n");
-	priv->server_name = NULL;
-	priv->port = NULL;
-	priv->use_ssl = NULL;
-	priv->user = NULL;
-	priv->cnc = NULL;
-	groupwise_store->priv = priv;
+	groupwise_store->priv->server_name = NULL;
+	groupwise_store->priv->port = NULL;
+	groupwise_store->priv->use_ssl = NULL;
+	groupwise_store->priv->user = NULL;
+	groupwise_store->priv->cnc = NULL;
 	groupwise_store->current_folder = NULL;
-
 }
 
 CamelType
@@ -1578,9 +1578,8 @@ camel_groupwise_store_get_type (void)
 					     (CamelObjectClassInitFunc) camel_groupwise_store_class_init,
 					     NULL,
 					     (CamelObjectInitFunc) camel_groupwise_store_init,
-					     (CamelObjectFinalizeFunc) camel_groupwise_store_finalize);
+					     (CamelObjectFinalizeFunc) groupwise_store_finalize);
 	}
 
 	return camel_groupwise_store_type;
 }
-
diff --git a/camel/providers/groupwise/camel-groupwise-store.h b/camel/providers/groupwise/camel-groupwise-store.h
index 33d24ce..b52f2a0 100644
--- a/camel/providers/groupwise/camel-groupwise-store.h
+++ b/camel/providers/groupwise/camel-groupwise-store.h
@@ -62,7 +62,6 @@ struct _CamelGroupwiseStoreClass {
 	CamelOfflineStoreClass parent_class;
 };
 
-/* Standard Camel function */
 CamelType camel_groupwise_store_get_type (void);
 gchar * groupwise_get_name(CamelService *service, gboolean brief);
 
diff --git a/camel/providers/groupwise/camel-groupwise-summary.c b/camel/providers/groupwise/camel-groupwise-summary.c
index 87d8aa2..601c896 100644
--- a/camel/providers/groupwise/camel-groupwise-summary.c
+++ b/camel/providers/groupwise/camel-groupwise-summary.c
@@ -61,31 +61,9 @@ static CamelMessageInfo * message_info_from_db (CamelFolderSummary *s, CamelMIRe
 static gint content_info_to_db (CamelFolderSummary *s, CamelMessageContentInfo *info, CamelMIRecord *mir);
 static CamelMessageContentInfo * content_info_from_db (CamelFolderSummary *s, CamelMIRecord *mir);
 
-static void camel_groupwise_summary_class_init (CamelGroupwiseSummaryClass *klass);
-static void camel_groupwise_summary_init       (CamelGroupwiseSummary *obj);
-
 /*End of Prototypes*/
 
-static CamelFolderSummaryClass *camel_groupwise_summary_parent;
-
-CamelType
-camel_groupwise_summary_get_type (void)
-{
-	static CamelType type = CAMEL_INVALID_TYPE;
-
-	if (type == CAMEL_INVALID_TYPE) {
-		type = camel_type_register(
-				camel_folder_summary_get_type(), "CamelGroupwiseSummary",
-				sizeof (CamelGroupwiseSummary),
-				sizeof (CamelGroupwiseSummaryClass),
-				(CamelObjectClassInitFunc) camel_groupwise_summary_class_init,
-				NULL,
-				(CamelObjectInitFunc) camel_groupwise_summary_init,
-				NULL);
-	}
-
-	return type;
-}
+static gpointer camel_groupwise_summary_parent_class;
 
 static CamelMessageInfo *
 gw_message_info_clone(CamelFolderSummary *s, const CamelMessageInfo *mi)
@@ -93,7 +71,7 @@ gw_message_info_clone(CamelFolderSummary *s, const CamelMessageInfo *mi)
 	CamelGroupwiseMessageInfo *to;
 	const CamelGroupwiseMessageInfo *from = (const CamelGroupwiseMessageInfo *)mi;
 
-	to = (CamelGroupwiseMessageInfo *)camel_groupwise_summary_parent->message_info_clone(s, mi);
+	to = (CamelGroupwiseMessageInfo *)CAMEL_FOLDER_SUMMARY_CLASS (camel_groupwise_summary_parent_class)->message_info_clone(s, mi);
 	to->server_flags = from->server_flags;
 
 	/* FIXME: parent clone should do this */
@@ -103,39 +81,57 @@ gw_message_info_clone(CamelFolderSummary *s, const CamelMessageInfo *mi)
 }
 
 static void
-camel_groupwise_summary_class_init (CamelGroupwiseSummaryClass *klass)
+camel_groupwise_summary_class_init (CamelGroupwiseSummaryClass *class)
 {
-	CamelFolderSummaryClass *cfs_class = (CamelFolderSummaryClass *) klass;
-
-	camel_groupwise_summary_parent = CAMEL_FOLDER_SUMMARY_CLASS (camel_type_get_global_classfuncs (camel_folder_summary_get_type()));
-
-	cfs_class->message_info_size = sizeof(CamelGroupwiseMessageInfo);
-	cfs_class->content_info_size = sizeof(CamelGroupwiseMessageContentInfo);
-	cfs_class->message_info_clone = gw_message_info_clone;
-	cfs_class->summary_header_load = gw_summary_header_load;
-	cfs_class->summary_header_save = gw_summary_header_save;
-	cfs_class->message_info_load = gw_message_info_load;
-	cfs_class->message_info_save = gw_message_info_save;
-	cfs_class->content_info_load = gw_content_info_load;
-	cfs_class->content_info_save = gw_content_info_save;
-	cfs_class->info_set_flags = gw_info_set_flags;
-
-	cfs_class->summary_header_to_db = summary_header_to_db;
-	cfs_class->summary_header_from_db = summary_header_from_db;
-	cfs_class->message_info_to_db = message_info_to_db;
-	cfs_class->message_info_from_db = message_info_from_db;
-	cfs_class->content_info_to_db = content_info_to_db;
-	cfs_class->content_info_from_db = content_info_from_db;
-
+	CamelFolderSummaryClass *folder_summary_class;
+
+	camel_groupwise_summary_parent_class = CAMEL_FOLDER_SUMMARY_CLASS (camel_type_get_global_classfuncs (camel_folder_summary_get_type()));
+
+	folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (class);
+	folder_summary_class->message_info_size = sizeof (CamelGroupwiseMessageInfo);
+	folder_summary_class->content_info_size = sizeof (CamelGroupwiseMessageContentInfo);
+	folder_summary_class->message_info_clone = gw_message_info_clone;
+	folder_summary_class->summary_header_load = gw_summary_header_load;
+	folder_summary_class->summary_header_save = gw_summary_header_save;
+	folder_summary_class->message_info_load = gw_message_info_load;
+	folder_summary_class->message_info_save = gw_message_info_save;
+	folder_summary_class->content_info_load = gw_content_info_load;
+	folder_summary_class->content_info_save = gw_content_info_save;
+	folder_summary_class->info_set_flags = gw_info_set_flags;
+	folder_summary_class->summary_header_to_db = summary_header_to_db;
+	folder_summary_class->summary_header_from_db = summary_header_from_db;
+	folder_summary_class->message_info_to_db = message_info_to_db;
+	folder_summary_class->message_info_from_db = message_info_from_db;
+	folder_summary_class->content_info_to_db = content_info_to_db;
+	folder_summary_class->content_info_from_db = content_info_from_db;
 }
 
 static void
-camel_groupwise_summary_init (CamelGroupwiseSummary *obj)
+camel_groupwise_summary_init (CamelGroupwiseSummary *gw_summary)
 {
-	CamelFolderSummary *s = (CamelFolderSummary *)obj;
+	CamelFolderSummary *summary = CAMEL_FOLDER_SUMMARY (gw_summary);
 
 	/* Meta-summary - Overriding UID len */
-	s->meta_summary->uid_len = 2048;
+	summary->meta_summary->uid_len = 2048;
+}
+
+CamelType
+camel_groupwise_summary_get_type (void)
+{
+	static CamelType type = CAMEL_INVALID_TYPE;
+
+	if (type == CAMEL_INVALID_TYPE) {
+		type = camel_type_register(
+				camel_folder_summary_get_type(), "CamelGroupwiseSummary",
+				sizeof (CamelGroupwiseSummary),
+				sizeof (CamelGroupwiseSummaryClass),
+				(CamelObjectClassInitFunc) camel_groupwise_summary_class_init,
+				NULL,
+				(CamelObjectInitFunc) camel_groupwise_summary_init,
+				NULL);
+	}
+
+	return type;
 }
 
 /**
@@ -150,10 +146,10 @@ camel_groupwise_summary_init (CamelGroupwiseSummary *obj)
 CamelFolderSummary *
 camel_groupwise_summary_new (struct _CamelFolder *folder, const gchar *filename)
 {
+	CamelFolderSummary *summary;
 	CamelException ex;
-	CamelFolderSummary *summary = CAMEL_FOLDER_SUMMARY (
-			camel_object_new (camel_groupwise_summary_get_type ()));
 
+	summary = CAMEL_FOLDER_SUMMARY (camel_object_new (camel_groupwise_summary_get_type ()));
 	summary->folder = folder;
 	camel_folder_summary_set_build_content (summary, TRUE);
 	camel_folder_summary_set_filename (summary, filename);
@@ -172,7 +168,7 @@ summary_header_from_db (CamelFolderSummary *s, CamelFIRecord *mir)
 	CamelGroupwiseSummary *gms = CAMEL_GROUPWISE_SUMMARY (s);
 	gchar *part;
 
-	if (camel_groupwise_summary_parent->summary_header_from_db (s, mir) == -1)
+	if (CAMEL_FOLDER_SUMMARY_CLASS (camel_groupwise_summary_parent_class)->summary_header_from_db (s, mir) == -1)
 		return -1;
 
 	part = mir->bdata;
@@ -195,7 +191,7 @@ gw_summary_header_load (CamelFolderSummary *s, FILE *in)
 {
 	CamelGroupwiseSummary *gms = CAMEL_GROUPWISE_SUMMARY (s);
 
-	if (camel_groupwise_summary_parent->summary_header_load (s, in) == -1)
+	if (CAMEL_FOLDER_SUMMARY_CLASS (camel_groupwise_summary_parent_class)->summary_header_load (s, in) == -1)
 		return -1;
 
 	if (camel_file_util_decode_fixed_int32(in, &gms->version) == -1
@@ -213,7 +209,7 @@ summary_header_to_db (CamelFolderSummary *s, CamelException *ex)
 	CamelGroupwiseSummary *ims = CAMEL_GROUPWISE_SUMMARY(s);
 	struct _CamelFIRecord *fir;
 
-	fir = camel_groupwise_summary_parent->summary_header_to_db (s, ex);
+	fir = CAMEL_FOLDER_SUMMARY_CLASS (camel_groupwise_summary_parent_class)->summary_header_to_db (s, ex);
 	if (!fir)
 		return NULL;
 
@@ -228,7 +224,7 @@ gw_summary_header_save (CamelFolderSummary *s, FILE *out)
 {
 	CamelGroupwiseSummary *gms = CAMEL_GROUPWISE_SUMMARY(s);
 
-	if (camel_groupwise_summary_parent->summary_header_save (s, out) == -1)
+	if (CAMEL_FOLDER_SUMMARY_CLASS (camel_groupwise_summary_parent_class)->summary_header_save (s, out) == -1)
 		return -1;
 
 	camel_file_util_encode_fixed_int32(out, CAMEL_GW_SUMMARY_VERSION);
@@ -242,7 +238,7 @@ message_info_from_db (CamelFolderSummary *s, CamelMIRecord *mir)
 	CamelMessageInfo *info;
 	CamelGroupwiseMessageInfo *iinfo;
 
-	info = camel_groupwise_summary_parent->message_info_from_db (s, mir);
+	info = CAMEL_FOLDER_SUMMARY_CLASS (camel_groupwise_summary_parent_class)->message_info_from_db (s, mir);
 	if (info) {
 		gchar *part = mir->bdata;
 		iinfo = (CamelGroupwiseMessageInfo *)info;
@@ -257,7 +253,7 @@ gw_message_info_load (CamelFolderSummary *s, FILE *in)
 	CamelMessageInfo *info;
 	CamelGroupwiseMessageInfo *gw_info;
 
-	info = camel_groupwise_summary_parent->message_info_load(s,in);
+	info = CAMEL_FOLDER_SUMMARY_CLASS (camel_groupwise_summary_parent_class)->message_info_load(s,in);
 	if (info) {
 		gw_info = (CamelGroupwiseMessageInfo*) info;
 		if (camel_file_util_decode_uint32 (in, &gw_info->server_flags) == -1)
@@ -276,7 +272,7 @@ message_info_to_db (CamelFolderSummary *s, CamelMessageInfo *info)
 	CamelGroupwiseMessageInfo *iinfo = (CamelGroupwiseMessageInfo *)info;
 	struct _CamelMIRecord *mir;
 
-	mir = camel_groupwise_summary_parent->message_info_to_db (s, info);
+	mir = CAMEL_FOLDER_SUMMARY_CLASS (camel_groupwise_summary_parent_class)->message_info_to_db (s, info);
 	if (mir)
 		mir->bdata = g_strdup_printf ("%u", iinfo->server_flags);
 
@@ -288,7 +284,7 @@ gw_message_info_save (CamelFolderSummary *s, FILE *out, CamelMessageInfo *info)
 {
 	CamelGroupwiseMessageInfo *gw_info = (CamelGroupwiseMessageInfo *)info;
 
-	if (camel_groupwise_summary_parent->message_info_save (s, out, info) == -1)
+	if (CAMEL_FOLDER_SUMMARY_CLASS (camel_groupwise_summary_parent_class)->message_info_save (s, out, info) == -1)
 		return -1;
 
 	return camel_file_util_encode_uint32 (out, gw_info->server_flags);
@@ -309,7 +305,7 @@ content_info_from_db (CamelFolderSummary *s, CamelMIRecord *mir)
 	}
 	mir->cinfo = part;
 	if (type)
-		return camel_groupwise_summary_parent->content_info_from_db (s, mir);
+		return CAMEL_FOLDER_SUMMARY_CLASS (camel_groupwise_summary_parent_class)->content_info_from_db (s, mir);
 	else
 		return camel_folder_summary_content_info_new (s);
 }
@@ -318,7 +314,7 @@ static CamelMessageContentInfo *
 gw_content_info_load (CamelFolderSummary *s, FILE *in)
 {
 	if (fgetc (in))
-		return camel_groupwise_summary_parent->content_info_load (s, in);
+		return CAMEL_FOLDER_SUMMARY_CLASS (camel_groupwise_summary_parent_class)->content_info_load (s, in);
 	else
 		return camel_folder_summary_content_info_new (s);
 }
@@ -329,7 +325,7 @@ content_info_to_db (CamelFolderSummary *s, CamelMessageContentInfo *info, CamelM
 
 	if (info->type) {
 		mir->cinfo = g_strdup ("1");
-		return camel_groupwise_summary_parent->content_info_to_db (s, info, mir);
+		return CAMEL_FOLDER_SUMMARY_CLASS (camel_groupwise_summary_parent_class)->content_info_to_db (s, info, mir);
 	} else {
 		mir->cinfo = g_strdup ("0");
 		return 0;
@@ -342,7 +338,7 @@ gw_content_info_save (CamelFolderSummary *s, FILE *out,
 {
 	if (info->type) {
 		fputc (1, out);
-		return camel_groupwise_summary_parent->content_info_save (s, out, info);
+		return CAMEL_FOLDER_SUMMARY_CLASS (camel_groupwise_summary_parent_class)->content_info_save (s, out, info);
 	} else
 		return fputc (0, out);
 }
diff --git a/camel/providers/groupwise/camel-groupwise-transport.c b/camel/providers/groupwise/camel-groupwise-transport.c
index 3b2a0eb..2880fe5 100644
--- a/camel/providers/groupwise/camel-groupwise-transport.c
+++ b/camel/providers/groupwise/camel-groupwise-transport.c
@@ -28,7 +28,6 @@
 
 #include <string.h>
 
-#include <glib.h>
 #include <glib/gi18n-lib.h>
 
 #include "camel-groupwise-store.h"
@@ -37,97 +36,35 @@
 
 #define REPLY_VIEW "default message attachments threading"
 
-static gboolean groupwise_send_to (CamelTransport *transport,
-				  CamelMimeMessage *message,
-				  CamelAddress *from,
-				  CamelAddress *recipients,
-				  CamelException *ex);
+static gpointer camel_groupwise_transport_parent_class;
 
-static gboolean groupwise_transport_connect (CamelService *service, CamelException *ex);
-static gchar *groupwise_transport_get_name (CamelService *service, gboolean brief);
-static void groupwise_transport_construct (CamelService *service, CamelSession *session,
-					   CamelProvider *provider, CamelURL *url, CamelException *ex);
-
-static CamelTransportClass *parent_class = NULL;
-
-static void
-camel_groupwise_transport_class_init (CamelGroupwiseTransportClass *camel_groupwise_transport_class)
-{
-	CamelTransportClass *camel_transport_class =
-		CAMEL_TRANSPORT_CLASS (camel_groupwise_transport_class);
-
-	CamelServiceClass *camel_service_class =
-		CAMEL_SERVICE_CLASS (camel_groupwise_transport_class);
-
-	parent_class = CAMEL_TRANSPORT_CLASS (camel_type_get_global_classfuncs (camel_transport_get_type ()));
-
-	camel_service_class->connect = groupwise_transport_connect;
-	camel_service_class->get_name = groupwise_transport_get_name;
-	camel_service_class->construct = groupwise_transport_construct;
-
-	/* virtual method overload */
-	camel_transport_class->send_to = groupwise_send_to;
-}
-
-static void
-camel_groupwise_transport_init (CamelTransport *transport)
-{
-	return;
-}
-
-static void
-groupwise_transport_construct (CamelService *service, CamelSession *session,
-		CamelProvider *provider, CamelURL *url,
-		CamelException *ex)
-{
-	CAMEL_SERVICE_CLASS (parent_class)->construct (service, session, provider, url, ex);
-	if (camel_exception_is_set (ex))
-		return;
-}
-
-CamelType
-camel_groupwise_transport_get_type (void)
+static gboolean
+groupwise_transport_connect (CamelService *service,
+                             CamelException *ex)
 {
-	static CamelType camel_groupwise_transport_type = CAMEL_INVALID_TYPE;
-
-	if (camel_groupwise_transport_type == CAMEL_INVALID_TYPE) {
-		camel_groupwise_transport_type =
-			camel_type_register (CAMEL_TRANSPORT_TYPE,
-					     "CamelGroupwiseTransport",
-					     sizeof (CamelGroupwiseTransport),
-					     sizeof (CamelGroupwiseTransportClass),
-					     (CamelObjectClassInitFunc) camel_groupwise_transport_class_init,
-					     NULL,
-					     (CamelObjectInitFunc) camel_groupwise_transport_init,
-					     NULL);
-	}
-
-	return camel_groupwise_transport_type;
+	return TRUE;
 }
 
-static gchar *groupwise_transport_get_name (CamelService *service, gboolean brief)
+static gchar *
+groupwise_transport_get_name (CamelService *service,
+                              gboolean brief)
 {
 	if (brief)
-		return g_strdup_printf (_("GroupWise server %s"), service->url->host);
-	else {
-		return g_strdup_printf (_("GroupWise mail delivery via %s"),
-				service->url->host);
-	}
-}
-
-static gboolean
-groupwise_transport_connect (CamelService *service, CamelException *ex)
-{
-	return TRUE;
-
+		return g_strdup_printf (
+			_("GroupWise server %s"),
+			service->url->host);
+	else
+		return g_strdup_printf (
+			_("GroupWise mail delivery via %s"),
+			service->url->host);
 }
 
 static gboolean
 groupwise_send_to (CamelTransport *transport,
-		   CamelMimeMessage *message,
-		   CamelAddress *from,
-		   CamelAddress *recipients,
-		   CamelException *ex)
+                   CamelMimeMessage *message,
+                   CamelAddress *from,
+                   CamelAddress *recipients,
+                   CamelException *ex)
 {
 	CamelService *service;
 	CamelStore *store =  NULL;
@@ -142,7 +79,9 @@ groupwise_send_to (CamelTransport *transport,
 	EGwItemLinkInfo *info = NULL;
 
 	if (!transport) {
-		camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE, _("Authentication failed"));
+		camel_exception_set (
+			ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
+			_("Authentication failed"));
 		return FALSE;
 	}
 
@@ -159,7 +98,9 @@ groupwise_send_to (CamelTransport *transport,
 	g_free (url);
 	if (!store) {
 		g_warning ("ERROR: Could not get a pointer to the store");
-		camel_exception_set (ex, CAMEL_EXCEPTION_STORE_INVALID, _("Cannot get folder: Invalid operation on this store"));
+		camel_exception_set (
+			ex, CAMEL_EXCEPTION_STORE_INVALID,
+			_("Cannot get folder: Invalid operation on this store"));
 		return FALSE;
 	}
 	groupwise_store = CAMEL_GROUPWISE_STORE (store);
@@ -169,7 +110,9 @@ groupwise_send_to (CamelTransport *transport,
 	if (!cnc) {
 		g_warning ("||| Eh!!! Failure |||\n");
 		camel_operation_end (NULL);
-		camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE, _("Authentication failed"));
+		camel_exception_set (
+			ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
+			_("Authentication failed"));
 		return FALSE;
 	}
 
@@ -200,9 +143,14 @@ groupwise_send_to (CamelTransport *transport,
 
 		/* FIXME: 58652 should be changed with an enum.*/
 		if (status == 58652)
-			camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE, _("You have exceeded this account's storage limit. Your messages are queued in your Outbox. Resend by pressing Send/Receive after deleting/archiving some of your mail.\n"));
+			camel_exception_set (
+				ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+				_("You have exceeded this account's storage limit. Your messages are queued in your Outbox. Resend by pressing Send/Receive after deleting/archiving some of your mail.\n"));
 		else
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,_("Could not send message: %s"),_("Unknown error"));
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+				_("Could not send message: %s"),
+				_("Unknown error"));
 		status = 0;
 		return FALSE;
 	}
@@ -219,3 +167,43 @@ groupwise_send_to (CamelTransport *transport,
 	return TRUE;
 }
 
+static void
+camel_groupwise_transport_class_init (CamelGroupwiseTransportClass *class)
+{
+	CamelServiceClass *service_class;
+	CamelTransportClass *transport_class;
+
+	camel_groupwise_transport_parent_class = CAMEL_TRANSPORT_CLASS (camel_type_get_global_classfuncs (camel_transport_get_type ()));
+
+	service_class = CAMEL_SERVICE_CLASS (class);
+	service_class->connect = groupwise_transport_connect;
+	service_class->get_name = groupwise_transport_get_name;
+
+	transport_class = CAMEL_TRANSPORT_CLASS (class);
+	transport_class->send_to = groupwise_send_to;
+}
+
+static void
+camel_groupwise_transport_init (CamelGroupwiseTransport *groupwise_transport)
+{
+}
+
+CamelType
+camel_groupwise_transport_get_type (void)
+{
+	static CamelType camel_groupwise_transport_type = CAMEL_INVALID_TYPE;
+
+	if (camel_groupwise_transport_type == CAMEL_INVALID_TYPE) {
+		camel_groupwise_transport_type =
+			camel_type_register (CAMEL_TRANSPORT_TYPE,
+					     "CamelGroupwiseTransport",
+					     sizeof (CamelGroupwiseTransport),
+					     sizeof (CamelGroupwiseTransportClass),
+					     (CamelObjectClassInitFunc) camel_groupwise_transport_class_init,
+					     NULL,
+					     (CamelObjectInitFunc) camel_groupwise_transport_init,
+					     NULL);
+	}
+
+	return camel_groupwise_transport_type;
+}
diff --git a/camel/providers/groupwise/camel-groupwise-transport.h b/camel/providers/groupwise/camel-groupwise-transport.h
index 86e3e79..61e5773 100644
--- a/camel/providers/groupwise/camel-groupwise-transport.h
+++ b/camel/providers/groupwise/camel-groupwise-transport.h
@@ -33,18 +33,18 @@
 
 G_BEGIN_DECLS
 
-typedef struct {
+typedef struct _CamelGroupwiseTransport CamelGroupwiseTransport;
+typedef struct _CamelGroupwiseTransportClass CamelGroupwiseTransportClass;
+
+struct _CamelGroupwiseTransport {
 	CamelTransport parent;
 	gboolean connected;
+};
 
-} CamelGroupwiseTransport;
-
-typedef struct {
+struct _CamelGroupwiseTransportClass {
 	CamelTransportClass parent_class;
+};
 
-} CamelGroupwiseTransportClass;
-
-/* Standard Camel function */
 CamelType camel_groupwise_transport_get_type (void);
 
 G_END_DECLS
diff --git a/camel/providers/groupwise/camel-groupwise-utils.c b/camel/providers/groupwise/camel-groupwise-utils.c
index 1f125b4..c4f9ca1 100644
--- a/camel/providers/groupwise/camel-groupwise-utils.c
+++ b/camel/providers/groupwise/camel-groupwise-utils.c
@@ -27,7 +27,6 @@
 #include <sys/stat.h>
 #include <sys/types.h>
 
-#include <glib.h>
 #include <glib/gstdio.h>
 
 #include "camel-groupwise-utils.h"
@@ -277,7 +276,7 @@ add_recipients(GSList *recipient_list, CamelAddress *recipients, gint recipient_
 }
 
 static void
-send_as_attachment (EGwConnection *cnc, EGwItem *item, CamelStreamMem *content, CamelContentType *type, CamelDataWrapper *dw, const gchar *filename, const gchar *cid, GSList **attach_list)
+send_as_attachment (EGwConnection *cnc, EGwItem *item, CamelStream *content, CamelContentType *type, CamelDataWrapper *dw, const gchar *filename, const gchar *cid, GSList **attach_list)
 {
 	EGwItemLinkInfo *info = NULL;
 	EGwConnectionStatus status;
@@ -291,7 +290,7 @@ send_as_attachment (EGwConnection *cnc, EGwItem *item, CamelStreamMem *content,
 	if (cid)
 		attachment->contentid = camel_header_contentid_decode (cid);
 
-	byte_array = camel_stream_mem_get_byte_array (content);
+	byte_array = camel_stream_mem_get_byte_array (CAMEL_STREAM_MEM (content));
 
 	if (filename && byte_array->data) {
 		if (camel_content_type_is (type, "application", "pgp-signature")) {
@@ -413,11 +412,14 @@ camel_groupwise_util_item_from_message (EGwConnection *cnc, CamelMimeMessage *me
 		do_multipart (cnc, item, mp, &attach_list);
 	} else {
 		/*only message*/
-		CamelStreamMem *content = (CamelStreamMem *)camel_stream_mem_new ();
+		CamelStream *content;
 		CamelDataWrapper *dw = NULL;
 		CamelContentType *type;
 		GByteArray *byte_array;
 
+		byte_array = g_byte_array_new ();
+		content = camel_stream_mem_new_with_byte_array (byte_array);
+
 		dw = camel_medium_get_content (CAMEL_MEDIUM (message));
 		type = camel_mime_part_get_content_type((CamelMimePart *)message);
 
@@ -434,7 +436,7 @@ camel_groupwise_util_item_from_message (EGwConnection *cnc, CamelMimeMessage *me
 			charset = camel_content_type_param (type, "charset");
 			if (charset && g_ascii_strcasecmp (charset, "US-ASCII") && g_ascii_strcasecmp (charset, "UTF-8")) {
 				filter = camel_mime_filter_charset_new (charset, "UTF-8");
-				filtered_stream = camel_stream_filter_new ((CamelStream *) content);
+				filtered_stream = camel_stream_filter_new (content);
 				camel_stream_filter_add ((CamelStreamFilter *) filtered_stream, filter);
 				camel_object_unref (filter);
 			} else {
@@ -446,11 +448,10 @@ camel_groupwise_util_item_from_message (EGwConnection *cnc, CamelMimeMessage *me
 			camel_stream_flush (filtered_stream);
 			camel_object_unref (filtered_stream);
 
-			camel_stream_write ((CamelStream *) content, "", 1);
-			byte_array = camel_stream_mem_get_byte_array (content);
+			camel_stream_write (content, "", 1);
 			e_gw_item_set_message (item, (const gchar *)byte_array->data);
 		} else {
-			camel_data_wrapper_decode_to_stream (dw, (CamelStream *) content);
+			camel_data_wrapper_decode_to_stream (dw, content);
 			send_as_attachment (cnc, item, content, type, dw, NULL, NULL, &attach_list);
 		}
 
@@ -604,13 +605,16 @@ do_multipart (EGwConnection *cnc, EGwItem *item, CamelMultipart *mp, GSList **at
 	for ( i=0; i<part_count; i++) {
 		CamelContentType *type;
 		CamelMimePart *part;
-		CamelStreamMem *content = (CamelStreamMem *)camel_stream_mem_new ();
+		CamelStream *content;
 		CamelDataWrapper *dw = NULL;
-		GByteArray *byte_array;
+		GByteArray *buffer;
 		const gchar *disposition, *filename;
 		const gchar *content_id = NULL;
 		gboolean is_alternative = FALSE;
 
+		buffer = g_byte_array_new ();
+		content = camel_stream_mem_new_with_byte_array (buffer);
+
 		/*
 		 * XXX:
 		 * Assuming the first part always is the actual message
@@ -633,14 +637,18 @@ do_multipart (EGwConnection *cnc, EGwItem *item, CamelMultipart *mp, GSList **at
 			/* eh... I don't think this code will ever get hit? */
 			CamelMimePart *temp_part;
 			const gchar *cid = NULL;
-			CamelStreamMem *temp_content = (CamelStreamMem *)camel_stream_mem_new ();
+			CamelStream *temp_content;
 			CamelDataWrapper *temp_dw = NULL;
+			GByteArray *temp_buffer;
+
+			temp_buffer = g_byte_array_new ();
+			temp_content = camel_stream_mem_new_with_byte_array (temp_buffer);
 
 			temp_part = camel_multipart_get_part ((CamelMultipart *)dw, 1);
 			if (temp_part) {
 				is_alternative = TRUE;
 				temp_dw = camel_medium_get_content (CAMEL_MEDIUM (temp_part));
-				camel_data_wrapper_write_to_stream(temp_dw, (CamelStream *)temp_content);
+				camel_data_wrapper_write_to_stream(temp_dw, temp_content);
 				filename = camel_mime_part_get_filename (temp_part);
 				disposition = camel_mime_part_get_disposition (temp_part);
 				cid = camel_mime_part_get_content_id (temp_part);
@@ -663,7 +671,7 @@ do_multipart (EGwConnection *cnc, EGwItem *item, CamelMultipart *mp, GSList **at
 			charset = camel_content_type_param (type, "charset");
 			if (charset && g_ascii_strcasecmp (charset, "US-ASCII") && g_ascii_strcasecmp (charset, "UTF-8")) {
 				filter = camel_mime_filter_charset_new (charset, "UTF-8");
-				filtered_stream = camel_stream_filter_new ((CamelStream *) content);
+				filtered_stream = camel_stream_filter_new (content);
 				camel_stream_filter_add ((CamelStreamFilter *) filtered_stream, filter);
 				camel_object_unref (filter);
 			} else {
@@ -675,15 +683,14 @@ do_multipart (EGwConnection *cnc, EGwItem *item, CamelMultipart *mp, GSList **at
 			camel_stream_flush (filtered_stream);
 			camel_object_unref (filtered_stream);
 
-			camel_stream_write ((CamelStream *) content, "", 1);
-			byte_array = camel_stream_mem_get_byte_array (content);
-			e_gw_item_set_message (item, (const gchar *) byte_array->data);
+			camel_stream_write (content, "", 1);
+			e_gw_item_set_message (item, (const gchar *) buffer->data);
 		} else {
 			filename = camel_mime_part_get_filename (part);
 			disposition = camel_mime_part_get_disposition (part);
 			content_id = camel_mime_part_get_content_id (part);
 
-			camel_data_wrapper_decode_to_stream (dw, (CamelStream *) content);
+			camel_data_wrapper_decode_to_stream (dw, content);
 			send_as_attachment (cnc, item, content, type, dw, filename, content_id, attach_list);
 		}
 
diff --git a/camel/providers/groupwise/camel-groupwise-utils.h b/camel/providers/groupwise/camel-groupwise-utils.h
index 1eed1a2..f6f30fc 100644
--- a/camel/providers/groupwise/camel-groupwise-utils.h
+++ b/camel/providers/groupwise/camel-groupwise-utils.h
@@ -17,8 +17,8 @@
  * Boston, MA 02110-1301, USA.
  */
 
-#ifndef CAMEL_GROUPWISE_UTILS
-#define CAMEL_GROUPWISE_UTILS
+#ifndef CAMEL_GROUPWISE_UTILS_H
+#define CAMEL_GROUPWISE_UTILS_H
 
 #include <camel/camel.h>
 #include <e-gw-connection.h>
diff --git a/camel/providers/imap/camel-imap-command.c b/camel/providers/imap/camel-imap-command.c
index a1e1fbf..0a3bcdb 100644
--- a/camel/providers/imap/camel-imap-command.c
+++ b/camel/providers/imap/camel-imap-command.c
@@ -82,8 +82,10 @@ static gchar *imap_command_strdup_printf (CamelImapStore *store,
  * response, which the caller must free with camel_imap_response_free().
  **/
 CamelImapResponse *
-camel_imap_command (CamelImapStore *store, CamelFolder *folder,
-		    CamelException *ex, const gchar *fmt, ...)
+camel_imap_command (CamelImapStore *store,
+                    CamelFolder *folder,
+                    CamelException *ex,
+                    const gchar *fmt, ...)
 {
 	va_list ap;
 	gchar *cmd;
@@ -147,8 +149,10 @@ camel_imap_command (CamelImapStore *store, CamelFolder *folder,
  * an error occurred (in which case @ex will be set).
  **/
 gboolean
-camel_imap_command_start (CamelImapStore *store, CamelFolder *folder,
-			  CamelException *ex, const gchar *fmt, ...)
+camel_imap_command_start (CamelImapStore *store,
+                          CamelFolder *folder,
+                          CamelException *ex,
+                          const gchar *fmt, ...)
 {
 	va_list ap;
 	gchar *cmd;
@@ -168,18 +172,24 @@ camel_imap_command_start (CamelImapStore *store, CamelFolder *folder,
 }
 
 static gboolean
-imap_command_start (CamelImapStore *store, CamelFolder *folder,
-		    const gchar *cmd, CamelException *ex)
+imap_command_start (CamelImapStore *store,
+                    CamelFolder *folder,
+                    const gchar *cmd,
+                    CamelException *ex)
 {
 	gssize nwritten;
 
 	if (!store->ostream) {
-		camel_exception_set (ex, CAMEL_EXCEPTION_STORE_INVALID, _("No output stream"));
+		camel_exception_set (
+			ex, CAMEL_EXCEPTION_STORE_INVALID,
+			_("No output stream"));
 		return FALSE;
 	}
 
 	if (!store->istream) {
-		camel_exception_set (ex, CAMEL_EXCEPTION_STORE_INVALID, _("No input stream"));
+		camel_exception_set (
+			ex, CAMEL_EXCEPTION_STORE_INVALID,
+			_("No input stream"));
 		return FALSE;
 	}
 
@@ -216,16 +226,19 @@ imap_command_start (CamelImapStore *store, CamelFolder *folder,
 		fprintf (stderr, "sending : %c%.5u %s\r\n", store->tag_prefix, store->command, mask);
 	}
 
-	nwritten = camel_stream_printf (store->ostream, "%c%.5u %s\r\n",
-					store->tag_prefix, store->command++, cmd);
+	nwritten = camel_stream_printf (
+		store->ostream, "%c%.5u %s\r\n",
+		store->tag_prefix, store->command++, cmd);
 
 	if (nwritten == -1) {
 		if (errno == EINTR)
-			camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL,
-					     _("Operation cancelled"));
+			camel_exception_set (
+				ex, CAMEL_EXCEPTION_USER_CANCEL,
+				_("Operation cancelled"));
 		else
-			camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-					     g_strerror (errno));
+			camel_exception_set (
+				ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+				g_strerror (errno));
 
 		camel_service_disconnect (CAMEL_SERVICE (store), FALSE, NULL);
 		return FALSE;
@@ -251,30 +264,38 @@ imap_command_start (CamelImapStore *store, CamelFolder *folder,
  * connect_lock will be released.
  **/
 CamelImapResponse *
-camel_imap_command_continuation (CamelImapStore *store, const gchar *cmd,
-				 gsize cmdlen, CamelException *ex)
+camel_imap_command_continuation (CamelImapStore *store,
+                                 const gchar *cmd,
+                                 gsize cmdlen,
+                                 CamelException *ex)
 {
 	if (!camel_imap_store_connected (store, ex))
 		return NULL;
 
 	if (!store->ostream) {
-		camel_exception_set (ex, CAMEL_EXCEPTION_STORE_INVALID, _("No output stream"));
+		camel_exception_set (
+			ex, CAMEL_EXCEPTION_STORE_INVALID,
+			_("No output stream"));
 		return NULL;
 	}
 
 	if (!store->istream) {
-		camel_exception_set (ex, CAMEL_EXCEPTION_STORE_INVALID, _("No input stream"));
+		camel_exception_set (
+			ex, CAMEL_EXCEPTION_STORE_INVALID,
+			_("No input stream"));
 		return NULL;
 	}
 
 	if (camel_stream_write (store->ostream, cmd, cmdlen) == -1 ||
 	    camel_stream_write (store->ostream, "\r\n", 2) == -1) {
 		if (errno == EINTR)
-			camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL,
-					     _("Operation cancelled"));
+			camel_exception_set (
+				ex, CAMEL_EXCEPTION_USER_CANCEL,
+				_("Operation cancelled"));
 		else
-			camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-					     g_strerror (errno));
+			camel_exception_set (
+				ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+				g_strerror (errno));
 		camel_service_disconnect (CAMEL_SERVICE (store), FALSE, NULL);
 		camel_service_unlock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
 		return NULL;
@@ -323,9 +344,9 @@ camel_imap_command_response (CamelImapStore *store, gchar **response,
 
 			/* Connection was lost, no more data to fetch */
 			camel_service_disconnect (CAMEL_SERVICE (store), FALSE, NULL);
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-					      _("Server unexpectedly disconnected: %s"),
-					      err);
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+				_("Server unexpectedly disconnected: %s"), err);
 			store->connected = FALSE;
 			g_free (respbuf);
 			respbuf = NULL;
@@ -413,9 +434,10 @@ imap_read_response (CamelImapStore *store, CamelException *ex)
 	if (!p || (g_ascii_strncasecmp(p, " NO", 3) != 0 && g_ascii_strncasecmp(p, " BAD", 4)) ) {
 		g_warning ("Unexpected response from IMAP server: %s",
 			   respbuf);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      _("Unexpected response from IMAP "
-					"server: %s"), respbuf);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+			_("Unexpected response from IMAP server: %s"),
+			respbuf);
 		camel_imap_response_free_without_processing (store, response);
 		return NULL;
 	}
@@ -423,9 +445,10 @@ imap_read_response (CamelImapStore *store, CamelException *ex)
 	p += 3;
 	if (!*p++)
 		p = NULL;
-	camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_INVALID,
-			      _("IMAP command failed: %s"),
-			      p ? p : _("Unknown error"));
+	camel_exception_setv (
+		ex, CAMEL_EXCEPTION_SERVICE_INVALID,
+		_("IMAP command failed: %s"),
+		(p != NULL) ? p : _("Unknown error"));
 	camel_imap_response_free_without_processing (store, response);
 	return NULL;
 }
@@ -482,13 +505,19 @@ imap_read_untagged (CamelImapStore *store, gchar *line, CamelException *ex)
 		nread = 0;
 
 		do {
-			if ((n = camel_stream_read (store->istream, str->str + nread + 1, length - nread)) == -1) {
+			n = camel_stream_read (
+				store->istream,
+				str->str + nread + 1,
+				length - nread);
+			if (n == -1) {
 				if (errno == EINTR)
-					camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL,
-							     _("Operation cancelled"));
+					camel_exception_set (
+						ex, CAMEL_EXCEPTION_USER_CANCEL,
+						_("Operation cancelled"));
 				else
-					camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-							     g_strerror (errno));
+					camel_exception_set (
+						ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+						g_strerror (errno));
 				camel_service_disconnect (CAMEL_SERVICE (store), FALSE, NULL);
 				g_string_free (str, TRUE);
 				goto lose;
@@ -498,8 +527,9 @@ imap_read_untagged (CamelImapStore *store, gchar *line, CamelException *ex)
 		} while (n > 0 && nread < length);
 
 		if (nread < length) {
-			camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-					     _("Server response ended too soon."));
+			camel_exception_set (
+				ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+				_("Server response ended too soon."));
 			camel_service_disconnect (CAMEL_SERVICE (store), FALSE, NULL);
 			g_string_free (str, TRUE);
 			goto lose;
@@ -704,9 +734,10 @@ camel_imap_response_extract (CamelImapStore *store,
 		g_ptr_array_remove_index (response->untagged, i);
 	} else {
 		resp = NULL;
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      _("IMAP server response did not contain "
-					"%s information"), type);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+			_("IMAP server response did not "
+			  "contain %s information"), type);
 	}
 
 	camel_imap_response_free (store, response);
@@ -740,9 +771,11 @@ camel_imap_response_extract_continuation (CamelImapStore *store,
 		return status;
 	}
 
-	camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-			      _("Unexpected OK response from IMAP server: %s"),
-			      response->status);
+	camel_exception_setv (
+		ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+		_("Unexpected OK response from IMAP server: %s"),
+		response->status);
+
 	camel_imap_response_free (store, response);
 	return NULL;
 }
diff --git a/camel/providers/imap/camel-imap-command.h b/camel/providers/imap/camel-imap-command.h
index ebf107c..fc330a2 100644
--- a/camel/providers/imap/camel-imap-command.h
+++ b/camel/providers/imap/camel-imap-command.h
@@ -26,7 +26,6 @@
 #ifndef CAMEL_IMAP_COMMAND_H
 #define CAMEL_IMAP_COMMAND_H
 
-#include <glib.h>
 #include "camel-imap-store.h"
 
 G_BEGIN_DECLS
diff --git a/camel/providers/imap/camel-imap-folder.c b/camel/providers/imap/camel-imap-folder.c
index 29ab68d..1505569 100644
--- a/camel/providers/imap/camel-imap-folder.c
+++ b/camel/providers/imap/camel-imap-folder.c
@@ -60,24 +60,22 @@
 
 extern gint camel_application_is_exiting;
 
-#define CF_CLASS(o) (CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(o)))
-static CamelOfflineFolderClass *offline_folder_class = NULL;
+static gpointer camel_imap_folder_parent_class;
 
 static CamelProperty imap_property_list[] = {
 	{ CAMEL_IMAP_FOLDER_CHECK_FOLDER, "check_folder", N_("Always check for new mail in this folder") },
 };
 
-static void imap_finalize (CamelObject *object);
 static gint imap_getv (CamelObject *object, CamelException *ex, CamelArgGetV *args);
 static gint imap_setv (CamelObject *object, CamelException *ex, CamelArgV *args);
 
-static void imap_rescan (CamelFolder *folder, gint exists, CamelException *ex);
-static void imap_refresh_info (CamelFolder *folder, CamelException *ex);
-static void imap_sync_offline (CamelFolder *folder, CamelException *ex);
-static void imap_sync (CamelFolder *folder, gboolean expunge, CamelException *ex);
-static void imap_expunge_uids_online (CamelFolder *folder, GPtrArray *uids, CamelException *ex);
-static void imap_expunge_uids_offline (CamelFolder *folder, GPtrArray *uids, CamelException *ex);
-static void imap_expunge (CamelFolder *folder, CamelException *ex);
+static gboolean imap_rescan (CamelFolder *folder, gint exists, CamelException *ex);
+static gboolean imap_refresh_info (CamelFolder *folder, CamelException *ex);
+static gboolean imap_sync_offline (CamelFolder *folder, CamelException *ex);
+static gboolean imap_sync (CamelFolder *folder, gboolean expunge, CamelException *ex);
+static gboolean imap_expunge_uids_online (CamelFolder *folder, GPtrArray *uids, CamelException *ex);
+static gboolean imap_expunge_uids_offline (CamelFolder *folder, GPtrArray *uids, CamelException *ex);
+static gboolean imap_expunge (CamelFolder *folder, CamelException *ex);
 /*static void imap_cache_message (CamelDiscoFolder *disco_folder, const gchar *uid, CamelException *ex);*/
 static void imap_rename (CamelFolder *folder, const gchar *new);
 static GPtrArray * imap_get_uncached_uids (CamelFolder *folder, GPtrArray * uids, CamelException *ex);
@@ -86,20 +84,20 @@ static gchar * imap_get_filename (CamelFolder *folder, const gchar *uid, CamelEx
 /* message manipulation */
 static CamelMimeMessage *imap_get_message (CamelFolder *folder, const gchar *uid,
 					   CamelException *ex);
-static void imap_sync_message (CamelFolder *folder, const gchar *uid,
+static gboolean imap_sync_message (CamelFolder *folder, const gchar *uid,
 			       CamelException *ex);
-static void imap_append_online (CamelFolder *folder, CamelMimeMessage *message,
+static gboolean imap_append_online (CamelFolder *folder, CamelMimeMessage *message,
 				const CamelMessageInfo *info, gchar **appended_uid,
 				CamelException *ex);
-static void imap_append_offline (CamelFolder *folder, CamelMimeMessage *message,
+static gboolean imap_append_offline (CamelFolder *folder, CamelMimeMessage *message,
 				 const CamelMessageInfo *info, gchar **appended_uid,
 				 CamelException *ex);
 
-static void imap_transfer_online (CamelFolder *source, GPtrArray *uids,
+static gboolean imap_transfer_online (CamelFolder *source, GPtrArray *uids,
 				  CamelFolder *dest, GPtrArray **transferred_uids,
 				  gboolean delete_originals,
 				  CamelException *ex);
-static void imap_transfer_offline (CamelFolder *source, GPtrArray *uids,
+static gboolean imap_transfer_offline (CamelFolder *source, GPtrArray *uids,
 				   CamelFolder *dest, GPtrArray **transferred_uids,
 				   gboolean delete_originals,
 				   CamelException *ex);
@@ -113,8 +111,6 @@ static void       imap_search_free          (CamelFolder *folder, GPtrArray *uid
 static void imap_thaw (CamelFolder *folder);
 static CamelFolderQuotaInfo *imap_get_quota_info (CamelFolder *folder);
 
-static CamelObjectClass *parent_class;
-
 static GData *parse_fetch_response (CamelImapFolder *imap_folder, gchar *msg_att);
 
 /* internal helpers */
@@ -132,39 +128,76 @@ static CamelImapMessageInfo * imap_folder_summary_uid_or_error(
 #endif
 
 static void
-camel_imap_folder_class_init (CamelImapFolderClass *camel_imap_folder_class)
+imap_folder_finalize (CamelObject *object)
+{
+	CamelImapFolder *imap_folder;
+
+	imap_folder = CAMEL_IMAP_FOLDER (object);
+
+	if (imap_folder->search != NULL)
+		camel_object_unref (imap_folder->search);
+
+	if (imap_folder->cache != NULL)
+		camel_object_unref (imap_folder->cache);
+
+#ifdef ENABLE_THREADS
+	g_static_mutex_free(&imap_folder->priv->search_lock);
+	g_static_rec_mutex_free(&imap_folder->priv->cache_lock);
+#endif
+	if (imap_folder->priv->ignore_recent)
+		g_hash_table_unref (imap_folder->priv->ignore_recent);
+
+	if (imap_folder->journal) {
+		camel_offline_journal_write (imap_folder->journal, NULL);
+		camel_object_unref (imap_folder->journal);
+	}
+
+	g_free(imap_folder->priv);
+}
+
+static void
+camel_imap_folder_class_init (CamelImapFolderClass *class)
 {
-	CamelFolderClass *camel_folder_class = CAMEL_FOLDER_CLASS (camel_imap_folder_class);
-
-	offline_folder_class = CAMEL_OFFLINE_FOLDER_CLASS (camel_type_get_global_classfuncs (camel_offline_folder_get_type ()));
-
-	/* virtual method overload */
-	((CamelObjectClass *)camel_imap_folder_class)->getv = imap_getv;
-	((CamelObjectClass *)camel_imap_folder_class)->setv = imap_setv;
-
-	camel_folder_class->get_message = imap_get_message;
-	camel_folder_class->rename = imap_rename;
-	camel_folder_class->search_by_expression = imap_search_by_expression;
-	camel_folder_class->count_by_expression = imap_count_by_expression;
-	camel_folder_class->search_by_uids = imap_search_by_uids;
-	camel_folder_class->search_free = imap_search_free;
-	camel_folder_class->thaw = imap_thaw;
-	camel_folder_class->get_quota_info = imap_get_quota_info;
-	camel_folder_class->refresh_info = imap_refresh_info;
-	camel_folder_class->expunge = imap_expunge;
-	camel_folder_class->sync= imap_sync;
-	camel_folder_class->append_message = imap_append_online;
-	camel_folder_class->sync_message = imap_sync_message;
-	camel_folder_class->transfer_messages_to = imap_transfer_online;
-	camel_folder_class->get_uncached_uids = imap_get_uncached_uids;
-	camel_folder_class->get_filename = imap_get_filename;
+	CamelObjectClass *camel_object_class;
+	CamelFolderClass *folder_class;
+	gint ii;
+
+	camel_imap_folder_parent_class = CAMEL_OFFLINE_FOLDER_CLASS (camel_type_get_global_classfuncs (camel_offline_folder_get_type ()));
+
+	camel_object_class = CAMEL_OBJECT_CLASS (class);
+	camel_object_class->getv = imap_getv;
+	camel_object_class->setv = imap_setv;
+
+	folder_class = CAMEL_FOLDER_CLASS (class);
+	folder_class->get_message = imap_get_message;
+	folder_class->rename = imap_rename;
+	folder_class->search_by_expression = imap_search_by_expression;
+	folder_class->count_by_expression = imap_count_by_expression;
+	folder_class->search_by_uids = imap_search_by_uids;
+	folder_class->search_free = imap_search_free;
+	folder_class->thaw = imap_thaw;
+	folder_class->get_quota_info = imap_get_quota_info;
+	folder_class->refresh_info = imap_refresh_info;
+	folder_class->expunge = imap_expunge;
+	folder_class->sync= imap_sync;
+	folder_class->append_message = imap_append_online;
+	folder_class->sync_message = imap_sync_message;
+	folder_class->transfer_messages_to = imap_transfer_online;
+	folder_class->get_uncached_uids = imap_get_uncached_uids;
+	folder_class->get_filename = imap_get_filename;
+
+	/* only localize here, do not create GSList, we do not want to leak */
+	for (ii = 0; ii < G_N_ELEMENTS (imap_property_list); ii++)
+		imap_property_list[ii].description =
+			_(imap_property_list[ii].description);
 }
 
 static void
-camel_imap_folder_init (gpointer object, gpointer klass)
+camel_imap_folder_init (CamelImapFolder *imap_folder)
 {
-	CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (object);
-	CamelFolder *folder = CAMEL_FOLDER (object);
+	CamelFolder *folder = CAMEL_FOLDER (imap_folder);
+
+	imap_folder->priv = g_malloc0(sizeof(*imap_folder->priv));
 
 	folder->permanent_flags = CAMEL_MESSAGE_ANSWERED | CAMEL_MESSAGE_DELETED |
 		CAMEL_MESSAGE_DRAFT | CAMEL_MESSAGE_FLAGGED | CAMEL_MESSAGE_SEEN;
@@ -172,7 +205,6 @@ camel_imap_folder_init (gpointer object, gpointer klass)
 	folder->folder_flags |= (CAMEL_FOLDER_HAS_SUMMARY_CAPABILITY |
 				 CAMEL_FOLDER_HAS_SEARCH_CAPABILITY);
 
-	imap_folder->priv = g_malloc0(sizeof(*imap_folder->priv));
 #ifdef ENABLE_THREADS
 	g_static_mutex_init(&imap_folder->priv->search_lock);
 	g_static_rec_mutex_init(&imap_folder->priv->cache_lock);
@@ -189,21 +221,15 @@ camel_imap_folder_get_type (void)
 	static CamelType camel_imap_folder_type = CAMEL_INVALID_TYPE;
 
 	if (camel_imap_folder_type == CAMEL_INVALID_TYPE) {
-		gint i;
-
-		parent_class = camel_offline_folder_get_type();
 		camel_imap_folder_type =
-			camel_type_register (parent_class, "CamelImapFolder",
+			camel_type_register (camel_offline_folder_get_type (),
+					     "CamelImapFolder",
 					     sizeof (CamelImapFolder),
 					     sizeof (CamelImapFolderClass),
 					     (CamelObjectClassInitFunc) camel_imap_folder_class_init,
 					     NULL,
 					     (CamelObjectInitFunc) camel_imap_folder_init,
-					     (CamelObjectFinalizeFunc) imap_finalize);
-
-		/* only localize here, do not create GSList, we do not want to leak */
-		for (i = 0; i < G_N_ELEMENTS (imap_property_list); i++)
-			imap_property_list [i].description = _(imap_property_list [i].description);
+					     (CamelObjectFinalizeFunc) imap_folder_finalize);
 	}
 
 	return camel_imap_folder_type;
@@ -249,9 +275,10 @@ camel_imap_folder_new (CamelStore *parent, const gchar *folder_name,
 	gchar *summary_file, *state_file, *path;
 
 	if (g_mkdir_with_parents (folder_dir, S_IRWXU) != 0) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Could not create directory %s: %s"),
-				      folder_dir, g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not create directory %s: %s"),
+			folder_dir, g_strerror (errno));
 		return NULL;
 	}
 
@@ -268,9 +295,9 @@ camel_imap_folder_new (CamelStore *parent, const gchar *folder_name,
 	g_free (summary_file);
 	if (!folder->summary) {
 		camel_object_unref (CAMEL_OBJECT (folder));
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Could not load summary for %s"),
-				      folder_name);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not load summary for %s"), folder_name);
 		return NULL;
 	}
 
@@ -310,9 +337,10 @@ camel_imap_folder_new (CamelStore *parent, const gchar *folder_name,
 }
 
 /* Called with the store's connect_lock locked */
-void
-camel_imap_folder_selected (CamelFolder *folder, CamelImapResponse *response,
-			    CamelException *ex)
+gboolean
+camel_imap_folder_selected (CamelFolder *folder,
+                            CamelImapResponse *response,
+                            CamelException *ex)
 {
 	CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
 	CamelImapSummary *imap_summary = CAMEL_IMAP_SUMMARY (folder->summary);
@@ -379,8 +407,7 @@ camel_imap_folder_selected (CamelFolder *folder, CamelImapResponse *response,
 		camel_imap_message_cache_clear (imap_folder->cache);
 		CAMEL_IMAP_FOLDER_REC_UNLOCK (imap_folder, cache_lock);
 		imap_folder->need_rescan = FALSE;
-		camel_imap_folder_changed (folder, exists, NULL, ex);
-		return;
+		return camel_imap_folder_changed (folder, exists, NULL, ex);
 	}
 
 	/* If we've lost messages, we have to rescan everything */
@@ -399,7 +426,7 @@ camel_imap_folder_selected (CamelFolder *folder, CamelImapResponse *response,
 		 */
 		response = camel_imap_command (store, NULL, ex, "FETCH %d UID", count);
 		if (!response)
-			return;
+			return FALSE;
 		uid = 0;
 		for (i = 0; i < response->untagged->len; i++) {
 			resp = response->untagged->pdata[i];
@@ -430,10 +457,8 @@ camel_imap_folder_selected (CamelFolder *folder, CamelImapResponse *response,
 	}
 
 	/* Now rescan if we need to */
-	if (imap_folder->need_rescan) {
-		imap_rescan (folder, exists, ex);
-		return;
-	}
+	if (imap_folder->need_rescan)
+		return imap_rescan (folder, exists, ex);
 
 	/* If we don't need to rescan completely, but new messages
 	 * have been added, find out about them.
@@ -442,35 +467,14 @@ camel_imap_folder_selected (CamelFolder *folder, CamelImapResponse *response,
 		camel_imap_folder_changed (folder, exists, NULL, ex);
 
 	/* And we're done. */
-}
 
-static void
-imap_finalize (CamelObject *object)
-{
-	CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (object);
-
-	if (imap_folder->search)
-		camel_object_unref (CAMEL_OBJECT (imap_folder->search));
-	if (imap_folder->cache)
-		camel_object_unref (CAMEL_OBJECT (imap_folder->cache));
-
-#ifdef ENABLE_THREADS
-	g_static_mutex_free(&imap_folder->priv->search_lock);
-	g_static_rec_mutex_free(&imap_folder->priv->cache_lock);
-#endif
-	if (imap_folder->priv->ignore_recent)
-		g_hash_table_unref (imap_folder->priv->ignore_recent);
-
-	if (imap_folder->journal) {
-		camel_offline_journal_write (imap_folder->journal, NULL);
-		camel_object_unref (imap_folder->journal);
-	}
-
-	g_free(imap_folder->priv);
+	return TRUE;
 }
 
 static gchar *
-imap_get_filename (CamelFolder *folder, const gchar *uid, CamelException *ex)
+imap_get_filename (CamelFolder *folder,
+                   const gchar *uid,
+                   CamelException *ex)
 {
 	CamelImapFolder *imap_folder = (CamelImapFolder*) folder;
 
@@ -497,7 +501,7 @@ imap_getv(CamelObject *object, CamelException *ex, CamelArgGetV *args)
 
 			props.argc = 1;
 			props.argv[0] = *arg;
-			((CamelObjectClass *)parent_class)->getv(object, ex, &props);
+			((CamelObjectClass *)camel_imap_folder_parent_class)->getv(object, ex, &props);
 
 			for (i = 0; i < G_N_ELEMENTS (imap_property_list); i++)
 				*arg->ca_ptr = g_slist_append (*arg->ca_ptr, &imap_property_list[i]);
@@ -526,7 +530,7 @@ imap_getv(CamelObject *object, CamelException *ex, CamelArgGetV *args)
 	}
 
 	if (count)
-		return ((CamelObjectClass *)parent_class)->getv(object, ex, args);
+		return ((CamelObjectClass *)camel_imap_folder_parent_class)->getv(object, ex, args);
 
 	return 0;
 }
@@ -579,7 +583,7 @@ imap_setv (CamelObject *object, CamelException *ex, CamelArgV *args)
 	if (save)
 		camel_object_state_write (object);
 
-	return ((CamelObjectClass *)parent_class)->setv (object, ex, args);
+	return ((CamelObjectClass *)camel_imap_folder_parent_class)->setv (object, ex, args);
 }
 
 static void
@@ -608,7 +612,7 @@ imap_rename (CamelFolder *folder, const gchar *new)
 	g_free(summary_path);
 	g_free(folder_dir);
 
-	((CamelFolderClass *)offline_folder_class)->rename(folder, new);
+	CAMEL_FOLDER_CLASS (camel_imap_folder_parent_class)->rename (folder, new);
 }
 
 /* called with connect_lock locked */
@@ -683,8 +687,9 @@ get_folder_status (CamelFolder *folder, guint32 *total, guint32 *unread, CamelEx
 	return res;
 }
 
-static void
-imap_refresh_info (CamelFolder *folder, CamelException *ex)
+static gboolean
+imap_refresh_info (CamelFolder *folder,
+                   CamelException *ex)
 {
 	CamelImapStore *imap_store = CAMEL_IMAP_STORE (folder->parent_store);
 	CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
@@ -693,11 +698,11 @@ imap_refresh_info (CamelFolder *folder, CamelException *ex)
 	gint check_rescan = -1;
 
 	if (CAMEL_OFFLINE_STORE (imap_store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL)
-		return;
+		return TRUE;
 
 	if (camel_folder_is_frozen (folder)) {
 		imap_folder->need_refresh = TRUE;
-		return;
+		return TRUE;
 	}
 
 	/* If the folder isn't selected, select it (which will force
@@ -779,6 +784,8 @@ done:
 
 	camel_folder_summary_save_to_db (folder->summary, ex);
 	camel_store_summary_save ((CamelStoreSummary *)((CamelImapStore *)folder->parent_store)->summary);
+
+	return TRUE;
 }
 
 static void
@@ -859,7 +866,7 @@ merge_custom_flags (CamelMessageInfo *mi, const gchar *custom_flags)
 }
 
 /* Called with the store's connect_lock locked */
-static void
+static gboolean
 imap_rescan (CamelFolder *folder, gint exists, CamelException *ex)
 {
 	CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
@@ -878,17 +885,18 @@ imap_rescan (CamelFolder *folder, gint exists, CamelException *ex)
 	GArray *removed;
 	gboolean ok;
 	CamelFolderChangeInfo *changes = NULL;
+	gboolean success;
 
 	if (camel_application_is_exiting)
-		return;
+		return TRUE;
 
 	imap_folder->need_rescan = FALSE;
 
 	summary_len = camel_folder_summary_count (folder->summary);
 	if (summary_len == 0) {
 		if (exists)
-			camel_imap_folder_changed (folder, exists, NULL, ex);
-		return;
+			return camel_imap_folder_changed (folder, exists, NULL, ex);
+		return TRUE;
 	}
 
 	/* Check UIDs and flags of all messages we already know of. */
@@ -897,16 +905,16 @@ imap_rescan (CamelFolder *folder, gint exists, CamelException *ex)
 
 	if (!uid) {
 		camel_operation_end (NULL);
-		return;
+		return TRUE;
 	}
 
-	ok = camel_imap_command_start (store, folder, ex,
-				       "UID FETCH 1:%s (FLAGS)",
-				       uid);
+	ok = camel_imap_command_start (
+		store, folder, ex,
+		"UID FETCH 1:%s (FLAGS)", uid);
 	g_free (uid);
 	if (!ok) {
 		camel_operation_end (NULL);
-		return;
+		return FALSE;
 	}
 
 	new = g_malloc0 (summary_len * sizeof (*new));
@@ -941,7 +949,7 @@ imap_rescan (CamelFolder *folder, gint exists, CamelException *ex)
 		camel_operation_end (NULL);
 		camel_service_unlock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
 		g_free(new);
-		return;
+		return TRUE;
 	}
 	camel_operation_end (NULL);
 	if (type == CAMEL_IMAP_RESPONSE_ERROR || camel_application_is_exiting) {
@@ -954,7 +962,7 @@ imap_rescan (CamelFolder *folder, gint exists, CamelException *ex)
 		if (type != CAMEL_IMAP_RESPONSE_ERROR && type != CAMEL_IMAP_RESPONSE_TAGGED)
 			camel_service_unlock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
 
-		return;
+		return TRUE;
 	}
 
 	/* Free the final tagged response */
@@ -1163,9 +1171,12 @@ imap_rescan (CamelFolder *folder, gint exists, CamelException *ex)
 		j = seq - del;
 		g_array_append_val (removed, j);
 	}
+
 	/* And finally update the summary. */
-	camel_imap_folder_changed (folder, exists, removed, ex);
+	success = camel_imap_folder_changed (folder, exists, removed, ex);
 	g_array_free (removed, TRUE);
+
+	return success;
 }
 
 static const gchar *
@@ -1334,8 +1345,9 @@ get_matching (CamelFolder *folder, guint32 flags, guint32 mask, CamelMessageInfo
 	#undef close_range
 }
 
-static void
-imap_sync_offline (CamelFolder *folder, CamelException *ex)
+static gboolean
+imap_sync_offline (CamelFolder *folder,
+                   CamelException *ex)
 {
 	if (folder->summary && (folder->summary->flags & CAMEL_SUMMARY_DIRTY) != 0) {
 		CamelStoreInfo *si;
@@ -1355,14 +1367,19 @@ imap_sync_offline (CamelFolder *folder, CamelException *ex)
 
 	camel_folder_summary_save_to_db (folder->summary, ex);
 	camel_store_summary_save((CamelStoreSummary *)((CamelImapStore *)folder->parent_store)->summary);
+
+	return TRUE;
 }
 
-static void
-imap_sync (CamelFolder *folder, gboolean expunge, CamelException *ex)
+static gboolean
+imap_sync (CamelFolder *folder,
+           gboolean expunge,
+           CamelException *ex)
 {
 	CamelImapStore *store = CAMEL_IMAP_STORE (folder->parent_store);
 	CamelImapMessageInfo *info;
 	CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
+	gboolean success;
 	CamelException local_ex;
 
 	GPtrArray *matches, *summary;
@@ -1371,12 +1388,10 @@ imap_sync (CamelFolder *folder, gboolean expunge, CamelException *ex)
 
 	if (folder->permanent_flags == 0 || CAMEL_OFFLINE_STORE (store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) {
 		if (expunge) {
-			imap_expunge (folder, ex);
-			if (camel_exception_is_set (ex))
-				return;
+			if (!imap_expunge (folder, ex))
+				return FALSE;
 		}
-		imap_sync_offline (folder, ex);
-		return;
+		return imap_sync_offline (folder, ex);
 	}
 
 	camel_exception_init (&local_ex);
@@ -1497,7 +1512,7 @@ imap_sync (CamelFolder *folder, gboolean expunge, CamelException *ex)
 		/* check for an exception */
 		if (camel_exception_is_set (&local_ex)) {
 			camel_exception_xfer (ex, &local_ex);
-			return;
+			return FALSE;
 		}
 
 		/* Re-lock the connect_lock */
@@ -1511,9 +1526,11 @@ imap_sync (CamelFolder *folder, gboolean expunge, CamelException *ex)
 	g_ptr_array_free (summary, TRUE);
 
 	/* Save the summary */
-	imap_sync_offline (folder, ex);
+	success = imap_sync_offline (folder, ex);
 
 	camel_service_unlock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
+
+	return success;
 }
 
 static gint
@@ -1532,8 +1549,10 @@ uid_compar (gconstpointer va, gconstpointer vb)
 		return 1;
 }
 
-static void
-imap_expunge_uids_offline (CamelFolder *folder, GPtrArray *uids, CamelException *ex)
+static gboolean
+imap_expunge_uids_offline (CamelFolder *folder,
+                           GPtrArray *uids,
+                           CamelException *ex)
 {
 	CamelFolderChangeInfo *changes;
 	GSList *list = NULL;
@@ -1560,10 +1579,14 @@ imap_expunge_uids_offline (CamelFolder *folder, GPtrArray *uids, CamelException
 
 	camel_object_trigger_event (CAMEL_OBJECT (folder), "folder_changed", changes);
 	camel_folder_change_info_free (changes);
+
+	return TRUE;
 }
 
-static void
-imap_expunge_uids_online (CamelFolder *folder, GPtrArray *uids, CamelException *ex)
+static gboolean
+imap_expunge_uids_online (CamelFolder *folder,
+                          GPtrArray *uids,
+                          CamelException *ex)
 {
 	CamelImapStore *store = CAMEL_IMAP_STORE (folder->parent_store);
 	CamelImapResponse *response;
@@ -1577,10 +1600,9 @@ imap_expunge_uids_online (CamelFolder *folder, GPtrArray *uids, CamelException *
 	camel_service_lock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
 
 	if ((store->capabilities & IMAP_CAPABILITY_UIDPLUS) == 0) {
-		((CamelFolderClass *)CAMEL_OBJECT_GET_CLASS(folder))->sync(folder, 0, ex);
-		if (camel_exception_is_set(ex)) {
+		if (!CAMEL_FOLDER_GET_CLASS (folder)->sync(folder, 0, ex)) {
 			camel_service_unlock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
-			return;
+			return FALSE;
 		}
 	}
 
@@ -1593,10 +1615,10 @@ imap_expunge_uids_online (CamelFolder *folder, GPtrArray *uids, CamelException *
 					       set);
 		if (response)
 			camel_imap_response_free (store, response);
-		if (camel_exception_is_set (ex)) {
+		else {
 			camel_service_unlock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
 			g_free (set);
-			return;
+			return FALSE;
 		}
 
 		if (!full_expunge) {
@@ -1641,30 +1663,38 @@ imap_expunge_uids_online (CamelFolder *folder, GPtrArray *uids, CamelException *
 	camel_folder_summary_save_to_db (folder->summary, ex);
 	camel_object_trigger_event (CAMEL_OBJECT (folder), "folder_changed", changes);
 	camel_folder_change_info_free (changes);
+
+	return TRUE;
 }
 
-static void
-imap_expunge (CamelFolder *folder, CamelException *ex)
+static gboolean
+imap_expunge (CamelFolder *folder,
+              CamelException *ex)
 {
 	CamelImapStore *store = CAMEL_IMAP_STORE (folder->parent_store);
 	GPtrArray *uids;
+	gboolean success;
 
 	camel_folder_summary_save_to_db (folder->summary, ex);
 	uids = camel_db_get_folder_deleted_uids (folder->parent_store->cdb_r, folder->full_name, ex);
 	if (!uids)
-		return;
+		return TRUE;
 
 	if (CAMEL_OFFLINE_STORE (store)->state == CAMEL_OFFLINE_STORE_NETWORK_AVAIL)
-		imap_expunge_uids_online (folder, uids, ex);
+		success = imap_expunge_uids_online (folder, uids, ex);
 	else
-		imap_expunge_uids_offline (folder, uids, ex);
+		success = imap_expunge_uids_offline (folder, uids, ex);
 
 	g_ptr_array_foreach (uids, (GFunc) camel_pstring_free, NULL);
 	g_ptr_array_free (uids, TRUE);
+
+	return success;
 }
 
-void
-imap_expunge_uids_resyncing (CamelFolder *folder, GPtrArray *uids, CamelException *ex)
+gboolean
+imap_expunge_uids_resyncing (CamelFolder *folder,
+                             GPtrArray *uids,
+                             CamelException *ex)
 {
 	CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
 	CamelImapStore *store = CAMEL_IMAP_STORE (folder->parent_store);
@@ -1673,12 +1703,10 @@ imap_expunge_uids_resyncing (CamelFolder *folder, GPtrArray *uids, CamelExceptio
 	gchar *result;
 
 	if (imap_folder->read_only)
-		return;
+		return TRUE;
 
-	if (store->capabilities & IMAP_CAPABILITY_UIDPLUS) {
-		imap_expunge_uids_online (folder, uids, ex);
-		return;
-	}
+	if (store->capabilities & IMAP_CAPABILITY_UIDPLUS)
+		return imap_expunge_uids_online (folder, uids, ex);
 
 	/* If we don't have UID EXPUNGE we need to avoid expunging any
 	 * of the wrong messages. So we search for deleted messages,
@@ -1688,21 +1716,20 @@ imap_expunge_uids_resyncing (CamelFolder *folder, GPtrArray *uids, CamelExceptio
 
 	camel_service_lock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
 
-	((CamelFolderClass *)CAMEL_OBJECT_GET_CLASS(folder))->sync(folder, 0, ex);
-	if (camel_exception_is_set(ex)) {
+	if (!CAMEL_FOLDER_GET_CLASS (folder)->sync (folder, 0, ex)) {
 		camel_service_unlock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
-		return;
+		return FALSE;
 	}
 
 	response = camel_imap_command (store, folder, ex, "UID SEARCH DELETED");
 	if (!response) {
 		camel_service_unlock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
-		return;
+		return FALSE;
 	}
 	result = camel_imap_response_extract (store, response, "SEARCH", ex);
 	if (!result) {
 		camel_service_unlock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
-		return;
+		return FALSE;
 	}
 
 	if (result[8] == ' ') {
@@ -1763,7 +1790,7 @@ imap_expunge_uids_resyncing (CamelFolder *folder, GPtrArray *uids, CamelExceptio
 				g_ptr_array_free (keep_uids, TRUE);
 				g_ptr_array_free (mark_uids, TRUE);
 				camel_service_unlock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
-				return;
+				return FALSE;
 			}
 			camel_imap_response_free (store, response);
 		}
@@ -1787,7 +1814,7 @@ imap_expunge_uids_resyncing (CamelFolder *folder, GPtrArray *uids, CamelExceptio
 				g_ptr_array_free (keep_uids, TRUE);
 				g_ptr_array_free (mark_uids, TRUE);
 				camel_service_unlock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
-				return;
+				return FALSE;
 			}
 			camel_imap_response_free (store, response);
 		}
@@ -1827,6 +1854,8 @@ imap_expunge_uids_resyncing (CamelFolder *folder, GPtrArray *uids, CamelExceptio
 	g_free (result);
 
 	camel_service_unlock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
+
+	return TRUE;
 }
 
 static gchar *
@@ -1846,10 +1875,12 @@ get_temp_uid (void)
 	return res;
 }
 
-static void
-imap_append_offline (CamelFolder *folder, CamelMimeMessage *message,
-		     const CamelMessageInfo *info, gchar **appended_uid,
-		     CamelException *ex)
+static gboolean
+imap_append_offline (CamelFolder *folder,
+                     CamelMimeMessage *message,
+                     const CamelMessageInfo *info,
+                     gchar **appended_uid,
+                     CamelException *ex)
 {
 	CamelImapMessageCache *cache = CAMEL_IMAP_FOLDER (folder)->cache;
 	CamelFolderChangeInfo *changes;
@@ -1875,6 +1906,8 @@ imap_append_offline (CamelFolder *folder, CamelMimeMessage *message,
 		*appended_uid = uid;
 	else
 		g_free (uid);
+
+	return TRUE;
 }
 
 static void
@@ -1899,9 +1932,11 @@ imap_folder_uid_in_ignore_recent (CamelImapFolder *imap_folder, const gchar *uid
 }
 
 static CamelImapResponse *
-do_append (CamelFolder *folder, CamelMimeMessage *message,
-	   const CamelMessageInfo *info, gchar **uid,
-	   CamelException *ex)
+do_append (CamelFolder *folder,
+           CamelMimeMessage *message,
+           const CamelMessageInfo *info,
+           gchar **uid,
+           CamelException *ex)
 {
 	CamelImapStore *store = CAMEL_IMAP_STORE (folder->parent_store);
 	CamelImapResponse *response, *response2;
@@ -1921,15 +1956,16 @@ do_append (CamelFolder *folder, CamelMimeMessage *message,
 	camel_stream_mem_set_byte_array (CAMEL_STREAM_MEM (memstream), ba);
 
 	streamfilter = camel_stream_filter_new (memstream);
-	crlf_filter = camel_mime_filter_crlf_new (CAMEL_MIME_FILTER_CRLF_ENCODE,
-						  CAMEL_MIME_FILTER_CRLF_MODE_CRLF_ONLY);
+	crlf_filter = camel_mime_filter_crlf_new (
+		CAMEL_MIME_FILTER_CRLF_ENCODE,
+		CAMEL_MIME_FILTER_CRLF_MODE_CRLF_ONLY);
 	camel_stream_filter_add (
 		CAMEL_STREAM_FILTER (streamfilter), crlf_filter);
-	camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (message),
-					    CAMEL_STREAM (streamfilter));
-	camel_object_unref (CAMEL_OBJECT (streamfilter));
-	camel_object_unref (CAMEL_OBJECT (crlf_filter));
-	camel_object_unref (CAMEL_OBJECT (memstream));
+	camel_data_wrapper_write_to_stream (
+		CAMEL_DATA_WRAPPER (message), streamfilter);
+	camel_object_unref (streamfilter);
+	camel_object_unref (crlf_filter);
+	camel_object_unref (memstream);
 
 	/* Some servers don't let us append with (CamelMessageInfo *)custom flags.  If the command fails for
 	   whatever reason, assume this is the case and save the state and try again */
@@ -1961,7 +1997,10 @@ retry:
 
 	if (*response->status != '+') {
 		if (!camel_exception_is_set (ex))
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, _("Unexpected response status '%s' after APPEND command"), response->status);
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Unexpected response status '%s' after APPEND command"),
+				response->status);
 
 		camel_imap_response_free (store, response);
 		g_byte_array_free (ba, TRUE);
@@ -1976,7 +2015,9 @@ retry:
 	camel_imap_response_free (store, response);
 	if (!response2) {
 		if (!camel_exception_is_set (ex))
-			camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM, _("No response on continuation after APPEND command"));
+			camel_exception_set (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("No response on continuation after APPEND command"));
 
 		return response2;
 	}
@@ -2002,27 +2043,31 @@ retry:
 	return response2;
 }
 
-static void
-imap_append_online (CamelFolder *folder, CamelMimeMessage *message,
-		    const CamelMessageInfo *info, gchar **appended_uid,
-		    CamelException *ex)
+static gboolean
+imap_append_online (CamelFolder *folder,
+                    CamelMimeMessage *message,
+                    const CamelMessageInfo *info,
+                    gchar **appended_uid,
+                    CamelException *ex)
 {
 	CamelImapStore *store = CAMEL_IMAP_STORE (folder->parent_store);
 	CamelImapResponse *response;
+	gboolean success = TRUE;
 	gchar *uid;
 	gint count;
 
 	if (CAMEL_OFFLINE_STORE (store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) {
-		imap_append_offline (folder, message, info, appended_uid, ex);
-		return;
+		return imap_append_offline (folder, message, info, appended_uid, ex);
 	}
 
 	count = camel_folder_summary_count (folder->summary);
 	response = do_append (folder, message, info, &uid, ex);
 	if (!response) {
 		if (!camel_exception_is_set (ex))
-			camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM, _("Unknown error occurred during APPEND command!"));
-		return;
+			camel_exception_set (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Unknown error occurred during APPEND command!"));
+		return FALSE;
 	}
 
 	if (uid) {
@@ -2047,14 +2092,18 @@ imap_append_online (CamelFolder *folder, CamelMimeMessage *message,
 	camel_service_lock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
 	if (store->current_folder != folder ||
 	    camel_folder_summary_count (folder->summary) == count)
-		imap_refresh_info (folder, ex);
+		success = imap_refresh_info (folder, ex);
 	camel_service_unlock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
+
+	return success;
 }
 
-void
-imap_append_resyncing (CamelFolder *folder, CamelMimeMessage *message,
-		       const CamelMessageInfo *info, gchar **appended_uid,
-		       CamelException *ex)
+gboolean
+imap_append_resyncing (CamelFolder *folder,
+                       CamelMimeMessage *message,
+                       const CamelMessageInfo *info,
+                       gchar **appended_uid,
+                       CamelException *ex)
 {
 	CamelImapStore *store = CAMEL_IMAP_STORE (folder->parent_store);
 	CamelImapResponse *response;
@@ -2062,7 +2111,7 @@ imap_append_resyncing (CamelFolder *folder, CamelMimeMessage *message,
 
 	response = do_append (folder, message, info, &uid, ex);
 	if (!response)
-		return;
+		return FALSE;
 
 	if (uid) {
 		CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
@@ -2081,12 +2130,17 @@ imap_append_resyncing (CamelFolder *folder, CamelMimeMessage *message,
 		*appended_uid = NULL;
 
 	camel_imap_response_free (store, response);
+
+	return TRUE;
 }
 
-static void
-imap_transfer_offline (CamelFolder *source, GPtrArray *uids,
-		       CamelFolder *dest, GPtrArray **transferred_uids,
-		       gboolean delete_originals, CamelException *ex)
+static gboolean
+imap_transfer_offline (CamelFolder *source,
+                       GPtrArray *uids,
+                       CamelFolder *dest,
+                       GPtrArray **transferred_uids,
+                       gboolean delete_originals,
+                       CamelException *ex)
 {
 	CamelImapStore *store = CAMEL_IMAP_STORE (source->parent_store);
 	CamelImapMessageCache *sc = CAMEL_IMAP_FOLDER (source)->cache;
@@ -2120,7 +2174,7 @@ imap_transfer_offline (CamelFolder *source, GPtrArray *uids,
 		destuid = get_temp_uid ();
 
 		mi = camel_folder_summary_uid (source->summary, uid);
-		g_return_if_fail (mi != NULL);
+		g_return_val_if_fail (mi != NULL, FALSE);
 
 		message = camel_folder_get_message (source, uid, NULL);
 
@@ -2149,8 +2203,12 @@ imap_transfer_offline (CamelFolder *source, GPtrArray *uids,
 	camel_object_trigger_event (CAMEL_OBJECT (dest), "folder_changed", changes);
 	camel_folder_change_info_free (changes);
 
-	camel_imap_journal_log (CAMEL_IMAP_FOLDER (source)->journal, CAMEL_IMAP_JOURNAL_ENTRY_TRANSFER, dest,
-						uids, delete_originals, ex);
+	camel_imap_journal_log (
+		CAMEL_IMAP_FOLDER (source)->journal,
+		CAMEL_IMAP_JOURNAL_ENTRY_TRANSFER,
+		dest, uids, delete_originals, ex);
+
+	return TRUE;
 }
 
 static void
@@ -2212,7 +2270,9 @@ handle_copyuid (CamelImapResponse *response, CamelFolder *source,
 }
 
 static void
-handle_copyuid_copy_user_tags (CamelImapResponse *response, CamelFolder *source, CamelFolder *destination)
+handle_copyuid_copy_user_tags (CamelImapResponse *response,
+                               CamelFolder *source,
+                               CamelFolder *destination)
 {
 	gchar *validity, *srcset, *destset;
 	GPtrArray *src, *dest;
@@ -2322,9 +2382,12 @@ any_has_user_tag (CamelFolder *source, gchar *uidset)
 	return FALSE;
 }
 
-static void
-do_copy (CamelFolder *source, GPtrArray *uids,
-	 CamelFolder *destination, gint delete_originals, CamelException *ex)
+static gboolean
+do_copy (CamelFolder *source,
+         GPtrArray *uids,
+         CamelFolder *destination,
+         gint delete_originals,
+         CamelException *ex)
 {
 	CamelImapStore *store = CAMEL_IMAP_STORE (source->parent_store);
 	CamelImapResponse *response;
@@ -2336,11 +2399,17 @@ do_copy (CamelFolder *source, GPtrArray *uids,
 
 		/* use XGWMOVE only when none of the moving messages has set any user tag */
 		if ((store->capabilities & IMAP_CAPABILITY_XGWMOVE) != 0 && delete_originals && !any_has_user_tag (source, uidset)) {
-			response = camel_imap_command (store, source, ex, "UID XGWMOVE %s %F", uidset, destination->full_name);
+			response = camel_imap_command (
+				store, source, ex,
+				"UID XGWMOVE %s %F", uidset,
+				destination->full_name);
 			/* returns only 'A00012 OK UID XGWMOVE completed' '* 2 XGWMOVE' so nothing useful */
 			camel_imap_response_free (store, response);
 		} else {
-			response = camel_imap_command (store, source, ex, "UID COPY %s %F", uidset, destination->full_name);
+			response = camel_imap_command (
+				store, source, ex,
+				"UID COPY %s %F", uidset,
+				destination->full_name);
 			if (response && (store->capabilities & IMAP_CAPABILITY_UIDPLUS))
 				handle_copyuid (response, source, destination);
 			if (response)
@@ -2355,49 +2424,58 @@ do_copy (CamelFolder *source, GPtrArray *uids,
 		}
 		g_free (uidset);
 	}
+
+	return TRUE;
 }
 
-static void
-imap_transfer_online (CamelFolder *source, GPtrArray *uids,
-		      CamelFolder *dest, GPtrArray **transferred_uids,
-		      gboolean delete_originals, CamelException *ex)
+static gboolean
+imap_transfer_online (CamelFolder *source,
+                      GPtrArray *uids,
+                      CamelFolder *dest,
+                      GPtrArray **transferred_uids,
+                      gboolean delete_originals,
+                      CamelException *ex)
 {
 	CamelImapStore *store = CAMEL_IMAP_STORE (source->parent_store);
+	gboolean success = TRUE;
 	gint count;
 
-	if (CAMEL_OFFLINE_STORE (store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) {
-		imap_transfer_offline (source, uids, dest, transferred_uids, delete_originals, ex);
-		return;
-	}
+	if (CAMEL_OFFLINE_STORE (store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL)
+		return imap_transfer_offline (
+			source, uids, dest, transferred_uids,
+			delete_originals, ex);
 
 	/* Sync message flags if needed. */
-	imap_sync (source, FALSE, ex);
-	if (camel_exception_is_set (ex))
-		return;
+	if (!imap_sync (source, FALSE, ex))
+		return FALSE;
 
 	count = camel_folder_summary_count (dest->summary);
 
 	qsort (uids->pdata, uids->len, sizeof (gpointer), uid_compar);
 
 	/* Now copy the messages */
-	do_copy(source, uids, dest, delete_originals, ex);
-	if (camel_exception_is_set (ex))
-		return;
+	if (!do_copy(source, uids, dest, delete_originals, ex))
+		return FALSE;
 
 	/* Make the destination notice its new messages */
 	if (store->current_folder != dest ||
 	    camel_folder_summary_count (dest->summary) == count)
-		imap_refresh_info (dest, ex);
+		success = imap_refresh_info (dest, ex);
 
 	/* FIXME */
 	if (transferred_uids)
 		*transferred_uids = NULL;
+
+	return success;
 }
 
-void
-imap_transfer_resyncing (CamelFolder *source, GPtrArray *uids,
-			 CamelFolder *dest, GPtrArray **transferred_uids,
-			 gboolean delete_originals, CamelException *ex)
+gboolean
+imap_transfer_resyncing (CamelFolder *source,
+                         GPtrArray *uids,
+                         CamelFolder *dest,
+                         GPtrArray **transferred_uids,
+                         gboolean delete_originals,
+                         CamelException *ex)
 {
 	GPtrArray *realuids;
 	gint first, i;
@@ -2449,7 +2527,7 @@ imap_transfer_resyncing (CamelFolder *source, GPtrArray *uids,
 				continue;
 			}
 			info = camel_folder_get_message_info (source, uid);
-			g_return_if_fail (info != NULL);
+			g_return_val_if_fail (info != NULL, FALSE);
 
 			imap_append_online (dest, message, info, NULL, ex);
 			camel_folder_free_message_info (source, info);
@@ -2465,10 +2543,14 @@ imap_transfer_resyncing (CamelFolder *source, GPtrArray *uids,
 	/* FIXME */
 	if (transferred_uids)
 		*transferred_uids = NULL;
+
+	return TRUE;
 }
 
 static GPtrArray *
-imap_search_by_expression (CamelFolder *folder, const gchar *expression, CamelException *ex)
+imap_search_by_expression (CamelFolder *folder,
+                           const gchar *expression,
+                           CamelException *ex)
 {
 	CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
 	GPtrArray *matches;
@@ -2487,7 +2569,9 @@ imap_search_by_expression (CamelFolder *folder, const gchar *expression, CamelEx
 }
 
 static guint32
-imap_count_by_expression (CamelFolder *folder, const gchar *expression, CamelException *ex)
+imap_count_by_expression (CamelFolder *folder,
+                          const gchar *expression,
+                          CamelException *ex)
 {
 	CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
 	guint32 matches;
@@ -2504,8 +2588,12 @@ imap_count_by_expression (CamelFolder *folder, const gchar *expression, CamelExc
 
 	return matches;
 }
+
 static GPtrArray *
-imap_search_by_uids(CamelFolder *folder, const gchar *expression, GPtrArray *uids, CamelException *ex)
+imap_search_by_uids (CamelFolder *folder,
+                     const gchar *expression,
+                     GPtrArray *uids,
+                     CamelException *ex)
 {
 	CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER(folder);
 	GPtrArray *matches;
@@ -2665,7 +2753,8 @@ get_content (CamelImapFolder *imap_folder, const gchar *uid,
 
 		stream = camel_imap_folder_fetch_data (imap_folder, uid, spec, FALSE, ex);
 		if (stream) {
-			ret = camel_data_wrapper_construct_from_stream (CAMEL_DATA_WRAPPER (body_mp), stream);
+			ret = camel_data_wrapper_construct_from_stream (
+				CAMEL_DATA_WRAPPER (body_mp), stream);
 			camel_object_unref (CAMEL_OBJECT (stream));
 			if (ret == -1) {
 				camel_object_unref ( body_mp);
@@ -2801,7 +2890,8 @@ get_message (CamelImapFolder *imap_folder, const gchar *uid,
 		return NULL;
 
 	msg = camel_mime_message_new ();
-	ret = camel_data_wrapper_construct_from_stream (CAMEL_DATA_WRAPPER (msg), stream);
+	ret = camel_data_wrapper_construct_from_stream (
+		CAMEL_DATA_WRAPPER (msg), stream);
 	camel_object_unref (CAMEL_OBJECT (stream));
 	if (ret == -1) {
 		camel_object_unref (CAMEL_OBJECT (msg));
@@ -2847,13 +2937,14 @@ get_message_simple (CamelImapFolder *imap_folder, const gchar *uid,
 	}
 
 	msg = camel_mime_message_new ();
-	ret = camel_data_wrapper_construct_from_stream (CAMEL_DATA_WRAPPER (msg),
-							stream);
+	ret = camel_data_wrapper_construct_from_stream (
+		CAMEL_DATA_WRAPPER (msg), stream);
 	camel_object_unref (CAMEL_OBJECT (stream));
 	if (ret == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      _("Unable to retrieve message: %s"),
-				      g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+			_("Unable to retrieve message: %s"),
+			g_strerror (errno));
 		camel_object_unref (CAMEL_OBJECT (msg));
 		return NULL;
 	}
@@ -2894,7 +2985,9 @@ imap_folder_summary_uid_or_error(CamelFolderSummary *summary, const gchar * uid,
 }
 
 static CamelMimeMessage *
-imap_get_message (CamelFolder *folder, const gchar *uid, CamelException *ex)
+imap_get_message (CamelFolder *folder,
+                  const gchar *uid,
+                  CamelException *ex)
 {
 	CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
 	CamelImapStore *store = CAMEL_IMAP_STORE (folder->parent_store);
@@ -2948,8 +3041,9 @@ imap_get_message (CamelFolder *folder, const gchar *uid, CamelException *ex)
 				camel_service_lock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
 				if (!camel_imap_store_connected(store, ex)) {
 					camel_service_unlock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
-					camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-							     _("This message is not currently available"));
+					camel_exception_set (
+						ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+						_("This message is not currently available"));
 					goto fail;
 				}
 
@@ -3063,20 +3157,23 @@ fail:
  * Ensure that a message is cached locally, but don't retrieve the content if
  * it is already local.
  */
-static void
-imap_sync_message (CamelFolder *folder, const gchar *uid, CamelException *ex)
+static gboolean
+imap_sync_message (CamelFolder *folder,
+                   const gchar *uid,
+                   CamelException *ex)
 {
 	CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
 	CamelImapMessageInfo *mi;
 	CamelMimeMessage *msg = NULL;
 	CamelStream *stream = NULL;
+	gboolean success = FALSE;
 
 	mi = imap_folder_summary_uid_or_error(folder->summary, uid, ex);
 	if (!mi)
 	  /* No such UID - is this duplicate work? The sync process selects
 	   * UIDs to start with.
 	   */
-	  return;
+	  return FALSE;
 	camel_message_info_free(&mi->info);
 
 	/* If we can get a stream, assume its fully cached. This may be false
@@ -3088,11 +3185,15 @@ imap_sync_message (CamelFolder *folder, const gchar *uid, CamelException *ex)
 	   since we get stuff from the cache anyway.  It affects a busted connection though. */
 	if ((stream = camel_imap_folder_fetch_data(imap_folder, uid, "", TRUE, NULL))) {
 		camel_object_unref (stream);
-		return;
+		return TRUE;
 	}
 	msg = imap_get_message(folder, uid, ex);
-	if (msg)
+	if (msg != NULL) {
 		camel_object_unref (msg);
+		success = TRUE;
+	}
+
+	return success;
 }
 
 /* FIXME Remove it after confirming
@@ -3237,7 +3338,8 @@ add_message_from_data (CamelFolder *folder, GPtrArray *messages,
 		g_ptr_array_set_size (messages, seq - first + 1);
 
 	msg = camel_mime_message_new ();
-	if (camel_data_wrapper_construct_from_stream (CAMEL_DATA_WRAPPER (msg), stream) == -1) {
+	if (camel_data_wrapper_construct_from_stream (
+		CAMEL_DATA_WRAPPER (msg), stream) == -1) {
 		camel_object_unref (CAMEL_OBJECT (msg));
 		return;
 	}
@@ -3338,10 +3440,11 @@ update_summary (CamelFolderSummary *summary, CamelMessageInfoBase *info)
    auto-generated? */
 #define MAILING_LIST_HEADERS "X-MAILING-LIST X-LOOP LIST-ID LIST-POST MAILING-LIST ORIGINATOR X-LIST SENDER RETURN-PATH X-BEENTHERE "
 
-static void
-imap_update_summary (CamelFolder *folder, gint exists,
-		     CamelFolderChangeInfo *changes,
-		     CamelException *ex)
+static gboolean
+imap_update_summary (CamelFolder *folder,
+                     gint exists,
+                     CamelFolderChangeInfo *changes,
+                     CamelException *ex)
 {
 	CamelImapStore *store = CAMEL_IMAP_STORE (folder->parent_store);
 	CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
@@ -3402,7 +3505,7 @@ imap_update_summary (CamelFolder *folder, gint exists,
 				       "UID FETCH %d:* (FLAGS RFC822.SIZE INTERNALDATE BODYSTRUCTURE BODY.PEEK[%s])",
 				       uidval + 1, header_spec->str)) {
 		g_string_free (header_spec, TRUE);
-		return;
+		return FALSE;
 	}
 	camel_operation_start (NULL, _("Fetching summary information for new messages in %s"), folder->name);
 
@@ -3606,17 +3709,21 @@ imap_update_summary (CamelFolder *folder, gint exists,
 		mi = messages->pdata[i];
 		if (!mi) {
 			g_warning ("No information for message %d", i + first);
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      _("Incomplete server response: no information provided for message %d"),
-					      i + first);
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Incomplete server response: "
+				  "no information provided for message %d"),
+				i + first);
 			break;
 		}
 		uid = (gchar *)camel_message_info_uid(mi);
 		if (uid[0] == 0) {
 			g_warning("Server provided no uid: message %d", i + first);
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      _("Incomplete server response: no UID provided for message %d"),
-					      i + first);
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Incomplete server response: "
+				  "no UID provided for message %d"),
+				i + first);
 			break;
 		}
 
@@ -3661,7 +3768,7 @@ imap_update_summary (CamelFolder *folder, gint exists,
 		imap_folder->priv->ignore_recent = NULL;
 	}
 
-	return;
+	return TRUE;
 
  lose:
 	if (fetch_data) {
@@ -3683,10 +3790,12 @@ imap_update_summary (CamelFolder *folder, gint exists,
 		g_hash_table_unref (imap_folder->priv->ignore_recent);
 		imap_folder->priv->ignore_recent = NULL;
 	}
+
+	return FALSE;
 }
 
 /* Called with the store's connect_lock locked */
-void
+gboolean
 camel_imap_folder_changed (CamelFolder *folder, gint exists,
 			   GArray *expunged, CamelException *ex)
 {
@@ -3694,6 +3803,7 @@ camel_imap_folder_changed (CamelFolder *folder, gint exists,
 	CamelFolderChangeInfo *changes;
 	gint len;
 	gchar *uid;
+	gboolean success = TRUE;
 
 	changes = camel_folder_change_info_new ();
 	if (expunged) {
@@ -3725,13 +3835,15 @@ camel_imap_folder_changed (CamelFolder *folder, gint exists,
 
 	len = camel_folder_summary_count (folder->summary);
 	if (exists > len && !camel_application_is_exiting)
-		imap_update_summary (folder, exists, changes, ex);
+		success = imap_update_summary (folder, exists, changes, ex);
 
 	camel_folder_summary_save_to_db (folder->summary, ex);
 	if (camel_folder_change_info_changed (changes))
 		camel_object_trigger_event (CAMEL_OBJECT (folder), "folder_changed", changes);
 
 	camel_folder_change_info_free (changes);
+
+	return success;
 }
 
 static void
@@ -3739,7 +3851,7 @@ imap_thaw (CamelFolder *folder)
 {
 	CamelImapFolder *imap_folder;
 
-	CAMEL_FOLDER_CLASS (offline_folder_class)->thaw (folder);
+	CAMEL_FOLDER_CLASS (camel_imap_folder_parent_class)->thaw (folder);
 	if (camel_folder_is_frozen (folder))
 		return;
 
@@ -3793,8 +3905,9 @@ camel_imap_folder_fetch_data (CamelImapFolder *imap_folder, const gchar *uid,
 	CAMEL_IMAP_FOLDER_REC_LOCK (imap_folder, cache_lock);
 
 	if (!camel_imap_store_connected(store, ex)) {
-		camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				     _("This message is not currently available"));
+		camel_exception_set (
+			ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+			_("This message is not currently available"));
 		CAMEL_IMAP_FOLDER_REC_UNLOCK (imap_folder, cache_lock);
 		camel_service_unlock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
 		return NULL;
@@ -3802,13 +3915,14 @@ camel_imap_folder_fetch_data (CamelImapFolder *imap_folder, const gchar *uid,
 
 	camel_exception_clear (ex);
 	if (store->server_level < IMAP_LEVEL_IMAP4REV1 && !*section_text) {
-		response = camel_imap_command (store, folder, ex,
-					       "UID FETCH %s RFC822.PEEK",
-					       uid);
+		response = camel_imap_command (
+			store, folder, ex,
+			"UID FETCH %s RFC822.PEEK", uid);
 	} else {
-		response = camel_imap_command (store, folder, ex,
-					       "UID FETCH %s BODY.PEEK[%s]",
-					       uid, section_text);
+		response = camel_imap_command (
+			store, folder, ex,
+			"UID FETCH %s BODY.PEEK[%s]", uid,
+			section_text);
 	}
 	/* We won't need the connect_lock again after this. */
 	camel_service_unlock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
@@ -3831,8 +3945,9 @@ camel_imap_folder_fetch_data (CamelImapFolder *imap_folder, const gchar *uid,
 	camel_imap_response_free (store, response);
 	CAMEL_IMAP_FOLDER_REC_UNLOCK (imap_folder, cache_lock);
 	if (!stream) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      _("Could not find message body in FETCH response."));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+			_("Could not find message body in FETCH response."));
 	} else {
 		camel_object_ref (CAMEL_OBJECT (stream));
 		g_datalist_clear (&fetch_data);
@@ -4087,14 +4202,20 @@ done:
  * Scan for messages that are local and return the rest.
  */
 static GPtrArray *
-imap_get_uncached_uids (CamelFolder *folder, GPtrArray * uids, CamelException *ex)
+imap_get_uncached_uids (CamelFolder *folder,
+                        GPtrArray *uids,
+                        CamelException *ex)
 {
 	GPtrArray *result;
 	CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
 
 	CAMEL_IMAP_FOLDER_REC_LOCK (imap_folder, cache_lock);
-	result = camel_imap_message_cache_filter_cached (imap_folder->cache, uids, ex);
+
+	result = camel_imap_message_cache_filter_cached (
+		imap_folder->cache, uids, ex);
+
 	CAMEL_IMAP_FOLDER_REC_UNLOCK (imap_folder, cache_lock);
+
 	return result;
 }
 
diff --git a/camel/providers/imap/camel-imap-folder.h b/camel/providers/imap/camel-imap-folder.h
index 420d8e4..b68fc11 100644
--- a/camel/providers/imap/camel-imap-folder.h
+++ b/camel/providers/imap/camel-imap-folder.h
@@ -70,9 +70,6 @@ struct _CamelImapFolder {
 
 struct _CamelImapFolderClass {
 	CamelOfflineFolderClass parent_class;
-
-	/* Virtual methods */
-
 };
 
 /* public methods */
@@ -81,11 +78,11 @@ CamelFolder *camel_imap_folder_new (CamelStore *parent,
 				    const gchar *folder_dir,
 				    CamelException *ex);
 
-void camel_imap_folder_selected (CamelFolder *folder,
+gboolean camel_imap_folder_selected (CamelFolder *folder,
 				 CamelImapResponse *response,
 				 CamelException *ex);
 
-void camel_imap_folder_changed (CamelFolder *folder, gint exists,
+gboolean camel_imap_folder_changed (CamelFolder *folder, gint exists,
 				GArray *expunged, CamelException *ex);
 
 CamelStream *camel_imap_folder_fetch_data (CamelImapFolder *imap_folder,
@@ -93,15 +90,15 @@ CamelStream *camel_imap_folder_fetch_data (CamelImapFolder *imap_folder,
 					   const gchar *section_text,
 					   gboolean cache_only,
 					   CamelException *ex);
-void
+gboolean
 imap_append_resyncing (CamelFolder *folder, CamelMimeMessage *message,
 		       const CamelMessageInfo *info, gchar **appended_uid,
 		       CamelException *ex);
-void
+gboolean
 imap_transfer_resyncing (CamelFolder *source, GPtrArray *uids,
 			 CamelFolder *dest, GPtrArray **transferred_uids,
 			 gboolean delete_originals, CamelException *ex);
-void
+gboolean
 imap_expunge_uids_resyncing (CamelFolder *folder, GPtrArray *uids, CamelException *ex);
 
 /* Standard Camel function */
diff --git a/camel/providers/imap/camel-imap-journal.c b/camel/providers/imap/camel-imap-journal.c
index da83a57..730d281 100644
--- a/camel/providers/imap/camel-imap-journal.c
+++ b/camel/providers/imap/camel-imap-journal.c
@@ -41,10 +41,6 @@
 
 #define d(x)
 
-static void camel_imap_journal_class_init (CamelIMAPJournalClass *klass);
-static void camel_imap_journal_init (CamelIMAPJournal *journal, CamelIMAPJournalClass *klass);
-static void camel_imap_journal_finalize (CamelObject *object);
-
 static void imap_entry_free (CamelOfflineJournal *journal, CamelDListNode *entry);
 static CamelDListNode *imap_entry_load (CamelOfflineJournal *journal, FILE *in);
 static gint imap_entry_write (CamelOfflineJournal *journal, CamelDListNode *entry, FILE *out);
@@ -53,68 +49,68 @@ static void unref_folder (gpointer key, gpointer value, gpointer data);
 static void free_uids (GPtrArray *array);
 static void close_folder (gpointer name, gpointer folder, gpointer data);
 
-static CamelOfflineJournalClass *parent_class = NULL;
+static gpointer camel_imap_journal_parent_class;
 
-CamelType
-camel_imap_journal_get_type (void)
+static void
+free_uid (gpointer key, gpointer value, gpointer data)
 {
-	static CamelType type = NULL;
+	g_free (key);
+	g_free (value);
+}
 
-	if (!type) {
-		type = camel_type_register (camel_offline_journal_get_type (),
-					    "CamelIMAPJournal",
-					    sizeof (CamelIMAPJournal),
-					    sizeof (CamelIMAPJournalClass),
-					    (CamelObjectClassInitFunc) camel_imap_journal_class_init,
-					    NULL,
-					    (CamelObjectInitFunc) camel_imap_journal_init,
-					    (CamelObjectFinalizeFunc) camel_imap_journal_finalize);
+static void
+imap_journal_finalize (CamelIMAPJournal *journal)
+{
+	if (journal->folders) {
+		g_hash_table_foreach (journal->folders, unref_folder, NULL);
+		g_hash_table_destroy (journal->folders);
+		journal->folders = NULL;
 	}
 
-	return type;
+	if (journal->uidmap) {
+		g_hash_table_foreach (journal->uidmap, free_uid, NULL);
+		g_hash_table_destroy (journal->uidmap);
+	}
 }
 
 static void
-camel_imap_journal_class_init (CamelIMAPJournalClass *klass)
+camel_imap_journal_class_init (CamelIMAPJournalClass *class)
 {
-	CamelOfflineJournalClass *journal_class = (CamelOfflineJournalClass *) klass;
+	CamelOfflineJournalClass *offline_journal_class;
 
-	parent_class = (CamelOfflineJournalClass *) camel_type_get_global_classfuncs (CAMEL_TYPE_OFFLINE_JOURNAL);
+	camel_imap_journal_parent_class = (CamelOfflineJournalClass *) camel_type_get_global_classfuncs (CAMEL_TYPE_OFFLINE_JOURNAL);
 
-	journal_class->entry_free = imap_entry_free;
-	journal_class->entry_load = imap_entry_load;
-	journal_class->entry_write = imap_entry_write;
-	journal_class->entry_play = imap_entry_play;
+	offline_journal_class = CAMEL_OFFLINE_JOURNAL_CLASS (class);
+	offline_journal_class->entry_free = imap_entry_free;
+	offline_journal_class->entry_load = imap_entry_load;
+	offline_journal_class->entry_write = imap_entry_write;
+	offline_journal_class->entry_play = imap_entry_play;
 }
 
 static void
-camel_imap_journal_init (CamelIMAPJournal *journal, CamelIMAPJournalClass *klass)
+camel_imap_journal_init (CamelIMAPJournal *journal)
 {
 	journal->folders = g_hash_table_new (g_str_hash, g_str_equal);
 	journal->uidmap = g_hash_table_new (g_str_hash, g_str_equal);
 }
 
-static void
-free_uid (gpointer key, gpointer value, gpointer data)
-{
-	g_free (key);
-	g_free (value);
-}
-
-static void
-camel_imap_journal_finalize (CamelObject *object)
+CamelType
+camel_imap_journal_get_type (void)
 {
-	CamelIMAPJournal *journal = (CamelIMAPJournal *) object;
+	static CamelType type = NULL;
 
-	if (journal->folders) {
-		g_hash_table_foreach (journal->folders, unref_folder, NULL);
-		g_hash_table_destroy (journal->folders);
-		journal->folders = NULL;
-	}
-	if (journal->uidmap) {
-		g_hash_table_foreach (journal->uidmap, free_uid, NULL);
-		g_hash_table_destroy (journal->uidmap);
+	if (!type) {
+		type = camel_type_register (camel_offline_journal_get_type (),
+					    "CamelIMAPJournal",
+					    sizeof (CamelIMAPJournal),
+					    sizeof (CamelIMAPJournalClass),
+					    (CamelObjectClassInitFunc) camel_imap_journal_class_init,
+					    NULL,
+					    (CamelObjectInitFunc) camel_imap_journal_init,
+					    (CamelObjectFinalizeFunc) imap_journal_finalize);
 	}
+
+	return type;
 }
 
 static void
@@ -368,12 +364,8 @@ imap_entry_play (CamelOfflineJournal *journal, CamelDListNode *entry, CamelExcep
 		}
 
 		camel_exception_clear (ex);
-		imap_transfer_resyncing (journal->folder, imap_entry->uids, destination, &ret_uids, imap_entry->move, ex);
-
-		if (camel_exception_is_set (ex)) {
-			d(g_print ("Exception set: %s \n", camel_exception_get_description (ex)));
+		if (!imap_transfer_resyncing (journal->folder, imap_entry->uids, destination, &ret_uids, imap_entry->move, ex))
 			return -1;
-		}
 
 		if (ret_uids) {
 			for (i = 0; i < imap_entry->uids->len; i++) {
diff --git a/camel/providers/imap/camel-imap-message-cache.c b/camel/providers/imap/camel-imap-message-cache.c
index 23dd105..81398a2 100644
--- a/camel/providers/imap/camel-imap-message-cache.c
+++ b/camel/providers/imap/camel-imap-message-cache.c
@@ -47,7 +47,6 @@
 #define BASE_PART_SUFFIX "."
 #endif
 
-static void finalize (CamelImapMessageCache *cache);
 static void stream_finalize (CamelObject *stream, gpointer event_data, gpointer user_data);
 
 struct _part_find {
@@ -59,25 +58,6 @@ struct _part_find {
 	gint found;
 };
 
-CamelType
-camel_imap_message_cache_get_type (void)
-{
-	static CamelType camel_imap_message_cache_type = CAMEL_INVALID_TYPE;
-
-	if (camel_imap_message_cache_type == CAMEL_INVALID_TYPE) {
-		camel_imap_message_cache_type = camel_type_register (
-			CAMEL_TYPE_OBJECT, "CamelImapMessageCache",
-			sizeof (CamelImapMessageCache),
-			sizeof (CamelImapMessageCacheClass),
-			NULL,
-			NULL,
-			NULL,
-			(CamelObjectFinalizeFunc) finalize);
-	}
-
-	return camel_imap_message_cache_type;
-}
-
 static void
 free_part (gpointer key, gpointer value, gpointer data)
 {
@@ -93,18 +73,38 @@ free_part (gpointer key, gpointer value, gpointer data)
 }
 
 static void
-finalize (CamelImapMessageCache *cache)
+imap_message_cache_finalize (CamelImapMessageCache *cache)
 {
-	if (cache->path)
-		g_free (cache->path);
+	g_free (cache->path);
+\
 	if (cache->parts) {
 		g_hash_table_foreach (cache->parts, free_part, cache);
 		g_hash_table_destroy (cache->parts);
 	}
+
 	if (cache->cached)
 		g_hash_table_destroy (cache->cached);
 }
 
+CamelType
+camel_imap_message_cache_get_type (void)
+{
+	static CamelType camel_imap_message_cache_type = CAMEL_INVALID_TYPE;
+
+	if (camel_imap_message_cache_type == CAMEL_INVALID_TYPE) {
+		camel_imap_message_cache_type = camel_type_register (
+			CAMEL_TYPE_OBJECT, "CamelImapMessageCache",
+			sizeof (CamelImapMessageCache),
+			sizeof (CamelImapMessageCacheClass),
+			NULL,
+			NULL,
+			NULL,
+			(CamelObjectFinalizeFunc) imap_message_cache_finalize);
+	}
+
+	return camel_imap_message_cache_type;
+}
+
 static void
 cache_put (CamelImapMessageCache *cache, const gchar *uid, const gchar *key,
 	   CamelStream *stream)
@@ -159,8 +159,9 @@ cache_put (CamelImapMessageCache *cache, const gchar *uid, const gchar *key,
  * expensive, but the parts hash is immediately usable.
  **/
 CamelImapMessageCache *
-camel_imap_message_cache_new (const gchar *path, CamelFolderSummary *summary,
-			      CamelException *ex)
+camel_imap_message_cache_new (const gchar *path,
+                              CamelFolderSummary *summary,
+                              CamelException *ex)
 {
 	CamelImapMessageCache *cache;
 	GDir *dir;
@@ -172,9 +173,10 @@ camel_imap_message_cache_new (const gchar *path, CamelFolderSummary *summary,
 
 	dir = g_dir_open (path, 0, &error);
 	if (!dir) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Could not open cache directory: %s"),
-				      error->message);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not open cache directory: %s"),
+			error->message);
 		g_error_free (error);
 		return NULL;
 	}
@@ -226,7 +228,8 @@ camel_imap_message_cache_new (const gchar *path, CamelFolderSummary *summary,
  **/
 
 gboolean
-camel_imap_message_cache_delete (const gchar *path, CamelException *ex)
+camel_imap_message_cache_delete (const gchar *path,
+                                 CamelException *ex)
 {
 	GDir *dir;
 	const gchar *dname;
@@ -235,9 +238,10 @@ camel_imap_message_cache_delete (const gchar *path, CamelException *ex)
 
 	dir = g_dir_open (path, 0, &error);
 	if (!dir) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Could not open cache directory: %s"),
-				      error->message);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not open cache directory: %s"),
+			error->message);
 		g_error_free (error);
 		return FALSE;
 	}
@@ -321,9 +325,10 @@ insert_setup (CamelImapMessageCache *cache, const gchar *uid, const gchar *part_
 
 	fd = g_open (*path, O_RDWR | O_CREAT | O_TRUNC | O_BINARY, 0600);
 	if (fd == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Failed to cache message %s: %s"),
-				      uid, g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Failed to cache message %s: %s"),
+			uid, g_strerror (errno));
 		g_free (*path);
 		return NULL;
 	}
@@ -341,8 +346,11 @@ insert_abort (gchar *path, CamelStream *stream)
 }
 
 static CamelStream *
-insert_finish (CamelImapMessageCache *cache, const gchar *uid, gchar *path,
-	       gchar *key, CamelStream *stream)
+insert_finish (CamelImapMessageCache *cache,
+               const gchar *uid,
+               gchar *path,
+               gchar *key,
+               CamelStream *stream)
 {
 	camel_stream_flush (stream);
 	camel_stream_reset (stream);
@@ -366,9 +374,12 @@ insert_finish (CamelImapMessageCache *cache, const gchar *uid, gchar *path,
  * caller must unref.
  **/
 CamelStream *
-camel_imap_message_cache_insert (CamelImapMessageCache *cache, const gchar *uid,
-				 const gchar *part_spec, const gchar *data,
-				 gint len, CamelException *ex)
+camel_imap_message_cache_insert (CamelImapMessageCache *cache,
+                                 const gchar *uid,
+                                 const gchar *part_spec,
+                                 const gchar *data,
+                                 gint len,
+                                 CamelException *ex)
 {
 	gchar *path, *key;
 	CamelStream *stream;
@@ -378,9 +389,10 @@ camel_imap_message_cache_insert (CamelImapMessageCache *cache, const gchar *uid,
 		return NULL;
 
 	if (camel_stream_write (stream, data, len) == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Failed to cache message %s: %s"),
-				      uid, g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Failed to cache message %s: %s"),
+			uid, g_strerror (errno));
 		return insert_abort (path, stream);
 	}
 
@@ -398,8 +410,10 @@ camel_imap_message_cache_insert (CamelImapMessageCache *cache, const gchar *uid,
  **/
 void
 camel_imap_message_cache_insert_stream (CamelImapMessageCache *cache,
-					const gchar *uid, const gchar *part_spec,
-					CamelStream *data_stream, CamelException *ex)
+                                        const gchar *uid,
+                                        const gchar *part_spec,
+                                        CamelStream *data_stream,
+                                        CamelException *ex)
 {
 	gchar *path, *key;
 	CamelStream *stream;
@@ -409,9 +423,10 @@ camel_imap_message_cache_insert_stream (CamelImapMessageCache *cache,
 		return;
 
 	if (camel_stream_write_to_stream (data_stream, stream) == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Failed to cache message %s: %s"),
-				      uid, g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Failed to cache message %s: %s"),
+			uid, g_strerror (errno));
 		insert_abort (path, stream);
 	} else {
 		insert_finish (cache, uid, path, key, stream);
@@ -430,8 +445,10 @@ camel_imap_message_cache_insert_stream (CamelImapMessageCache *cache,
  **/
 void
 camel_imap_message_cache_insert_wrapper (CamelImapMessageCache *cache,
-					 const gchar *uid, const gchar *part_spec,
-					 CamelDataWrapper *wrapper, CamelException *ex)
+                                         const gchar *uid,
+                                         const gchar *part_spec,
+                                         CamelDataWrapper *wrapper,
+                                         CamelException *ex)
 {
 	gchar *path, *key;
 	CamelStream *stream;
@@ -441,9 +458,10 @@ camel_imap_message_cache_insert_wrapper (CamelImapMessageCache *cache,
 		return;
 
 	if (camel_data_wrapper_write_to_stream (wrapper, stream) == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Failed to cache message %s: %s"),
-				      uid, g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Failed to cache message %s: %s"),
+			uid, g_strerror (errno));
 		insert_abort (path, stream);
 	} else {
 		insert_finish (cache, uid, path, key, stream);
@@ -512,19 +530,19 @@ camel_imap_message_cache_get (CamelImapMessageCache *cache, const gchar *uid,
 	stream = g_hash_table_lookup (cache->parts, key);
 	if (stream) {
 		camel_stream_reset (CAMEL_STREAM (stream));
-		camel_object_ref (CAMEL_OBJECT (stream));
+		camel_object_ref (stream);
 		g_free (path);
 		return stream;
 	}
 
 	stream = camel_stream_fs_new_with_name (path, O_RDONLY, 0);
-	if (stream) {
+	if (stream)
 		cache_put (cache, uid, key, stream);
-	} else {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Failed to cache %s: %s"),
-				      part_spec, g_strerror (errno));
-	}
+	else
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Failed to cache %s: %s"),
+			part_spec, g_strerror (errno));
 
 	g_free (path);
 
diff --git a/camel/providers/imap/camel-imap-message-cache.h b/camel/providers/imap/camel-imap-message-cache.h
index 496ab12..20b6161 100644
--- a/camel/providers/imap/camel-imap-message-cache.h
+++ b/camel/providers/imap/camel-imap-message-cache.h
@@ -53,7 +53,7 @@ struct _CamelImapMessageCache {
 };
 
 struct _CamelImapMessageCacheClass {
-	CamelFolderClass parent_class;
+	CamelObjectClass parent_class;
 };
 
 /* public methods */
@@ -109,7 +109,6 @@ GPtrArray *  camel_imap_message_cache_filter_cached(CamelImapMessageCache *,
                                               GPtrArray *uids,
                                               CamelException *ex);
 
-/* Standard Camel function */
 CamelType camel_imap_message_cache_get_type (void);
 
 G_END_DECLS
diff --git a/camel/providers/imap/camel-imap-search.c b/camel/providers/imap/camel-imap-search.c
index a9d53c6..6afdf66 100644
--- a/camel/providers/imap/camel-imap-search.c
+++ b/camel/providers/imap/camel-imap-search.c
@@ -89,43 +89,52 @@ struct _match_record {
 	GArray *matches;
 };
 
-static void free_match(CamelImapSearch *is, struct _match_record *mr);
 static ESExpResult *imap_body_contains (struct _ESExp *f, gint argc, struct _ESExpResult **argv, CamelFolderSearch *s);
 
-static CamelFolderSearchClass *imap_search_parent_class;
+static gpointer camel_imap_search_parent_class;
 
 static void
-camel_imap_search_class_init (CamelImapSearchClass *camel_imap_search_class)
+free_match(CamelImapSearch *is, struct _match_record *mr)
 {
-	/* virtual method overload */
-	CamelFolderSearchClass *camel_folder_search_class =
-		CAMEL_FOLDER_SEARCH_CLASS (camel_imap_search_class);
-
-	imap_search_parent_class = (CamelFolderSearchClass *)camel_type_get_global_classfuncs (camel_folder_search_get_type ());
+	gint i;
 
-	/* virtual method overload */
-	camel_folder_search_class->body_contains = imap_body_contains;
+	for (i=0;i<mr->termcount;i++)
+		g_free(mr->terms[i]);
+	g_free(mr->terms);
+	g_array_free(mr->matches, TRUE);
+	g_free(mr);
 }
 
 static void
-camel_imap_search_init(CamelImapSearch *is)
+imap_search_finalize (CamelImapSearch *search)
 {
-	camel_dlist_init(&is->matches);
-	is->matches_hash = g_hash_table_new(g_str_hash, g_str_equal);
-	is->matches_count = 0;
-	is->lastuid = 0;
+	struct _match_record *mr;
+
+	while ((mr = (struct _match_record *)camel_dlist_remtail(&search->matches)))
+		free_match(search, mr);
+	g_hash_table_destroy(search->matches_hash);
+	if (search->cache != NULL)
+		camel_object_unref (search->cache);
 }
 
 static void
-camel_imap_search_finalize(CamelImapSearch *is)
+camel_imap_search_class_init (CamelImapSearchClass *class)
 {
-	struct _match_record *mr;
+	CamelFolderSearchClass *folder_search_class;
 
-	while ((mr = (struct _match_record *)camel_dlist_remtail(&is->matches)))
-		free_match(is, mr);
-	g_hash_table_destroy(is->matches_hash);
-	if (is->cache)
-		camel_object_unref (is->cache);
+	camel_imap_search_parent_class = (CamelFolderSearchClass *)camel_type_get_global_classfuncs (camel_folder_search_get_type ());
+
+	folder_search_class = CAMEL_FOLDER_SEARCH_CLASS (class);
+	folder_search_class->body_contains = imap_body_contains;
+}
+
+static void
+camel_imap_search_init (CamelImapSearch *is)
+{
+	camel_dlist_init(&is->matches);
+	is->matches_hash = g_hash_table_new(g_str_hash, g_str_equal);
+	is->matches_count = 0;
+	is->lastuid = 0;
 }
 
 CamelType
@@ -140,7 +149,7 @@ camel_imap_search_get_type (void)
 			sizeof (CamelImapSearchClass),
 			(CamelObjectClassInitFunc) camel_imap_search_class_init, NULL,
 			(CamelObjectInitFunc) camel_imap_search_init,
-			(CamelObjectFinalizeFunc) camel_imap_search_finalize);
+			(CamelObjectFinalizeFunc) imap_search_finalize);
 	}
 
 	return camel_imap_search_type;
@@ -241,18 +250,6 @@ save_match(CamelImapSearch *is, struct _match_record *mr)
 	return ret;
 }
 
-static void
-free_match(CamelImapSearch *is, struct _match_record *mr)
-{
-	gint i;
-
-	for (i=0;i<mr->termcount;i++)
-		g_free(mr->terms[i]);
-	g_free(mr->terms);
-	g_array_free(mr->matches, TRUE);
-	g_free(mr);
-}
-
 static struct _match_record *
 load_match(CamelImapSearch *is, gchar hash[17], gint argc, struct _ESExpResult **argv)
 {
@@ -434,7 +431,7 @@ imap_body_contains (struct _ESExp *f, gint argc, struct _ESExpResult **argv, Cam
 
 	/* If offline, search using the parent class, which can handle this manually */
 	if (CAMEL_OFFLINE_STORE (store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL)
-		return imap_search_parent_class->body_contains(f, argc, argv, s);
+		return CAMEL_FOLDER_SEARCH_CLASS (camel_imap_search_parent_class)->body_contains(f, argc, argv, s);
 
 	/* optimise the match "" case - match everything */
 	if (argc == 1 && argv[0]->value.string[0] == '\0') {
diff --git a/camel/providers/imap/camel-imap-store-summary.c b/camel/providers/imap/camel-imap-store-summary.c
index a57184d..ed4e683 100644
--- a/camel/providers/imap/camel-imap-store-summary.c
+++ b/camel/providers/imap/camel-imap-store-summary.c
@@ -38,8 +38,6 @@
 
 #define CAMEL_IMAP_STORE_SUMMARY_VERSION (0)
 
-#define _PRIVATE(o) (((CamelImapStoreSummary *)(o))->priv)
-
 static gint summary_header_load(CamelStoreSummary *, FILE *);
 static gint summary_header_save(CamelStoreSummary *, FILE *);
 
@@ -51,48 +49,34 @@ static void		 store_info_free(CamelStoreSummary *, CamelStoreInfo *);
 static const gchar *store_info_string(CamelStoreSummary *, const CamelStoreInfo *, gint);
 static void store_info_set_string(CamelStoreSummary *, CamelStoreInfo *, int, const gchar *);
 
-static void camel_imap_store_summary_class_init (CamelImapStoreSummaryClass *klass);
-static void camel_imap_store_summary_init       (CamelImapStoreSummary *obj);
-static void camel_imap_store_summary_finalize   (CamelObject *obj);
-
-static CamelStoreSummaryClass *camel_imap_store_summary_parent;
+static gpointer camel_imap_store_summary_parent_class;
 
 static void
-camel_imap_store_summary_class_init (CamelImapStoreSummaryClass *klass)
+camel_imap_store_summary_class_init (CamelImapStoreSummaryClass *class)
 {
-	CamelStoreSummaryClass *ssklass = (CamelStoreSummaryClass *)klass;
-
-	ssklass->summary_header_load = summary_header_load;
-	ssklass->summary_header_save = summary_header_save;
-
-	/*ssklass->store_info_new  = store_info_new;*/
-	ssklass->store_info_load = store_info_load;
-	ssklass->store_info_save = store_info_save;
-	ssklass->store_info_free = store_info_free;
-
-	ssklass->store_info_string = store_info_string;
-	ssklass->store_info_set_string = store_info_set_string;
+	CamelStoreSummaryClass *store_summary_class;
+
+	camel_imap_store_summary_parent_class = (CamelStoreSummaryClass *)camel_store_summary_get_type();
+
+	store_summary_class = CAMEL_STORE_SUMMARY_CLASS (class);
+	store_summary_class->summary_header_load = summary_header_load;
+	store_summary_class->summary_header_save = summary_header_save;
+	store_summary_class->store_info_load = store_info_load;
+	store_summary_class->store_info_save = store_info_save;
+	store_summary_class->store_info_free = store_info_free;
+	store_summary_class->store_info_string = store_info_string;
+	store_summary_class->store_info_set_string = store_info_set_string;
 }
 
 static void
-camel_imap_store_summary_init (CamelImapStoreSummary *s)
+camel_imap_store_summary_init (CamelImapStoreSummary *imap_store_summary)
 {
-	/*struct _CamelImapStoreSummaryPrivate *p;
+	CamelStoreSummary *store_summary;
 
-	  p = _PRIVATE(s) = g_malloc0(sizeof(*p));*/
+	store_summary = CAMEL_STORE_SUMMARY (imap_store_summary);
+	store_summary->store_info_size = sizeof (CamelImapStoreInfo);
 
-	((CamelStoreSummary *)s)->store_info_size = sizeof(CamelImapStoreInfo);
-	s->version = CAMEL_IMAP_STORE_SUMMARY_VERSION;
-}
-
-static void
-camel_imap_store_summary_finalize (CamelObject *obj)
-{
-	/*struct _CamelImapStoreSummaryPrivate *p;*/
-	/*CamelImapStoreSummary *s = (CamelImapStoreSummary *)obj;*/
-
-	/*p = _PRIVATE(obj);
-	  g_free(p);*/
+	imap_store_summary->version = CAMEL_IMAP_STORE_SUMMARY_VERSION;
 }
 
 CamelType
@@ -101,14 +85,14 @@ camel_imap_store_summary_get_type (void)
 	static CamelType type = CAMEL_INVALID_TYPE;
 
 	if (type == CAMEL_INVALID_TYPE) {
-		camel_imap_store_summary_parent = (CamelStoreSummaryClass *)camel_store_summary_get_type();
-		type = camel_type_register((CamelType)camel_imap_store_summary_parent, "CamelImapStoreSummary",
+		type = camel_type_register(camel_store_summary_get_type (),
+					   "CamelImapStoreSummary",
 					   sizeof (CamelImapStoreSummary),
 					   sizeof (CamelImapStoreSummaryClass),
 					   (CamelObjectClassInitFunc) camel_imap_store_summary_class_init,
 					   NULL,
 					   (CamelObjectInitFunc) camel_imap_store_summary_init,
-					   (CamelObjectFinalizeFunc) camel_imap_store_summary_finalize);
+					   (CamelObjectFinalizeFunc) NULL);
 	}
 
 	return type;
@@ -124,9 +108,7 @@ camel_imap_store_summary_get_type (void)
 CamelImapStoreSummary *
 camel_imap_store_summary_new (void)
 {
-	CamelImapStoreSummary *new = CAMEL_IMAP_STORE_SUMMARY ( camel_object_new (camel_imap_store_summary_get_type ()));
-
-	return new;
+	return CAMEL_IMAP_STORE_SUMMARY ( camel_object_new (camel_imap_store_summary_get_type ()));
 }
 
 /**
@@ -588,7 +570,7 @@ summary_header_load(CamelStoreSummary *s, FILE *in)
 
 	namespace_clear (is);
 
-	if (camel_imap_store_summary_parent->summary_header_load((CamelStoreSummary *)s, in) == -1
+	if (CAMEL_STORE_SUMMARY_CLASS (camel_imap_store_summary_parent_class)->summary_header_load((CamelStoreSummary *)s, in) == -1
 	    || camel_file_util_decode_fixed_int32(in, &version) == -1)
 		return -1;
 
@@ -624,7 +606,7 @@ summary_header_save(CamelStoreSummary *s, FILE *out)
 	}
 
 	/* always write as latest version */
-	if (camel_imap_store_summary_parent->summary_header_save((CamelStoreSummary *)s, out) == -1
+	if (CAMEL_STORE_SUMMARY_CLASS (camel_imap_store_summary_parent_class)->summary_header_save((CamelStoreSummary *)s, out) == -1
 	    || camel_file_util_encode_fixed_int32(out, CAMEL_IMAP_STORE_SUMMARY_VERSION) == -1
 	    || camel_file_util_encode_fixed_int32(out, is->capabilities) == -1
 	    || camel_file_util_encode_fixed_int32(out, count) == -1)
@@ -641,7 +623,7 @@ store_info_load(CamelStoreSummary *s, FILE *in)
 {
 	CamelImapStoreInfo *mi;
 
-	mi = (CamelImapStoreInfo *)camel_imap_store_summary_parent->store_info_load(s, in);
+	mi = (CamelImapStoreInfo *) CAMEL_STORE_SUMMARY_CLASS (camel_imap_store_summary_parent_class)->store_info_load(s, in);
 	if (mi) {
 		if (camel_file_util_decode_string(in, &mi->full_name) == -1) {
 			camel_store_summary_info_free(s, (CamelStoreInfo *)mi);
@@ -661,7 +643,7 @@ store_info_save(CamelStoreSummary *s, FILE *out, CamelStoreInfo *mi)
 {
 	CamelImapStoreInfo *isi = (CamelImapStoreInfo *)mi;
 
-	if (camel_imap_store_summary_parent->store_info_save(s, out, mi) == -1
+	if (CAMEL_STORE_SUMMARY_CLASS (camel_imap_store_summary_parent_class)->store_info_save(s, out, mi) == -1
 	    || camel_file_util_encode_string(out, isi->full_name) == -1)
 		return -1;
 
@@ -674,7 +656,7 @@ store_info_free(CamelStoreSummary *s, CamelStoreInfo *mi)
 	CamelImapStoreInfo *isi = (CamelImapStoreInfo *)mi;
 
 	g_free(isi->full_name);
-	camel_imap_store_summary_parent->store_info_free(s, mi);
+	CAMEL_STORE_SUMMARY_CLASS (camel_imap_store_summary_parent_class)->store_info_free(s, mi);
 }
 
 static const gchar *
@@ -690,7 +672,7 @@ store_info_string(CamelStoreSummary *s, const CamelStoreInfo *mi, gint type)
 	case CAMEL_IMAP_STORE_INFO_FULL_NAME:
 		return isi->full_name;
 	default:
-		return camel_imap_store_summary_parent->store_info_string(s, mi, type);
+		return CAMEL_STORE_SUMMARY_CLASS (camel_imap_store_summary_parent_class)->store_info_string(s, mi, type);
 	}
 }
 
@@ -710,7 +692,7 @@ store_info_set_string(CamelStoreSummary *s, CamelStoreInfo *mi, gint type, const
 		camel_store_summary_unlock (s, CSS_SUMMARY_LOCK);
 		break;
 	default:
-		camel_imap_store_summary_parent->store_info_set_string(s, mi, type, str);
+		CAMEL_STORE_SUMMARY_CLASS (camel_imap_store_summary_parent_class)->store_info_set_string(s, mi, type, str);
 		break;
 	}
 }
diff --git a/camel/providers/imap/camel-imap-store.c b/camel/providers/imap/camel-imap-store.c
index bd3f3b6..5e28857 100644
--- a/camel/providers/imap/camel-imap-store.c
+++ b/camel/providers/imap/camel-imap-store.c
@@ -32,7 +32,6 @@
 #include <string.h>
 #include <unistd.h>
 
-#include <glib.h>
 #include <glib/gi18n-lib.h>
 #include <glib/gstdio.h>
 
@@ -65,11 +64,11 @@
 
 extern gint camel_verbose_debug;
 
-static CamelOfflineStoreClass *parent_class = NULL;
+static gpointer camel_imap_store_parent_class;
 
 static gchar imap_tag_prefix = 'A';
 
-static void construct (CamelService *service, CamelSession *session,
+static gboolean construct (CamelService *service, CamelSession *session,
 		       CamelProvider *provider, CamelURL *url,
 		       CamelException *ex);
 
@@ -78,7 +77,7 @@ static gint imap_getv (CamelObject *object, CamelException *ex, CamelArgGetV *ar
 
 static gchar *imap_get_name (CamelService *service, gboolean brief);
 
-static void imap_noop (CamelStore *store, CamelException *ex);
+static gboolean imap_noop (CamelStore *store, CamelException *ex);
 static CamelFolder *imap_get_junk(CamelStore *store, CamelException *ex);
 static CamelFolder *imap_get_trash(CamelStore *store, CamelException *ex);
 static GList *query_auth_types (CamelService *service, CamelException *ex);
@@ -86,17 +85,17 @@ static guint hash_folder_name (gconstpointer key);
 static gint compare_folder_name (gconstpointer a, gconstpointer b);
 
 static CamelFolderInfo *create_folder (CamelStore *store, const gchar *parent_name, const gchar *folder_name, CamelException *ex);
-static void             delete_folder (CamelStore *store, const gchar *folder_name, CamelException *ex);
-static void             rename_folder (CamelStore *store, const gchar *old_name, const gchar *new_name, CamelException *ex);
+static gboolean delete_folder (CamelStore *store, const gchar *folder_name, CamelException *ex);
+static gboolean rename_folder (CamelStore *store, const gchar *old_name, const gchar *new_name, CamelException *ex);
 static gboolean folder_subscribed (CamelStore *store, const gchar *folder_name);
-static void subscribe_folder (CamelStore *store, const gchar *folder_name,
+static gboolean subscribe_folder (CamelStore *store, const gchar *folder_name,
 			      CamelException *ex);
-static void unsubscribe_folder (CamelStore *store, const gchar *folder_name,
+static gboolean unsubscribe_folder (CamelStore *store, const gchar *folder_name,
 				CamelException *ex);
 
-static void get_folders_sync(CamelImapStore *imap_store, const gchar *pattern, CamelException *ex);
+static gboolean get_folders_sync(CamelImapStore *imap_store, const gchar *pattern, CamelException *ex);
 
-static void imap_folder_effectively_unsubscribed(CamelImapStore *imap_store, const gchar *folder_name, CamelException *ex);
+static gboolean imap_folder_effectively_unsubscribed(CamelImapStore *imap_store, const gchar *folder_name, CamelException *ex);
 static gboolean imap_check_folder_still_extant (CamelImapStore *imap_store, const gchar *full_name,  CamelException *ex);
 static void imap_forget_folder(CamelImapStore *imap_store, const gchar *folder_name, CamelException *ex);
 static void imap_set_server_level (CamelImapStore *store);
@@ -109,45 +108,6 @@ static CamelFolderInfo * get_folder_info (CamelStore *store, const gchar *top, g
 static CamelFolder * get_folder_offline (CamelStore *store, const gchar *folder_name, guint32 flags, CamelException *ex);
 static CamelFolderInfo * get_folder_info_offline (CamelStore *store, const gchar *top, guint32 flags, CamelException *ex);
 
-static void
-camel_imap_store_class_init (CamelImapStoreClass *camel_imap_store_class)
-{
-	CamelObjectClass *camel_object_class =
-		CAMEL_OBJECT_CLASS (camel_imap_store_class);
-	CamelServiceClass *camel_service_class =
-		CAMEL_SERVICE_CLASS (camel_imap_store_class);
-	CamelStoreClass *camel_store_class =
-		CAMEL_STORE_CLASS (camel_imap_store_class);
-
-	parent_class = CAMEL_OFFLINE_STORE_CLASS (camel_type_get_global_classfuncs (camel_offline_store_get_type ()));
-
-	/* virtual method overload */
-	camel_object_class->setv = imap_setv;
-	camel_object_class->getv = imap_getv;
-
-	camel_service_class->construct = construct;
-	camel_service_class->query_auth_types = query_auth_types;
-	camel_service_class->get_name = imap_get_name;
-	camel_service_class->connect = imap_connect;
-	camel_service_class->disconnect = imap_disconnect;
-
-	camel_store_class->hash_folder_name = hash_folder_name;
-	camel_store_class->compare_folder_name = compare_folder_name;
-	camel_store_class->get_folder = get_folder;
-	camel_store_class->create_folder = create_folder;
-	camel_store_class->delete_folder = delete_folder;
-	camel_store_class->rename_folder = rename_folder;
-	camel_store_class->get_folder_info = get_folder_info;
-	camel_store_class->free_folder_info = camel_store_free_folder_info_full;
-	camel_store_class->folder_subscribed = folder_subscribed;
-	camel_store_class->subscribe_folder = subscribe_folder;
-	camel_store_class->unsubscribe_folder = unsubscribe_folder;
-	camel_store_class->noop = imap_noop;
-	camel_store_class->get_trash = imap_get_trash;
-	camel_store_class->get_junk = imap_get_junk;
-	camel_store_class->can_refresh_folder = imap_can_refresh_folder;
-}
-
 static gboolean
 free_key (gpointer key, gpointer value, gpointer user_data)
 {
@@ -156,34 +116,64 @@ free_key (gpointer key, gpointer value, gpointer user_data)
 }
 
 static void
-camel_imap_store_finalize (CamelObject *object)
+imap_store_finalize (CamelImapStore *imap_store)
 {
-	CamelImapStore *imap_store = CAMEL_IMAP_STORE (object);
-
 	/* This frees current_folder, folders, authtypes, streams, and namespace. */
 	camel_service_disconnect((CamelService *)imap_store, TRUE, NULL);
 
-	if (imap_store->summary) {
-		camel_store_summary_save((CamelStoreSummary *)imap_store->summary);
+	if (imap_store->summary != NULL) {
+		camel_store_summary_save (
+			CAMEL_STORE_SUMMARY (imap_store->summary));
 		camel_object_unref (imap_store->summary);
 	}
 
-	if (imap_store->base_url)
-		g_free (imap_store->base_url);
-	if (imap_store->storage_path)
-		g_free (imap_store->storage_path);
-
+	g_free (imap_store->base_url);
+	g_free (imap_store->storage_path);
 	g_free (imap_store->users_namespace);
-	imap_store->users_namespace = NULL;
-
 	g_free (imap_store->custom_headers);
 }
 
 static void
-camel_imap_store_init (gpointer object, gpointer klass)
+camel_imap_store_class_init (CamelImapStoreClass *class)
 {
-	CamelImapStore *imap_store = CAMEL_IMAP_STORE (object);
+	CamelObjectClass *camel_object_class;
+	CamelServiceClass *service_class;
+	CamelStoreClass *store_class;
+
+	camel_imap_store_parent_class = CAMEL_OFFLINE_STORE_CLASS (camel_type_get_global_classfuncs (camel_offline_store_get_type ()));
+
+	camel_object_class = CAMEL_OBJECT_CLASS (class);
+	camel_object_class->setv = imap_setv;
+	camel_object_class->getv = imap_getv;
 
+	service_class = CAMEL_SERVICE_CLASS (class);
+	service_class->construct = construct;
+	service_class->query_auth_types = query_auth_types;
+	service_class->get_name = imap_get_name;
+	service_class->connect = imap_connect;
+	service_class->disconnect = imap_disconnect;
+
+	store_class = CAMEL_STORE_CLASS (class);
+	store_class->hash_folder_name = hash_folder_name;
+	store_class->compare_folder_name = compare_folder_name;
+	store_class->get_folder = get_folder;
+	store_class->create_folder = create_folder;
+	store_class->delete_folder = delete_folder;
+	store_class->rename_folder = rename_folder;
+	store_class->get_folder_info = get_folder_info;
+	store_class->free_folder_info = camel_store_free_folder_info_full;
+	store_class->folder_subscribed = folder_subscribed;
+	store_class->subscribe_folder = subscribe_folder;
+	store_class->unsubscribe_folder = unsubscribe_folder;
+	store_class->noop = imap_noop;
+	store_class->get_trash = imap_get_trash;
+	store_class->get_junk = imap_get_junk;
+	store_class->can_refresh_folder = imap_can_refresh_folder;
+}
+
+static void
+camel_imap_store_init (CamelImapStore *imap_store)
+{
 	imap_store->istream = NULL;
 	imap_store->ostream = NULL;
 
@@ -213,29 +203,31 @@ camel_imap_store_get_type (void)
 					     (CamelObjectClassInitFunc) camel_imap_store_class_init,
 					     NULL,
 					     (CamelObjectInitFunc) camel_imap_store_init,
-					     (CamelObjectFinalizeFunc) camel_imap_store_finalize);
+					     (CamelObjectFinalizeFunc) imap_store_finalize);
 	}
 
 	return camel_imap_store_type;
 }
 
-static void
+static gboolean
 construct (CamelService *service, CamelSession *session,
 	   CamelProvider *provider, CamelURL *url,
 	   CamelException *ex)
 {
+	CamelServiceClass *service_class;
 	CamelImapStore *imap_store = CAMEL_IMAP_STORE (service);
 	CamelStore *store = CAMEL_STORE (service);
 	gchar *tmp;
 	CamelURL *summary_url;
 
-	CAMEL_SERVICE_CLASS (parent_class)->construct (service, session, provider, url, ex);
-	if (camel_exception_is_set (ex))
-		return;
+	/* Chain up to parent's construct() method. */
+	service_class = CAMEL_SERVICE_CLASS (camel_imap_store_parent_class);
+	if (!service_class->construct (service, session, provider, url, ex))
+		return FALSE;
 
 	imap_store->storage_path = camel_session_get_storage_path (session, service, ex);
 	if (!imap_store->storage_path)
-		return;
+		return FALSE;
 
 	/* FIXME */
 	imap_store->base_url = camel_url_to_string (service->url, (CAMEL_URL_HIDE_PASSWORD |
@@ -294,6 +286,8 @@ construct (CamelService *service, CamelSession *session,
 		imap_store->capabilities = is->capabilities;
 		imap_set_server_level(imap_store);
 	}
+
+	return TRUE;
 }
 
 static gint
@@ -367,7 +361,7 @@ imap_setv (CamelObject *object, CamelException *ex, CamelArgV *args)
            we need to do it here... or, better yet, somehow chain it
            up to CamelService's setv implementation. */
 
-	return CAMEL_OBJECT_CLASS (parent_class)->setv (object, ex, args);
+	return CAMEL_OBJECT_CLASS (camel_imap_store_parent_class)->setv (object, ex, args);
 }
 
 static gint
@@ -413,7 +407,7 @@ imap_getv (CamelObject *object, CamelException *ex, CamelArgGetV *args)
 		}
 	}
 
-	return CAMEL_OBJECT_CLASS (parent_class)->getv (object, ex, args);
+	return CAMEL_OBJECT_CLASS (camel_imap_store_parent_class)->getv (object, ex, args);
 }
 
 static gchar *
@@ -550,7 +544,8 @@ connect_to_server (CamelService *service, struct addrinfo *ai, gint ssl_mode, Ca
 		else
 			tcp_stream = camel_tcp_stream_ssl_new (service->session, service->url->host, SSL_PORT_FLAGS);
 #else
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
 			_("Could not connect to %s: %s"),
 			service->url->host, _("SSL unavailable"));
 
@@ -562,16 +557,15 @@ connect_to_server (CamelService *service, struct addrinfo *ai, gint ssl_mode, Ca
 
 	if (camel_tcp_stream_connect ((CamelTcpStream *) tcp_stream, ai) == -1) {
 		if (errno == EINTR)
-			camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL,
-					     _("Connection cancelled"));
+			camel_exception_set (
+				ex, CAMEL_EXCEPTION_USER_CANCEL,
+				_("Connection cancelled"));
 		else
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-					      _("Could not connect to %s: %s"),
-					      service->url->host,
-					      g_strerror (errno));
-
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+				_("Could not connect to %s: %s"),
+				service->url->host, g_strerror (errno));
 		camel_object_unref (tcp_stream);
-
 		return FALSE;
 	}
 
@@ -673,7 +667,8 @@ connect_to_server (CamelService *service, struct addrinfo *ai, gint ssl_mode, Ca
 	clean_quit = FALSE;
 
 	if (!(store->capabilities & IMAP_CAPABILITY_STARTTLS)) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
 			_("Failed to connect to IMAP server %s in secure mode: %s"),
 			service->url->host, _("STARTTLS not supported"));
 
@@ -692,15 +687,17 @@ connect_to_server (CamelService *service, struct addrinfo *ai, gint ssl_mode, Ca
 
 	/* Okay, now toggle SSL/TLS mode */
 	if (camel_tcp_stream_ssl_enable_ssl (CAMEL_TCP_STREAM_SSL (tcp_stream)) == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Failed to connect to IMAP server %s in secure mode: %s"),
-				      service->url->host, _("SSL negotiations failed"));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Failed to connect to IMAP server %s in secure mode: %s"),
+			service->url->host, _("SSL negotiations failed"));
 		goto exception;
 	}
 #else
-	camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-			      _("Failed to connect to IMAP server %s in secure mode: %s"),
-			      service->url->host, _("SSL is not available in this build"));
+	camel_exception_setv (
+		ex, CAMEL_EXCEPTION_SYSTEM,
+		_("Failed to connect to IMAP server %s in secure mode: %s"),
+		service->url->host, _("SSL is not available in this build"));
 	goto exception;
 #endif /* HAVE_SSL */
 
@@ -724,7 +721,8 @@ connect_to_server (CamelService *service, struct addrinfo *ai, gint ssl_mode, Ca
 
 	if (store->capabilities & IMAP_CAPABILITY_LOGINDISABLED ) {
 		clean_quit = TRUE;
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
 			_("Failed to connect to IMAP server %s in secure mode: %s"),
 			service->url->host, _("Unknown error"));
 		goto exception;
@@ -844,12 +842,14 @@ connect_to_server_process (CamelService *service, const gchar *cmd, CamelExcepti
 
 	if (ret == -1) {
 		if (errno == EINTR)
-			camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL,
-					     _("Connection cancelled"));
+			camel_exception_set (
+				ex, CAMEL_EXCEPTION_USER_CANCEL,
+				_("Connection cancelled"));
 		else
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-					      _("Could not connect with command \"%s\": %s"),
-					      full_cmd, g_strerror (errno));
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+				_("Could not connect with command \"%s\": %s"),
+				full_cmd, g_strerror (errno));
 
 		camel_object_unref (cmd_stream);
 		g_free (full_cmd);
@@ -985,8 +985,9 @@ query_auth_types (CamelService *service, CamelException *ex)
 	gboolean connected;
 
 	if (CAMEL_OFFLINE_STORE (store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) {
-		camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				     _("You must be working online to complete this operation"));
+		camel_exception_set (
+			ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+			_("You must be working online to complete this operation"));
 		return NULL;
 	}
 
@@ -1052,9 +1053,10 @@ imap_build_folder_info(CamelImapStore *imap_store, const gchar *folder_name)
 	return fi;
 }
 
-static void
-imap_folder_effectively_unsubscribed(CamelImapStore *imap_store,
-				     const gchar *folder_name, CamelException *ex)
+static gboolean
+imap_folder_effectively_unsubscribed (CamelImapStore *imap_store,
+                                      const gchar *folder_name,
+                                      CamelException *ex)
 {
 	CamelFolderInfo *fi;
 	CamelStoreInfo *si;
@@ -1073,13 +1075,15 @@ imap_folder_effectively_unsubscribed(CamelImapStore *imap_store,
 		/* we don't need to emit a "folder_unsubscribed" signal
                    if we are in the process of renaming folders, so we
                    are done here... */
-		return;
+		return TRUE;
 
 	}
 
 	fi = imap_build_folder_info(imap_store, folder_name);
 	camel_object_trigger_event (CAMEL_OBJECT (imap_store), "folder_unsubscribed", fi);
 	camel_folder_info_free (fi);
+
+	return TRUE;
 }
 
 static void
@@ -1184,7 +1188,7 @@ imap_store_refresh_folders (CamelImapStore *store, CamelException *ex)
 
 		CAMEL_IMAP_FOLDER (folder)->need_rescan = TRUE;
 		if (!camel_exception_is_set(ex))
-			CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(folder))->refresh_info(folder, ex);
+			CAMEL_FOLDER_GET_CLASS (folder)->refresh_info (folder, ex);
 
 		if (camel_exception_is_set (ex) &&
 		    imap_check_folder_still_extant (store, folder->full_name, ex) == FALSE) {
@@ -1256,8 +1260,9 @@ try_auth (CamelImapStore *store, const gchar *mech, CamelException *ex)
 
  lose:
 	if (!camel_exception_is_set (ex)) {
-		camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
-				     _("Bad authentication response from server."));
+		camel_exception_set (
+			ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
+			_("Bad authentication response from server."));
 	}
 
 	camel_object_unref (sasl);
@@ -1287,7 +1292,8 @@ imap_auth_loop (CamelService *service, CamelException *ex)
 
 	if (service->url->authmech) {
 		if (!g_hash_table_lookup (store->authtypes, service->url->authmech)) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
 				_("IMAP server %s does not support requested "
 				  "authentication type %s"),
 				service->url->host,
@@ -1297,9 +1303,10 @@ imap_auth_loop (CamelService *service, CamelException *ex)
 
 		authtype = camel_sasl_authtype (service->url->authmech);
 		if (!authtype) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
-					      _("No support for authentication type %s"),
-					      service->url->authmech);
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
+				_("No support for authentication type %s"),
+				service->url->authmech);
 			return FALSE;
 		}
 
@@ -1340,7 +1347,8 @@ imap_auth_loop (CamelService *service, CamelException *ex)
 			errbuf = NULL;
 
 			if (!service->url->passwd) {
-				camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL,
+				camel_exception_set (
+					ex, CAMEL_EXCEPTION_USER_CANCEL,
 					_("You did not enter a password."));
 				return FALSE;
 			}
@@ -1526,8 +1534,7 @@ imap_connect (CamelService *service, CamelException *ex)
 		CamelStoreInfo *si;
 
 		/* look in all namespaces */
-		get_folders_sync (store, NULL, ex);
-		if (camel_exception_is_set(ex))
+		if (!get_folders_sync (store, NULL, ex))
 			goto done;
 
 		/* Make sure INBOX is present/subscribed */
@@ -1623,35 +1630,43 @@ imap_summary_is_dirty (CamelFolderSummary *summary)
 	return FALSE;
 }
 
-static void
-imap_noop (CamelStore *store, CamelException *ex)
+static gboolean
+imap_noop (CamelStore *store,
+           CamelException *ex)
 {
 	CamelImapStore *imap_store = (CamelImapStore *) store;
 	CamelImapResponse *response;
 	CamelFolder *current_folder;
+	gboolean success = TRUE;
 
 	camel_service_lock (CAMEL_SERVICE (imap_store), CS_REC_CONNECT_LOCK);
 
-	if (!camel_imap_store_connected(imap_store, ex))
+	if (!camel_imap_store_connected(imap_store, ex)) {
+		success = FALSE;
 		goto done;
+	}
 
 	current_folder = imap_store->current_folder;
 	if (current_folder && imap_summary_is_dirty (current_folder->summary)) {
 		/* let's sync the flags instead.  NB: must avoid folder lock */
-		((CamelFolderClass *)((CamelObject *)current_folder)->klass)->sync(current_folder, FALSE, ex);
+		success = CAMEL_FOLDER_GET_CLASS (current_folder)->sync (current_folder, FALSE, ex);
 	} else {
 		response = camel_imap_command (imap_store, NULL, ex, "NOOP");
 		if (response)
 			camel_imap_response_free (imap_store, response);
+		else
+			success = FALSE;
 	}
 done:
 	camel_service_unlock (CAMEL_SERVICE (imap_store), CS_REC_CONNECT_LOCK);
+
+	return success;
 }
 
 static CamelFolder *
 imap_get_trash(CamelStore *store, CamelException *ex)
 {
-	CamelFolder *folder = CAMEL_STORE_CLASS(parent_class)->get_trash(store, ex);
+	CamelFolder *folder = CAMEL_STORE_CLASS(camel_imap_store_parent_class)->get_trash(store, ex);
 
 	if (folder) {
 		gchar *state = g_build_filename(((CamelImapStore *)store)->storage_path, "system", "Trash.cmeta", NULL);
@@ -1668,7 +1683,7 @@ imap_get_trash(CamelStore *store, CamelException *ex)
 static CamelFolder *
 imap_get_junk(CamelStore *store, CamelException *ex)
 {
-	CamelFolder *folder = CAMEL_STORE_CLASS(parent_class)->get_junk(store, ex);
+	CamelFolder *folder = CAMEL_STORE_CLASS(camel_imap_store_parent_class)->get_junk(store, ex);
 
 	if (folder) {
 		gchar *state = g_build_filename(((CamelImapStore *)store)->storage_path, "system", "Junk.cmeta", NULL);
@@ -1827,8 +1842,9 @@ get_folder (CamelStore *store, const gchar *folder_name, guint32 flags, CamelExc
 		return new_folder;
 
 	if (CAMEL_OFFLINE_STORE (store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) {
-		camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				     _("You must be working online to complete this operation"));
+		camel_exception_set (
+			ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+			_("You must be working online to complete this operation"));
 		return NULL;
 	}
 
@@ -1863,8 +1879,9 @@ get_folder (CamelStore *store, const gchar *folder_name, guint32 flags, CamelExc
 
 		if (!(flags & CAMEL_STORE_FOLDER_CREATE)) {
 			camel_service_unlock (CAMEL_SERVICE (imap_store), CS_REC_CONNECT_LOCK);
-			camel_exception_setv (ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-					      _("No such folder %s"), folder_name);
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
+				_("No such folder %s"), folder_name);
 			return NULL;
 		}
 
@@ -1875,9 +1892,10 @@ get_folder (CamelStore *store, const gchar *folder_name, guint32 flags, CamelExc
 
 		if (*c != '\0') {
 			camel_service_unlock (CAMEL_SERVICE (imap_store), CS_REC_CONNECT_LOCK);
-			camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_INVALID_PATH,
-					      _("The folder name \"%s\" is invalid because it contains the character \"%c\""),
-					      folder_name, *c);
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_FOLDER_INVALID_PATH,
+				_("The folder name \"%s\" is invalid because it contains the character \"%c\""),
+				folder_name, *c);
 			return NULL;
 		}
 
@@ -1938,8 +1956,9 @@ get_folder (CamelStore *store, const gchar *folder_name, guint32 flags, CamelExc
 				imap_status_item_free (items);
 
 				if (messages > 0) {
-					camel_exception_set (ex, CAMEL_EXCEPTION_FOLDER_INVALID_STATE,
-							     _("The parent folder is not allowed to contain subfolders"));
+					camel_exception_set (
+						ex, CAMEL_EXCEPTION_FOLDER_INVALID_STATE,
+						_("The parent folder is not allowed to contain subfolders"));
 					camel_service_unlock (CAMEL_SERVICE (imap_store), CS_REC_CONNECT_LOCK);
 					g_free (parent_name);
 					g_free (parent_real);
@@ -1992,9 +2011,10 @@ get_folder (CamelStore *store, const gchar *folder_name, guint32 flags, CamelExc
 			return NULL;
 		}
 	} else if (flags & CAMEL_STORE_FOLDER_EXCL) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Cannot create folder '%s': folder exists."),
-				      folder_name);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Cannot create folder '%s': folder exists."),
+			folder_name);
 
 		camel_imap_response_free_without_processing (imap_store, response);
 
@@ -2009,14 +2029,9 @@ get_folder (CamelStore *store, const gchar *folder_name, guint32 flags, CamelExc
 	new_folder = camel_imap_folder_new (store, folder_name, folder_dir, ex);
 	g_free (folder_dir);
 	if (new_folder) {
-		CamelException local_ex;
-
 		imap_store->current_folder = camel_object_ref (new_folder);
-		camel_exception_init (&local_ex);
-		camel_imap_folder_selected (new_folder, response, &local_ex);
+		if (!camel_imap_folder_selected (new_folder, response, ex)) {
 
-		if (camel_exception_is_set (&local_ex)) {
-			camel_exception_xfer (ex, &local_ex);
 			camel_object_unref (imap_store->current_folder);
 			imap_store->current_folder = NULL;
 			camel_object_unref (new_folder);
@@ -2060,28 +2075,36 @@ get_folder_offline (CamelStore *store, const gchar *folder_name,
 
 		camel_store_summary_info_free((CamelStoreSummary *)imap_store->summary, si);
 	} else {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-				      _("No such folder %s"), folder_name);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
+			_("No such folder %s"), folder_name);
 	}
 
 	return new_folder;
 }
 
-static void
-delete_folder (CamelStore *store, const gchar *folder_name, CamelException *ex)
+static gboolean
+delete_folder (CamelStore *store,
+               const gchar *folder_name,
+               CamelException *ex)
 {
 	CamelImapStore *imap_store = CAMEL_IMAP_STORE (store);
 	CamelImapResponse *response;
+	gboolean success = TRUE;
 
 	camel_service_lock (CAMEL_SERVICE (imap_store), CS_REC_CONNECT_LOCK);
 
-	if (!camel_imap_store_connected(imap_store, ex))
+	if (!camel_imap_store_connected(imap_store, ex)) {
+		success = FALSE;
 		goto fail;
+	}
 
 	/* make sure this folder isn't currently SELECTed */
 	response = camel_imap_command (imap_store, NULL, ex, "SELECT INBOX");
-	if (!response)
+	if (!response) {
+		success = FALSE;
 		goto fail;
+	}
 
 	camel_imap_response_free_without_processing (imap_store, response);
 	if (imap_store->current_folder)
@@ -2093,9 +2116,13 @@ delete_folder (CamelStore *store, const gchar *folder_name, CamelException *ex)
 	if (response) {
 		camel_imap_response_free (imap_store, response);
 		imap_forget_folder (imap_store, folder_name, ex);
-	}
+	} else
+		success = FALSE;
+
 fail:
 	camel_service_unlock (CAMEL_SERVICE (imap_store), CS_REC_CONNECT_LOCK);
+
+	return success;
 }
 
 static void
@@ -2166,24 +2193,32 @@ rename_folder_info (CamelImapStore *imap_store, const gchar *old_name, const gch
 	}
 }
 
-static void
-rename_folder (CamelStore *store, const gchar *old_name, const gchar *new_name_in, CamelException *ex)
+static gboolean
+rename_folder (CamelStore *store,
+               const gchar *old_name,
+               const gchar *new_name_in,
+               CamelException *ex)
 {
 	CamelImapStore *imap_store = CAMEL_IMAP_STORE (store);
 	CamelImapResponse *response;
 	gchar *oldpath, *newpath, *storage_path;
+	gboolean success = TRUE;
 
 	camel_service_lock (CAMEL_SERVICE (imap_store), CS_REC_CONNECT_LOCK);
 
-	if (!camel_imap_store_connected(imap_store, ex))
+	if (!camel_imap_store_connected(imap_store, ex)) {
+		success = FALSE;
 		goto fail;
+	}
 
 	/* make sure this folder isn't currently SELECTed - it's
            actually possible to rename INBOX but if you do another
            INBOX will immediately be created by the server */
 	response = camel_imap_command (imap_store, NULL, ex, "SELECT INBOX");
-	if (!response)
+	if (!response) {
+		success = FALSE;
 		goto fail;
+	}
 
 	camel_imap_response_free_without_processing (imap_store, response);
 	if (imap_store->current_folder)
@@ -2199,6 +2234,7 @@ rename_folder (CamelStore *store, const gchar *old_name, const gchar *new_name_i
 	if (!response) {
 		if (imap_store->parameters & IMAP_PARAM_SUBSCRIPTIONS)
 			manage_subscriptions(store, old_name, TRUE);
+		success = FALSE;
 		goto fail;
 	}
 
@@ -2247,6 +2283,8 @@ rename_folder (CamelStore *store, const gchar *old_name, const gchar *new_name_i
 fail:
 	imap_store->renaming = FALSE;
 	camel_service_unlock (CAMEL_SERVICE (imap_store), CS_REC_CONNECT_LOCK);
+
+	return success;
 }
 
 static CamelFolderInfo *
@@ -2256,15 +2294,15 @@ create_folder (CamelStore *store, const gchar *parent_name,
 	CamelImapStore *imap_store = CAMEL_IMAP_STORE (store);
 	gchar *full_name, *resp, *thisone, *parent_real, *real_name;
 	CamelImapResponse *response;
-	CamelException internal_ex;
 	CamelFolderInfo *root = NULL;
 	gboolean need_convert;
 	gint i = 0, flags;
 	const gchar *c;
 
 	if (CAMEL_OFFLINE_STORE (store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) {
-		camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				     _("You must be working online to complete this operation"));
+		camel_exception_set (
+			ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+			_("You must be working online to complete this operation"));
 		return NULL;
 	}
 
@@ -2276,9 +2314,10 @@ create_folder (CamelStore *store, const gchar *parent_name,
 		c++;
 
 	if (*c != '\0') {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_INVALID_PATH,
-				      _("The folder name \"%s\" is invalid because it contains the character \"%c\""),
-				      folder_name, *c);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_FOLDER_INVALID_PATH,
+			_("The folder name \"%s\" is invalid because it contains the character \"%c\""),
+			folder_name, *c);
 		return NULL;
 	}
 
@@ -2317,8 +2356,6 @@ create_folder (CamelStore *store, const gchar *parent_name,
 
 	camel_imap_response_free (imap_store, response);
 
-	camel_exception_init (&internal_ex);
-
 	/* if not, check if we can delete it and recreate it */
 	if (need_convert) {
 		struct imap_status_item *items, *item;
@@ -2338,18 +2375,16 @@ create_folder (CamelStore *store, const gchar *parent_name,
 		imap_status_item_free (items);
 
 		if (messages > 0) {
-			camel_exception_set (ex, CAMEL_EXCEPTION_FOLDER_INVALID_STATE,
-					     _("The parent folder is not allowed to contain subfolders"));
+			camel_exception_set (
+				ex, CAMEL_EXCEPTION_FOLDER_INVALID_STATE,
+				_("The parent folder is not allowed to contain subfolders"));
 			g_free(parent_real);
 			return NULL;
 		}
 
 		/* delete the old parent and recreate it */
-		delete_folder (store, parent_name, &internal_ex);
-		if (camel_exception_is_set (&internal_ex)) {
-			camel_exception_xfer (ex, &internal_ex);
+		if (!delete_folder (store, parent_name, ex))
 			return NULL;
-		}
 
 		/* add the dirsep to the end of parent_name */
 		name = g_strdup_printf ("%s%c", parent_real, imap_store->dir_sep);
@@ -2525,7 +2560,7 @@ get_folders_free(gpointer k, gpointer v, gpointer d)
 	camel_folder_info_free(v);
 }
 
-static void
+static gboolean
 get_folders_sync (CamelImapStore *imap_store, const gchar *ppattern, CamelException *ex)
 {
 	CamelImapResponse *response;
@@ -2536,6 +2571,7 @@ get_folders_sync (CamelImapStore *imap_store, const gchar *ppattern, CamelExcept
 	CamelStoreInfo *si;
 	const gchar *pattern = ppattern;
 	CamelImapStoreNamespace *ns;
+	gboolean success = TRUE;
 
 	/* We do a LIST followed by LSUB, and merge the results.  LSUB may not be a strict
 	   subset of LIST for some servers, so we can't use either or separately */
@@ -2564,8 +2600,10 @@ get_folders_sync (CamelImapStore *imap_store, const gchar *ppattern, CamelExcept
 				response = camel_imap_command (imap_store, NULL, ex,
 								"%s \"\" %G", j==1 ? "LSUB" : "LIST",
 								pattern);
-				if (!response)
+				if (!response) {
+					success = FALSE;
 					goto fail;
+				}
 
 				for (i = 0; i < response->untagged->len; i++) {
 					list = response->untagged->pdata[i];
@@ -2652,6 +2690,8 @@ get_folders_sync (CamelImapStore *imap_store, const gchar *ppattern, CamelExcept
 fail:
 	g_hash_table_foreach(present, get_folders_free, NULL);
 	g_hash_table_destroy(present);
+
+	return success;
 }
 
 #if 0
@@ -2721,8 +2761,7 @@ refresh_refresh(CamelSession *session, CamelSessionThreadMsg *msg)
 		goto done;
 
 	if (store->users_namespace && store->users_namespace[0]) {
-		get_folders_sync (store, "INBOX", &m->ex);
-		if (camel_exception_is_set (&m->ex))
+		if (!get_folders_sync (store, "INBOX", &m->ex))
 			goto done;
 	} else {
 		get_folders_sync (store, "*", &m->ex);
@@ -2750,7 +2789,10 @@ static CamelSessionThreadOps refresh_ops = {
 };
 
 static CamelFolderInfo *
-get_folder_info (CamelStore *store, const gchar *top, guint32 flags, CamelException *ex)
+get_folder_info (CamelStore *store,
+                 const gchar *top,
+                 guint32 flags,
+                 CamelException *ex)
 {
 	CamelImapStore *imap_store = CAMEL_IMAP_STORE (store);
 	CamelFolderInfo *tree = NULL;
@@ -2821,8 +2863,7 @@ get_folder_info (CamelStore *store, const gchar *top, guint32 flags, CamelExcept
 		}
 
 		ns = camel_imap_store_summary_get_main_namespace (imap_store->summary);
-		get_folders_sync(imap_store, pattern, ex);
-		if (camel_exception_is_set(ex))
+		if (!get_folders_sync (imap_store, pattern, ex))
 			goto fail;
 		if (pattern[0] != '*' && ns) {
 			pattern[i] = ns->sep;
@@ -2963,24 +3004,31 @@ folder_subscribed (CamelStore *store, const gchar *folder_name)
 }
 
 /* Note: folder_name must match a folder as listed with get_folder_info() -> full_name */
-static void
-subscribe_folder (CamelStore *store, const gchar *folder_name,
-		  CamelException *ex)
+static gboolean
+subscribe_folder (CamelStore *store,
+                  const gchar *folder_name,
+                  CamelException *ex)
 {
 	CamelImapStore *imap_store = CAMEL_IMAP_STORE (store);
 	CamelImapResponse *response;
 	CamelFolderInfo *fi;
 	CamelStoreInfo *si;
+	gboolean success = TRUE;
 
 	camel_service_lock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
 
-	if (!camel_imap_store_connected (imap_store, ex))
+	if (!camel_imap_store_connected (imap_store, ex)) {
+		success = FALSE;
 		goto done;
+	}
 
 	response = camel_imap_command (imap_store, NULL, ex,
 				       "SUBSCRIBE %F", folder_name);
-	if (!response)
+	if (!response) {
+		success = FALSE;
 		goto done;
+	}
+
 	camel_imap_response_free (imap_store, response);
 
 	si = camel_store_summary_path((CamelStoreSummary *)imap_store->summary, folder_name);
@@ -3007,29 +3055,41 @@ subscribe_folder (CamelStore *store, const gchar *folder_name,
 	camel_folder_info_free (fi);
 done:
 	camel_service_unlock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
+
+	return success;
 }
 
-static void
-unsubscribe_folder (CamelStore *store, const gchar *folder_name,
-		    CamelException *ex)
+static gboolean
+unsubscribe_folder (CamelStore *store,
+                    const gchar *folder_name,
+                    CamelException *ex)
 {
 	CamelImapStore *imap_store = CAMEL_IMAP_STORE (store);
 	CamelImapResponse *response;
+	gboolean success = TRUE;
 
 	camel_service_lock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
 
-	if (!camel_imap_store_connected (imap_store, ex))
+	if (!camel_imap_store_connected (imap_store, ex)) {
+		success = FALSE;
 		goto done;
+	}
 
 	response = camel_imap_command (imap_store, NULL, ex,
 				       "UNSUBSCRIBE %F", folder_name);
-	if (!response)
+	if (!response) {
+		success = FALSE;
 		goto done;
+	}
+
 	camel_imap_response_free (imap_store, response);
 
-	imap_folder_effectively_unsubscribed (imap_store, folder_name, ex);
+	success = imap_folder_effectively_unsubscribed (imap_store, folder_name, ex);
+
 done:
 	camel_service_unlock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
+
+	return success;
 }
 
 #if 0
@@ -3071,8 +3131,9 @@ camel_imap_store_connected (CamelImapStore *store, CamelException *ex)
 		return TRUE;
 
 	if (!camel_exception_is_set(ex))
-		camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				     _("You must be working online to complete this operation"));
+		camel_exception_set (
+			ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+			_("You must be working online to complete this operation"));
 
 	return FALSE;
 }
@@ -3109,13 +3170,18 @@ camel_imap_store_readline (CamelImapStore *store, gchar **dest, CamelException *
 
 	if (nread <= 0) {
 		if (errno == EINTR)
-			camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL, _("Operation cancelled"));
+			camel_exception_set (
+				ex, CAMEL_EXCEPTION_USER_CANCEL,
+				_("Operation cancelled"));
 		else if (errno == 0)
-			camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE, _("Server unexpectedly disconnected"));
+			camel_exception_set (
+				ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+				_("Server unexpectedly disconnected"));
 		else
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-					      _("Server unexpectedly disconnected: %s"),
-					      g_strerror (errno));
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+				_("Server unexpectedly disconnected: %s"),
+				g_strerror (errno));
 
 		camel_service_disconnect (CAMEL_SERVICE (store), FALSE, NULL);
 		g_byte_array_free (ba, TRUE);
@@ -3143,11 +3209,13 @@ camel_imap_store_readline (CamelImapStore *store, gchar **dest, CamelException *
 }
 
 static gboolean
-imap_can_refresh_folder (CamelStore *store, CamelFolderInfo *info, CamelException *ex)
+imap_can_refresh_folder (CamelStore *store,
+                         CamelFolderInfo *info,
+                         CamelException *ex)
 {
 	gboolean res;
 
-	res = CAMEL_STORE_CLASS(parent_class)->can_refresh_folder (store, info, ex) ||
+	res = CAMEL_STORE_CLASS(camel_imap_store_parent_class)->can_refresh_folder (store, info, ex) ||
 	      (camel_url_get_param (((CamelService *)store)->url, "check_all") != NULL) ||
 	      (camel_url_get_param (((CamelService *)store)->url, "check_lsub") != NULL && (info->flags & CAMEL_FOLDER_SUBSCRIBED) != 0);
 
diff --git a/camel/providers/imap/camel-imap-store.h b/camel/providers/imap/camel-imap-store.h
index 4b6431f..9aa9c2f 100644
--- a/camel/providers/imap/camel-imap-store.h
+++ b/camel/providers/imap/camel-imap-store.h
@@ -48,10 +48,10 @@ CamelImapMsg *camel_imap_msg_new(void (*receive)(CamelImapStore *store, struct _
 				 gsize size);
 void camel_imap_msg_queue(CamelImapStore *store, CamelImapMsg *msg);
 
-G_END_DECLS
-
 #endif
 
+G_END_DECLS
+
 #define CAMEL_IMAP_STORE_TYPE     (camel_imap_store_get_type ())
 #define CAMEL_IMAP_STORE(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_IMAP_STORE_TYPE, CamelImapStore))
 #define CAMEL_IMAP_STORE_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_IMAP_STORE_TYPE, CamelImapStoreClass))
diff --git a/camel/providers/imap/camel-imap-summary.c b/camel/providers/imap/camel-imap-summary.c
index 1769477..5581663 100644
--- a/camel/providers/imap/camel-imap-summary.c
+++ b/camel/providers/imap/camel-imap-summary.c
@@ -57,29 +57,7 @@ static CamelMessageInfo * message_info_from_db (CamelFolderSummary *s, CamelMIRe
 static gint content_info_to_db (CamelFolderSummary *s, CamelMessageContentInfo *info, CamelMIRecord *mir);
 static CamelMessageContentInfo * content_info_from_db (CamelFolderSummary *s, CamelMIRecord *mir);
 
-static void camel_imap_summary_class_init (CamelImapSummaryClass *klass);
-static void camel_imap_summary_init       (CamelImapSummary *obj);
-
-static CamelFolderSummaryClass *camel_imap_summary_parent;
-
-CamelType
-camel_imap_summary_get_type (void)
-{
-	static CamelType type = CAMEL_INVALID_TYPE;
-
-	if (type == CAMEL_INVALID_TYPE) {
-		type = camel_type_register(
-			camel_folder_summary_get_type(), "CamelImapSummary",
-			sizeof (CamelImapSummary),
-			sizeof (CamelImapSummaryClass),
-			(CamelObjectClassInitFunc) camel_imap_summary_class_init,
-			NULL,
-			(CamelObjectInitFunc) camel_imap_summary_init,
-			NULL);
-	}
-
-	return type;
-}
+static gpointer camel_imap_summary_parent_class;
 
 static CamelMessageInfo *
 imap_message_info_clone(CamelFolderSummary *s, const CamelMessageInfo *mi)
@@ -87,7 +65,7 @@ imap_message_info_clone(CamelFolderSummary *s, const CamelMessageInfo *mi)
 	CamelImapMessageInfo *to;
 	const CamelImapMessageInfo *from = (const CamelImapMessageInfo *)mi;
 
-	to = (CamelImapMessageInfo *)camel_imap_summary_parent->message_info_clone(s, mi);
+	to = (CamelImapMessageInfo *) CAMEL_FOLDER_SUMMARY_CLASS (camel_imap_summary_parent_class)->message_info_clone(s, mi);
 	to->server_flags = from->server_flags;
 
 	/* FIXME: parent clone should do this */
@@ -97,37 +75,55 @@ imap_message_info_clone(CamelFolderSummary *s, const CamelMessageInfo *mi)
 }
 
 static void
-camel_imap_summary_class_init (CamelImapSummaryClass *klass)
+camel_imap_summary_class_init (CamelImapSummaryClass *class)
 {
-	CamelFolderSummaryClass *cfs_class = (CamelFolderSummaryClass *) klass;
-
-	camel_imap_summary_parent = CAMEL_FOLDER_SUMMARY_CLASS (camel_type_get_global_classfuncs (camel_folder_summary_get_type()));
-
-	cfs_class->message_info_clone = imap_message_info_clone;
-	cfs_class->message_info_size = sizeof (CamelImapMessageInfo);
-	cfs_class->content_info_size = sizeof (CamelImapMessageContentInfo);
-	cfs_class->summary_header_load = summary_header_load;
-	cfs_class->summary_header_save = summary_header_save;
-	cfs_class->message_info_load = message_info_load;
-	cfs_class->message_info_save = message_info_save;
-	cfs_class->content_info_load = content_info_load;
-	cfs_class->content_info_save = content_info_save;
-
-	cfs_class->summary_header_to_db = summary_header_to_db;
-	cfs_class->summary_header_from_db = summary_header_from_db;
-	cfs_class->message_info_to_db = message_info_to_db;
-	cfs_class->message_info_from_db = message_info_from_db;
-	cfs_class->content_info_to_db = content_info_to_db;
-	cfs_class->content_info_from_db = content_info_from_db;
-
-	cfs_class->info_set_user_flag = info_set_user_flag;
+	CamelFolderSummaryClass *folder_summary_class;
+
+	camel_imap_summary_parent_class = CAMEL_FOLDER_SUMMARY_CLASS (camel_type_get_global_classfuncs (camel_folder_summary_get_type()));
+
+	folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (class);
+	folder_summary_class->message_info_size = sizeof (CamelImapMessageInfo);
+	folder_summary_class->content_info_size = sizeof (CamelImapMessageContentInfo);
+	folder_summary_class->message_info_clone = imap_message_info_clone;
+	folder_summary_class->summary_header_load = summary_header_load;
+	folder_summary_class->summary_header_save = summary_header_save;
+	folder_summary_class->message_info_load = message_info_load;
+	folder_summary_class->message_info_save = message_info_save;
+	folder_summary_class->content_info_load = content_info_load;
+	folder_summary_class->content_info_save = content_info_save;
+	folder_summary_class->summary_header_to_db = summary_header_to_db;
+	folder_summary_class->summary_header_from_db = summary_header_from_db;
+	folder_summary_class->message_info_to_db = message_info_to_db;
+	folder_summary_class->message_info_from_db = message_info_from_db;
+	folder_summary_class->content_info_to_db = content_info_to_db;
+	folder_summary_class->content_info_from_db = content_info_from_db;
+	folder_summary_class->info_set_user_flag = info_set_user_flag;
 }
 
 static void
-camel_imap_summary_init (CamelImapSummary *obj)
+camel_imap_summary_init (CamelImapSummary *imap_summary)
 {
 }
 
+CamelType
+camel_imap_summary_get_type (void)
+{
+	static CamelType type = CAMEL_INVALID_TYPE;
+
+	if (type == CAMEL_INVALID_TYPE) {
+		type = camel_type_register(
+			camel_folder_summary_get_type(), "CamelImapSummary",
+			sizeof (CamelImapSummary),
+			sizeof (CamelImapSummaryClass),
+			(CamelObjectClassInitFunc) camel_imap_summary_class_init,
+			NULL,
+			(CamelObjectInitFunc) camel_imap_summary_init,
+			NULL);
+	}
+
+	return type;
+}
+
 static gint
 sort_uid_cmp (gpointer enc, gint len1, gpointer  data1, gint len2, gpointer data2)
 {
@@ -181,10 +177,11 @@ uid_compare (gconstpointer va, gconstpointer vb)
 CamelFolderSummary *
 camel_imap_summary_new (struct _CamelFolder *folder, const gchar *filename)
 {
-	CamelFolderSummary *summary = CAMEL_FOLDER_SUMMARY (camel_object_new (camel_imap_summary_get_type ()));
+	CamelFolderSummary *summary;
 	CamelException ex;
 	camel_exception_init (&ex);
 
+	summary = CAMEL_FOLDER_SUMMARY (camel_object_new (camel_imap_summary_get_type ()));
 	summary->folder = folder;
 	/* Don't do DB sort. Its pretty slow to load */
 	if (folder && 0) {
@@ -216,7 +213,7 @@ summary_header_from_db (CamelFolderSummary *s, CamelFIRecord *mir)
 	CamelImapSummary *ims = CAMEL_IMAP_SUMMARY (s);
 	gchar *part;
 
-	if (camel_imap_summary_parent->summary_header_from_db (s, mir) == -1)
+	if (CAMEL_FOLDER_SUMMARY_CLASS (camel_imap_summary_parent_class)->summary_header_from_db (s, mir) == -1)
 		return -1;
 
 	part = mir->bdata;
@@ -243,7 +240,7 @@ summary_header_load (CamelFolderSummary *s, FILE *in)
 {
 	CamelImapSummary *ims = CAMEL_IMAP_SUMMARY (s);
 
-	if (camel_imap_summary_parent->summary_header_load (s, in) == -1)
+	if (CAMEL_FOLDER_SUMMARY_CLASS (camel_imap_summary_parent_class)->summary_header_load (s, in) == -1)
 		return -1;
 
 	/* Legacy version */
@@ -280,7 +277,7 @@ summary_header_to_db (CamelFolderSummary *s, CamelException *ex)
 	CamelImapSummary *ims = CAMEL_IMAP_SUMMARY(s);
 	struct _CamelFIRecord *fir;
 
-	fir = camel_imap_summary_parent->summary_header_to_db (s, ex);
+	fir = CAMEL_FOLDER_SUMMARY_CLASS (camel_imap_summary_parent_class)->summary_header_to_db (s, ex);
 	if (!fir)
 		return NULL;
 	fir->bdata = g_strdup_printf ("%d %u", CAMEL_IMAP_SUMMARY_VERSION, ims->validity);
@@ -293,7 +290,7 @@ summary_header_save (CamelFolderSummary *s, FILE *out)
 {
 	CamelImapSummary *ims = CAMEL_IMAP_SUMMARY(s);
 
-	if (camel_imap_summary_parent->summary_header_save (s, out) == -1)
+	if (CAMEL_FOLDER_SUMMARY_CLASS (camel_imap_summary_parent_class)->summary_header_save (s, out) == -1)
 		return -1;
 
 	camel_file_util_encode_fixed_int32(out, CAMEL_IMAP_SUMMARY_VERSION);
@@ -307,7 +304,7 @@ message_info_from_db (CamelFolderSummary *s, CamelMIRecord *mir)
 	CamelMessageInfo *info;
 	CamelImapMessageInfo *iinfo;
 
-	info = camel_imap_summary_parent->message_info_from_db (s, mir);
+	info = CAMEL_FOLDER_SUMMARY_CLASS (camel_imap_summary_parent_class)->message_info_from_db (s, mir);
 	if (info) {
 		gchar *part = g_strdup (mir->bdata), *tmp;
 		tmp = part;
@@ -325,7 +322,7 @@ message_info_load (CamelFolderSummary *s, FILE *in)
 	CamelMessageInfo *info;
 	CamelImapMessageInfo *iinfo;
 
-	info = camel_imap_summary_parent->message_info_load (s, in);
+	info = CAMEL_FOLDER_SUMMARY_CLASS (camel_imap_summary_parent_class)->message_info_load (s, in);
 	if (info) {
 		iinfo = (CamelImapMessageInfo *)info;
 
@@ -345,7 +342,7 @@ message_info_to_db (CamelFolderSummary *s, CamelMessageInfo *info)
 	CamelImapMessageInfo *iinfo = (CamelImapMessageInfo *)info;
 	struct _CamelMIRecord *mir;
 
-	mir = camel_imap_summary_parent->message_info_to_db (s, info);
+	mir = CAMEL_FOLDER_SUMMARY_CLASS (camel_imap_summary_parent_class)->message_info_to_db (s, info);
 	if (mir)
 		mir->bdata = g_strdup_printf ("%u", iinfo->server_flags);
 
@@ -357,7 +354,7 @@ message_info_save (CamelFolderSummary *s, FILE *out, CamelMessageInfo *info)
 {
 	CamelImapMessageInfo *iinfo = (CamelImapMessageInfo *)info;
 
-	if (camel_imap_summary_parent->message_info_save (s, out, info) == -1)
+	if (CAMEL_FOLDER_SUMMARY_CLASS (camel_imap_summary_parent_class)->message_info_save (s, out, info) == -1)
 		return -1;
 
 	return camel_file_util_encode_uint32 (out, iinfo->server_flags);
@@ -368,7 +365,7 @@ info_set_user_flag (CamelMessageInfo *info, const gchar *id, gboolean state)
 {
 	gboolean res;
 
-	res = camel_imap_summary_parent->info_set_user_flag (info, id, state);
+	res = CAMEL_FOLDER_SUMMARY_CLASS (camel_imap_summary_parent_class)->info_set_user_flag (info, id, state);
 
 	/* there was a change, so do not forget to store it to server */
 	if (res)
@@ -392,7 +389,7 @@ content_info_from_db (CamelFolderSummary *s, CamelMIRecord *mir)
 	}
 	mir->cinfo = part;
 	if (type)
-		return camel_imap_summary_parent->content_info_from_db (s, mir);
+		return CAMEL_FOLDER_SUMMARY_CLASS (camel_imap_summary_parent_class)->content_info_from_db (s, mir);
 	else
 		return camel_folder_summary_content_info_new (s);
 }
@@ -401,7 +398,7 @@ static CamelMessageContentInfo *
 content_info_load (CamelFolderSummary *s, FILE *in)
 {
 	if (fgetc (in))
-		return camel_imap_summary_parent->content_info_load (s, in);
+		return CAMEL_FOLDER_SUMMARY_CLASS (camel_imap_summary_parent_class)->content_info_load (s, in);
 	else
 		return camel_folder_summary_content_info_new (s);
 }
@@ -414,7 +411,7 @@ content_info_to_db (CamelFolderSummary *s, CamelMessageContentInfo *info, CamelM
 		oldr = mir->cinfo;
 		mir->cinfo = oldr ? g_strdup_printf("%s 1", oldr) : g_strdup ("1");
 		g_free(oldr);
-		return camel_imap_summary_parent->content_info_to_db (s, info, mir);
+		return CAMEL_FOLDER_SUMMARY_CLASS (camel_imap_summary_parent_class)->content_info_to_db (s, info, mir);
 	} else {
 		oldr = mir->cinfo;
 		mir->cinfo = oldr ? g_strdup_printf("%s 0", oldr) : g_strdup ("0");
@@ -429,7 +426,7 @@ content_info_save (CamelFolderSummary *s, FILE *out,
 {
 	if (info->type) {
 		fputc (1, out);
-		return camel_imap_summary_parent->content_info_save (s, out, info);
+		return CAMEL_FOLDER_SUMMARY_CLASS (camel_imap_summary_parent_class)->content_info_save (s, out, info);
 	} else
 		return fputc (0, out);
 }
diff --git a/camel/providers/imap/camel-imap-utils.c b/camel/providers/imap/camel-imap-utils.c
index 2309e3f..16480a1 100644
--- a/camel/providers/imap/camel-imap-utils.c
+++ b/camel/providers/imap/camel-imap-utils.c
@@ -33,7 +33,6 @@
 #include <sys/stat.h>
 #include <sys/types.h>
 
-#include <glib.h>
 #include <glib/gstdio.h>
 
 #include "camel-imap-store.h"
diff --git a/camel/providers/imap/camel-imap-wrapper.c b/camel/providers/imap/camel-imap-wrapper.c
index 2bb5679..8a99941 100644
--- a/camel/providers/imap/camel-imap-wrapper.c
+++ b/camel/providers/imap/camel-imap-wrapper.c
@@ -38,27 +38,27 @@ struct _CamelImapWrapperPrivate {
 #define CAMEL_IMAP_WRAPPER_LOCK(f, l) (g_mutex_lock(((CamelImapWrapper *)f)->priv->l))
 #define CAMEL_IMAP_WRAPPER_UNLOCK(f, l) (g_mutex_unlock(((CamelImapWrapper *)f)->priv->l))
 
-static CamelDataWrapperClass *parent_class = NULL;
-
-/* Returns the class for a CamelDataWrapper */
-#define CDW_CLASS(so) CAMEL_DATA_WRAPPER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-
-static gssize write_to_stream (CamelDataWrapper *imap_wrapper, CamelStream *stream);
+static gpointer camel_imap_wrapper_parent_class;
 
 static void
-camel_imap_wrapper_class_init (CamelImapWrapperClass *camel_imap_wrapper_class)
+imap_wrapper_hydrate (CamelImapWrapper *imap_wrapper,
+                      CamelStream *stream)
 {
-	CamelDataWrapperClass *camel_data_wrapper_class =
-		CAMEL_DATA_WRAPPER_CLASS (camel_imap_wrapper_class);
+	CamelDataWrapper *data_wrapper = (CamelDataWrapper *) imap_wrapper;
 
-	parent_class = CAMEL_DATA_WRAPPER_CLASS (camel_type_get_global_classfuncs (camel_data_wrapper_get_type ()));
+	data_wrapper->stream = camel_object_ref (stream);
+	data_wrapper->offline = FALSE;
 
-	/* virtual method override */
-	camel_data_wrapper_class->write_to_stream = write_to_stream;
+	camel_object_unref (imap_wrapper->folder);
+	imap_wrapper->folder = NULL;
+	g_free (imap_wrapper->uid);
+	imap_wrapper->uid = NULL;
+	g_free (imap_wrapper->part_spec);
+	imap_wrapper->part = NULL;
 }
 
 static void
-camel_imap_wrapper_finalize (CamelObject *object)
+imap_wrapper_finalize (CamelObject *object)
 {
 	CamelImapWrapper *imap_wrapper = CAMEL_IMAP_WRAPPER (object);
 
@@ -74,53 +74,9 @@ camel_imap_wrapper_finalize (CamelObject *object)
 	g_free (imap_wrapper->priv);
 }
 
-static void
-camel_imap_wrapper_init (gpointer object, gpointer klass)
-{
-	CamelImapWrapper *imap_wrapper = CAMEL_IMAP_WRAPPER (object);
-
-	imap_wrapper->priv = g_new0 (struct _CamelImapWrapperPrivate, 1);
-	imap_wrapper->priv->lock = g_mutex_new ();
-}
-
-CamelType
-camel_imap_wrapper_get_type (void)
-{
-	static CamelType type = CAMEL_INVALID_TYPE;
-
-	if (type == CAMEL_INVALID_TYPE) {
-		type = camel_type_register (
-			CAMEL_DATA_WRAPPER_TYPE,
-			"CamelImapWrapper",
-			sizeof (CamelImapWrapper),
-			sizeof (CamelImapWrapperClass),
-			(CamelObjectClassInitFunc) camel_imap_wrapper_class_init,
-			NULL,
-			(CamelObjectInitFunc) camel_imap_wrapper_init,
-			(CamelObjectFinalizeFunc) camel_imap_wrapper_finalize);
-	}
-
-	return type;
-}
-
-static void
-imap_wrapper_hydrate (CamelImapWrapper *imap_wrapper, CamelStream *stream)
-{
-	CamelDataWrapper *data_wrapper = (CamelDataWrapper *) imap_wrapper;
-
-	data_wrapper->stream = camel_object_ref (stream);
-	data_wrapper->offline = FALSE;
-
-	camel_object_unref (imap_wrapper->folder);
-	imap_wrapper->folder = NULL;
-	g_free (imap_wrapper->uid);
-	imap_wrapper->uid = NULL;
-	g_free (imap_wrapper->part_spec);
-	imap_wrapper->part = NULL;
-}
-
 static gssize
-write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
+imap_wrapper_write_to_stream (CamelDataWrapper *data_wrapper,
+                              CamelStream *stream)
 {
 	CamelImapWrapper *imap_wrapper = CAMEL_IMAP_WRAPPER (data_wrapper);
 
@@ -151,7 +107,46 @@ write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
 	}
 	CAMEL_IMAP_WRAPPER_UNLOCK (imap_wrapper, lock);
 
-	return parent_class->write_to_stream (data_wrapper, stream);
+	return CAMEL_DATA_WRAPPER_CLASS (camel_imap_wrapper_parent_class)->
+		write_to_stream (data_wrapper, stream);
+}
+
+static void
+camel_imap_wrapper_class_init (CamelImapWrapperClass *class)
+{
+	CamelDataWrapperClass *data_wrapper_class;
+
+	camel_imap_wrapper_parent_class = CAMEL_DATA_WRAPPER_CLASS (camel_type_get_global_classfuncs (camel_data_wrapper_get_type ()));
+
+	data_wrapper_class = CAMEL_DATA_WRAPPER_CLASS (class);
+	data_wrapper_class->write_to_stream = imap_wrapper_write_to_stream;
+}
+
+static void
+camel_imap_wrapper_init (CamelImapWrapper *imap_wrapper)
+{
+	imap_wrapper->priv = g_new0 (CamelImapWrapperPrivate, 1);
+	imap_wrapper->priv->lock = g_mutex_new ();
+}
+
+CamelType
+camel_imap_wrapper_get_type (void)
+{
+	static CamelType type = CAMEL_INVALID_TYPE;
+
+	if (type == CAMEL_INVALID_TYPE) {
+		type = camel_type_register (
+			CAMEL_DATA_WRAPPER_TYPE,
+			"CamelImapWrapper",
+			sizeof (CamelImapWrapper),
+			sizeof (CamelImapWrapperClass),
+			(CamelObjectClassInitFunc) camel_imap_wrapper_class_init,
+			NULL,
+			(CamelObjectInitFunc) camel_imap_wrapper_init,
+			(CamelObjectFinalizeFunc) imap_wrapper_finalize);
+	}
+
+	return type;
 }
 
 CamelDataWrapper *
@@ -161,14 +156,15 @@ camel_imap_wrapper_new (CamelImapFolder *imap_folder,
 			CamelMimePart *part)
 {
 	CamelImapWrapper *imap_wrapper;
-	CamelStore *store = (((CamelFolder *) imap_folder)->parent_store);
+	CamelStore *store;
 	CamelStream *stream;
 	gboolean sync_offline = FALSE;
 
+	store = CAMEL_FOLDER (imap_folder)->parent_store;
 	sync_offline = (camel_url_get_param (((CamelService *) store)->url, "sync_offline") != NULL ||
 					((CamelOfflineFolder *)imap_folder)->sync_offline);
 
-	imap_wrapper = (CamelImapWrapper *)camel_object_new(camel_imap_wrapper_get_type());
+	imap_wrapper = (CamelImapWrapper *)camel_object_new (camel_imap_wrapper_get_type());
 	camel_data_wrapper_set_mime_type_field (CAMEL_DATA_WRAPPER (imap_wrapper), type);
 	((CamelDataWrapper *)imap_wrapper)->offline = !sync_offline;
 	((CamelDataWrapper *)imap_wrapper)->encoding = encoding;
diff --git a/camel/providers/imap/camel-imap-wrapper.h b/camel/providers/imap/camel-imap-wrapper.h
index af81882..dd9dc42 100644
--- a/camel/providers/imap/camel-imap-wrapper.h
+++ b/camel/providers/imap/camel-imap-wrapper.h
@@ -49,7 +49,6 @@ struct _CamelImapWrapperClass {
 	CamelDataWrapperClass parent_class;
 };
 
-/* Standard Camel function */
 CamelType camel_imap_wrapper_get_type (void);
 
 /* Constructor */
diff --git a/camel/providers/imapx/camel-imapx-folder.c b/camel/providers/imapx/camel-imapx-folder.c
index 2f6d36f..d5ac1cf 100644
--- a/camel/providers/imapx/camel-imapx-folder.c
+++ b/camel/providers/imapx/camel-imapx-folder.c
@@ -109,40 +109,43 @@ camel_imapx_folder_new(CamelStore *store, const gchar *folder_dir, const gchar *
 	return folder;
 }
 
-static void
+static gboolean
 imapx_refresh_info (CamelFolder *folder, CamelException *ex)
 {
 	CamelIMAPXStore *istore = (CamelIMAPXStore *)folder->parent_store;
 
 	if (CAMEL_OFFLINE_STORE (istore)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL)
-		return;
+		return TRUE;
 
 	camel_service_connect((CamelService *)istore, ex);
 	if (istore->server && camel_imapx_server_connect (istore->server, TRUE, ex))
 		camel_imapx_server_refresh_info(istore->server, folder, ex);
+
+	return !camel_exception_is_set (ex);
 }
 
-static void
+static gboolean
 imapx_expunge (CamelFolder *folder, CamelException *ex)
 {
 	CamelIMAPXStore *is = (CamelIMAPXStore *)folder->parent_store;
 
 	if (CAMEL_OFFLINE_STORE (is)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL)
-		return;
+		return TRUE;
 
 	if (is->server && camel_imapx_server_connect (is->server, TRUE, ex))
 		camel_imapx_server_expunge(is->server, folder, ex);
 
+	return !camel_exception_is_set (ex);
 }
 
-static void
+static gboolean
 imapx_sync (CamelFolder *folder, gboolean expunge, CamelException *ex)
 {
 	CamelIMAPXStore *is = (CamelIMAPXStore *)folder->parent_store;
 	CamelException eex = CAMEL_EXCEPTION_INITIALISER;
 
 	if (CAMEL_OFFLINE_STORE (is)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL)
-		return;
+		return TRUE;
 
 	if (!ex)
 		ex = &eex;
@@ -158,6 +161,8 @@ imapx_sync (CamelFolder *folder, gboolean expunge, CamelException *ex)
 		camel_imapx_server_expunge(is->server, folder, ex);
 		camel_exception_clear(ex);
 	}
+
+	return !camel_exception_is_set (ex);
 }
 
 static CamelMimeMessage *
@@ -210,19 +215,21 @@ imapx_get_message (CamelFolder *folder, const gchar *uid, CamelException *ex)
 	return msg;
 }
 
-static void
+static gboolean
 imapx_sync_message (CamelFolder *folder, const gchar *uid, CamelException *ex)
 {
 	CamelIMAPXStore *istore = (CamelIMAPXStore *)folder->parent_store;
 
 	if (CAMEL_OFFLINE_STORE (istore)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL)
-		return;
+		return TRUE;
 
 	if (istore->server && camel_imapx_server_connect (istore->server, TRUE, ex))
 		camel_imapx_server_sync_message (istore->server, folder, uid, ex);
+
+	return !camel_exception_is_set (ex);
 }
 
-static void
+static gboolean
 imapx_transfer_messages_to (CamelFolder *source, GPtrArray *uids,
 		      CamelFolder *dest, GPtrArray **transferred_uids,
 		      gboolean delete_originals, CamelException *ex)
@@ -230,27 +237,31 @@ imapx_transfer_messages_to (CamelFolder *source, GPtrArray *uids,
 	CamelIMAPXStore *istore = (CamelIMAPXStore *) source->parent_store;
 
 	if (CAMEL_OFFLINE_STORE (istore)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL)
-		return;
+		return TRUE;
 
 	if (istore->server && camel_imapx_server_connect (istore->server, TRUE, ex))
 		camel_imapx_server_copy_message (istore->server, source, dest, uids, delete_originals, ex);
 
 	imapx_refresh_info (dest, ex);
+
+	return !camel_exception_is_set (ex);
 }
 
-static void
+static gboolean
 imapx_append_message(CamelFolder *folder, CamelMimeMessage *message, const CamelMessageInfo *info, gchar **appended_uid, CamelException *ex)
 {
 	CamelIMAPXStore *istore = (CamelIMAPXStore *)folder->parent_store;
 
 	if (CAMEL_OFFLINE_STORE (istore)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL)
-		return;
+		return TRUE;
 
 	if (appended_uid)
 		*appended_uid = NULL;
 
 	if (istore->server && camel_imapx_server_connect (istore->server, TRUE, ex))
 		camel_imapx_server_append_message(istore->server, folder, message, info, ex);
+
+	return !camel_exception_is_set (ex);
 }
 
 gchar *
diff --git a/camel/providers/imapx/camel-imapx-store.c b/camel/providers/imapx/camel-imapx-store.c
index 5f8c772..7848be5 100644
--- a/camel/providers/imapx/camel-imapx-store.c
+++ b/camel/providers/imapx/camel-imapx-store.c
@@ -109,15 +109,14 @@ imapx_parse_receiving_options (CamelIMAPXStore *istore, CamelURL *url)
 		istore->rec_options |= IMAPX_USE_IDLE;
 }
 
-static void
+static gboolean
 imapx_construct(CamelService *service, CamelSession *session, CamelProvider *provider, CamelURL *url, CamelException *ex)
 {
 	gchar *summary;
 	CamelIMAPXStore *store = (CamelIMAPXStore *)service;
 
-	CAMEL_SERVICE_CLASS (parent_class)->construct (service, session, provider, url, ex);
-	if (camel_exception_is_set(ex))
-		return;
+	if (!CAMEL_SERVICE_CLASS (parent_class)->construct (service, session, provider, url, ex))
+		return FALSE;
 
 	store->base_url = camel_url_to_string (service->url, (CAMEL_URL_HIDE_PASSWORD |
 								   CAMEL_URL_HIDE_PARAMS |
@@ -126,13 +125,17 @@ imapx_construct(CamelService *service, CamelSession *session, CamelProvider *pro
 
 	store->summary = camel_imapx_store_summary_new();
 	store->storage_path = camel_session_get_storage_path(session, service, ex);
-	if (store->storage_path) {
-		summary = g_build_filename(store->storage_path, ".ev-store-summary", NULL);
-		camel_store_summary_set_filename((CamelStoreSummary *)store->summary, summary);
-		/* FIXME: need to remove params, passwords, etc */
-		camel_store_summary_set_uri_base((CamelStoreSummary *)store->summary, service->url);
-		camel_store_summary_load((CamelStoreSummary *)store->summary);
-	}
+
+	if (store->storage_path == NULL)
+		return FALSE;
+
+	summary = g_build_filename(store->storage_path, ".ev-store-summary", NULL);
+	camel_store_summary_set_filename((CamelStoreSummary *)store->summary, summary);
+	/* FIXME: need to remove params, passwords, etc */
+	camel_store_summary_set_uri_base((CamelStoreSummary *)store->summary, service->url);
+	camel_store_summary_load((CamelStoreSummary *)store->summary);
+
+	return TRUE;
 }
 
 extern CamelServiceAuthType camel_imapx_password_authtype;
@@ -246,16 +249,22 @@ imapx_get_trash (CamelStore *store, CamelException *ex)
 	return folder;
 }
 
-static void
+static gboolean
 imapx_noop (CamelStore *store, CamelException *ex)
 {
 	CamelIMAPXStore *istore = (CamelIMAPXStore *) store;
 
 	if (CAMEL_OFFLINE_STORE(store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL)
-		return;
+		return TRUE;
+
+	if (istore->server) {
+		if (!camel_imapx_server_connect (istore->server, TRUE, ex))
+			return FALSE;
 
-	if (istore->server && camel_imapx_server_connect (istore->server, TRUE, ex))
 		camel_imapx_server_noop (istore->server, NULL, ex);
+	}
+
+	return TRUE;
 }
 
 static guint
@@ -507,43 +516,51 @@ imapx_mark_folder_subscribed (CamelIMAPXStore *istore, const gchar *folder_name,
 	}
 }
 
-static void
+static gboolean
 imapx_subscribe_folder (CamelStore *store, const gchar *folder_name, gboolean emit_signal, CamelException *ex)
 {
 	CamelIMAPXStore *istore = (CamelIMAPXStore *) store;
 
 	if (CAMEL_OFFLINE_STORE(store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL)
-		return;
+		return TRUE;
 
 	if (istore->server && camel_imapx_server_connect (istore->server, TRUE, ex))
 		camel_imapx_server_manage_subscription (istore->server, folder_name, TRUE, ex);
 
-	if (!camel_exception_is_set (ex))
+	if (!camel_exception_is_set (ex)) {
 		imapx_mark_folder_subscribed (istore, folder_name, emit_signal, ex);
+		return TRUE;
+	}
+
+	return FALSE;
 }
 
-static void
+static gboolean
 imapx_unsubscribe_folder (CamelStore *store, const gchar *folder_name, gboolean emit_signal, CamelException *ex)
 {
 	CamelIMAPXStore *istore = (CamelIMAPXStore *) store;
 
 	if (CAMEL_OFFLINE_STORE(store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL)
-		return;
+		return TRUE;
 
 	if (istore->server && camel_imapx_server_connect (istore->server, TRUE, ex))
 		camel_imapx_server_manage_subscription (istore->server, folder_name, FALSE, ex);
 	
-	if (!camel_exception_is_set (ex))
+	if (!camel_exception_is_set (ex)) {
 		imapx_unmark_folder_subscribed (istore, folder_name, emit_signal, ex);
+		return TRUE;
+	}
+
+	return FALSE;
 }
 
-static void
+static gboolean
 imapx_store_subscribe_folder (CamelStore *store, const gchar *folder_name, CamelException *ex)
 {
-	imapx_subscribe_folder (store, folder_name, TRUE, ex);
+	return imapx_subscribe_folder (store, folder_name, TRUE, ex);
 }
 
-static void
+static gboolean
 imapx_store_unsubscribe_folder (CamelStore *store, const gchar *folder_name, CamelException *ex)
 {
 	CamelException eex = CAMEL_EXCEPTION_INITIALISER;
@@ -551,7 +568,7 @@ imapx_store_unsubscribe_folder (CamelStore *store, const gchar *folder_name, Cam
 	if (!ex)
 		ex = &eex;
 
-	imapx_unsubscribe_folder (store, folder_name, TRUE, ex);
+	return imapx_unsubscribe_folder (store, folder_name, TRUE, ex);
 }
 
 static void
@@ -593,7 +610,7 @@ imapx_delete_folder_from_cache (CamelIMAPXStore *istore, const gchar *folder_nam
 	camel_folder_info_free (fi);
 }
 
-static void
+static gboolean
 imapx_delete_folder (CamelStore *store, const gchar *folder_name, CamelException *ex)
 {
 	CamelIMAPXStore *istore = (CamelIMAPXStore *) store;
@@ -601,14 +618,18 @@ imapx_delete_folder (CamelStore *store, const gchar *folder_name, CamelException
 	if (CAMEL_OFFLINE_STORE (store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) {
 		camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
 				     _("You must be working online to complete this operation"));
-		return;
+		return FALSE;
 	}
 
 	if (istore->server && camel_imapx_server_connect (istore->server, TRUE, ex))
 		camel_imapx_server_delete_folder (istore->server, folder_name, ex);
 
-	if (!camel_exception_is_set (ex))
+	if (!camel_exception_is_set (ex)) {
 		imapx_delete_folder_from_cache (istore, folder_name, ex);
+		return FALSE;
+	}
+
+	return TRUE;
 }
 
 
@@ -651,7 +672,7 @@ rename_folder_info (CamelIMAPXStore *istore, const gchar *old_name, const gchar
 	}
 }
 
-static void
+static gboolean
 imapx_rename_folder (CamelStore *store, const gchar *old, const gchar *new, CamelException *ex)
 {
 	CamelIMAPXStore *istore = (CamelIMAPXStore *) store;
@@ -661,7 +682,7 @@ imapx_rename_folder (CamelStore *store, const gchar *old, const gchar *new, Came
 	if (CAMEL_OFFLINE_STORE (store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) {
 		camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
 				     _("You must be working online to complete this operation"));
-		return;
+		return FALSE;
 	}
 
 	if (istore->rec_options & IMAPX_SUBSCRIPTIONS)
@@ -672,7 +693,7 @@ imapx_rename_folder (CamelStore *store, const gchar *old, const gchar *new, Came
 
 	if (camel_exception_is_set (ex)) {
 		imapx_subscribe_folder (store, old, FALSE, ex);
-		return;
+		return FALSE;
 	}
 
 	/* rename summary, and handle broken server */
@@ -694,6 +715,8 @@ imapx_rename_folder (CamelStore *store, const gchar *old, const gchar *new, Came
 
 	g_free (oldpath);
 	g_free (newpath);
+
+	return !camel_exception_is_set (ex);
 }
 
 static CamelFolderInfo *
diff --git a/camel/providers/local/camel-local-folder.c b/camel/providers/local/camel-local-folder.c
index bc5b84f..c039f3c 100644
--- a/camel/providers/local/camel-local-folder.c
+++ b/camel/providers/local/camel-local-folder.c
@@ -33,7 +33,6 @@
 #include <sys/stat.h>
 #include <sys/types.h>
 
-#include <glib.h>
 #include <glib/gi18n-lib.h>
 #include <glib/gstdio.h>
 
@@ -52,24 +51,19 @@
 #define PATH_MAX _POSIX_PATH_MAX
 #endif
 
-static CamelFolderClass *parent_class;
+static gpointer camel_local_folder_parent_class;
 static GSList *local_folder_properties;
 
-/* Returns the class for a CamelLocalFolder */
-#define CLOCALF_CLASS(so) CAMEL_LOCAL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CLOCALS_CLASS(so) CAMEL_STORE_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-
 static gint local_getv(CamelObject *object, CamelException *ex, CamelArgGetV *args);
 static gint local_setv(CamelObject *object, CamelException *ex, CamelArgV *args);
 
 static gint local_lock(CamelLocalFolder *lf, CamelLockType type, CamelException *ex);
 static void local_unlock(CamelLocalFolder *lf);
 
-static void local_refresh_info(CamelFolder *folder, CamelException *ex);
+static gboolean local_refresh_info(CamelFolder *folder, CamelException *ex);
 
-static void local_sync(CamelFolder *folder, gboolean expunge, CamelException *ex);
-static void local_expunge(CamelFolder *folder, CamelException *ex);
+static gboolean local_sync(CamelFolder *folder, gboolean expunge, CamelException *ex);
+static gboolean local_expunge(CamelFolder *folder, CamelException *ex);
 
 static GPtrArray *local_search_by_expression(CamelFolder *folder, const gchar *expression, CamelException *ex);
 static guint32 local_count_by_expression(CamelFolder *folder, const gchar *expression, CamelException *ex);
@@ -80,42 +74,87 @@ static GPtrArray * local_get_uncached_uids (CamelFolder *folder, GPtrArray * uid
 static void local_delete(CamelFolder *folder);
 static void local_rename(CamelFolder *folder, const gchar *newname);
 
-static void local_finalize(CamelObject * object);
+static CamelProperty local_property_list[] = {
+	{ CAMEL_LOCAL_FOLDER_INDEX_BODY, "index_body", N_("Index message body data") },
+};
 
 static void
-camel_local_folder_class_init(CamelLocalFolderClass * camel_local_folder_class)
+local_folder_finalize (CamelLocalFolder *local_folder)
 {
-	CamelFolderClass *camel_folder_class = CAMEL_FOLDER_CLASS(camel_local_folder_class);
-	CamelObjectClass *oklass = (CamelObjectClass *)camel_local_folder_class;
+	CamelFolder *folder = CAMEL_FOLDER (local_folder);
+
+	if (folder->summary) {
+		camel_local_summary_sync (
+			CAMEL_LOCAL_SUMMARY (folder->summary),
+			FALSE, local_folder->changes, NULL);
+		camel_object_unref (folder->summary);
+		folder->summary = NULL;
+	}
+
+	if (local_folder->search)
+		camel_object_unref (local_folder->search);
+
+	if (local_folder->index)
+		camel_object_unref (local_folder->index);
 
-	/* virtual method definition */
+	while (local_folder->locked> 0)
+		camel_local_folder_unlock(local_folder);
 
-	/* virtual method overload */
-	oklass->getv = local_getv;
-	oklass->setv = local_setv;
+	g_free (local_folder->base_path);
+	g_free (local_folder->folder_path);
+	g_free (local_folder->summary_path);
+	g_free (local_folder->index_path);
 
-	camel_folder_class->refresh_info = local_refresh_info;
-	camel_folder_class->sync = local_sync;
-	camel_folder_class->expunge = local_expunge;
-	camel_folder_class->get_uncached_uids = local_get_uncached_uids;
+	camel_folder_change_info_free (local_folder->changes);
 
-	camel_folder_class->search_by_expression = local_search_by_expression;
-	camel_folder_class->count_by_expression = local_count_by_expression;
-	camel_folder_class->search_by_uids = local_search_by_uids;
-	camel_folder_class->search_free = local_search_free;
+	g_mutex_free (local_folder->priv->search_lock);
 
-	camel_folder_class->delete = local_delete;
-	camel_folder_class->rename = local_rename;
+	g_free (local_folder->priv);
+}
 
-	camel_local_folder_class->lock = local_lock;
-	camel_local_folder_class->unlock = local_unlock;
+static void
+camel_local_folder_class_init (CamelLocalFolderClass *class)
+{
+	CamelObjectClass *camel_object_class;
+	CamelFolderClass *folder_class;
+	gint ii;
+
+	camel_local_folder_parent_class = (CamelFolderClass *)camel_folder_get_type();
+
+	camel_object_class = CAMEL_OBJECT_CLASS (class);
+	camel_object_class->getv = local_getv;
+	camel_object_class->setv = local_setv;
+
+	folder_class = CAMEL_FOLDER_CLASS (class);
+	folder_class->refresh_info = local_refresh_info;
+	folder_class->sync = local_sync;
+	folder_class->expunge = local_expunge;
+	folder_class->get_uncached_uids = local_get_uncached_uids;
+	folder_class->search_by_expression = local_search_by_expression;
+	folder_class->count_by_expression = local_count_by_expression;
+	folder_class->search_by_uids = local_search_by_uids;
+	folder_class->search_free = local_search_free;
+	folder_class->delete = local_delete;
+	folder_class->rename = local_rename;
+
+	class->lock = local_lock;
+	class->unlock = local_unlock;
+
+	for (ii = 0; ii < G_N_ELEMENTS (local_property_list); ii++) {
+		local_property_list[ii].description =
+			_(local_property_list[ii].description);
+		local_folder_properties = g_slist_prepend (
+			local_folder_properties, &local_property_list[ii]);
+	}
 }
 
 static void
-local_init(gpointer object, gpointer klass)
+camel_local_folder_init (CamelLocalFolder *local_folder)
 {
-	CamelFolder *folder = object;
-	CamelLocalFolder *local_folder = object;
+	CamelFolder *folder = CAMEL_FOLDER (local_folder);
+
+	local_folder->priv = g_new0 (CamelLocalFolderPrivate, 1);
+	local_folder->priv->search_lock = g_mutex_new();
 
 	folder->folder_flags |= (CAMEL_FOLDER_HAS_SUMMARY_CAPABILITY |
 				 CAMEL_FOLDER_HAS_SEARCH_CAPABILITY);
@@ -127,69 +166,21 @@ local_init(gpointer object, gpointer klass)
 
 	folder->summary = NULL;
 	local_folder->search = NULL;
-
-	local_folder->priv = g_malloc0(sizeof(*local_folder->priv));
-	local_folder->priv->search_lock = g_mutex_new();
 }
 
-static void
-local_finalize(CamelObject * object)
-{
-	CamelLocalFolder *local_folder = CAMEL_LOCAL_FOLDER(object);
-	CamelFolder *folder = (CamelFolder *)object;
-
-	if (folder->summary) {
-		camel_local_summary_sync((CamelLocalSummary *)folder->summary, FALSE, local_folder->changes, NULL);
-		camel_object_unref (folder->summary);
-		folder->summary = NULL;
-	}
-
-	if (local_folder->search)
-		camel_object_unref (local_folder->search);
-
-	if (local_folder->index)
-		camel_object_unref (local_folder->index);
-
-	while (local_folder->locked> 0)
-		camel_local_folder_unlock(local_folder);
-
-	g_free(local_folder->base_path);
-	g_free(local_folder->folder_path);
-	g_free(local_folder->summary_path);
-	g_free(local_folder->index_path);
-
-	camel_folder_change_info_free(local_folder->changes);
-
-	g_mutex_free(local_folder->priv->search_lock);
-
-	g_free(local_folder->priv);
-}
-
-static CamelProperty local_property_list[] = {
-	{ CAMEL_LOCAL_FOLDER_INDEX_BODY, "index_body", N_("Index message body data") },
-};
-
 CamelType
 camel_local_folder_get_type(void)
 {
 	static CamelType camel_local_folder_type = CAMEL_INVALID_TYPE;
 
 	if (camel_local_folder_type == CAMEL_INVALID_TYPE) {
-		gint i;
-
-		parent_class = (CamelFolderClass *)camel_folder_get_type();
 		camel_local_folder_type = camel_type_register(camel_folder_get_type(), "CamelLocalFolder",
 							     sizeof(CamelLocalFolder),
 							     sizeof(CamelLocalFolderClass),
 							     (CamelObjectClassInitFunc) camel_local_folder_class_init,
 							     NULL,
-							     (CamelObjectInitFunc) local_init,
-							     (CamelObjectFinalizeFunc) local_finalize);
-
-		for (i = 0; i < G_N_ELEMENTS (local_property_list); i++) {
-			local_property_list[i].description = _(local_property_list[i].description);
-			local_folder_properties = g_slist_prepend(local_folder_properties, &local_property_list[i]);
-		}
+							     (CamelObjectInitFunc) camel_local_folder_init,
+							     (CamelObjectFinalizeFunc) local_folder_finalize);
 	}
 
 	return camel_local_folder_type;
@@ -281,7 +272,7 @@ camel_local_folder_construct(CamelLocalFolder *lf, CamelStore *parent_store, con
 		forceindex = FALSE;
 	}
 
-	folder->summary = (CamelFolderSummary *)CLOCALF_CLASS(lf)->create_summary(lf, lf->summary_path, lf->folder_path, lf->index);
+	folder->summary = (CamelFolderSummary *)CAMEL_LOCAL_FOLDER_GET_CLASS(lf)->create_summary(lf, lf->summary_path, lf->folder_path, lf->index);
 	if (!(flags & CAMEL_STORE_IS_MIGRATING) && camel_local_summary_load((CamelLocalSummary *)folder->summary, forceindex, NULL) == -1) {
 		/* ? */
 		if (camel_local_summary_check((CamelLocalSummary *)folder->summary, lf->changes, ex) == 0) {
@@ -334,7 +325,7 @@ gint camel_local_folder_lock(CamelLocalFolder *lf, CamelLockType type, CamelExce
 		/* lets be anal here - its important the code knows what its doing */
 		g_assert(lf->locktype == type || lf->locktype == CAMEL_LOCK_WRITE);
 	} else {
-		if (CLOCALF_CLASS(lf)->lock(lf, type, ex) == -1)
+		if (CAMEL_LOCAL_FOLDER_GET_CLASS(lf)->lock(lf, type, ex) == -1)
 			return -1;
 		lf->locktype = type;
 	}
@@ -350,7 +341,7 @@ gint camel_local_folder_unlock(CamelLocalFolder *lf)
 	g_assert(lf->locked>0);
 	lf->locked--;
 	if (lf->locked == 0)
-		CLOCALF_CLASS(lf)->unlock(lf);
+		CAMEL_LOCAL_FOLDER_GET_CLASS(lf)->unlock(lf);
 
 	return 0;
 }
@@ -415,7 +406,7 @@ local_getv(CamelObject *object, CamelException *ex, CamelArgGetV *args)
 
 			props.argc = 1;
 			props.argv[0] = *arg;
-			((CamelObjectClass *)parent_class)->getv(object, ex, &props);
+			((CamelObjectClass *)camel_local_folder_parent_class)->getv(object, ex, &props);
 			*arg->ca_ptr = g_slist_concat(*arg->ca_ptr, g_slist_copy(local_folder_properties));
 
 			break; }
@@ -432,7 +423,7 @@ local_getv(CamelObject *object, CamelException *ex, CamelArgGetV *args)
 		arg->tag = (tag & CAMEL_ARG_TYPE) | CAMEL_ARG_IGNORE;
 	}
 
-	return ((CamelObjectClass *)parent_class)->getv(object, ex, args);
+	return ((CamelObjectClass *)camel_local_folder_parent_class)->getv(object, ex, args);
 }
 
 static gint
@@ -463,7 +454,7 @@ local_setv(CamelObject *object, CamelException *ex, CamelArgV *args)
 		arg->tag = (tag & CAMEL_ARG_TYPE) | CAMEL_ARG_IGNORE;
 	}
 
-	return ((CamelObjectClass *)parent_class)->setv(object, ex, args);
+	return ((CamelObjectClass *)camel_local_folder_parent_class)->setv(object, ex, args);
 }
 
 static gint
@@ -479,13 +470,13 @@ local_unlock(CamelLocalFolder *lf)
 }
 
 /* for auto-check to work */
-static void
+static gboolean
 local_refresh_info(CamelFolder *folder, CamelException *ex)
 {
 	CamelLocalFolder *lf = (CamelLocalFolder *)folder;
 
 	if (camel_local_summary_check((CamelLocalSummary *)folder->summary, lf->changes, ex) == -1) {
-		return;
+		return FALSE;
 	}
 
 	if (camel_folder_change_info_changed(lf->changes)) {
@@ -493,6 +484,7 @@ local_refresh_info(CamelFolder *folder, CamelException *ex)
 		camel_folder_change_info_clear(lf->changes);
 	}
 
+	return TRUE;
 }
 
 static GPtrArray *
@@ -503,7 +495,7 @@ local_get_uncached_uids (CamelFolder *folder, GPtrArray * uids, CamelException *
 	return result;
 }
 
-static void
+static gboolean
 local_sync(CamelFolder *folder, gboolean expunge, CamelException *ex)
 {
 	CamelLocalFolder *lf = CAMEL_LOCAL_FOLDER(folder);
@@ -511,7 +503,7 @@ local_sync(CamelFolder *folder, gboolean expunge, CamelException *ex)
 	d(printf("local sync '%s' , expunge=%s\n", folder->full_name, expunge?"true":"false"));
 
 	if (camel_local_folder_lock(lf, CAMEL_LOCK_WRITE, ex) == -1)
-		return;
+		return FALSE;
 
 	camel_object_state_write(lf);
 
@@ -523,16 +515,18 @@ local_sync(CamelFolder *folder, gboolean expunge, CamelException *ex)
 		camel_object_trigger_event(CAMEL_OBJECT(folder), "folder_changed", lf->changes);
 		camel_folder_change_info_clear(lf->changes);
 	}
+
+	return TRUE;
 }
 
-static void
+static gboolean
 local_expunge(CamelFolder *folder, CamelException *ex)
 {
 	d(printf("expunge\n"));
 
 	/* Just do a sync with expunge, serves the same purpose */
 	/* call the callback directly, to avoid locking problems */
-	CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(folder))->sync(folder, TRUE, ex);
+	return CAMEL_FOLDER_GET_CLASS (folder)->sync (folder, TRUE, ex);
 }
 
 static void
@@ -543,7 +537,7 @@ local_delete(CamelFolder *folder)
 	if (lf->index)
 		camel_index_delete(lf->index);
 
-	parent_class->delete(folder);
+	CAMEL_FOLDER_CLASS (camel_local_folder_parent_class)->delete (folder);
 }
 
 static void
@@ -573,7 +567,7 @@ local_rename(CamelFolder *folder, const gchar *newname)
 	g_free(((CamelLocalSummary *)folder->summary)->folder_path);
 	((CamelLocalSummary *)folder->summary)->folder_path = g_strdup(lf->folder_path);
 
-	parent_class->rename(folder, newname);
+	CAMEL_FOLDER_CLASS (camel_local_folder_parent_class)->rename (folder, newname);
 }
 
 static GPtrArray *
diff --git a/camel/providers/local/camel-local-folder.h b/camel/providers/local/camel-local-folder.h
index 5bbdbdc..84e379e 100644
--- a/camel/providers/local/camel-local-folder.h
+++ b/camel/providers/local/camel-local-folder.h
@@ -26,12 +26,12 @@
 
 #include "camel-local-summary.h"
 
-/*  #include "camel-store.h" */
-
 #define CAMEL_LOCAL_FOLDER_TYPE     (camel_local_folder_get_type ())
 #define CAMEL_LOCAL_FOLDER(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_LOCAL_FOLDER_TYPE, CamelLocalFolder))
 #define CAMEL_LOCAL_FOLDER_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_LOCAL_FOLDER_TYPE, CamelLocalFolderClass))
 #define CAMEL_IS_LOCAL_FOLDER(o)    (CAMEL_CHECK_TYPE((o), CAMEL_LOCAL_FOLDER_TYPE))
+#define CAMEL_LOCAL_FOLDER_GET_CLASS(obj) \
+	((CamelLocalFolderClass *) CAMEL_OBJECT_GET_CLASS (obj))
 
 G_BEGIN_DECLS
 
diff --git a/camel/providers/local/camel-local-provider.c b/camel/providers/local/camel-local-provider.c
index d26734c..d364f11 100644
--- a/camel/providers/local/camel-local-provider.c
+++ b/camel/providers/local/camel-local-provider.c
@@ -207,7 +207,8 @@ local_url_equal(gconstpointer v, gconstpointer v2)
 		&& check_equal(u1->protocol, u2->protocol);
 }
 
-void camel_provider_module_init(void)
+void
+camel_provider_module_init(void)
 {
 #ifndef G_OS_WIN32
 	gchar *path;
@@ -234,7 +235,7 @@ void camel_provider_module_init(void)
 #else
 	mbox_conf_entries[0].value = "";  /* default path */
 #endif
-	mbox_provider.object_types[CAMEL_PROVIDER_STORE] = camel_mbox_store_get_type ();
+	mbox_provider.object_types[CAMEL_PROVIDER_STORE] = CAMEL_MBOX_STORE_TYPE;
 	mbox_provider.url_hash = local_url_hash;
 	mbox_provider.url_equal = local_url_equal;
 	mbox_provider.translation_domain = GETTEXT_PACKAGE;
diff --git a/camel/providers/local/camel-local-store.c b/camel/providers/local/camel-local-store.c
index 3ba986b..75963a5 100644
--- a/camel/providers/local/camel-local-store.c
+++ b/camel/providers/local/camel-local-store.c
@@ -29,7 +29,6 @@
 #include <unistd.h>
 #include <sys/stat.h>
 
-#include <glib.h>
 #include <glib/gi18n-lib.h>
 #include <glib/gstdio.h>
 
@@ -38,65 +37,55 @@
 
 #define d(x)
 
-/* Returns the class for a CamelLocalStore */
-#define CLOCALS_CLASS(so) CAMEL_LOCAL_STORE_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-
-static void construct (CamelService *service, CamelSession *session, CamelProvider *provider, CamelURL *url, CamelException *ex);
+static gboolean construct (CamelService *service, CamelSession *session, CamelProvider *provider, CamelURL *url, CamelException *ex);
 static CamelFolder *get_folder(CamelStore * store, const gchar *folder_name, guint32 flags, CamelException * ex);
 static gchar *get_name(CamelService *service, gboolean brief);
 static CamelFolder *local_get_inbox (CamelStore *store, CamelException *ex);
 static CamelFolder *local_get_junk(CamelStore *store, CamelException *ex);
 static CamelFolder *local_get_trash(CamelStore *store, CamelException *ex);
 static CamelFolderInfo *get_folder_info (CamelStore *store, const gchar *top, guint32 flags, CamelException *ex);
-static void delete_folder(CamelStore *store, const gchar *folder_name, CamelException *ex);
-static void rename_folder(CamelStore *store, const gchar *old, const gchar *new, CamelException *ex);
+static gboolean delete_folder(CamelStore *store, const gchar *folder_name, CamelException *ex);
+static gboolean rename_folder(CamelStore *store, const gchar *old, const gchar *new, CamelException *ex);
 static CamelFolderInfo *create_folder(CamelStore *store, const gchar *parent_name, const gchar *folder_name, CamelException *ex);
 static gboolean local_can_refresh_folder (CamelStore *store, CamelFolderInfo *info, CamelException *ex);
 
 static gchar *local_get_full_path(CamelLocalStore *lf, const gchar *full_name);
 static gchar *local_get_meta_path(CamelLocalStore *lf, const gchar *full_name, const gchar *ext);
 
-static CamelStoreClass *parent_class = NULL;
+static gpointer camel_local_store_parent_class;
 
 static void
-camel_local_store_class_init (CamelLocalStoreClass *camel_local_store_class)
+local_store_finalize (CamelLocalStore *local_store)
 {
-	CamelStoreClass *camel_store_class = CAMEL_STORE_CLASS (camel_local_store_class);
-	CamelServiceClass *camel_service_class = CAMEL_SERVICE_CLASS (camel_local_store_class);
-
-	parent_class = CAMEL_STORE_CLASS (camel_type_get_global_classfuncs (camel_store_get_type ()));
-
-	/* virtual method overload */
-	camel_service_class->construct = construct;
-	camel_service_class->get_name = get_name;
-	camel_store_class->get_folder = get_folder;
-	camel_store_class->get_inbox = local_get_inbox;
-	camel_store_class->get_trash = local_get_trash;
-	camel_store_class->get_junk = local_get_junk;
-	camel_store_class->get_folder_info = get_folder_info;
-	camel_store_class->free_folder_info = camel_store_free_folder_info_full;
-
-	camel_store_class->create_folder = create_folder;
-	camel_store_class->delete_folder = delete_folder;
-	camel_store_class->rename_folder = rename_folder;
-	camel_store_class->can_refresh_folder = local_can_refresh_folder;
-
-	camel_local_store_class->get_full_path = local_get_full_path;
-	camel_local_store_class->get_meta_path = local_get_meta_path;
+	g_free (local_store->toplevel_dir);
 }
 
 static void
-camel_local_store_finalize (CamelLocalStore *local_store)
+camel_local_store_class_init (CamelLocalStoreClass *class)
 {
-	CamelStore *store;
-
-	if (local_store->toplevel_dir)
-		g_free (local_store->toplevel_dir);
-
-	store = ((CamelStore *)local_store);
-	d(printf ("\n\aLocal Store Finalize \n\a"));
-
+	CamelServiceClass *service_class;
+	CamelStoreClass *store_class;
+
+	camel_local_store_parent_class = CAMEL_STORE_CLASS (camel_type_get_global_classfuncs (camel_store_get_type ()));
+
+	service_class = CAMEL_SERVICE_CLASS (class);
+	service_class->construct = construct;
+	service_class->get_name = get_name;
+
+	store_class = CAMEL_STORE_CLASS (class);
+	store_class->get_folder = get_folder;
+	store_class->get_inbox = local_get_inbox;
+	store_class->get_trash = local_get_trash;
+	store_class->get_junk = local_get_junk;
+	store_class->get_folder_info = get_folder_info;
+	store_class->free_folder_info = camel_store_free_folder_info_full;
+	store_class->create_folder = create_folder;
+	store_class->delete_folder = delete_folder;
+	store_class->rename_folder = rename_folder;
+	store_class->can_refresh_folder = local_can_refresh_folder;
+
+	class->get_full_path = local_get_full_path;
+	class->get_meta_path = local_get_meta_path;
 }
 
 CamelType
@@ -111,27 +100,35 @@ camel_local_store_get_type (void)
 							     (CamelObjectClassInitFunc) camel_local_store_class_init,
 							     NULL,
 							     NULL,
-							     (CamelObjectFinalizeFunc) camel_local_store_finalize);
+							     (CamelObjectFinalizeFunc) local_store_finalize);
 	}
 
 	return camel_local_store_type;
 }
 
-static void
-construct (CamelService *service, CamelSession *session, CamelProvider *provider, CamelURL *url, CamelException *ex)
+static gboolean
+construct (CamelService *service,
+           CamelSession *session,
+           CamelProvider *provider,
+           CamelURL *url,
+           CamelException *ex)
 {
 	CamelLocalStore *local_store = CAMEL_LOCAL_STORE (service);
+	CamelServiceClass *service_class;
 	gint len;
 
-	CAMEL_SERVICE_CLASS (parent_class)->construct (service, session, provider, url, ex);
-	if (camel_exception_is_set (ex))
-		return;
+	/* Chain up to parent's construct() method. */
+	service_class = CAMEL_SERVICE_CLASS (camel_local_store_parent_class);
+	if (!service_class->construct (service, session, provider, url, ex))
+		return FALSE;
 
 	len = strlen (service->url->path);
 	if (!G_IS_DIR_SEPARATOR (service->url->path[len - 1]))
 		local_store->toplevel_dir = g_strdup_printf ("%s/", service->url->path);
 	else
 		local_store->toplevel_dir = g_strdup (service->url->path);
+
+	return TRUE;
 }
 
 const gchar *
@@ -152,15 +149,17 @@ get_folder(CamelStore * store, const gchar *folder_name, guint32 flags, CamelExc
 		path[len-1] = '\0';
 
 	if (!g_path_is_absolute(path)) {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-				     _("Store root %s is not an absolute path"), path);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
+			_("Store root %s is not an absolute path"), path);
 		return NULL;
 	}
 
 	if (g_stat(path, &st) == 0) {
 		if (!S_ISDIR(st.st_mode)) {
-			camel_exception_setv(ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-					     _("Store root %s is not a regular directory"), path);
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
+				_("Store root %s is not a regular directory"), path);
 			return NULL;
 		}
 		return (CamelFolder *) 0xdeadbeef;
@@ -168,17 +167,19 @@ get_folder(CamelStore * store, const gchar *folder_name, guint32 flags, CamelExc
 
 	if (errno != ENOENT
 	    || (flags & CAMEL_STORE_FOLDER_CREATE) == 0) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-				      _("Cannot get folder: %s: %s"),
-				      path, g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
+			_("Cannot get folder: %s: %s"),
+			path, g_strerror (errno));
 		return NULL;
 	}
 
 	/* need to create the dir heirarchy */
 	if (g_mkdir_with_parents (path, 0700) == -1 && errno != EEXIST) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-				      _("Cannot get folder: %s: %s"),
-				      path, g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
+			_("Cannot get folder: %s: %s"),
+			path, g_strerror (errno));
 		return NULL;
 	}
 
@@ -188,15 +189,21 @@ get_folder(CamelStore * store, const gchar *folder_name, guint32 flags, CamelExc
 static CamelFolder *
 local_get_inbox(CamelStore *store, CamelException *ex)
 {
-	camel_exception_set(ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-			    _("Local stores do not have an inbox"));
+	camel_exception_set (
+		ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
+		_("Local stores do not have an inbox"));
+
 	return NULL;
 }
 
 static CamelFolder *
-local_get_trash(CamelStore *store, CamelException *ex)
+local_get_trash (CamelStore *store,
+                 CamelException *ex)
 {
-	CamelFolder *folder = CAMEL_STORE_CLASS(parent_class)->get_trash(store, ex);
+	CamelFolder *folder;
+
+	/* Chain up to parent's get_trash() method. */
+	folder = CAMEL_STORE_CLASS (camel_local_store_parent_class)->get_trash (store, ex);
 
 	if (folder) {
 		gchar *state = camel_local_store_get_meta_path(store, CAMEL_VTRASH_NAME, ".cmeta");
@@ -211,9 +218,13 @@ local_get_trash(CamelStore *store, CamelException *ex)
 }
 
 static CamelFolder *
-local_get_junk(CamelStore *store, CamelException *ex)
+local_get_junk (CamelStore *store,
+                CamelException *ex)
 {
-	CamelFolder *folder = CAMEL_STORE_CLASS(parent_class)->get_junk(store, ex);
+	CamelFolder *folder;
+
+	/* Chain up to parent's get_junk() method. */
+	folder = CAMEL_STORE_CLASS (camel_local_store_parent_class)->get_junk (store, ex);
 
 	if (folder) {
 		gchar *state = camel_local_store_get_meta_path(store, CAMEL_VJUNK_NAME, ".cmeta");
@@ -252,7 +263,10 @@ get_folder_info (CamelStore *store, const gchar *top,
 }
 
 static CamelFolderInfo *
-create_folder(CamelStore *store, const gchar *parent_name, const gchar *folder_name, CamelException *ex)
+create_folder (CamelStore *store,
+               const gchar *parent_name,
+               const gchar *folder_name,
+               CamelException *ex)
 {
 	gchar *path = ((CamelLocalStore *)store)->toplevel_dir;
 	gchar *name;
@@ -263,8 +277,9 @@ create_folder(CamelStore *store, const gchar *parent_name, const gchar *folder_n
 	/* This is a pretty hacky version of create folder, but should basically work */
 
 	if (!g_path_is_absolute(path)) {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-				     _("Store root %s is not an absolute path"), path);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
+			_("Store root %s is not an absolute path"), path);
 		return NULL;
 	}
 
@@ -274,9 +289,10 @@ create_folder(CamelStore *store, const gchar *parent_name, const gchar *folder_n
 		name = g_strdup_printf("%s/%s", path, folder_name);
 
 	if (g_stat(name, &st) == 0 || errno != ENOENT) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-				      _("Cannot get folder: %s: %s"),
-				      name, g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
+			_("Cannot get folder: %s: %s"),
+			name, g_strerror (errno));
 		g_free(name);
 		return NULL;
 	}
@@ -288,10 +304,12 @@ create_folder(CamelStore *store, const gchar *parent_name, const gchar *folder_n
 	else
 		name = g_strdup_printf("%s", folder_name);
 
-	folder = ((CamelStoreClass *)((CamelObject *)store)->klass)->get_folder(store, name, CAMEL_STORE_FOLDER_CREATE, ex);
+	folder = CAMEL_STORE_GET_CLASS (store)->get_folder (
+		store, name, CAMEL_STORE_FOLDER_CREATE, ex);
 	if (folder) {
 		camel_object_unref (folder);
-		info = ((CamelStoreClass *)((CamelObject *)store)->klass)->get_folder_info(store, name, 0, ex);
+		info = CAMEL_STORE_GET_CLASS (store)->get_folder_info (
+			store, name, 0, ex);
 
 		/* get_folder(CREATE) will emit a folder_created event for us */
 		/*if (info)
@@ -303,7 +321,13 @@ create_folder(CamelStore *store, const gchar *parent_name, const gchar *folder_n
 	return info;
 }
 
-static gint xrename(const gchar *oldp, const gchar *newp, const gchar *prefix, const gchar *suffix, gint missingok, CamelException *ex)
+static gint
+xrename (const gchar *oldp,
+         const gchar *newp,
+         const gchar *prefix,
+         const gchar *suffix,
+         gint missingok,
+         CamelException *ex)
 {
 	struct stat st;
 	gchar *old = g_strconcat(prefix, oldp, suffix, NULL);
@@ -329,9 +353,10 @@ static gint xrename(const gchar *oldp, const gchar *newp, const gchar *prefix, c
 	}
 
 	if (ret == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Could not rename folder %s to %s: %s"),
-				      old, new, g_strerror (err));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not rename folder %s to %s: %s"),
+			old, new, g_strerror (err));
 	}
 
 	g_free(old);
@@ -340,8 +365,11 @@ static gint xrename(const gchar *oldp, const gchar *newp, const gchar *prefix, c
 }
 
 /* default implementation, rename all */
-static void
-rename_folder(CamelStore *store, const gchar *old, const gchar *new, CamelException *ex)
+static gboolean
+rename_folder(CamelStore *store,
+              const gchar *old,
+              const gchar *new,
+              CamelException *ex)
 {
 	gchar *path = CAMEL_LOCAL_STORE (store)->toplevel_dir;
 	CamelLocalFolder *folder = NULL;
@@ -380,7 +408,7 @@ rename_folder(CamelStore *store, const gchar *old, const gchar *new, CamelExcept
 	if (folder)
 		camel_object_unref (folder);
 
-	return;
+	return TRUE;
 
 	/* The (f)utility of this recovery effort is quesitonable */
 
@@ -397,20 +425,25 @@ summary_failed:
 	} else
 		camel_text_index_rename(newibex, oldibex);
 ibex_failed:
-	camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-			      _("Could not rename '%s': %s"),
-			      old, g_strerror (errno));
+	camel_exception_setv (
+		ex, CAMEL_EXCEPTION_SYSTEM,
+		_("Could not rename '%s': %s"),
+		old, g_strerror (errno));
 
 	g_free(newibex);
 	g_free(oldibex);
 
 	if (folder)
 		camel_object_unref (folder);
+
+	return FALSE;
 }
 
 /* default implementation, only delete metadata */
-static void
-delete_folder(CamelStore *store, const gchar *folder_name, CamelException *ex)
+static gboolean
+delete_folder (CamelStore *store,
+               const gchar *folder_name,
+               CamelException *ex)
 {
 	CamelFolderInfo *fi;
 	CamelException lex;
@@ -422,12 +455,13 @@ delete_folder(CamelStore *store, const gchar *folder_name, CamelException *ex)
 	name = g_strdup_printf("%s%s", CAMEL_LOCAL_STORE(store)->toplevel_dir, folder_name);
 	str = g_strdup_printf("%s.ibex", name);
 	if (camel_text_index_remove(str) == -1 && errno != ENOENT) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Could not delete folder index file '%s': %s"),
-				      str, g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not delete folder index file '%s': %s"),
+			str, g_strerror (errno));
 		g_free(str);
 		g_free (name);
-		return;
+		return FALSE;
 	}
 	g_free(str);
 
@@ -445,12 +479,13 @@ delete_folder(CamelStore *store, const gchar *folder_name, CamelException *ex)
 		str = g_strdup_printf ("%s.cmeta", name);
 
 	if (g_unlink (str) == -1 && errno != ENOENT) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Could not delete folder meta file '%s': %s"),
-				      str, g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not delete folder meta file '%s': %s"),
+			str, g_strerror (errno));
 		g_free (name);
 		g_free (str);
-		return;
+		return FALSE;
 	}
 
 	g_free (str);
@@ -466,6 +501,8 @@ delete_folder(CamelStore *store, const gchar *folder_name, CamelException *ex)
 	camel_object_trigger_event (store, "folder_deleted", fi);
 
 	camel_folder_info_free (fi);
+
+	return TRUE;
 }
 
 static gchar *
diff --git a/camel/providers/local/camel-local-store.h b/camel/providers/local/camel-local-store.h
index 612f226..35317ec 100644
--- a/camel/providers/local/camel-local-store.h
+++ b/camel/providers/local/camel-local-store.h
@@ -29,29 +29,37 @@
 #define CAMEL_LOCAL_STORE(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_LOCAL_STORE_TYPE, CamelLocalStore))
 #define CAMEL_LOCAL_STORE_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_LOCAL_STORE_TYPE, CamelLocalStoreClass))
 #define CAMEL_IS_LOCAL_STORE(o)    (CAMEL_CHECK_TYPE((o), CAMEL_LOCAL_STORE_TYPE))
+#define CAMEL_LOCAL_STORE_GET_CLASS(obj) \
+	((CamelLocalStoreClass *) CAMEL_OBJECT_GET_CLASS (obj))
 
 G_BEGIN_DECLS
 
-typedef struct {
+typedef struct _CamelLocalStore CamelLocalStore;
+typedef struct _CamelLocalStoreClass CamelLocalStoreClass;
+
+struct _CamelLocalStore {
 	CamelStore parent;
 
 	gchar *toplevel_dir;
-} CamelLocalStore;
+};
 
-typedef struct {
+struct _CamelLocalStoreClass {
 	CamelStoreClass parent_class;
 
 	gchar *(*get_full_path)(CamelLocalStore *ls, const gchar *full_name);
 	gchar *(*get_meta_path)(CamelLocalStore *ls, const gchar *full_name, const gchar *ext);
-} CamelLocalStoreClass;
+};
 
-/* Standard Camel function */
 CamelType camel_local_store_get_type (void);
 
 const gchar *camel_local_store_get_toplevel_dir (CamelLocalStore *store);
 
-#define camel_local_store_get_full_path(ls, name) ((CamelLocalStoreClass *)((CamelObject *)ls)->klass)->get_full_path((CamelLocalStore *)ls, name)
-#define camel_local_store_get_meta_path(ls, name, ext) ((CamelLocalStoreClass *)((CamelObject *)ls)->klass)->get_meta_path((CamelLocalStore *)ls, name, ext)
+#define camel_local_store_get_full_path(ls, name) \
+	(CAMEL_LOCAL_STORE_GET_CLASS (ls)->get_full_path \
+	(CAMEL_LOCAL_STORE (ls), (name)))
+#define camel_local_store_get_meta_path(ls, name, ext) \
+	(CAMEL_LOCAL_STORE_GET_CLASS (ls)->get_meta_path \
+	(CAMEL_LOCAL_STORE (ls), (name), (ext)))
 
 G_END_DECLS
 
diff --git a/camel/providers/local/camel-local-summary.c b/camel/providers/local/camel-local-summary.c
index ca24529..77af97a 100644
--- a/camel/providers/local/camel-local-summary.c
+++ b/camel/providers/local/camel-local-summary.c
@@ -30,7 +30,6 @@
 #include <sys/stat.h>
 #include <unistd.h>
 
-#include <glib.h>
 #include <glib/gi18n-lib.h>
 #include <glib/gstdio.h>
 
@@ -61,74 +60,68 @@ static gint local_summary_sync(CamelLocalSummary *cls, gboolean expunge, CamelFo
 static CamelMessageInfo *local_summary_add(CamelLocalSummary *cls, CamelMimeMessage *msg, const CamelMessageInfo *info, CamelFolderChangeInfo *, CamelException *ex);
 static gint local_summary_need_index(void);
 
-static void camel_local_summary_class_init (CamelLocalSummaryClass *klass);
-static void camel_local_summary_init       (CamelLocalSummary *obj);
-static void camel_local_summary_finalize   (CamelObject *obj);
-static CamelFolderSummaryClass *camel_local_summary_parent;
+static gpointer camel_local_summary_parent_class;
 
-CamelType
-camel_local_summary_get_type(void)
+static void
+local_summary_finalize (CamelLocalSummary *local_summary)
 {
-	static CamelType type = CAMEL_INVALID_TYPE;
-
-	if (type == CAMEL_INVALID_TYPE) {
-		type = camel_type_register(camel_folder_summary_get_type(), "CamelLocalSummary",
-					   sizeof (CamelLocalSummary),
-					   sizeof (CamelLocalSummaryClass),
-					   (CamelObjectClassInitFunc) camel_local_summary_class_init,
-					   NULL,
-					   (CamelObjectInitFunc) camel_local_summary_init,
-					   (CamelObjectFinalizeFunc) camel_local_summary_finalize);
-	}
-
-	return type;
+	if (local_summary->index)
+		camel_object_unref (local_summary->index);
+	g_free (local_summary->folder_path);
 }
 
 static void
-camel_local_summary_class_init(CamelLocalSummaryClass *klass)
+camel_local_summary_class_init (CamelLocalSummaryClass *class)
 {
-	CamelFolderSummaryClass *sklass = (CamelFolderSummaryClass *) klass;
-
-	camel_local_summary_parent = CAMEL_FOLDER_SUMMARY_CLASS(camel_type_get_global_classfuncs(camel_folder_summary_get_type()));
-
-	sklass->message_info_size = sizeof(CamelLocalMessageInfo);
-	sklass->content_info_size = sizeof(CamelMessageContentInfo);
-
-	sklass->summary_header_load = summary_header_load;
-	sklass->summary_header_save = summary_header_save;
-
-	sklass->summary_header_from_db = summary_header_from_db;
-	sklass->summary_header_to_db = summary_header_to_db;
-
-	sklass->message_info_new_from_header  = message_info_new_from_header;
-
-	klass->load = local_summary_load;
-	klass->check = local_summary_check;
-	klass->sync = local_summary_sync;
-	klass->add = local_summary_add;
-
-	klass->encode_x_evolution = local_summary_encode_x_evolution;
-	klass->decode_x_evolution = local_summary_decode_x_evolution;
-	klass->need_index = local_summary_need_index;
+	CamelFolderSummaryClass *folder_summary_class;
+
+	camel_local_summary_parent_class = CAMEL_FOLDER_SUMMARY_CLASS(camel_type_get_global_classfuncs(camel_folder_summary_get_type()));
+
+	folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (class);
+	folder_summary_class->message_info_size = sizeof (CamelLocalMessageInfo);
+	folder_summary_class->content_info_size = sizeof (CamelMessageContentInfo);
+	folder_summary_class->summary_header_load = summary_header_load;
+	folder_summary_class->summary_header_save = summary_header_save;
+	folder_summary_class->summary_header_from_db = summary_header_from_db;
+	folder_summary_class->summary_header_to_db = summary_header_to_db;
+	folder_summary_class->message_info_new_from_header  = message_info_new_from_header;
+
+	class->load = local_summary_load;
+	class->check = local_summary_check;
+	class->sync = local_summary_sync;
+	class->add = local_summary_add;
+	class->encode_x_evolution = local_summary_encode_x_evolution;
+	class->decode_x_evolution = local_summary_decode_x_evolution;
+	class->need_index = local_summary_need_index;
 }
 
 static void
-camel_local_summary_init(CamelLocalSummary *obj)
+camel_local_summary_init (CamelLocalSummary *local_summary)
 {
-	struct _CamelFolderSummary *s = (CamelFolderSummary *)obj;
+	CamelFolderSummary *folder_summary;
+
+	folder_summary = CAMEL_FOLDER_SUMMARY (local_summary);
 
 	/* and a unique file version */
-	s->version += CAMEL_LOCAL_SUMMARY_VERSION;
+	folder_summary->version += CAMEL_LOCAL_SUMMARY_VERSION;
 }
 
-static void
-camel_local_summary_finalize(CamelObject *obj)
+CamelType
+camel_local_summary_get_type(void)
 {
-	CamelLocalSummary *mbs = CAMEL_LOCAL_SUMMARY(obj);
+	static CamelType type = CAMEL_INVALID_TYPE;
+
+	if (type == CAMEL_INVALID_TYPE) {
+		type = camel_type_register(camel_folder_summary_get_type(), "CamelLocalSummary",
+					   sizeof (CamelLocalSummary),
+					   sizeof (CamelLocalSummaryClass),
+					   (CamelObjectClassInitFunc) camel_local_summary_class_init,
+					   NULL,
+					   (CamelObjectInitFunc) camel_local_summary_init,
+					   (CamelObjectFinalizeFunc) local_summary_finalize);
+	}
 
-	if (mbs->index)
-		camel_object_unref (mbs->index);
-	g_free(mbs->folder_path);
+	return type;
 }
 
 void
@@ -153,10 +146,14 @@ local_summary_load(CamelLocalSummary *cls, gint forceindex, CamelException *ex)
 gint
 camel_local_summary_load(CamelLocalSummary *cls, gint forceindex, CamelException *ex)
 {
+	CamelLocalSummaryClass *class;
+
 	d(printf("Loading summary ...\n"));
 
-	if ((forceindex && ((CamelLocalSummaryClass *)(CAMEL_OBJECT_GET_CLASS(cls)))->need_index())
-	    || ((CamelLocalSummaryClass *)(CAMEL_OBJECT_GET_CLASS(cls)))->load(cls, forceindex, ex) == -1) {
+	class = CAMEL_LOCAL_SUMMARY_GET_CLASS (cls);
+
+	if ((forceindex && class->need_index())
+	    || class->load(cls, forceindex, ex) == -1) {
 		w(g_warning("Could not load summary: flags may be reset"));
 		camel_folder_summary_clear((CamelFolderSummary *)cls);
 		return -1;
@@ -173,13 +170,13 @@ void camel_local_summary_check_force(CamelLocalSummary *cls)
 gchar *
 camel_local_summary_encode_x_evolution(CamelLocalSummary *cls, const CamelLocalMessageInfo *info)
 {
-	return ((CamelLocalSummaryClass *)(CAMEL_OBJECT_GET_CLASS(cls)))->encode_x_evolution(cls, info);
+	return CAMEL_LOCAL_SUMMARY_GET_CLASS (cls)->encode_x_evolution (cls, info);
 }
 
 gint
 camel_local_summary_decode_x_evolution(CamelLocalSummary *cls, const gchar *xev, CamelLocalMessageInfo *info)
 {
-	return ((CamelLocalSummaryClass *)(CAMEL_OBJECT_GET_CLASS(cls)))->decode_x_evolution(cls, xev, info);
+	return CAMEL_LOCAL_SUMMARY_GET_CLASS (cls)->decode_x_evolution (cls, xev, info);
 }
 
 /*#define DOSTATS*/
@@ -263,11 +260,15 @@ do_stat_mi(CamelLocalSummary *cls, struct _stat_info *info, CamelMessageInfo *mi
 #endif
 
 gint
-camel_local_summary_check(CamelLocalSummary *cls, CamelFolderChangeInfo *changeinfo, CamelException *ex)
+camel_local_summary_check (CamelLocalSummary *cls,
+                           CamelFolderChangeInfo *changeinfo,
+                           CamelException *ex)
 {
+	CamelLocalSummaryClass *local_summary_class;
 	gint ret;
 
-	ret = ((CamelLocalSummaryClass *)(CAMEL_OBJECT_GET_CLASS(cls)))->check(cls, changeinfo, ex);
+	local_summary_class = CAMEL_LOCAL_SUMMARY_GET_CLASS (cls);
+	ret = local_summary_class->check(cls, changeinfo, ex);
 
 #ifdef DOSTATS
 	if (ret != -1) {
@@ -294,15 +295,30 @@ camel_local_summary_check(CamelLocalSummary *cls, CamelFolderChangeInfo *changei
 }
 
 gint
-camel_local_summary_sync(CamelLocalSummary *cls, gboolean expunge, CamelFolderChangeInfo *changeinfo, CamelException *ex)
+camel_local_summary_sync (CamelLocalSummary *cls,
+                          gboolean expunge,
+                          CamelFolderChangeInfo *changeinfo,
+                          CamelException *ex)
 {
-	return ((CamelLocalSummaryClass *)(CAMEL_OBJECT_GET_CLASS(cls)))->sync(cls, expunge, changeinfo, ex);
+	CamelLocalSummaryClass *local_summary_class;
+
+	local_summary_class = CAMEL_LOCAL_SUMMARY_GET_CLASS (cls);
+
+	return local_summary_class->sync (cls, expunge, changeinfo, ex);
 }
 
 CamelMessageInfo *
-camel_local_summary_add(CamelLocalSummary *cls, CamelMimeMessage *msg, const CamelMessageInfo *info, CamelFolderChangeInfo *ci, CamelException *ex)
+camel_local_summary_add (CamelLocalSummary *cls,
+                         CamelMimeMessage *msg,
+                         const CamelMessageInfo *info,
+                         CamelFolderChangeInfo *ci,
+                         CamelException *ex)
 {
-	return ((CamelLocalSummaryClass *)(CAMEL_OBJECT_GET_CLASS(cls)))->add(cls, msg, info, ci, ex);
+	CamelLocalSummaryClass *local_summary_class;
+
+	local_summary_class = CAMEL_LOCAL_SUMMARY_GET_CLASS (cls);
+
+	return local_summary_class->add (cls, msg, info, ci, ex);
 }
 
 /**
@@ -401,20 +417,26 @@ local_summary_check(CamelLocalSummary *cls, CamelFolderChangeInfo *changeinfo, C
 }
 
 static gint
-local_summary_sync(CamelLocalSummary *cls, gboolean expunge, CamelFolderChangeInfo *changeinfo, CamelException *ex)
+local_summary_sync (CamelLocalSummary *cls,
+                    gboolean expunge,
+                    CamelFolderChangeInfo *changeinfo,
+                    CamelException *ex)
 {
-	gint ret = 0;
+	CamelFolderSummary *folder_summary;
+
+	folder_summary = CAMEL_FOLDER_SUMMARY (cls);
 
-	ret = camel_folder_summary_save_to_db ((CamelFolderSummary *)cls, ex);
-	if (ret == -1) {
+	if (camel_folder_summary_save_to_db (folder_summary, ex) == -1) {
 		g_warning ("Could not save summary for local providers");
 		return -1;
 	}
 
-	if (cls->index && camel_index_sync(cls->index) == -1)
+	if (cls->index && camel_index_sync(cls->index) == -1) {
 		g_warning ("Could not sync index for %s: %s", cls->folder_path, g_strerror (errno));
+		return -1;
+	}
 
-	return ret;
+	return 0;
 }
 
 static gint
@@ -504,8 +526,9 @@ local_summary_add(CamelLocalSummary *cls, CamelMimeMessage *msg, const CamelMess
 		camel_folder_change_info_add_uid(ci, camel_message_info_uid(mi));
 	} else {
 		d(printf("Failed!\n"));
-		camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM,
-				     _("Unable to add message to summary: unknown reason"));
+		camel_exception_set (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Unable to add message to summary: unknown reason"));
 	}
 	return (CamelMessageInfo *)mi;
 }
@@ -638,7 +661,7 @@ summary_header_from_db (CamelFolderSummary *s, CamelFIRecord *fir)
 
 	/* We dont actually add our own headers, but version that we don't anyway */
 
-	if (((CamelFolderSummaryClass *)camel_local_summary_parent)->summary_header_from_db(s, fir) == -1)
+	if (CAMEL_FOLDER_SUMMARY_CLASS (camel_local_summary_parent_class)->summary_header_from_db(s, fir) == -1)
 		return -1;
 
 	part = fir->bdata;
@@ -661,7 +684,7 @@ summary_header_load(CamelFolderSummary *s, FILE *in)
 
 	/* We dont actually add our own headers, but version that we don't anyway */
 
-	if (((CamelFolderSummaryClass *)camel_local_summary_parent)->summary_header_load(s, in) == -1)
+	if (CAMEL_FOLDER_SUMMARY_CLASS (camel_local_summary_parent_class)->summary_header_load(s, in) == -1)
 		return -1;
 
 	/* Legacy version, version is in summary only */
@@ -675,9 +698,12 @@ summary_header_load(CamelFolderSummary *s, FILE *in)
 static struct _CamelFIRecord *
 summary_header_to_db (CamelFolderSummary *s, CamelException *ex)
 {
+	CamelFolderSummaryClass *folder_summary_class;
 	struct _CamelFIRecord *fir;
 
-	fir = ((CamelFolderSummaryClass *)camel_local_summary_parent)->summary_header_to_db (s, ex);
+	/* Chain up to parent's summary_header_to_db() method. */
+	folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (camel_local_summary_parent_class);
+	fir = folder_summary_class->summary_header_to_db (s, ex);
 	if (fir)
 		fir->bdata = g_strdup_printf ("%d", CAMEL_LOCAL_SUMMARY_VERSION);
 
@@ -689,7 +715,7 @@ summary_header_save(CamelFolderSummary *s, FILE *out)
 {
 	/*CamelLocalSummary *cls = (CamelLocalSummary *)s;*/
 
-	if (((CamelFolderSummaryClass *)camel_local_summary_parent)->summary_header_save(s, out) == -1)
+	if (CAMEL_FOLDER_SUMMARY_CLASS (camel_local_summary_parent_class)->summary_header_save(s, out) == -1)
 		return -1;
 
 	return camel_file_util_encode_fixed_int32(out, CAMEL_LOCAL_SUMMARY_VERSION);
@@ -701,7 +727,7 @@ message_info_new_from_header(CamelFolderSummary *s, struct _camel_header_raw *h)
 	CamelLocalMessageInfo *mi;
 	CamelLocalSummary *cls = (CamelLocalSummary *)s;
 
-	mi = (CamelLocalMessageInfo *)((CamelFolderSummaryClass *)camel_local_summary_parent)->message_info_new_from_header(s, h);
+	mi = (CamelLocalMessageInfo *)CAMEL_FOLDER_SUMMARY_CLASS (camel_local_summary_parent_class)->message_info_new_from_header(s, h);
 	if (mi) {
 		const gchar *xev;
 		gint doindex = FALSE;
diff --git a/camel/providers/local/camel-local-summary.h b/camel/providers/local/camel-local-summary.h
index 5cf79a9..002c15f 100644
--- a/camel/providers/local/camel-local-summary.h
+++ b/camel/providers/local/camel-local-summary.h
@@ -26,6 +26,8 @@
 #define CAMEL_LOCAL_SUMMARY(obj)         CAMEL_CHECK_CAST (obj, camel_local_summary_get_type (), CamelLocalSummary)
 #define CAMEL_LOCAL_SUMMARY_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_local_summary_get_type (), CamelLocalSummaryClass)
 #define CAMEL_IS_LOCAL_SUMMARY(obj)      CAMEL_CHECK_TYPE (obj, camel_local_summary_get_type ())
+#define CAMEL_LOCAL_SUMMARY_GET_CLASS(obj) \
+	((CamelLocalSummaryClass *) CAMEL_OBJECT_GET_CLASS (obj))
 
 G_BEGIN_DECLS
 
diff --git a/camel/providers/local/camel-maildir-folder.c b/camel/providers/local/camel-maildir-folder.c
index 57974b1..59a5b59 100644
--- a/camel/providers/local/camel-maildir-folder.c
+++ b/camel/providers/local/camel-maildir-folder.c
@@ -41,25 +41,21 @@
 
 #define d(x) /*(printf("%s(%d): ", __FILE__, __LINE__),(x))*/
 
-static CamelLocalFolderClass *parent_class = NULL;
-
-/* Returns the class for a CamelMaildirFolder */
-#define CMAILDIRF_CLASS(so) CAMEL_MAILDIR_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CMAILDIRS_CLASS(so) CAMEL_STORE_CLASS (CAMEL_OBJECT_GET_CLASS(so))
+static gpointer camel_maildir_folder_parent_class;
 
 static CamelLocalSummary *maildir_create_summary(CamelLocalFolder *lf, const gchar *path, const gchar *folder, CamelIndex *index);
 
-static void maildir_append_message(CamelFolder * folder, CamelMimeMessage * message, const CamelMessageInfo *info, gchar **appended_uid, CamelException * ex);
+static gboolean maildir_append_message(CamelFolder * folder, CamelMimeMessage * message, const CamelMessageInfo *info, gchar **appended_uid, CamelException * ex);
 static CamelMimeMessage *maildir_get_message(CamelFolder * folder, const gchar * uid, CamelException * ex);
 static gchar * maildir_get_filename (CamelFolder *folder, const gchar *uid, CamelException *ex);
 static gint maildir_cmp_uids (CamelFolder *folder, const gchar *uid1, const gchar *uid2);
 static void maildir_sort_uids (CamelFolder *folder, GPtrArray *uids);
-static void maildir_transfer_messages_to (CamelFolder *source, GPtrArray *uids, CamelFolder *dest, GPtrArray **transferred_uids, gboolean delete_originals, CamelException *ex);
-static void maildir_finalize(CamelObject * object);
+static gboolean maildir_transfer_messages_to (CamelFolder *source, GPtrArray *uids, CamelFolder *dest, GPtrArray **transferred_uids, gboolean delete_originals, CamelException *ex);
 
 static gint
-maildir_folder_getv(CamelObject *object, CamelException *ex, CamelArgGetV *args)
+maildir_folder_getv (CamelObject *object,
+                     CamelException *ex,
+                     CamelArgGetV *args)
 {
 	CamelFolder *folder = (CamelFolder *)object;
 	gint i;
@@ -84,43 +80,40 @@ maildir_folder_getv(CamelObject *object, CamelException *ex, CamelArgGetV *args)
 		arg->tag = (tag & CAMEL_ARG_TYPE) | CAMEL_ARG_IGNORE;
 	}
 
-	return ((CamelObjectClass *)parent_class)->getv(object, ex, args);
+	return ((CamelObjectClass *)camel_maildir_folder_parent_class)->getv(object, ex, args);
 }
 
-static void camel_maildir_folder_class_init(CamelObjectClass * camel_maildir_folder_class)
+static void
+camel_maildir_folder_class_init (CamelMaildirFolderClass *class)
 {
-	CamelFolderClass *camel_folder_class = CAMEL_FOLDER_CLASS(camel_maildir_folder_class);
-	CamelLocalFolderClass *lclass = (CamelLocalFolderClass *)camel_maildir_folder_class;
+	CamelObjectClass *camel_object_class;
+	CamelFolderClass *folder_class;
+	CamelLocalFolderClass *local_folder_class;
 
-	parent_class = CAMEL_LOCAL_FOLDER_CLASS (camel_type_get_global_classfuncs(camel_local_folder_get_type()));
+	camel_maildir_folder_parent_class = CAMEL_LOCAL_FOLDER_CLASS (camel_type_get_global_classfuncs(camel_local_folder_get_type()));
 
-	/* virtual method definition */
+	camel_object_class = CAMEL_OBJECT_CLASS (class);
+	camel_object_class->getv = maildir_folder_getv;
 
-	/* virtual method overload */
-	((CamelObjectClass *)camel_folder_class)->getv = maildir_folder_getv;
+	folder_class = CAMEL_FOLDER_CLASS (class);
+	folder_class->append_message = maildir_append_message;
+	folder_class->get_message = maildir_get_message;
+	folder_class->get_filename = maildir_get_filename;
+	folder_class->cmp_uids = maildir_cmp_uids;
+	folder_class->sort_uids = maildir_sort_uids;
+	folder_class->transfer_messages_to = maildir_transfer_messages_to;
 
-	camel_folder_class->append_message = maildir_append_message;
-	camel_folder_class->get_message = maildir_get_message;
-	camel_folder_class->get_filename = maildir_get_filename;
-	camel_folder_class->cmp_uids = maildir_cmp_uids;
-	camel_folder_class->sort_uids = maildir_sort_uids;
-	camel_folder_class->transfer_messages_to = maildir_transfer_messages_to;
-
-	lclass->create_summary = maildir_create_summary;
+	local_folder_class = CAMEL_LOCAL_FOLDER_CLASS (class);
+	local_folder_class->create_summary = maildir_create_summary;
 }
 
-static void maildir_init(gpointer object, gpointer klass)
-{
-	/*CamelFolder *folder = object;
-	  CamelMaildirFolder *maildir_folder = object;*/
-}
-
-static void maildir_finalize(CamelObject * object)
+static void
+camel_maildir_folder_init (CamelMaildirFolder *maildir_folder)
 {
-	/*CamelMaildirFolder *maildir_folder = CAMEL_MAILDIR_FOLDER(object);*/
 }
 
-CamelType camel_maildir_folder_get_type(void)
+CamelType
+camel_maildir_folder_get_type(void)
 {
 	static CamelType camel_maildir_folder_type = CAMEL_INVALID_TYPE;
 
@@ -130,15 +123,18 @@ CamelType camel_maildir_folder_get_type(void)
 							   sizeof(CamelMaildirFolderClass),
 							   (CamelObjectClassInitFunc) camel_maildir_folder_class_init,
 							   NULL,
-							   (CamelObjectInitFunc) maildir_init,
-							   (CamelObjectFinalizeFunc) maildir_finalize);
+							   (CamelObjectInitFunc) camel_maildir_folder_init,
+							   (CamelObjectFinalizeFunc) NULL);
 	}
 
 	return camel_maildir_folder_type;
 }
 
 CamelFolder *
-camel_maildir_folder_new(CamelStore *parent_store, const gchar *full_name, guint32 flags, CamelException *ex)
+camel_maildir_folder_new (CamelStore *parent_store,
+                          const gchar *full_name,
+                          guint32 flags,
+                          CamelException *ex)
 {
 	CamelFolder *folder;
 
@@ -150,35 +146,48 @@ camel_maildir_folder_new(CamelStore *parent_store, const gchar *full_name, guint
 	    && strcmp(full_name, ".") == 0)
 		folder->folder_flags |= CAMEL_FOLDER_FILTER_RECENT;
 
-	folder = (CamelFolder *)camel_local_folder_construct((CamelLocalFolder *)folder,
-							     parent_store, full_name, flags, ex);
+	folder = (CamelFolder *) camel_local_folder_construct (
+		CAMEL_LOCAL_FOLDER (folder),
+		parent_store, full_name, flags, ex);
 
 	return folder;
 }
 
-static CamelLocalSummary *maildir_create_summary(CamelLocalFolder *lf, const gchar *path, const gchar *folder, CamelIndex *index)
+static CamelLocalSummary *
+maildir_create_summary (CamelLocalFolder *lf,
+                        const gchar *path,
+                        const gchar *folder,
+                        CamelIndex *index)
 {
-	return (CamelLocalSummary *)camel_maildir_summary_new((CamelFolder *)lf, path, folder, index);
+	return (CamelLocalSummary *) camel_maildir_summary_new (
+		CAMEL_FOLDER (lf), path, folder, index);
 }
 
-static void
-maildir_append_message (CamelFolder *folder, CamelMimeMessage *message, const CamelMessageInfo *info, gchar **appended_uid, CamelException *ex)
+static gboolean
+maildir_append_message (CamelFolder *folder,
+                        CamelMimeMessage *message,
+                        const CamelMessageInfo *info,
+                        gchar **appended_uid,
+                        CamelException *ex)
 {
 	CamelLocalFolder *lf = (CamelLocalFolder *)folder;
 	CamelStream *output_stream;
 	CamelMessageInfo *mi;
 	CamelMaildirMessageInfo *mdi;
 	gchar *name, *dest = NULL;
+	gboolean success = TRUE;
 
 	d(printf("Appending message\n"));
 
 	/* If we can't lock, don't do anything */
 	if (camel_local_folder_lock (lf, CAMEL_LOCK_WRITE, ex) == -1)
-		return;
+		return FALSE;
 
 	/* add it to the summary/assign the uid, etc */
-	mi = camel_local_summary_add((CamelLocalSummary *)folder->summary, message, info, lf->changes, ex);
-	if (camel_exception_is_set (ex))
+	mi = camel_local_summary_add (
+		CAMEL_LOCAL_SUMMARY (folder->summary),
+		message, info, lf->changes, ex);
+	if (mi == NULL)
 		goto check_changed;
 
 	if ((camel_message_info_flags (mi) & CAMEL_MESSAGE_ATTACHMENTS) && !camel_mime_message_has_attachment (message))
@@ -190,7 +199,8 @@ maildir_append_message (CamelFolder *folder, CamelMimeMessage *message, const Ca
 
 	/* write it out to tmp, use the uid we got from the summary */
 	name = g_strdup_printf ("%s/tmp/%s", lf->folder_path, camel_message_info_uid(mi));
-	output_stream = camel_stream_fs_new_with_name (name, O_WRONLY|O_CREAT, 0600);
+	output_stream = camel_stream_fs_new_with_name (
+		name, O_WRONLY|O_CREAT, 0600);
 	if (output_stream == NULL)
 		goto fail_write;
 
@@ -221,12 +231,14 @@ maildir_append_message (CamelFolder *folder, CamelMimeMessage *message, const Ca
 					 camel_message_info_uid (mi));
 
 	if (errno == EINTR)
-		camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL,
-				     _("Maildir append message canceled"));
+		camel_exception_set (
+			ex, CAMEL_EXCEPTION_USER_CANCEL,
+			_("Maildir append message canceled"));
 	else
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Cannot append message to maildir folder: %s: %s"),
-				      name, g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Cannot append message to maildir folder: %s: %s"),
+			name, g_strerror (errno));
 
 	if (output_stream) {
 		camel_object_unref (CAMEL_OBJECT (output_stream));
@@ -236,6 +248,8 @@ maildir_append_message (CamelFolder *folder, CamelMimeMessage *message, const Ca
 	g_free (name);
 	g_free (dest);
 
+	success = FALSE;
+
  check_changed:
 	camel_local_folder_unlock (lf);
 
@@ -243,10 +257,14 @@ maildir_append_message (CamelFolder *folder, CamelMimeMessage *message, const Ca
 		camel_object_trigger_event (CAMEL_OBJECT (folder), "folder_changed", lf->changes);
 		camel_folder_change_info_clear (lf->changes);
 	}
+
+	return success;
 }
 
 static gchar *
-maildir_get_filename (CamelFolder *folder, const gchar *uid, CamelException *ex)
+maildir_get_filename (CamelFolder *folder,
+                      const gchar *uid,
+                      CamelException *ex)
 {
 	CamelLocalFolder *lf = (CamelLocalFolder *)folder;
 	CamelMaildirMessageInfo *mdi;
@@ -254,8 +272,9 @@ maildir_get_filename (CamelFolder *folder, const gchar *uid, CamelException *ex)
 
 	/* get the message summary info */
 	if ((info = camel_folder_summary_uid(folder->summary, uid)) == NULL) {
-		set_cannot_get_message_ex (ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID,
-				     uid, lf->folder_path, _("No such message"));
+		set_cannot_get_message_ex (
+			ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID,
+			uid, lf->folder_path, _("No such message"));
 		return NULL;
 	}
 
@@ -266,7 +285,9 @@ maildir_get_filename (CamelFolder *folder, const gchar *uid, CamelException *ex)
 }
 
 static CamelMimeMessage *
-maildir_get_message(CamelFolder * folder, const gchar * uid, CamelException * ex)
+maildir_get_message (CamelFolder *folder,
+                     const gchar *uid,
+                     CamelException * ex)
 {
 	CamelLocalFolder *lf = (CamelLocalFolder *)folder;
 	CamelStream *message_stream = NULL;
@@ -282,8 +303,9 @@ maildir_get_message(CamelFolder * folder, const gchar * uid, CamelException * ex
 
 	/* get the message summary info */
 	if ((info = camel_folder_summary_uid(folder->summary, uid)) == NULL) {
-		set_cannot_get_message_ex (ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID,
-				     uid, lf->folder_path, _("No such message"));
+		set_cannot_get_message_ex (
+			ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID,
+			uid, lf->folder_path, _("No such message"));
 		goto fail;
 	}
 
@@ -295,15 +317,18 @@ maildir_get_message(CamelFolder * folder, const gchar * uid, CamelException * ex
 	camel_message_info_free(info);
 
 	if ((message_stream = camel_stream_fs_new_with_name(name, O_RDONLY, 0)) == NULL) {
-		set_cannot_get_message_ex (ex, CAMEL_EXCEPTION_SYSTEM,
-				     uid, lf->folder_path, g_strerror(errno));
+		set_cannot_get_message_ex (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			uid, lf->folder_path, g_strerror (errno));
 		goto fail;
 	}
 
 	message = camel_mime_message_new();
 	if (camel_data_wrapper_construct_from_stream((CamelDataWrapper *)message, message_stream) == -1) {
-		set_cannot_get_message_ex (ex, (errno==EINTR)?CAMEL_EXCEPTION_USER_CANCEL:CAMEL_EXCEPTION_SYSTEM,
-				     uid, lf->folder_path, _("Invalid message contents"));
+		set_cannot_get_message_ex (
+			ex, (errno==EINTR) ?
+			CAMEL_EXCEPTION_USER_CANCEL : CAMEL_EXCEPTION_SYSTEM,
+			uid, lf->folder_path, _("Invalid message contents"));
 		camel_object_unref (message);
 		message = NULL;
 
@@ -323,7 +348,9 @@ maildir_get_message(CamelFolder * folder, const gchar * uid, CamelException * ex
 }
 
 static gint
-maildir_cmp_uids (CamelFolder *folder, const gchar *uid1, const gchar *uid2)
+maildir_cmp_uids (CamelFolder *folder,
+                  const gchar *uid1,
+                  const gchar *uid2)
 {
 	CamelMessageInfo *a, *b;
 	time_t tma, tmb;
@@ -344,9 +371,10 @@ maildir_cmp_uids (CamelFolder *folder, const gchar *uid1, const gchar *uid2)
 }
 
 static void
-maildir_sort_uids (CamelFolder *folder, GPtrArray *uids)
+maildir_sort_uids (CamelFolder *folder,
+                   GPtrArray *uids)
 {
-	g_return_if_fail (parent_class != NULL);
+	g_return_if_fail (camel_maildir_folder_parent_class != NULL);
 	g_return_if_fail (folder != NULL);
 
 	if (uids && uids->len > 1) {
@@ -354,7 +382,8 @@ maildir_sort_uids (CamelFolder *folder, GPtrArray *uids)
 
 		camel_exception_init (&ex);
 
-		camel_folder_summary_ensure_infos_loaded (folder->summary, uids->len, &ex);
+		camel_folder_summary_ensure_infos_loaded (
+			folder->summary, uids->len, &ex);
 
 		if (camel_exception_is_set (&ex))
 			g_warning ("%s: %s", G_STRFUNC, camel_exception_get_description (&ex));
@@ -362,11 +391,17 @@ maildir_sort_uids (CamelFolder *folder, GPtrArray *uids)
 		camel_exception_clear (&ex);
 	}
 
-	CAMEL_FOLDER_CLASS (parent_class)->sort_uids (folder, uids);
+	/* Chain up to parent's sort_uids() method. */
+	CAMEL_FOLDER_CLASS (camel_maildir_folder_parent_class)->sort_uids (folder, uids);
 }
 
-static void
-maildir_transfer_messages_to (CamelFolder *source, GPtrArray *uids, CamelFolder *dest, GPtrArray **transferred_uids, gboolean delete_originals, CamelException *ex)
+static gboolean
+maildir_transfer_messages_to (CamelFolder *source,
+                              GPtrArray *uids,
+                              CamelFolder *dest,
+                              GPtrArray **transferred_uids,
+                              gboolean delete_originals,
+                              CamelException *ex)
 {
 	gboolean fallback = FALSE;
 
@@ -387,9 +422,10 @@ maildir_transfer_messages_to (CamelFolder *source, GPtrArray *uids, CamelFolder
 			CamelMessageInfo *info;
 
 			if ((info = camel_folder_summary_uid (source->summary, uid)) == NULL) {
-				set_cannot_get_message_ex (ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID,
-						     uid, lf->folder_path, _("No such message"));
-				return;
+				set_cannot_get_message_ex (
+					ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID,
+					uid, lf->folder_path, _("No such message"));
+				return FALSE;
 			}
 
 			mdi = (CamelMaildirMessageInfo *) info;
@@ -404,8 +440,9 @@ maildir_transfer_messages_to (CamelFolder *source, GPtrArray *uids, CamelFolder
 					i = uids->len + 1;
 					fallback = TRUE;
 				} else {
-					camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM,
-							_("Cannot transfer message to destination folder"));
+					camel_exception_set (
+						ex, CAMEL_EXCEPTION_SYSTEM,
+						_("Cannot transfer message to destination folder"));
 					camel_message_info_free (info);
 					break;
 				}
@@ -426,6 +463,15 @@ maildir_transfer_messages_to (CamelFolder *source, GPtrArray *uids, CamelFolder
 	} else
 		fallback = TRUE;
 
-	if (fallback)
-		((CamelFolderClass *)parent_class)->transfer_messages_to (source, uids, dest, transferred_uids, delete_originals, ex);
+	if (fallback) {
+		CamelFolderClass *folder_class;
+
+		/* Chain up to parent's transfer_messages_to() method. */
+		folder_class = CAMEL_FOLDER_CLASS (camel_maildir_folder_parent_class);
+		return folder_class->transfer_messages_to (
+			source, uids, dest, transferred_uids,
+			delete_originals, ex);
+	}
+
+	return TRUE;
 }
diff --git a/camel/providers/local/camel-maildir-folder.h b/camel/providers/local/camel-maildir-folder.h
index 04a87d1..b85cfc7 100644
--- a/camel/providers/local/camel-maildir-folder.h
+++ b/camel/providers/local/camel-maildir-folder.h
@@ -32,22 +32,20 @@
 
 G_BEGIN_DECLS
 
-typedef struct {
-	CamelLocalFolder parent;
+typedef struct _CamelMaildirFolder CamelMaildirFolder;
+typedef struct _CamelMaildirFolderClass CamelMaildirFolderClass;
 
-} CamelMaildirFolder;
+struct _CamelMaildirFolder {
+	CamelLocalFolder parent;
+};
 
-typedef struct {
+struct _CamelMaildirFolderClass {
 	CamelLocalFolderClass parent_class;
-
-	/* Virtual methods */
-
-} CamelMaildirFolderClass;
+};
 
 /* public methods */
 CamelFolder *camel_maildir_folder_new(CamelStore *parent_store, const gchar *full_name, guint32 flags, CamelException *ex);
 
-/* Standard Camel function */
 CamelType camel_maildir_folder_get_type(void);
 
 G_END_DECLS
diff --git a/camel/providers/local/camel-maildir-store.c b/camel/providers/local/camel-maildir-store.c
index 942b4cb..7995400 100644
--- a/camel/providers/local/camel-maildir-store.c
+++ b/camel/providers/local/camel-maildir-store.c
@@ -38,43 +38,38 @@
 
 #define d(x)
 
-static CamelLocalStoreClass *parent_class = NULL;
-
-/* Returns the class for a CamelMaildirStore */
-#define CMAILDIRS_CLASS(so) CAMEL_MAILDIR_STORE_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CMAILDIRF_CLASS(so) CAMEL_MAILDIR_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
+static gpointer camel_maildir_store_parent_class;
 
 static CamelFolder *get_folder(CamelStore * store, const gchar *folder_name, guint32 flags, CamelException * ex);
 static CamelFolder *get_inbox (CamelStore *store, CamelException *ex);
-static void delete_folder(CamelStore * store, const gchar *folder_name, CamelException * ex);
-static void maildir_rename_folder(CamelStore *store, const gchar *old, const gchar *new, CamelException *ex);
+static gboolean delete_folder(CamelStore * store, const gchar *folder_name, CamelException * ex);
+static gboolean maildir_rename_folder(CamelStore *store, const gchar *old, const gchar *new, CamelException *ex);
 
 static CamelFolderInfo * get_folder_info (CamelStore *store, const gchar *top, guint32 flags, CamelException *ex);
 
 static gboolean maildir_compare_folder_name(gconstpointer a, gconstpointer b);
 static guint maildir_hash_folder_name(gconstpointer a);
 
-static void camel_maildir_store_class_init(CamelObjectClass * camel_maildir_store_class)
+static void
+camel_maildir_store_class_init (CamelMaildirStoreClass *class)
 {
-	CamelStoreClass *camel_store_class = CAMEL_STORE_CLASS(camel_maildir_store_class);
-	/*CamelServiceClass *camel_service_class = CAMEL_SERVICE_CLASS(camel_maildir_store_class);*/
-
-	parent_class = (CamelLocalStoreClass *)camel_type_get_global_classfuncs(camel_local_store_get_type());
-
-	/* virtual method overload, use defaults for most */
-	camel_store_class->hash_folder_name = maildir_hash_folder_name;
-	camel_store_class->compare_folder_name = maildir_compare_folder_name;
-	camel_store_class->get_folder = get_folder;
-	camel_store_class->get_inbox = get_inbox;
-	camel_store_class->delete_folder = delete_folder;
-	camel_store_class->rename_folder = maildir_rename_folder;
-
-	camel_store_class->get_folder_info = get_folder_info;
-	camel_store_class->free_folder_info = camel_store_free_folder_info_full;
+	CamelStoreClass *store_class;
+
+	camel_maildir_store_parent_class = (CamelLocalStoreClass *)camel_type_get_global_classfuncs(camel_local_store_get_type());
+
+	store_class = CAMEL_STORE_CLASS (class);
+	store_class->hash_folder_name = maildir_hash_folder_name;
+	store_class->compare_folder_name = maildir_compare_folder_name;
+	store_class->get_folder = get_folder;
+	store_class->get_inbox = get_inbox;
+	store_class->delete_folder = delete_folder;
+	store_class->rename_folder = maildir_rename_folder;
+	store_class->get_folder_info = get_folder_info;
+	store_class->free_folder_info = camel_store_free_folder_info_full;
 }
 
-CamelType camel_maildir_store_get_type(void)
+CamelType
+camel_maildir_store_get_type(void)
 {
 	static CamelType camel_maildir_store_type = CAMEL_INVALID_TYPE;
 
@@ -93,7 +88,7 @@ CamelType camel_maildir_store_get_type(void)
 
 /* This fixes up some historical cruft of names starting with "./" */
 static const gchar *
-md_canon_name(const gchar *a)
+md_canon_name (const gchar *a)
 {
 	if (a != NULL) {
 		if (a[0] == '/')
@@ -101,29 +96,39 @@ md_canon_name(const gchar *a)
 		if (a[0] == '.' && a[1] == '/')
 			a+=2;
 	}
+
 	return a;
 }
 
-static guint maildir_hash_folder_name(gconstpointer a)
+static guint
+maildir_hash_folder_name (gconstpointer a)
 {
-	return g_str_hash(md_canon_name(a));
+	return g_str_hash (md_canon_name(a));
 }
 
-static gboolean maildir_compare_folder_name(gconstpointer a, gconstpointer b)
+static gboolean
+maildir_compare_folder_name (gconstpointer a,
+                             gconstpointer b)
 {
-	return g_str_equal(md_canon_name(a), md_canon_name(b));
+	return g_str_equal (md_canon_name (a), md_canon_name (b));
 }
 
 static CamelFolder *
-get_folder(CamelStore * store, const gchar *folder_name, guint32 flags, CamelException * ex)
+get_folder (CamelStore *store,
+            const gchar *folder_name,
+            guint32 flags,
+            CamelException * ex)
 {
+	CamelStoreClass *store_class;
 	gchar *name, *tmp, *cur, *new;
 	struct stat st;
 	CamelFolder *folder = NULL;
 
 	folder_name = md_canon_name(folder_name);
 
-	if (!((CamelStoreClass *)parent_class)->get_folder(store, folder_name, flags, ex))
+	/* Chain up to parent's get_folder() method. */
+	store_class = CAMEL_STORE_CLASS (camel_maildir_store_parent_class);
+	if (!store_class->get_folder (store, folder_name, flags, ex))
 		return NULL;
 
 	name = g_strdup_printf("%s%s", CAMEL_LOCAL_STORE(store)->toplevel_dir, folder_name);
@@ -139,9 +144,10 @@ get_folder(CamelStore * store, const gchar *folder_name, guint32 flags, CamelExc
 			if (mkdir(tmp, 0700) != 0
 			    || mkdir(cur, 0700) != 0
 			    || mkdir(new, 0700) != 0) {
-				camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-						     _("Cannot create folder '%s': %s"),
-						     folder_name, g_strerror(errno));
+				camel_exception_setv (
+					ex, CAMEL_EXCEPTION_SYSTEM,
+					_("Cannot create folder '%s': %s"),
+					folder_name, g_strerror(errno));
 				rmdir(tmp);
 				rmdir(cur);
 				rmdir(new);
@@ -152,21 +158,24 @@ get_folder(CamelStore * store, const gchar *folder_name, guint32 flags, CamelExc
 	} else if (stat(name, &st) == -1) {
 		/* folder doesn't exist, see if we should create it */
 		if (errno != ENOENT) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      _("Cannot get folder '%s': %s"),
-					      folder_name, g_strerror (errno));
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Cannot get folder '%s': %s"),
+				folder_name, g_strerror (errno));
 		} else if ((flags & CAMEL_STORE_FOLDER_CREATE) == 0) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-					      _("Cannot get folder '%s': folder does not exist."),
-					      folder_name);
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
+				_("Cannot get folder '%s': folder does not exist."),
+				folder_name);
 		} else {
 			if (mkdir(name, 0700) != 0
 			    || mkdir(tmp, 0700) != 0
 			    || mkdir(cur, 0700) != 0
 			    || mkdir(new, 0700) != 0) {
-				camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-						      _("Cannot create folder '%s': %s"),
-						      folder_name, g_strerror (errno));
+				camel_exception_setv (
+					ex, CAMEL_EXCEPTION_SYSTEM,
+					_("Cannot create folder '%s': %s"),
+					folder_name, g_strerror (errno));
 				rmdir(tmp);
 				rmdir(cur);
 				rmdir(new);
@@ -180,12 +189,15 @@ get_folder(CamelStore * store, const gchar *folder_name, guint32 flags, CamelExc
 		   || stat(cur, &st) != 0 || !S_ISDIR(st.st_mode)
 		   || stat(new, &st) != 0 || !S_ISDIR(st.st_mode)) {
 		/* folder exists, but not maildir */
-		camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-				     _("Cannot get folder '%s': not a maildir directory."), name);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Cannot get folder '%s': not a maildir directory."),
+			name);
 	} else if (flags & CAMEL_STORE_FOLDER_EXCL) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Cannot create folder '%s': folder exists."),
-				      folder_name);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Cannot create folder '%s': folder exists."),
+			folder_name);
 	} else {
 		folder = camel_maildir_folder_new(store, folder_name, flags, ex);
 	}
@@ -199,20 +211,28 @@ fail:
 }
 
 static CamelFolder *
-get_inbox (CamelStore *store, CamelException *ex)
+get_inbox (CamelStore *store,
+           CamelException *ex)
 {
-	return camel_store_get_folder(store, ".", CAMEL_STORE_FOLDER_CREATE, ex);
+	return camel_store_get_folder (
+		store, ".", CAMEL_STORE_FOLDER_CREATE, ex);
 }
 
-static void delete_folder(CamelStore * store, const gchar *folder_name, CamelException * ex)
+static gboolean
+delete_folder (CamelStore *store,
+               const gchar *folder_name,
+               CamelException *ex)
 {
 	gchar *name, *tmp, *cur, *new;
 	struct stat st;
+	gboolean success = TRUE;
 
 	if (strcmp(folder_name, ".") == 0) {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-				     _("Cannot delete folder: %s: Invalid operation"), _("Inbox"));
-		return;
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
+			_("Cannot delete folder: %s: Invalid operation"),
+			_("Inbox"));
+		return FALSE;
 	}
 
 	name = g_strdup_printf("%s%s", CAMEL_LOCAL_STORE(store)->toplevel_dir, folder_name);
@@ -225,10 +245,11 @@ static void delete_folder(CamelStore * store, const gchar *folder_name, CamelExc
 	    || stat(tmp, &st) == -1 || !S_ISDIR(st.st_mode)
 	    || stat(cur, &st) == -1 || !S_ISDIR(st.st_mode)
 	    || stat(new, &st) == -1 || !S_ISDIR(st.st_mode)) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Could not delete folder '%s': %s"),
-				      folder_name, errno ? g_strerror (errno) :
-				      _("not a maildir directory"));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not delete folder '%s': %s"),
+			folder_name, errno ? g_strerror (errno) :
+			_("not a maildir directory"));
 	} else {
 		gint err = 0;
 
@@ -263,12 +284,17 @@ static void delete_folder(CamelStore * store, const gchar *folder_name, CamelExc
 			mkdir(cur, 0700);
 			mkdir(new, 0700);
 			mkdir(tmp, 0700);
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      _("Could not delete folder '%s': %s"),
-					      folder_name, g_strerror (err));
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Could not delete folder '%s': %s"),
+				folder_name, g_strerror (err));
 		} else {
-			/* and remove metadata */
-			((CamelStoreClass *)parent_class)->delete_folder(store, folder_name, ex);
+			CamelStoreClass *store_class;
+
+			/* Chain up to parent's delete_folder() method. */
+			store_class = CAMEL_STORE_CLASS (camel_maildir_store_parent_class);
+			success = store_class->delete_folder (
+				store, folder_name, ex);
 		}
 	}
 
@@ -276,22 +302,35 @@ static void delete_folder(CamelStore * store, const gchar *folder_name, CamelExc
 	g_free(tmp);
 	g_free(cur);
 	g_free(new);
+
+	return success;
 }
 
-static void
-maildir_rename_folder(CamelStore *store, const gchar *old, const gchar *new, CamelException *ex)
+static gboolean
+maildir_rename_folder (CamelStore *store,
+                       const gchar *old,
+                       const gchar *new,
+                       CamelException *ex)
 {
+	CamelStoreClass *store_class;
+
 	if (strcmp(old, ".") == 0) {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-				     _("Cannot rename folder: %s: Invalid operation"), _("Inbox"));
-		return;
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
+			_("Cannot rename folder: %s: Invalid operation"),
+			_("Inbox"));
+		return FALSE;
 	}
 
-	((CamelStoreClass *)parent_class)->rename_folder(store, old, new, ex);
+	/* Chain up to parent's rename_folder() method. */
+	store_class = CAMEL_STORE_CLASS (camel_maildir_store_parent_class);
+	return store_class->rename_folder(store, old, new, ex);
 }
 
 static void
-fill_fi(CamelStore *store, CamelFolderInfo *fi, guint32 flags)
+fill_fi (CamelStore *store,
+         CamelFolderInfo *fi,
+         guint32 flags)
 {
 	CamelFolder *folder;
 
@@ -337,26 +376,34 @@ struct _scan_node {
 	ino_t inode;
 };
 
-static guint scan_hash(gconstpointer d)
+static guint
+scan_hash (gconstpointer d)
 {
 	const struct _scan_node *v = d;
 
 	return v->inode ^ v->dnode;
 }
 
-static gboolean scan_equal(gconstpointer a, gconstpointer b)
+static gboolean
+scan_equal (gconstpointer a, gconstpointer b)
 {
 	const struct _scan_node *v1 = a, *v2 = b;
 
 	return v1->inode == v2->inode && v1->dnode == v2->dnode;
 }
 
-static void scan_free(gpointer k, gpointer v, gpointer d)
+static void
+scan_free (gpointer k, gpointer v, gpointer d)
 {
 	g_free(k);
 }
 
-static CamelFolderInfo *scan_fi(CamelStore *store, guint32 flags, CamelURL *url, const gchar *full, const gchar *name)
+static CamelFolderInfo *
+scan_fi (CamelStore *store,
+         guint32 flags,
+         CamelURL *url,
+         const gchar *full,
+         const gchar *name)
 {
 	CamelFolderInfo *fi;
 	gchar *tmp, *cur, *new;
@@ -396,7 +443,11 @@ static CamelFolderInfo *scan_fi(CamelStore *store, guint32 flags, CamelURL *url,
 }
 
 static gint
-scan_dirs(CamelStore *store, guint32 flags, CamelFolderInfo *topfi, CamelURL *url, CamelException *ex)
+scan_dirs (CamelStore *store,
+           guint32 flags,
+           CamelFolderInfo *topfi,
+           CamelURL *url,
+           CamelException *ex)
 {
 	CamelDList queue = CAMEL_DLIST_INITIALISER(queue);
 	struct _scan_node *sn;
@@ -431,9 +482,10 @@ scan_dirs(CamelStore *store, guint32 flags, CamelFolderInfo *topfi, CamelURL *ur
 		dir = opendir(name);
 		if (dir == NULL) {
 			g_free(name);
-			camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-					     _("Could not scan folder '%s': %s"),
-					     root, g_strerror(errno));
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Could not scan folder '%s': %s"),
+				root, g_strerror (errno));
 			goto fail;
 		}
 
@@ -496,7 +548,10 @@ fail:
 }
 
 static CamelFolderInfo *
-get_folder_info (CamelStore *store, const gchar *top, guint32 flags, CamelException *ex)
+get_folder_info (CamelStore *store,
+                 const gchar *top,
+                 guint32 flags,
+                 CamelException *ex)
 {
 	CamelFolderInfo *fi = NULL;
 	CamelLocalStore *local_store = (CamelLocalStore *)store;
diff --git a/camel/providers/local/camel-maildir-store.h b/camel/providers/local/camel-maildir-store.h
index 8c26bb2..b652f1c 100644
--- a/camel/providers/local/camel-maildir-store.h
+++ b/camel/providers/local/camel-maildir-store.h
@@ -31,19 +31,17 @@
 
 G_BEGIN_DECLS
 
-typedef struct {
-	CamelLocalStore parent;
+typedef struct _CamelMaildirStore CamelMaildirStore;
+typedef struct _CamelMaildirStoreClass CamelMaildirStoreClass;
 
-} CamelMaildirStore;
+struct _CamelMaildirStore {
+	CamelLocalStore parent;
+};
 
-typedef struct {
+struct _CamelMaildirStoreClass {
 	CamelLocalStoreClass parent_class;
+};
 
-} CamelMaildirStoreClass;
-
-/* public methods */
-
-/* Standard Camel function */
 CamelType camel_maildir_store_get_type(void);
 
 G_END_DECLS
diff --git a/camel/providers/local/camel-maildir-summary.c b/camel/providers/local/camel-maildir-summary.c
index 4854f51..88b6828 100644
--- a/camel/providers/local/camel-maildir-summary.c
+++ b/camel/providers/local/camel-maildir-summary.c
@@ -54,12 +54,6 @@ static gchar *maildir_summary_next_uid_string(CamelFolderSummary *s);
 static gint maildir_summary_decode_x_evolution(CamelLocalSummary *cls, const gchar *xev, CamelLocalMessageInfo *mi);
 static gchar *maildir_summary_encode_x_evolution(CamelLocalSummary *cls, const CamelLocalMessageInfo *mi);
 
-static void camel_maildir_summary_class_init	(CamelMaildirSummaryClass *class);
-static void camel_maildir_summary_init	(CamelMaildirSummary *gspaper);
-static void camel_maildir_summary_finalize	(CamelObject *obj);
-
-#define _PRIVATE(x) (((CamelMaildirSummary *)(x))->priv)
-
 struct _CamelMaildirSummaryPrivate {
 	gchar *current_file;
 	gchar *hostname;
@@ -68,76 +62,78 @@ struct _CamelMaildirSummaryPrivate {
 	GMutex *summary_lock;
 };
 
-static CamelLocalSummaryClass *parent_class;
+static gpointer camel_maildir_summary_parent_class;
 
-CamelType
-camel_maildir_summary_get_type (void)
+static void
+maildir_summary_finalize (CamelMaildirSummary *summary)
 {
-	static CamelType type = CAMEL_INVALID_TYPE;
-
-	if (type == CAMEL_INVALID_TYPE) {
-		type = camel_type_register(camel_local_summary_get_type (), "CamelMaildirSummary",
-					   sizeof(CamelMaildirSummary),
-					   sizeof(CamelMaildirSummaryClass),
-					   (CamelObjectClassInitFunc)camel_maildir_summary_class_init,
-					   NULL,
-					   (CamelObjectInitFunc)camel_maildir_summary_init,
-					   (CamelObjectFinalizeFunc)camel_maildir_summary_finalize);
-	}
-
-	return type;
+	g_free (summary->priv->hostname);
+	g_mutex_free (summary->priv->summary_lock);
+	g_free (summary->priv);
 }
 
 static void
 camel_maildir_summary_class_init (CamelMaildirSummaryClass *class)
 {
-	CamelFolderSummaryClass *sklass = (CamelFolderSummaryClass *) class;
-	CamelLocalSummaryClass *lklass = (CamelLocalSummaryClass *)class;
-
-	parent_class = (CamelLocalSummaryClass *)camel_type_get_global_classfuncs(camel_local_summary_get_type ());
-
-	/* override methods */
-	sklass->message_info_size = sizeof(CamelMaildirMessageInfo);
-	sklass->content_info_size = sizeof(CamelMaildirMessageContentInfo);
-	sklass->message_info_load = message_info_load;
-	sklass->message_info_new_from_header = message_info_new_from_header;
-	sklass->message_info_free = message_info_free;
-	sklass->next_uid_string = maildir_summary_next_uid_string;
-
-	lklass->load = maildir_summary_load;
-	lklass->check = maildir_summary_check;
-	lklass->sync = maildir_summary_sync;
-	lklass->add = maildir_summary_add;
-	lklass->encode_x_evolution = maildir_summary_encode_x_evolution;
-	lklass->decode_x_evolution = maildir_summary_decode_x_evolution;
+	CamelFolderSummaryClass *folder_summary_class;
+	CamelLocalSummaryClass *local_summary_class;
+
+	camel_maildir_summary_parent_class = (CamelLocalSummaryClass *)camel_type_get_global_classfuncs(camel_local_summary_get_type ());
+
+	folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (class);
+	folder_summary_class->message_info_size = sizeof (CamelMaildirMessageInfo);
+	folder_summary_class->content_info_size = sizeof (CamelMaildirMessageContentInfo);
+	folder_summary_class->message_info_load = message_info_load;
+	folder_summary_class->message_info_new_from_header = message_info_new_from_header;
+	folder_summary_class->message_info_free = message_info_free;
+	folder_summary_class->next_uid_string = maildir_summary_next_uid_string;
+
+	local_summary_class = CAMEL_LOCAL_SUMMARY_CLASS (class);
+	local_summary_class->load = maildir_summary_load;
+	local_summary_class->check = maildir_summary_check;
+	local_summary_class->sync = maildir_summary_sync;
+	local_summary_class->add = maildir_summary_add;
+	local_summary_class->encode_x_evolution = maildir_summary_encode_x_evolution;
+	local_summary_class->decode_x_evolution = maildir_summary_decode_x_evolution;
 }
 
 static void
-camel_maildir_summary_init (CamelMaildirSummary *o)
+camel_maildir_summary_init (CamelMaildirSummary *maildir_summary)
 {
-	struct _CamelFolderSummary *s = (CamelFolderSummary *) o;
+	CamelFolderSummary *folder_summary;
 	gchar hostname[256];
 
-	o->priv = g_malloc0(sizeof(*o->priv));
+	folder_summary = CAMEL_FOLDER_SUMMARY (maildir_summary);
+
+	maildir_summary->priv = g_new0 (CamelMaildirSummaryPrivate, 1);
+
 	/* set unique file version */
-	s->version += CAMEL_MAILDIR_SUMMARY_VERSION;
+	folder_summary->version += CAMEL_MAILDIR_SUMMARY_VERSION;
 
 	if (gethostname(hostname, 256) == 0) {
-		o->priv->hostname = g_strdup(hostname);
+		maildir_summary->priv->hostname = g_strdup(hostname);
 	} else {
-		o->priv->hostname = g_strdup("localhost");
+		maildir_summary->priv->hostname = g_strdup("localhost");
 	}
-	o->priv->summary_lock = g_mutex_new ();
+	maildir_summary->priv->summary_lock = g_mutex_new ();
 }
 
-static void
-camel_maildir_summary_finalize(CamelObject *obj)
+CamelType
+camel_maildir_summary_get_type (void)
 {
-	CamelMaildirSummary *o = (CamelMaildirSummary *)obj;
+	static CamelType type = CAMEL_INVALID_TYPE;
 
-	g_free(o->priv->hostname);
-	g_mutex_free (o->priv->summary_lock);
-	g_free(o->priv);
+	if (type == CAMEL_INVALID_TYPE) {
+		type = camel_type_register(camel_local_summary_get_type (), "CamelMaildirSummary",
+					   sizeof(CamelMaildirSummary),
+					   sizeof(CamelMaildirSummaryClass),
+					   (CamelObjectClassInitFunc)camel_maildir_summary_class_init,
+					   NULL,
+					   (CamelObjectInitFunc)camel_maildir_summary_init,
+					   (CamelObjectFinalizeFunc)maildir_summary_finalize);
+	}
+
+	return type;
 }
 
 /**
@@ -153,8 +149,9 @@ camel_maildir_summary_finalize(CamelObject *obj)
 CamelMaildirSummary
 *camel_maildir_summary_new(struct _CamelFolder *folder, const gchar *filename, const gchar *maildirdir, CamelIndex *index)
 {
-	CamelMaildirSummary *o = (CamelMaildirSummary *)camel_object_new(camel_maildir_summary_get_type ());
+	CamelMaildirSummary *o;
 
+	o = (CamelMaildirSummary *)camel_object_new(camel_maildir_summary_get_type ());
 	((CamelFolderSummary *)o)->folder = folder;
 	if (folder) {
 		camel_db_set_collate (folder->parent_store->cdb_r, "dreceived", NULL, NULL);
@@ -248,11 +245,19 @@ static gchar *maildir_summary_encode_x_evolution(CamelLocalSummary *cls, const C
    both 'new' and 'add' will try and set the filename, this is not ideal ...
 */
 static CamelMessageInfo *
-maildir_summary_add (CamelLocalSummary *cls, CamelMimeMessage *msg, const CamelMessageInfo *info, CamelFolderChangeInfo *changes, CamelException *ex)
+maildir_summary_add (CamelLocalSummary *cls,
+                     CamelMimeMessage *msg,
+                     const CamelMessageInfo *info,
+                     CamelFolderChangeInfo *changes,
+                     CamelException *ex)
 {
+	CamelLocalSummaryClass *local_summary_class;
 	CamelMaildirMessageInfo *mi;
 
-	mi = (CamelMaildirMessageInfo *)((CamelLocalSummaryClass *) parent_class)->add(cls, msg, info, changes, ex);
+	/* Chain up to parent's add() method. */
+	local_summary_class = CAMEL_LOCAL_SUMMARY_CLASS (camel_maildir_summary_parent_class);
+	mi = (CamelMaildirMessageInfo *) local_summary_class->add (
+		cls, msg, info, changes, ex);
 	if (mi) {
 		if (info) {
 			camel_maildir_info_set_filename(mi, camel_maildir_summary_info_to_name(mi));
@@ -263,14 +268,15 @@ maildir_summary_add (CamelLocalSummary *cls, CamelMimeMessage *msg, const CamelM
 	return (CamelMessageInfo *)mi;
 }
 
-static CamelMessageInfo *message_info_new_from_header(CamelFolderSummary * s, struct _camel_header_raw *h)
+static CamelMessageInfo *
+message_info_new_from_header(CamelFolderSummary * s, struct _camel_header_raw *h)
 {
 	CamelMessageInfo *mi, *info;
 	CamelMaildirSummary *mds = (CamelMaildirSummary *)s;
 	CamelMaildirMessageInfo *mdi;
 	const gchar *uid;
 
-	mi = ((CamelFolderSummaryClass *) parent_class)->message_info_new_from_header(s, h);
+	mi = ((CamelFolderSummaryClass *) camel_maildir_summary_parent_class)->message_info_new_from_header(s, h);
 	/* assign the uid and new filename */
 	if (mi) {
 		mdi = (CamelMaildirMessageInfo *)mi;
@@ -332,7 +338,7 @@ message_info_free(CamelFolderSummary *s, CamelMessageInfo *mi)
 
 	g_free(mdi->filename);
 
-	((CamelFolderSummaryClass *) parent_class)->message_info_free(s, mi);
+	((CamelFolderSummaryClass *) camel_maildir_summary_parent_class)->message_info_free(s, mi);
 }
 
 static gchar *maildir_summary_next_uid_string(CamelFolderSummary *s)
@@ -387,7 +393,7 @@ message_info_load(CamelFolderSummary *s, FILE *in)
 	CamelMessageInfo *mi;
 	CamelMaildirSummary *mds = (CamelMaildirSummary *)s;
 
-	mi = ((CamelFolderSummaryClass *) parent_class)->message_info_load(s, in);
+	mi = ((CamelFolderSummaryClass *) camel_maildir_summary_parent_class)->message_info_load(s, in);
 	if (mi) {
 		gchar *name;
 
@@ -402,8 +408,12 @@ message_info_load(CamelFolderSummary *s, FILE *in)
 	return mi;
 }
 
-static gint maildir_summary_load(CamelLocalSummary *cls, gint forceindex, CamelException *ex)
+static gint
+maildir_summary_load (CamelLocalSummary *cls,
+                      gint forceindex,
+                      CamelException *ex)
 {
+	CamelLocalSummaryClass *local_summary_class;
 	gchar *cur;
 	DIR *dir;
 	struct dirent *d;
@@ -418,7 +428,8 @@ static gint maildir_summary_load(CamelLocalSummary *cls, gint forceindex, CamelE
 
 	dir = opendir(cur);
 	if (dir == NULL) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
 			_("Cannot open maildir directory path: %s: %s"),
 			cls->folder_path, g_strerror (errno));
 		g_free(cur);
@@ -448,7 +459,9 @@ static gint maildir_summary_load(CamelLocalSummary *cls, gint forceindex, CamelE
 	closedir(dir);
 	g_free(cur);
 
-	ret = ((CamelLocalSummaryClass *) parent_class)->load(cls, forceindex, ex);
+	/* Chain up to parent's load() method. */
+	local_summary_class = CAMEL_LOCAL_SUMMARY_CLASS (camel_maildir_summary_parent_class);
+	ret = local_summary_class->load (cls, forceindex, ex);
 
 	g_hash_table_destroy(mds->priv->load_map);
 	mds->priv->load_map = NULL;
@@ -537,7 +550,8 @@ maildir_summary_check(CamelLocalSummary *cls, CamelFolderChangeInfo *changes, Ca
 	   no longer exist */
 	dir = opendir(cur);
 	if (dir == NULL) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
 			_("Cannot open maildir directory path: %s: %s"),
 			cls->folder_path, g_strerror (errno));
 		g_free(cur);
@@ -698,8 +712,12 @@ maildir_summary_check(CamelLocalSummary *cls, CamelFolderChangeInfo *changes, Ca
 
 /* sync the summary with the ondisk files. */
 static gint
-maildir_summary_sync(CamelLocalSummary *cls, gboolean expunge, CamelFolderChangeInfo *changes, CamelException *ex)
+maildir_summary_sync (CamelLocalSummary *cls,
+                      gboolean expunge,
+                      CamelFolderChangeInfo *changes,
+                      CamelException *ex)
 {
+	CamelLocalSummaryClass *local_summary_class;
 	gint count, i;
 	CamelMessageInfo *info;
 	CamelMaildirMessageInfo *mdi;
@@ -768,6 +786,8 @@ maildir_summary_sync(CamelLocalSummary *cls, gboolean expunge, CamelFolderChange
 
 	camel_operation_end(NULL);
 
-	return ((CamelLocalSummaryClass *)parent_class)->sync(cls, expunge, changes, ex);
+	/* Chain up to parent's sync() method. */
+	local_summary_class = CAMEL_LOCAL_SUMMARY_CLASS (camel_maildir_summary_parent_class);
+	return local_summary_class->sync (cls, expunge, changes, ex);
 }
 
diff --git a/camel/providers/local/camel-maildir-summary.h b/camel/providers/local/camel-maildir-summary.h
index 3840cff..34af003 100644
--- a/camel/providers/local/camel-maildir-summary.h
+++ b/camel/providers/local/camel-maildir-summary.h
@@ -29,8 +29,9 @@
 
 G_BEGIN_DECLS
 
-typedef struct _CamelMaildirSummary	CamelMaildirSummary;
-typedef struct _CamelMaildirSummaryClass	CamelMaildirSummaryClass;
+typedef struct _CamelMaildirSummary CamelMaildirSummary;
+typedef struct _CamelMaildirSummaryClass CamelMaildirSummaryClass;
+typedef struct _CamelMaildirSummaryPrivate CamelMaildirSummaryPrivate;
 
 typedef struct _CamelMaildirMessageContentInfo {
 	CamelMessageContentInfo info;
@@ -49,15 +50,11 @@ typedef struct _CamelMaildirMessageInfo {
 
 struct _CamelMaildirSummary {
 	CamelLocalSummary parent;
-	struct _CamelMaildirSummaryPrivate *priv;
+	CamelMaildirSummaryPrivate *priv;
 };
 
 struct _CamelMaildirSummaryClass {
 	CamelLocalSummaryClass parent_class;
-
-	/* virtual methods */
-
-	/* signals */
 };
 
 CamelType	 camel_maildir_summary_get_type	(void);
diff --git a/camel/providers/local/camel-mbox-folder.c b/camel/providers/local/camel-mbox-folder.c
index 6102f63..df1c6dc 100644
--- a/camel/providers/local/camel-mbox-folder.c
+++ b/camel/providers/local/camel-mbox-folder.c
@@ -33,7 +33,6 @@
 #include <sys/types.h>
 #include <inttypes.h>
 
-#include <glib.h>
 #include <glib/gi18n-lib.h>
 #include <glib/gstdio.h>
 
@@ -47,65 +46,47 @@
 
 #define d(x) /*(printf("%s(%d): ", __FILE__, __LINE__),(x))*/
 
-static CamelLocalFolderClass *parent_class = NULL;
-
-/* Returns the class for a CamelMboxFolder */
-#define CMBOXF_CLASS(so) CAMEL_MBOX_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CMBOXS_CLASS(so) CAMEL_STORE_CLASS (CAMEL_OBJECT_GET_CLASS(so))
+static gpointer camel_mbox_folder_parent_class;
 
 static gint mbox_lock(CamelLocalFolder *lf, CamelLockType type, CamelException *ex);
 static void mbox_unlock(CamelLocalFolder *lf);
 
-static void mbox_append_message(CamelFolder *folder, CamelMimeMessage * message, const CamelMessageInfo * info,	gchar **appended_uid, CamelException *ex);
+static gboolean mbox_append_message(CamelFolder *folder, CamelMimeMessage * message, const CamelMessageInfo * info,	gchar **appended_uid, CamelException *ex);
 static CamelMimeMessage *mbox_get_message(CamelFolder *folder, const gchar * uid, CamelException *ex);
 static CamelLocalSummary *mbox_create_summary(CamelLocalFolder *lf, const gchar *path, const gchar *folder, CamelIndex *index);
 static gchar * mbox_get_filename (CamelFolder *folder, const gchar *uid, CamelException *ex);
 static gint mbox_cmp_uids (CamelFolder *folder, const gchar *uid1, const gchar *uid2);
 static void mbox_sort_uids (CamelFolder *folder, GPtrArray *uids);
 
-static void mbox_finalize(CamelObject * object);
-
 static void
-camel_mbox_folder_class_init(CamelMboxFolderClass * camel_mbox_folder_class)
+camel_mbox_folder_class_init (CamelMboxFolderClass *class)
 {
-	CamelFolderClass *camel_folder_class = CAMEL_FOLDER_CLASS(camel_mbox_folder_class);
-	CamelLocalFolderClass *lclass = (CamelLocalFolderClass *)camel_mbox_folder_class;
-
-	parent_class = (CamelLocalFolderClass *)camel_type_get_global_classfuncs(camel_local_folder_get_type());
-
-	/* virtual method definition */
-
-	/* virtual method overload */
-	camel_folder_class->append_message = mbox_append_message;
-	camel_folder_class->get_message = mbox_get_message;
-	camel_folder_class->get_filename = mbox_get_filename;
-	camel_folder_class->cmp_uids = mbox_cmp_uids;
-	camel_folder_class->sort_uids = mbox_sort_uids;
-
-	lclass->create_summary = mbox_create_summary;
-	lclass->lock = mbox_lock;
-	lclass->unlock = mbox_unlock;
+	CamelFolderClass *folder_class;
+	CamelLocalFolderClass *local_folder_class;
+
+	camel_mbox_folder_parent_class = (CamelLocalFolderClass *)camel_type_get_global_classfuncs(camel_local_folder_get_type());
+
+	folder_class = CAMEL_FOLDER_CLASS (class);
+	folder_class->append_message = mbox_append_message;
+	folder_class->get_message = mbox_get_message;
+	folder_class->get_filename = mbox_get_filename;
+	folder_class->cmp_uids = mbox_cmp_uids;
+	folder_class->sort_uids = mbox_sort_uids;
+
+	local_folder_class = CAMEL_LOCAL_FOLDER_CLASS (class);
+	local_folder_class->create_summary = mbox_create_summary;
+	local_folder_class->lock = mbox_lock;
+	local_folder_class->unlock = mbox_unlock;
 }
 
 static void
-mbox_init(gpointer object, gpointer klass)
+camel_mbox_folder_init (CamelMboxFolder *mbox_folder)
 {
-	/*CamelFolder *folder = object;*/
-	CamelMboxFolder *mbox_folder = object;
-
 	mbox_folder->lockfd = -1;
 }
 
-static void
-mbox_finalize(CamelObject * object)
-{
-	CamelMboxFolder *mbox_folder = (CamelMboxFolder *)object;
-
-	g_assert(mbox_folder->lockfd == -1);
-}
-
-CamelType camel_mbox_folder_get_type(void)
+CamelType
+camel_mbox_folder_get_type(void)
 {
 	static CamelType camel_mbox_folder_type = CAMEL_INVALID_TYPE;
 
@@ -115,8 +96,8 @@ CamelType camel_mbox_folder_get_type(void)
 							     sizeof(CamelMboxFolderClass),
 							     (CamelObjectClassInitFunc) camel_mbox_folder_class_init,
 							     NULL,
-							     (CamelObjectInitFunc) mbox_init,
-							     (CamelObjectFinalizeFunc) mbox_finalize);
+							     (CamelObjectInitFunc) camel_mbox_folder_init,
+							     (CamelObjectFinalizeFunc) NULL);
 	}
 
 	return camel_mbox_folder_type;
@@ -151,9 +132,10 @@ static gint mbox_lock(CamelLocalFolder *lf, CamelLockType type, CamelException *
 
 	mf->lockfd = open(lf->folder_path, O_RDWR|O_LARGEFILE, 0);
 	if (mf->lockfd == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Cannot create folder lock on %s: %s"),
-				      lf->folder_path, g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Cannot create folder lock on %s: %s"),
+			lf->folder_path, g_strerror (errno));
 		return -1;
 	}
 
@@ -178,8 +160,12 @@ static void mbox_unlock(CamelLocalFolder *lf)
 #endif
 }
 
-static void
-mbox_append_message(CamelFolder *folder, CamelMimeMessage * message, const CamelMessageInfo * info, gchar **appended_uid, CamelException *ex)
+static gboolean
+mbox_append_message (CamelFolder *folder,
+                     CamelMimeMessage *message,
+                     const CamelMessageInfo *info,
+                     gchar **appended_uid,
+                     CamelException *ex)
 {
 	CamelLocalFolder *lf = (CamelLocalFolder *)folder;
 	CamelStream *output_stream = NULL, *filter_stream = NULL;
@@ -194,7 +180,7 @@ mbox_append_message(CamelFolder *folder, CamelMimeMessage * message, const Camel
 #endif
 	/* If we can't lock, dont do anything */
 	if (camel_local_folder_lock(lf, CAMEL_LOCK_WRITE, ex) == -1)
-		return;
+		return FALSE;
 
 	d(printf("Appending message\n"));
 
@@ -213,11 +199,14 @@ mbox_append_message(CamelFolder *folder, CamelMimeMessage * message, const Camel
 	if ((camel_message_info_flags (mi) & CAMEL_MESSAGE_ATTACHMENTS) && !camel_mime_message_has_attachment (message))
 		camel_message_info_set_flags (mi, CAMEL_MESSAGE_ATTACHMENTS, 0);
 
-	output_stream = camel_stream_fs_new_with_name(lf->folder_path, O_WRONLY | O_APPEND | O_LARGEFILE, 0666);
+	output_stream = camel_stream_fs_new_with_name (
+		lf->folder_path, O_WRONLY | O_APPEND |
+		O_LARGEFILE, 0666);
 	if (output_stream == NULL) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Cannot open mailbox: %s: %s\n"),
-				      lf->folder_path, g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Cannot open mailbox: %s: %s\n"),
+			lf->folder_path, g_strerror (errno));
 		goto fail;
 	}
 
@@ -240,7 +229,7 @@ mbox_append_message(CamelFolder *folder, CamelMimeMessage * message, const Camel
 
 	/* and write the content to the filtering stream, that translates '\nFrom' into '\n>From' */
 	filter_stream = camel_stream_filter_new (output_stream);
-	filter_from = (CamelMimeFilter *) camel_mime_filter_from_new();
+	filter_from = camel_mime_filter_from_new();
 	camel_stream_filter_add((CamelStreamFilter *) filter_stream, filter_from);
 	camel_object_unref (filter_from);
 
@@ -277,16 +266,18 @@ mbox_append_message(CamelFolder *folder, CamelMimeMessage * message, const Camel
 	if (appended_uid)
 		*appended_uid = g_strdup(camel_message_info_uid(mi));
 
-	return;
+	return TRUE;
 
 fail_write:
 	if (errno == EINTR)
-		camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL,
-				     _("Mail append canceled"));
+		camel_exception_set (
+			ex, CAMEL_EXCEPTION_USER_CANCEL,
+			_("Mail append canceled"));
 	else
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Cannot append message to mbox file: %s: %s"),
-				      lf->folder_path, g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Cannot append message to mbox file: %s: %s"),
+			lf->folder_path, g_strerror (errno));
 
 	if (output_stream) {
 		gint fd;
@@ -324,6 +315,8 @@ fail:
 		camel_object_trigger_event((CamelObject *)folder, "folder_changed", lf->changes);
 		camel_folder_change_info_clear(lf->changes);
 	}
+
+	return FALSE;
 }
 
 static gchar *
@@ -350,8 +343,9 @@ mbox_get_filename (CamelFolder *folder, const gchar *uid, CamelException *ex)
 	info = (CamelMboxMessageInfo *) camel_folder_summary_uid(folder->summary, uid);
 
 	if (info == NULL) {
-		set_cannot_get_message_ex (ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID,
-				     uid, lf->folder_path, _("No such message"));
+		set_cannot_get_message_ex (
+			ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID,
+			uid, lf->folder_path, _("No such message"));
 		goto fail;
 	}
 
@@ -400,8 +394,9 @@ retry:
 	info = (CamelMboxMessageInfo *) camel_folder_summary_uid(folder->summary, uid);
 
 	if (info == NULL) {
-		set_cannot_get_message_ex (ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID,
-				     uid, lf->folder_path, _("No such message"));
+		set_cannot_get_message_ex (
+			ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID,
+			uid, lf->folder_path, _("No such message"));
 		goto fail;
 	}
 
@@ -420,8 +415,9 @@ retry:
 
 	fd = g_open(lf->folder_path, O_LARGEFILE | O_RDONLY | O_BINARY, 0);
 	if (fd == -1) {
-		set_cannot_get_message_ex (ex, CAMEL_EXCEPTION_SYSTEM,
-				      uid, lf->folder_path, g_strerror (errno));
+		set_cannot_get_message_ex (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			uid, lf->folder_path, g_strerror (errno));
 		goto fail;
 	}
 
@@ -450,15 +446,20 @@ retry:
 				goto retry;
 		}
 
-		set_cannot_get_message_ex (ex, CAMEL_EXCEPTION_FOLDER_INVALID,
-				     uid, lf->folder_path, _("The folder appears to be irrecoverably corrupted."));
+		set_cannot_get_message_ex (
+			ex, CAMEL_EXCEPTION_FOLDER_INVALID,
+			uid, lf->folder_path,
+			_("The folder appears to be irrecoverably corrupted."));
 		goto fail;
 	}
 
 	message = camel_mime_message_new();
 	if (camel_mime_part_construct_from_parser((CamelMimePart *)message, parser) == -1) {
-		set_cannot_get_message_ex (ex, errno==EINTR?CAMEL_EXCEPTION_USER_CANCEL:CAMEL_EXCEPTION_SYSTEM,
-				     uid, lf->folder_path, _("Message construction failed."));
+		set_cannot_get_message_ex (
+			ex, errno == EINTR ?
+			CAMEL_EXCEPTION_USER_CANCEL : CAMEL_EXCEPTION_SYSTEM,
+			uid, lf->folder_path,
+			_("Message construction failed."));
 		camel_object_unref (message);
 		message = NULL;
 		goto fail;
@@ -502,7 +503,7 @@ mbox_cmp_uids (CamelFolder *folder, const gchar *uid1, const gchar *uid2)
 static void
 mbox_sort_uids (CamelFolder *folder, GPtrArray *uids)
 {
-	g_return_if_fail (parent_class != NULL);
+	g_return_if_fail (camel_mbox_folder_parent_class != NULL);
 	g_return_if_fail (folder != NULL);
 
 	if (uids && uids->len > 1) {
@@ -510,7 +511,8 @@ mbox_sort_uids (CamelFolder *folder, GPtrArray *uids)
 
 		camel_exception_init (&ex);
 
-		camel_folder_summary_ensure_infos_loaded (folder->summary, uids->len, &ex);
+		camel_folder_summary_ensure_infos_loaded (
+			folder->summary, uids->len, &ex);
 
 		if (camel_exception_is_set (&ex))
 			g_warning ("%s: %s", G_STRFUNC, camel_exception_get_description (&ex));
@@ -518,5 +520,5 @@ mbox_sort_uids (CamelFolder *folder, GPtrArray *uids)
 		camel_exception_clear (&ex);
 	}
 
-	CAMEL_FOLDER_CLASS (parent_class)->sort_uids (folder, uids);
+	CAMEL_FOLDER_CLASS (camel_mbox_folder_parent_class)->sort_uids (folder, uids);
 }
diff --git a/camel/providers/local/camel-mbox-folder.h b/camel/providers/local/camel-mbox-folder.h
index fe91d53..7a61f33 100644
--- a/camel/providers/local/camel-mbox-folder.h
+++ b/camel/providers/local/camel-mbox-folder.h
@@ -32,24 +32,23 @@
 
 G_BEGIN_DECLS
 
-typedef struct {
+typedef struct _CamelMboxFolder CamelMboxFolder;
+typedef struct _CamelMboxFolderClass CamelMboxFolderClass;
+
+struct _CamelMboxFolder {
 	CamelLocalFolder parent;
 
 	gint lockfd;		/* for when we have a lock on the folder */
-} CamelMboxFolder;
+};
 
-typedef struct {
+struct _CamelMboxFolderClass {
 	CamelLocalFolderClass parent_class;
-
-	/* Virtual methods */
-
-} CamelMboxFolderClass;
+};
 
 /* public methods */
 /* flags are taken from CAMEL_STORE_FOLDER_* flags */
 CamelFolder *camel_mbox_folder_new(CamelStore *parent_store, const gchar *full_name, guint32 flags, CamelException *ex);
 
-/* Standard Camel function */
 CamelType camel_mbox_folder_get_type(void);
 
 G_END_DECLS
diff --git a/camel/providers/local/camel-mbox-store.c b/camel/providers/local/camel-mbox-store.c
index b1d40fb..13f5a6b 100644
--- a/camel/providers/local/camel-mbox-store.c
+++ b/camel/providers/local/camel-mbox-store.c
@@ -30,7 +30,6 @@
 #include <sys/stat.h>
 #include <sys/types.h>
 
-#include <glib.h>
 #include <glib/gi18n-lib.h>
 #include <glib/gstdio.h>
 
@@ -39,39 +38,35 @@
 
 #define d(x)
 
-static CamelLocalStoreClass *parent_class = NULL;
-
-/* Returns the class for a CamelMboxStore */
-#define CMBOXS_CLASS(so) CAMEL_MBOX_STORE_CLASS(CAMEL_OBJECT_GET_CLASS(so))
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS(CAMEL_OBJECT_GET_CLASS(so))
-#define CMBOXF_CLASS(so) CAMEL_MBOX_FOLDER_CLASS(CAMEL_OBJECT_GET_CLASS(so))
+static gpointer camel_mbox_store_parent_class;
 
 static CamelFolder *get_folder(CamelStore *store, const gchar *folder_name, guint32 flags, CamelException *ex);
-static void delete_folder(CamelStore *store, const gchar *folder_name, CamelException *ex);
-static void rename_folder(CamelStore *store, const gchar *old, const gchar *new, CamelException *ex);
+static gboolean delete_folder(CamelStore *store, const gchar *folder_name, CamelException *ex);
+static gboolean rename_folder(CamelStore *store, const gchar *old, const gchar *new, CamelException *ex);
 static CamelFolderInfo *create_folder(CamelStore *store, const gchar *parent_name, const gchar *folder_name, CamelException *ex);
 static CamelFolderInfo *get_folder_info(CamelStore *store, const gchar *top, guint32 flags, CamelException *ex);
 static gchar *mbox_get_meta_path(CamelLocalStore *ls, const gchar *full_name, const gchar *ext);
 static gchar *mbox_get_full_path(CamelLocalStore *ls, const gchar *full_name);
 
 static void
-camel_mbox_store_class_init(CamelMboxStoreClass *camel_mbox_store_class)
+camel_mbox_store_class_init (CamelMboxStoreClass *class)
 {
-	CamelStoreClass *camel_store_class = CAMEL_STORE_CLASS(camel_mbox_store_class);
-
-	parent_class =(CamelLocalStoreClass *)camel_type_get_global_classfuncs(camel_local_store_get_type());
-
-	/* virtual method overload */
-	camel_store_class->get_folder = get_folder;
-	camel_store_class->delete_folder = delete_folder;
-	camel_store_class->rename_folder = rename_folder;
-	camel_store_class->create_folder = create_folder;
-
-	camel_store_class->get_folder_info = get_folder_info;
-	camel_store_class->free_folder_info = camel_store_free_folder_info_full;
-
-	((CamelLocalStoreClass *)camel_store_class)->get_full_path = mbox_get_full_path;
-	((CamelLocalStoreClass *)camel_store_class)->get_meta_path = mbox_get_meta_path;
+	CamelStoreClass *store_class;
+	CamelLocalStoreClass *local_store_class;
+
+	camel_mbox_store_parent_class =(CamelLocalStoreClass *)camel_type_get_global_classfuncs(camel_local_store_get_type());
+
+	store_class = CAMEL_STORE_CLASS (class);
+	store_class->get_folder = get_folder;
+	store_class->delete_folder = delete_folder;
+	store_class->rename_folder = rename_folder;
+	store_class->create_folder = create_folder;
+	store_class->get_folder_info = get_folder_info;
+	store_class->free_folder_info = camel_store_free_folder_info_full;
+
+	local_store_class = CAMEL_LOCAL_STORE_CLASS (class);
+	local_store_class->get_full_path = mbox_get_full_path;
+	local_store_class->get_meta_path = mbox_get_meta_path;
 }
 
 CamelType
@@ -119,12 +114,18 @@ ignore_file(const gchar *filename, gboolean sbd)
 }
 
 static CamelFolder *
-get_folder(CamelStore *store, const gchar *folder_name, guint32 flags, CamelException *ex)
+get_folder (CamelStore *store,
+            const gchar *folder_name,
+            guint32 flags,
+            CamelException *ex)
 {
+	CamelStoreClass *store_class;
 	struct stat st;
 	gchar *name;
 
-	if (!((CamelStoreClass *) parent_class)->get_folder(store, folder_name, flags, ex))
+	/* Chain up to parent's get_folder() method. */
+	store_class = CAMEL_STORE_CLASS (camel_mbox_store_parent_class);
+	if (!store_class->get_folder (store, folder_name, flags, ex))
 		return NULL;
 
 	name = camel_local_store_get_full_path(store, folder_name);
@@ -135,17 +136,19 @@ get_folder(CamelStore *store, const gchar *folder_name, guint32 flags, CamelExce
 		gint fd;
 
 		if (errno != ENOENT) {
-			camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-					     _("Cannot get folder '%s': %s"),
-					     folder_name, g_strerror (errno));
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Cannot get folder '%s': %s"),
+				folder_name, g_strerror (errno));
 			g_free(name);
 			return NULL;
 		}
 
 		if ((flags & CAMEL_STORE_FOLDER_CREATE) == 0) {
-			camel_exception_setv(ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-					     _("Cannot get folder '%s': folder does not exist."),
-					     folder_name);
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
+				_("Cannot get folder '%s': folder does not exist."),
+				folder_name);
 			g_free(name);
 			return NULL;
 		}
@@ -154,8 +157,9 @@ get_folder(CamelStore *store, const gchar *folder_name, guint32 flags, CamelExce
 		basename = g_path_get_basename (folder_name);
 
 		if (basename[0] == '.' || ignore_file (basename, TRUE)) {
-			camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM,
-					     _("Cannot create a folder by this name."));
+			camel_exception_set (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Cannot create a folder by this name."));
 			g_free (name);
 			g_free (basename);
 			return NULL;
@@ -164,9 +168,10 @@ get_folder(CamelStore *store, const gchar *folder_name, guint32 flags, CamelExce
 
 		dirname = g_path_get_dirname(name);
 		if (g_mkdir_with_parents(dirname, 0700) == -1 && errno != EEXIST) {
-			camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-					     _("Cannot create folder '%s': %s"),
-					     folder_name, g_strerror (errno));
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Cannot create folder '%s': %s"),
+				folder_name, g_strerror (errno));
 			g_free(dirname);
 			g_free(name);
 			return NULL;
@@ -176,9 +181,10 @@ get_folder(CamelStore *store, const gchar *folder_name, guint32 flags, CamelExce
 
 		fd = g_open(name, O_LARGEFILE | O_WRONLY | O_CREAT | O_APPEND | O_BINARY, 0666);
 		if (fd == -1) {
-			camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-					     _("Cannot create folder '%s': %s"),
-					     folder_name, g_strerror (errno));
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Cannot create folder '%s': %s"),
+				folder_name, g_strerror (errno));
 			g_free(name);
 			return NULL;
 		}
@@ -186,15 +192,17 @@ get_folder(CamelStore *store, const gchar *folder_name, guint32 flags, CamelExce
 		g_free(name);
 		close(fd);
 	} else if (!S_ISREG(st.st_mode)) {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-				     _("Cannot get folder '%s': not a regular file."),
-				     folder_name);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Cannot get folder '%s': not a regular file."),
+			folder_name);
 		g_free(name);
 		return NULL;
 	} else if (flags & CAMEL_STORE_FOLDER_EXCL) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Cannot create folder '%s': folder exists."),
-				      folder_name);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Cannot create folder '%s': folder exists."),
+			folder_name);
 		g_free (name);
 		return NULL;
 	} else
@@ -203,7 +211,7 @@ get_folder(CamelStore *store, const gchar *folder_name, guint32 flags, CamelExce
 	return camel_mbox_folder_new(store, folder_name, flags, ex);
 }
 
-static void
+static gboolean
 delete_folder(CamelStore *store, const gchar *folder_name, CamelException *ex)
 {
 	CamelFolderInfo *fi;
@@ -216,45 +224,50 @@ delete_folder(CamelStore *store, const gchar *folder_name, CamelException *ex)
 	path = g_strdup_printf("%s.sbd", name);
 
 	if (g_rmdir(path) == -1 && errno != ENOENT) {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-				     _("Could not delete folder '%s':\n%s"),
-				     folder_name, g_strerror(errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not delete folder '%s':\n%s"),
+			folder_name, g_strerror (errno));
 		g_free(path);
 		g_free(name);
-		return;
+		return FALSE;
 	}
 
 	g_free(path);
 
 	if (g_stat(name, &st) == -1) {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-				     _("Could not delete folder '%s':\n%s"),
-				     folder_name, g_strerror(errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not delete folder '%s':\n%s"),
+			folder_name, g_strerror (errno));
 		g_free(name);
-		return;
+		return FALSE;
 	}
 
 	if (!S_ISREG(st.st_mode)) {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-				     _("'%s' is not a regular file."), name);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
+			_("'%s' is not a regular file."), name);
 		g_free(name);
-		return;
+		return FALSE;
 	}
 
 	if (st.st_size != 0) {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_FOLDER_NON_EMPTY,
-				     _("Folder '%s' is not empty. Not deleted."),
-				     folder_name);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_FOLDER_NON_EMPTY,
+			_("Folder '%s' is not empty. Not deleted."),
+			folder_name);
 		g_free(name);
-		return;
+		return FALSE;
 	}
 
 	if (g_unlink(name) == -1 && errno != ENOENT) {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-				     _("Could not delete folder '%s':\n%s"),
-				     name, g_strerror(errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not delete folder '%s':\n%s"),
+			name, g_strerror(errno));
 		g_free(name);
-		return;
+		return FALSE;
 	}
 
 	/* FIXME: we have to do our own meta cleanup here rather than
@@ -264,36 +277,39 @@ delete_folder(CamelStore *store, const gchar *folder_name, CamelException *ex)
 	 * paths itself */
 	path = camel_local_store_get_meta_path(store, folder_name, ".ev-summary");
 	if (g_unlink(path) == -1 && errno != ENOENT) {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-				     _("Could not delete folder summary file '%s': %s"),
-				     path, g_strerror(errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not delete folder summary file '%s': %s"),
+			path, g_strerror(errno));
 		g_free(path);
 		g_free(name);
-		return;
+		return FALSE;
 	}
 
 	g_free(path);
 
 	path = camel_local_store_get_meta_path(store, folder_name, ".ev-summary-meta");
 	if (g_unlink(path) == -1 && errno != ENOENT) {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-				     _("Could not delete folder summary file '%s': %s"),
-				     path, g_strerror(errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not delete folder summary file '%s': %s"),
+			path, g_strerror(errno));
 		g_free(path);
 		g_free(name);
-		return;
+		return FALSE;
 	}
 
 	g_free(path);
 
 	path = camel_local_store_get_meta_path(store, folder_name, ".ibex");
 	if (camel_text_index_remove(path) == -1 && errno != ENOENT) {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-				     _("Could not delete folder index file '%s': %s"),
-				     path, g_strerror(errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not delete folder index file '%s': %s"),
+			path, g_strerror(errno));
 		g_free(path);
 		g_free(name);
-		return;
+		return FALSE;
 	}
 
 	g_free(path);
@@ -312,13 +328,14 @@ delete_folder(CamelStore *store, const gchar *folder_name, CamelException *ex)
 		path = camel_local_store_get_meta_path(store, folder_name, ".cmeta");
 
 	if (g_unlink(path) == -1 && errno != ENOENT) {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-				     _("Could not delete folder meta file '%s': %s"),
-				     path, g_strerror(errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not delete folder meta file '%s': %s"),
+			path, g_strerror (errno));
 
 		g_free(path);
 		g_free(name);
-		return;
+		return FALSE;
 	}
 
 	g_free(path);
@@ -333,6 +350,8 @@ delete_folder(CamelStore *store, const gchar *folder_name, CamelException *ex)
 	camel_object_trigger_event(store, "folder_deleted", fi);
 
 	camel_folder_info_free(fi);
+
+	return TRUE;
 }
 
 static CamelFolderInfo *
@@ -347,14 +366,17 @@ create_folder(CamelStore *store, const gchar *parent_name, const gchar *folder_n
 	struct stat st;
 
 	if (!g_path_is_absolute(toplevel_dir)) {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-				     _("Store root %s is not an absolute path"), toplevel_dir);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
+			_("Store root %s is not an absolute path"),
+			toplevel_dir);
 		return NULL;
 	}
 
 	if (folder_name[0] == '.' || ignore_file(folder_name, TRUE)) {
-		camel_exception_set(ex, CAMEL_EXCEPTION_SYSTEM,
-				    _("Cannot create a folder by this name."));
+		camel_exception_set (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Cannot create a folder by this name."));
 		return NULL;
 	}
 
@@ -366,9 +388,11 @@ create_folder(CamelStore *store, const gchar *parent_name, const gchar *folder_n
 	path = camel_local_store_get_full_path(store, name);
 
 	dir = g_path_get_dirname(path);
-	if (g_mkdir_with_parents(dir, 0700) == -1 && errno != EEXIST) {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM, _("Cannot create directory '%s': %s."),
-				     dir, g_strerror(errno));
+	if (g_mkdir_with_parents(dir, 0777) == -1 && errno != EEXIST) {
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Cannot create directory '%s': %s."),
+			dir, g_strerror (errno));
 
 		g_free(path);
 		g_free(name);
@@ -380,10 +404,11 @@ create_folder(CamelStore *store, const gchar *parent_name, const gchar *folder_n
 	g_free(dir);
 
 	if (g_stat(path, &st) == 0 || errno != ENOENT) {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-				     _("Cannot create folder: %s: %s"),
-				     path, errno ? g_strerror(errno) :
-				     _("Folder already exists"));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
+			_("Cannot create folder: %s: %s"),
+			path, errno ? g_strerror (errno) :
+			_("Folder already exists"));
 
 		g_free(path);
 		g_free(name);
@@ -393,10 +418,12 @@ create_folder(CamelStore *store, const gchar *parent_name, const gchar *folder_n
 
 	g_free(path);
 
-	folder =((CamelStoreClass *)((CamelObject *) store)->klass)->get_folder(store, name, CAMEL_STORE_FOLDER_CREATE, ex);
+	folder = CAMEL_STORE_GET_CLASS (store)->get_folder (
+		store, name, CAMEL_STORE_FOLDER_CREATE, ex);
 	if (folder) {
 		camel_object_unref (folder);
-		info =((CamelStoreClass *)((CamelObject *) store)->klass)->get_folder_info(store, name, 0, ex);
+		info = CAMEL_STORE_GET_CLASS (store)->get_folder_info (
+			store, name, 0, ex);
 	}
 
 	g_free(name);
@@ -465,7 +492,7 @@ xrename(CamelStore *store, const gchar *old_name, const gchar *new_name, const g
 	return ret;
 }
 
-static void
+static gboolean
 rename_folder(CamelStore *store, const gchar *old, const gchar *new, CamelException *ex)
 {
 	CamelLocalFolder *folder = NULL;
@@ -473,9 +500,10 @@ rename_folder(CamelStore *store, const gchar *old, const gchar *new, CamelExcept
 	gint errnosav;
 
 	if (new[0] == '.' || ignore_file(new, TRUE)) {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-				     _("The new folder name is illegal."));
-		return;
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("The new folder name is illegal."));
+		return FALSE;
 	}
 
 	/* try to rollback failures, has obvious races */
@@ -486,14 +514,15 @@ rename_folder(CamelStore *store, const gchar *old, const gchar *new, CamelExcept
 	newdir = g_path_get_dirname(newibex);
 	if (g_mkdir_with_parents(newdir, 0700) == -1) {
 		if (errno != EEXIST) {
-			camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-					     _("Could not rename '%s': '%s': %s"),
-					     old, new, g_strerror(errno));
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Could not rename '%s': '%s': %s"),
+				old, new, g_strerror(errno));
 			g_free(oldibex);
 			g_free(newibex);
 			g_free(newdir);
 
-			return;
+			return FALSE;
 		}
 
 		g_free(newdir);
@@ -545,7 +574,7 @@ rename_folder(CamelStore *store, const gchar *old, const gchar *new, CamelExcept
 	if (folder)
 		camel_object_unref (folder);
 
-	return;
+	return TRUE;
 
 base_failed:
 	xrename(store, new, old, ".sbd", TRUE);
@@ -567,15 +596,18 @@ ibex_failed:
 		g_free(newdir);
 	}
 
-	camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-			     _("Could not rename '%s' to %s: %s"),
-			     old, new, g_strerror(errnosav));
+	camel_exception_setv (
+		ex, CAMEL_EXCEPTION_SYSTEM,
+		_("Could not rename '%s' to %s: %s"),
+		old, new, g_strerror(errnosav));
 
 	g_free(newibex);
 	g_free(oldibex);
 
 	if (folder)
 		camel_object_unref (folder);
+
+	return FALSE;
 }
 
 /* used to find out where we've visited already */
diff --git a/camel/providers/local/camel-mbox-store.h b/camel/providers/local/camel-mbox-store.h
index 7142d57..49f7ac1 100644
--- a/camel/providers/local/camel-mbox-store.h
+++ b/camel/providers/local/camel-mbox-store.h
@@ -31,19 +31,17 @@
 
 G_BEGIN_DECLS
 
-typedef struct {
-	CamelLocalStore parent;
+typedef struct _CamelMboxStore CamelMboxStore;
+typedef struct _CamelMboxStoreClass CamelMboxStoreClass;
 
-} CamelMboxStore;
+struct _CamelMboxStore {
+	CamelLocalStore parent;
+};
 
-typedef struct {
+struct _CamelMboxStoreClass {
 	CamelLocalStoreClass parent_class;
+};
 
-} CamelMboxStoreClass;
-
-/* public methods */
-
-/* Standard Camel function */
 CamelType camel_mbox_store_get_type (void);
 
 G_END_DECLS
diff --git a/camel/providers/local/camel-mbox-summary.c b/camel/providers/local/camel-mbox-summary.c
index c5d9860..256203d 100644
--- a/camel/providers/local/camel-mbox-summary.c
+++ b/camel/providers/local/camel-mbox-summary.c
@@ -32,7 +32,6 @@
 #include <sys/stat.h>
 #include <sys/types.h>
 
-#include <glib.h>
 #include <glib/gi18n-lib.h>
 #include <glib/gstdio.h>
 
@@ -73,10 +72,6 @@ static CamelMessageInfo *mbox_summary_add(CamelLocalSummary *cls, CamelMimeMessa
 static gint mbox_summary_sync_quick(CamelMboxSummary *cls, gboolean expunge, CamelFolderChangeInfo *changeinfo, CamelException *ex);
 static gint mbox_summary_sync_full(CamelMboxSummary *cls, gboolean expunge, CamelFolderChangeInfo *changeinfo, CamelException *ex);
 
-static void camel_mbox_summary_class_init (CamelMboxSummaryClass *klass);
-static void camel_mbox_summary_init       (CamelMboxSummary *obj);
-static void camel_mbox_summary_finalize   (CamelObject *obj);
-
 #ifdef STATUS_PINE
 /* Which status flags are stored in each separate header */
 #define STATUS_XSTATUS (CAMEL_MESSAGE_FLAGGED|CAMEL_MESSAGE_ANSWERED|CAMEL_MESSAGE_DELETED)
@@ -86,31 +81,14 @@ static void encode_status(guint32 flags, gchar status[8]);
 static guint32 decode_status(const gchar *status);
 #endif
 
-static CamelLocalSummaryClass *camel_mbox_summary_parent;
-
-CamelType
-camel_mbox_summary_get_type(void)
-{
-	static CamelType type = CAMEL_INVALID_TYPE;
-
-	if (type == CAMEL_INVALID_TYPE) {
-		type = camel_type_register(camel_local_summary_get_type(), "CamelMboxSummary",
-					   sizeof (CamelMboxSummary),
-					   sizeof (CamelMboxSummaryClass),
-					   (CamelObjectClassInitFunc) camel_mbox_summary_class_init,
-					   NULL,
-					   (CamelObjectInitFunc) camel_mbox_summary_init,
-					   (CamelObjectFinalizeFunc) camel_mbox_summary_finalize);
-	}
+static gpointer camel_mbox_summary_parent_class;
 
-	return type;
-}
 static gboolean
 mbox_info_set_user_flag(CamelMessageInfo *mi, const gchar *name, gboolean value)
 {
 	gint res;
 
-	res = ((CamelFolderSummaryClass *)camel_mbox_summary_parent)->info_set_user_flag(mi, name, value);
+	res = CAMEL_FOLDER_SUMMARY_CLASS (camel_mbox_summary_parent_class)->info_set_user_flag(mi, name, value);
 	if (res)
 		((CamelLocalMessageInfo *)mi)->info.flags |= CAMEL_MESSAGE_FOLDER_FLAGGED;
 
@@ -122,7 +100,7 @@ mbox_info_set_user_tag(CamelMessageInfo *mi, const gchar *name, const gchar *val
 {
 	gint res;
 
-	res = ((CamelFolderSummaryClass *)camel_mbox_summary_parent)->info_set_user_tag(mi, name, value);
+	res = CAMEL_FOLDER_SUMMARY_CLASS (camel_mbox_summary_parent_class)->info_set_user_tag(mi, name, value);
 	if (res)
 		((CamelLocalMessageInfo *)mi)->info.flags |= CAMEL_MESSAGE_FOLDER_FLAGGED;
 
@@ -140,66 +118,77 @@ mbox_info_set_flags(CamelMessageInfo *mi, guint32 flags, guint32 set)
 		set |= CAMEL_MESSAGE_FOLDER_XEVCHANGE|CAMEL_MESSAGE_FOLDER_FLAGGED;
 	}
 
-	return ((CamelFolderSummaryClass *)camel_mbox_summary_parent)->info_set_flags(mi, flags, set);
+	return CAMEL_FOLDER_SUMMARY_CLASS (camel_mbox_summary_parent_class)->info_set_flags(mi, flags, set);
 }
 #endif
 
 static void
-camel_mbox_summary_class_init(CamelMboxSummaryClass *klass)
+camel_mbox_summary_class_init (CamelMboxSummaryClass *class)
 {
-	CamelFolderSummaryClass *sklass = (CamelFolderSummaryClass *)klass;
-	CamelLocalSummaryClass *lklass = (CamelLocalSummaryClass *)klass;
-
-	camel_mbox_summary_parent = (CamelLocalSummaryClass *)camel_type_get_global_classfuncs(camel_local_summary_get_type());
-
-	sklass->message_info_size = sizeof(CamelMboxMessageInfo);
-	sklass->content_info_size = sizeof(CamelMboxMessageContentInfo);
-
-	sklass->summary_header_load = summary_header_load;
-	sklass->summary_header_save = summary_header_save;
-
-	sklass->summary_header_from_db = summary_header_from_db;
-	sklass->summary_header_to_db = summary_header_to_db;
-	sklass->message_info_from_db = message_info_from_db;
-	sklass->message_info_to_db = message_info_to_db;
-
-	sklass->message_info_new_from_header  = message_info_new_from_header;
-	sklass->message_info_new_from_parser = message_info_new_from_parser;
-	sklass->message_info_load = message_info_load;
-	sklass->message_info_save = message_info_save;
-	sklass->meta_message_info_save = meta_message_info_save;
-	/*sklass->message_info_free = message_info_free;*/
-
-	sklass->info_set_user_flag = mbox_info_set_user_flag;
-	sklass->info_set_user_tag = mbox_info_set_user_tag;
+	CamelFolderSummaryClass *folder_summary_class;
+	CamelLocalSummaryClass *local_summary_class;
+
+	camel_mbox_summary_parent_class = (CamelLocalSummaryClass *)camel_type_get_global_classfuncs(camel_local_summary_get_type());
+
+	folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (class);
+	folder_summary_class->message_info_size = sizeof (CamelMboxMessageInfo);
+	folder_summary_class->content_info_size = sizeof (CamelMboxMessageContentInfo);
+	folder_summary_class->summary_header_load = summary_header_load;
+	folder_summary_class->summary_header_save = summary_header_save;
+	folder_summary_class->summary_header_from_db = summary_header_from_db;
+	folder_summary_class->summary_header_to_db = summary_header_to_db;
+	folder_summary_class->message_info_from_db = message_info_from_db;
+	folder_summary_class->message_info_to_db = message_info_to_db;
+	folder_summary_class->message_info_new_from_header  = message_info_new_from_header;
+	folder_summary_class->message_info_new_from_parser = message_info_new_from_parser;
+	folder_summary_class->message_info_load = message_info_load;
+	folder_summary_class->message_info_save = message_info_save;
+	folder_summary_class->meta_message_info_save = meta_message_info_save;
+	folder_summary_class->info_set_user_flag = mbox_info_set_user_flag;
+	folder_summary_class->info_set_user_tag = mbox_info_set_user_tag;
 #ifdef STATUS_PINE
-	sklass->info_set_flags = mbox_info_set_flags;
+	folder_summary_class->info_set_flags = mbox_info_set_flags;
 #endif
 
-	lklass->encode_x_evolution = mbox_summary_encode_x_evolution;
-	lklass->check = mbox_summary_check;
-	lklass->sync = mbox_summary_sync;
+	local_summary_class = CAMEL_LOCAL_SUMMARY_CLASS (class);
+	local_summary_class->encode_x_evolution = mbox_summary_encode_x_evolution;
+	local_summary_class->check = mbox_summary_check;
+	local_summary_class->sync = mbox_summary_sync;
 #ifdef STATUS_PINE
-	lklass->add = mbox_summary_add;
+	local_summary_class->add = mbox_summary_add;
 #endif
 
-	klass->sync_quick = mbox_summary_sync_quick;
-	klass->sync_full = mbox_summary_sync_full;
+	class->sync_quick = mbox_summary_sync_quick;
+	class->sync_full = mbox_summary_sync_full;
 }
 
 static void
-camel_mbox_summary_init(CamelMboxSummary *obj)
+camel_mbox_summary_init (CamelMboxSummary *mbox_summary)
 {
-	struct _CamelFolderSummary *s = (CamelFolderSummary *)obj;
+	CamelFolderSummary *folder_summary;
+
+	folder_summary = CAMEL_FOLDER_SUMMARY (mbox_summary);
 
 	/* and a unique file version */
-	s->version += CAMEL_MBOX_SUMMARY_VERSION;
+	folder_summary->version += CAMEL_MBOX_SUMMARY_VERSION;
 }
 
-static void
-camel_mbox_summary_finalize(CamelObject *obj)
+CamelType
+camel_mbox_summary_get_type(void)
 {
-	/*CamelMboxSummary *mbs = CAMEL_MBOX_SUMMARY(obj);*/
+	static CamelType type = CAMEL_INVALID_TYPE;
+
+	if (type == CAMEL_INVALID_TYPE) {
+		type = camel_type_register(camel_local_summary_get_type(), "CamelMboxSummary",
+					   sizeof (CamelMboxSummary),
+					   sizeof (CamelMboxSummaryClass),
+					   (CamelObjectClassInitFunc) camel_mbox_summary_class_init,
+					   NULL,
+					   (CamelObjectInitFunc) camel_mbox_summary_init,
+					   (CamelObjectFinalizeFunc) NULL);
+	}
+
+	return type;
 }
 
 /**
@@ -212,8 +201,9 @@ camel_mbox_summary_finalize(CamelObject *obj)
 CamelMboxSummary *
 camel_mbox_summary_new(struct _CamelFolder *folder, const gchar *filename, const gchar *mbox_name, CamelIndex *index)
 {
-	CamelMboxSummary *new = (CamelMboxSummary *)camel_object_new(camel_mbox_summary_get_type());
+	CamelMboxSummary *new;
 
+	new = (CamelMboxSummary *)camel_object_new(camel_mbox_summary_get_type());
 	((CamelFolderSummary *)new)->folder = folder;
 	if (folder) {
 		CamelFolderSummary *summary = (CamelFolderSummary *)new;
@@ -257,7 +247,7 @@ summary_header_from_db (CamelFolderSummary *s, struct _CamelFIRecord *fir)
 	CamelMboxSummary *mbs = CAMEL_MBOX_SUMMARY(s);
 	gchar *part;
 
-	((CamelFolderSummaryClass *)camel_mbox_summary_parent)->summary_header_from_db(s, fir);
+	CAMEL_FOLDER_SUMMARY_CLASS (camel_mbox_summary_parent_class)->summary_header_from_db(s, fir);
 
 	part = fir->bdata;
 	if (part) {
@@ -273,7 +263,7 @@ summary_header_load(CamelFolderSummary *s, FILE *in)
 {
 	CamelMboxSummary *mbs = CAMEL_MBOX_SUMMARY(s);
 
-	if (((CamelFolderSummaryClass *)camel_mbox_summary_parent)->summary_header_load(s, in) == -1)
+	if (CAMEL_FOLDER_SUMMARY_CLASS (camel_mbox_summary_parent_class)->summary_header_load(s, in) == -1)
 		return -1;
 
 	/* legacy version */
@@ -291,11 +281,14 @@ summary_header_load(CamelFolderSummary *s, FILE *in)
 static CamelFIRecord *
 summary_header_to_db (CamelFolderSummary *s, CamelException *ex)
 {
+	CamelFolderSummaryClass *folder_summary_class;
 	CamelMboxSummary *mbs = CAMEL_MBOX_SUMMARY(s);
 	struct _CamelFIRecord *fir;
 	gchar *tmp;
 
-	fir = ((CamelFolderSummaryClass *)camel_mbox_summary_parent)->summary_header_to_db (s, ex);
+	/* Chain up to parent's summary_header_to_db() method. */
+	folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (camel_mbox_summary_parent_class);
+	fir = folder_summary_class->summary_header_to_db (s, ex);
 	if (fir) {
 		tmp = fir->bdata;
 		fir->bdata = g_strdup_printf ("%s %d %d", tmp ? tmp : "", CAMEL_MBOX_SUMMARY_VERSION, (gint) mbs->folder_size);
@@ -310,7 +303,7 @@ summary_header_save(CamelFolderSummary *s, FILE *out)
 {
 	CamelMboxSummary *mbs = CAMEL_MBOX_SUMMARY(s);
 
-	if (((CamelFolderSummaryClass *)camel_mbox_summary_parent)->summary_header_save(s, out) == -1)
+	if (CAMEL_FOLDER_SUMMARY_CLASS (camel_mbox_summary_parent_class)->summary_header_save(s, out) == -1)
 		return -1;
 
 	camel_file_util_encode_fixed_int32(out, CAMEL_MBOX_SUMMARY_VERSION);
@@ -324,7 +317,7 @@ message_info_new_from_header(CamelFolderSummary *s, struct _camel_header_raw *h)
 	CamelMboxMessageInfo *mi;
 	CamelMboxSummary *mbs = (CamelMboxSummary *)s;
 
-	mi = (CamelMboxMessageInfo *)((CamelFolderSummaryClass *)camel_mbox_summary_parent)->message_info_new_from_header(s, h);
+	mi = (CamelMboxMessageInfo *)CAMEL_FOLDER_SUMMARY_CLASS (camel_mbox_summary_parent_class)->message_info_new_from_header(s, h);
 	if (mi) {
 		const gchar *xev, *uid;
 		CamelMboxMessageInfo *info = NULL;
@@ -404,7 +397,7 @@ message_info_new_from_parser(CamelFolderSummary *s, CamelMimeParser *mp)
 {
 	CamelMessageInfo *mi;
 
-	mi = ((CamelFolderSummaryClass *)camel_mbox_summary_parent)->message_info_new_from_parser(s, mp);
+	mi = CAMEL_FOLDER_SUMMARY_CLASS (camel_mbox_summary_parent_class)->message_info_new_from_parser(s, mp);
 	if (mi) {
 		CamelMboxMessageInfo *mbi = (CamelMboxMessageInfo *)mi;
 
@@ -420,7 +413,7 @@ message_info_from_db(CamelFolderSummary *s, struct _CamelMIRecord *mir)
 	CamelMessageInfo *mi;
 	gchar *part;
 
-	mi = ((CamelFolderSummaryClass *)camel_mbox_summary_parent)->message_info_from_db(s, mir);
+	mi = CAMEL_FOLDER_SUMMARY_CLASS (camel_mbox_summary_parent_class)->message_info_from_db(s, mir);
 
 	if (mi) {
 		CamelMboxMessageInfo *mbi = (CamelMboxMessageInfo *)mi;
@@ -440,7 +433,7 @@ message_info_load(CamelFolderSummary *s, FILE *in)
 
 	io(printf("loading mbox message info\n"));
 
-	mi = ((CamelFolderSummaryClass *)camel_mbox_summary_parent)->message_info_load(s, in);
+	mi = CAMEL_FOLDER_SUMMARY_CLASS (camel_mbox_summary_parent_class)->message_info_load(s, in);
 	if (mi) {
 		CamelMboxMessageInfo *mbi = (CamelMboxMessageInfo *)mi;
 
@@ -461,7 +454,7 @@ meta_message_info_save(CamelFolderSummary *s, FILE *out_meta, FILE *out, CamelMe
 
 	io(printf("saving mbox message info\n"));
 
-	if (((CamelFolderSummaryClass *)camel_mbox_summary_parent)->meta_message_info_save(s, out_meta, out, mi) == -1
+	if (CAMEL_FOLDER_SUMMARY_CLASS (camel_mbox_summary_parent_class)->meta_message_info_save(s, out_meta, out, mi) == -1
 	    || camel_file_util_encode_off_t(out_meta, mbi->frompos) == -1)
 		return -1;
 
@@ -474,7 +467,7 @@ message_info_to_db(CamelFolderSummary *s, CamelMessageInfo *info)
 	CamelMboxMessageInfo *mbi = (CamelMboxMessageInfo *)info;
 	struct _CamelMIRecord *mir;
 
-	mir = ((CamelFolderSummaryClass *)camel_mbox_summary_parent)->message_info_to_db(s, info);
+	mir = CAMEL_FOLDER_SUMMARY_CLASS (camel_mbox_summary_parent_class)->message_info_to_db(s, info);
 	mir->bdata = g_strdup_printf("%lu", mbi->frompos);
 
 	return mir;
@@ -487,7 +480,7 @@ message_info_save(CamelFolderSummary *s, FILE *out, CamelMessageInfo *mi)
 
 	io(printf("saving mbox message info\n"));
 
-	if (((CamelFolderSummaryClass *)camel_mbox_summary_parent)->message_info_save(s, out, mi) == -1
+	if (CAMEL_FOLDER_SUMMARY_CLASS (camel_mbox_summary_parent_class)->message_info_save(s, out, mi) == -1
 	    || camel_file_util_encode_off_t (out, mbi->frompos) == -1)
 		return -1;
 
@@ -518,9 +511,10 @@ summary_update(CamelLocalSummary *cls, off_t offset, CamelFolderChangeInfo *chan
 	fd = g_open(cls->folder_path, O_LARGEFILE | O_RDONLY | O_BINARY, 0);
 	if (fd == -1) {
 		d(printf("%s failed to open: %s\n", cls->folder_path, g_strerror (errno)));
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Could not open folder: %s: %s"),
-				      cls->folder_path, g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not open folder: %s: %s"),
+			cls->folder_path, g_strerror (errno));
 		camel_operation_end(NULL);
 		return -1;
 	}
@@ -569,8 +563,10 @@ summary_update(CamelLocalSummary *cls, off_t offset, CamelFolderChangeInfo *chan
 
 		info = camel_folder_summary_add_from_parser(s, mp);
 		if (info == NULL) {
-			camel_exception_setv(ex, 1, _("Fatal mail parser error near position %ld in folder %s"),
-					     camel_mime_parser_tell(mp), cls->folder_path);
+			camel_exception_setv (
+				ex, 1,
+				_("Fatal mail parser error near position %ld in folder %s"),
+				camel_mime_parser_tell(mp), cls->folder_path);
 			ok = -1;
 			break;
 		}
@@ -645,9 +641,10 @@ mbox_summary_check(CamelLocalSummary *cls, CamelFolderChangeInfo *changes, Camel
 	/* check if the summary is up-to-date */
 	if (g_stat(cls->folder_path, &st) == -1) {
 		camel_folder_summary_clear(s);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Cannot check folder: %s: %s"),
-				      cls->folder_path, g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Cannot check folder: %s: %s"),
+			cls->folder_path, g_strerror (errno));
 		return -1;
 	}
 
@@ -713,9 +710,10 @@ mbox_summary_sync_full(CamelMboxSummary *mbs, gboolean expunge, CamelFolderChang
 
 	fd = g_open(cls->folder_path, O_LARGEFILE | O_RDONLY | O_BINARY, 0);
 	if (fd == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Could not open file: %s: %s"),
-				      cls->folder_path, g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not open file: %s: %s"),
+			cls->folder_path, g_strerror (errno));
 		camel_operation_end(NULL);
 		return -1;
 	}
@@ -725,9 +723,10 @@ mbox_summary_sync_full(CamelMboxSummary *mbs, gboolean expunge, CamelFolderChang
 	d(printf("Writing temporary file to %s\n", tmpname));
 	fdout = g_open(tmpname, O_LARGEFILE|O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0600);
 	if (fdout == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Cannot open temporary mailbox: %s"),
-				      g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Cannot open temporary mailbox: %s"),
+			g_strerror (errno));
 		goto error;
 	}
 
@@ -738,18 +737,20 @@ mbox_summary_sync_full(CamelMboxSummary *mbs, gboolean expunge, CamelFolderChang
 
 	if (close(fd) == -1) {
 		g_warning("Cannot close source folder: %s", g_strerror (errno));
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Could not close source folder %s: %s"),
-				      cls->folder_path, g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not close source folder %s: %s"),
+			cls->folder_path, g_strerror (errno));
 		fd = -1;
 		goto error;
 	}
 
 	if (close(fdout) == -1) {
 		g_warning("Cannot close temporary folder: %s", g_strerror (errno));
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Could not close temporary folder: %s"),
-				      g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not close temporary folder: %s"),
+			g_strerror (errno));
 		fdout = -1;
 		goto error;
 	}
@@ -762,9 +763,10 @@ mbox_summary_sync_full(CamelMboxSummary *mbs, gboolean expunge, CamelFolderChang
 #endif
 	if (g_rename(tmpname, cls->folder_path) == -1) {
 		g_warning("Cannot rename folder: %s", g_strerror (errno));
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Could not rename folder: %s"),
-				      g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not rename folder: %s"),
+			g_strerror (errno));
 		goto error;
 	}
 	tmpname = NULL;
@@ -833,9 +835,10 @@ mbox_summary_sync_quick(CamelMboxSummary *mbs, gboolean expunge, CamelFolderChan
 
 	fd = g_open(cls->folder_path, O_LARGEFILE|O_RDWR|O_BINARY, 0);
 	if (fd == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Could not open file: %s: %s"),
-				      cls->folder_path, g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not open file: %s: %s"),
+			cls->folder_path, g_strerror (errno));
 
 		camel_operation_end(NULL);
 		return -1;
@@ -844,9 +847,10 @@ mbox_summary_sync_quick(CamelMboxSummary *mbs, gboolean expunge, CamelFolderChan
 	/* need to dup since mime parser closes its fd once it is finalized */
 	pfd = dup(fd);
 	if (pfd == -1) {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-				     _("Could not store folder: %s"),
-				     g_strerror(errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not store folder: %s"),
+			g_strerror(errno));
 		close(fd);
 		return -1;
 	}
@@ -883,16 +887,18 @@ mbox_summary_sync_quick(CamelMboxSummary *mbs, gboolean expunge, CamelFolderChan
 
 		if (camel_mime_parser_step(mp, NULL, NULL) != CAMEL_MIME_PARSER_STATE_FROM) {
 			g_warning("Expected a From line here, didn't get it");
-			camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-					     _("Summary and folder mismatch, even after a sync"));
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Summary and folder mismatch, even after a sync"));
 			goto error;
 		}
 
 		if (camel_mime_parser_tell_start_from(mp) != info->frompos) {
 			g_warning("Didn't get the next message where I expected (%d) got %d instead",
 				  (gint)info->frompos, (gint)camel_mime_parser_tell_start_from(mp));
-			camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-					     _("Summary and folder mismatch, even after a sync"));
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Summary and folder mismatch, even after a sync"));
 			goto error;
 		}
 
@@ -943,9 +949,10 @@ mbox_summary_sync_quick(CamelMboxSummary *mbs, gboolean expunge, CamelFolderChan
 
 	if (close(fd) == -1) {
 		g_warning ("Cannot close source folder: %s", g_strerror (errno));
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Could not close source folder %s: %s"),
-				      cls->folder_path, g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not close source folder %s: %s"),
+			cls->folder_path, g_strerror (errno));
 		fd = -1;
 		goto error;
 	}
@@ -1017,10 +1024,10 @@ mbox_summary_sync(CamelLocalSummary *cls, gboolean expunge, CamelFolderChangeInf
 	ret = -1;
 	if (quick) {
 		if (work) {
-			ret = ((CamelMboxSummaryClass *)((CamelObject *)cls)->klass)->sync_quick(mbs, expunge, changeinfo, ex);
+			ret = CAMEL_MBOX_SUMMARY_GET_CLASS (cls)->sync_quick (mbs, expunge, changeinfo, ex);
 			if (ret == -1) {
 				g_warning("failed a quick-sync, trying a full sync");
-				camel_exception_clear(ex);
+				camel_exception_clear (ex);
 			}
 		} else {
 			ret = 0;
@@ -1028,13 +1035,14 @@ mbox_summary_sync(CamelLocalSummary *cls, gboolean expunge, CamelFolderChangeInf
 	}
 
 	if (ret == -1)
-		ret = ((CamelMboxSummaryClass *)((CamelObject *)cls)->klass)->sync_full(mbs, expunge, changeinfo, ex);
+		ret = CAMEL_MBOX_SUMMARY_GET_CLASS (cls)->sync_full (mbs, expunge, changeinfo, ex);
 	if (ret == -1)
 		return -1;
 
 	if (g_stat(cls->folder_path, &st) == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Unknown error: %s"), g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Unknown error: %s"), g_strerror (errno));
 		return -1;
 	}
 
@@ -1044,7 +1052,7 @@ mbox_summary_sync(CamelLocalSummary *cls, gboolean expunge, CamelFolderChangeInf
 		camel_folder_summary_touch(s);
 	}
 
-	return ((CamelLocalSummaryClass *)camel_mbox_summary_parent)->sync(cls, expunge, changeinfo, ex);
+	return CAMEL_LOCAL_SUMMARY_CLASS (camel_mbox_summary_parent_class)->sync(cls, expunge, changeinfo, ex);
 }
 
 gint
@@ -1070,9 +1078,10 @@ camel_mbox_summary_sync_mbox(CamelMboxSummary *cls, guint32 flags, CamelFolderCh
 	/* need to dup this because the mime-parser owns the fd after we give it to it */
 	fd = dup(fd);
 	if (fd == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Could not store folder: %s"),
-				      g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not store folder: %s"),
+			g_strerror (errno));
 		return -1;
 	}
 
@@ -1100,16 +1109,18 @@ camel_mbox_summary_sync_mbox(CamelMboxSummary *cls, guint32 flags, CamelFolderCh
 
 		if (camel_mime_parser_step(mp, &buffer, &len) != CAMEL_MIME_PARSER_STATE_FROM) {
 			g_warning("Expected a From line here, didn't get it %d", (gint)camel_mime_parser_tell(mp));
-			camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-					     _("Summary and folder mismatch, even after a sync"));
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Summary and folder mismatch, even after a sync"));
 			goto error;
 		}
 
 		if (camel_mime_parser_tell_start_from(mp) != info->frompos) {
 			g_warning("Didn't get the next message where I expected (%d) got %d instead",
 				  (gint)info->frompos, (gint)camel_mime_parser_tell_start_from(mp));
-			camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-					     _("Summary and folder mismatch, even after a sync"));
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Summary and folder mismatch, even after a sync"));
 			goto error;
 		}
 
@@ -1176,9 +1187,10 @@ camel_mbox_summary_sync_mbox(CamelMboxSummary *cls, guint32 flags, CamelFolderCh
 #endif
 			if (len == -1) {
 				d(printf("Error writing to temporary mailbox\n"));
-				camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-						      _("Writing to temporary mailbox failed: %s"),
-						      g_strerror (errno));
+				camel_exception_setv (
+					ex, CAMEL_EXCEPTION_SYSTEM,
+					_("Writing to temporary mailbox failed: %s"),
+					g_strerror (errno));
 				goto error;
 			}
 			info->info.info.flags &= 0xffff;
@@ -1193,18 +1205,20 @@ camel_mbox_summary_sync_mbox(CamelMboxSummary *cls, guint32 flags, CamelFolderCh
 			while (camel_mime_parser_step(mp, &buffer, &len) == CAMEL_MIME_PARSER_STATE_PRE_FROM) {
 				/*d(printf("copying mbox contents to temporary: '%.*s'\n", len, buffer));*/
 				if (write(fdout, buffer, len) != len) {
-					camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-							      _("Writing to temporary mailbox failed: %s: %s"),
-							      ((CamelLocalSummary *)cls)->folder_path,
-							      g_strerror (errno));
+					camel_exception_setv (
+						ex, CAMEL_EXCEPTION_SYSTEM,
+						_("Writing to temporary mailbox failed: %s: %s"),
+						((CamelLocalSummary *)cls)->folder_path,
+						g_strerror (errno));
 					goto error;
 				}
 			}
 
 			if (write(fdout, "\n", 1) != 1) {
-				camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-						      _("Writing to temporary mailbox failed: %s"),
-						      g_strerror (errno));
+				camel_exception_setv (
+					ex, CAMEL_EXCEPTION_SYSTEM,
+					_("Writing to temporary mailbox failed: %s"),
+					g_strerror (errno));
 				goto error;
 			}
 
@@ -1262,9 +1276,13 @@ camel_mbox_summary_sync_mbox(CamelMboxSummary *cls, guint32 flags, CamelFolderCh
 static CamelMessageInfo *
 mbox_summary_add(CamelLocalSummary *cls, CamelMimeMessage *msg, const CamelMessageInfo *info, CamelFolderChangeInfo *ci, CamelException *ex)
 {
+	CamelLocalSummaryClass *local_summary_class;
 	CamelMboxMessageInfo *mi;
 
-	mi = (CamelMboxMessageInfo *)((CamelLocalSummaryClass *)camel_mbox_summary_parent)->add(cls, msg, info, ci, ex);
+	/* Chain up to parent's add() method. */
+	local_summary_class = CAMEL_LOCAL_SUMMARY_CLASS (camel_mbox_summary_parent_class);
+	mi = (CamelMboxMessageInfo *) local_summary_class->add (
+		cls, msg, info, ci, ex);
 	if (mi && ((CamelMboxSummary *)cls)->xstatus) {
 		gchar status[8];
 
diff --git a/camel/providers/local/camel-mbox-summary.h b/camel/providers/local/camel-mbox-summary.h
index aa31677..4609860 100644
--- a/camel/providers/local/camel-mbox-summary.h
+++ b/camel/providers/local/camel-mbox-summary.h
@@ -29,10 +29,12 @@
 #define CAMEL_MBOX_SUMMARY(obj)         CAMEL_CHECK_CAST (obj, camel_mbox_summary_get_type (), CamelMboxSummary)
 #define CAMEL_MBOX_SUMMARY_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_mbox_summary_get_type (), CamelMboxSummaryClass)
 #define CAMEL_IS_MBOX_SUMMARY(obj)      CAMEL_CHECK_TYPE (obj, camel_mbox_summary_get_type ())
+#define CAMEL_MBOX_SUMMARY_GET_CLASS(obj) \
+	((CamelMboxSummaryClass *) CAMEL_OBJECT_GET_CLASS (obj))
 
 G_BEGIN_DECLS
 
-typedef struct _CamelMboxSummary      CamelMboxSummary;
+typedef struct _CamelMboxSummary CamelMboxSummary;
 typedef struct _CamelMboxSummaryClass CamelMboxSummaryClass;
 
 typedef struct _CamelMboxMessageContentInfo {
diff --git a/camel/providers/local/camel-mh-folder.c b/camel/providers/local/camel-mh-folder.c
index 5214fa5..05e2a91 100644
--- a/camel/providers/local/camel-mh-folder.c
+++ b/camel/providers/local/camel-mh-folder.c
@@ -42,48 +42,36 @@
 
 static CamelLocalFolderClass *parent_class = NULL;
 
-/* Returns the class for a CamelMhFolder */
-#define CMHF_CLASS(so) CAMEL_MH_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CMHS_CLASS(so) CAMEL_STORE_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-
 static CamelLocalSummary *mh_create_summary(CamelLocalFolder *lf, const gchar *path, const gchar *folder, CamelIndex *index);
 
-static void mh_append_message(CamelFolder * folder, CamelMimeMessage * message, const CamelMessageInfo *info, gchar **appended_uid, CamelException * ex);
+static gboolean mh_append_message(CamelFolder * folder, CamelMimeMessage * message, const CamelMessageInfo *info, gchar **appended_uid, CamelException * ex);
 static CamelMimeMessage *mh_get_message(CamelFolder * folder, const gchar * uid, CamelException * ex);
 static gchar * mh_get_filename (CamelFolder *folder, const gchar *uid, CamelException *ex);
 
-static void mh_finalize(CamelObject * object);
-
-static void camel_mh_folder_class_init(CamelObjectClass * camel_mh_folder_class)
+static void
+camel_mh_folder_class_init (CamelMhFolderClass *class)
 {
-	CamelFolderClass *camel_folder_class = CAMEL_FOLDER_CLASS(camel_mh_folder_class);
-	CamelLocalFolderClass *lclass = (CamelLocalFolderClass *)camel_mh_folder_class;
+	CamelFolderClass *folder_class;
+	CamelLocalFolderClass *local_folder_class;
 
 	parent_class = CAMEL_LOCAL_FOLDER_CLASS (camel_type_get_global_classfuncs(camel_local_folder_get_type()));
 
-	/* virtual method definition */
-
-	/* virtual method overload */
-	camel_folder_class->append_message = mh_append_message;
-	camel_folder_class->get_message = mh_get_message;
-	camel_folder_class->get_filename = mh_get_filename;
-
-	lclass->create_summary = mh_create_summary;
-}
+	folder_class = CAMEL_FOLDER_CLASS (class);
+	folder_class->append_message = mh_append_message;
+	folder_class->get_message = mh_get_message;
+	folder_class->get_filename = mh_get_filename;
 
-static void mh_init(gpointer object, gpointer klass)
-{
-	/*CamelFolder *folder = object;
-	  CamelMhFolder *mh_folder = object;*/
+	local_folder_class = CAMEL_LOCAL_FOLDER_CLASS (class);
+	local_folder_class->create_summary = mh_create_summary;
 }
 
-static void mh_finalize(CamelObject * object)
+static void
+camel_mh_folder_init (CamelMhFolder *mh_folder)
 {
-	/*CamelMhFolder *mh_folder = CAMEL_MH_FOLDER(object);*/
 }
 
-CamelType camel_mh_folder_get_type(void)
+CamelType
+camel_mh_folder_get_type(void)
 {
 	static CamelType camel_mh_folder_type = CAMEL_INVALID_TYPE;
 
@@ -93,34 +81,47 @@ CamelType camel_mh_folder_get_type(void)
 							   sizeof(CamelMhFolderClass),
 							   (CamelObjectClassInitFunc) camel_mh_folder_class_init,
 							   NULL,
-							   (CamelObjectInitFunc) mh_init,
-							   (CamelObjectFinalizeFunc) mh_finalize);
+							   (CamelObjectInitFunc) camel_mh_folder_init,
+							   (CamelObjectFinalizeFunc) NULL);
 	}
 
 	return camel_mh_folder_type;
 }
 
 CamelFolder *
-camel_mh_folder_new(CamelStore *parent_store, const gchar *full_name, guint32 flags, CamelException *ex)
+camel_mh_folder_new (CamelStore *parent_store,
+                     const gchar *full_name,
+                     guint32 flags,
+                     CamelException *ex)
 {
 	CamelFolder *folder;
 
 	d(printf("Creating mh folder: %s\n", full_name));
 
 	folder = (CamelFolder *)camel_object_new(CAMEL_MH_FOLDER_TYPE);
-	folder = (CamelFolder *)camel_local_folder_construct((CamelLocalFolder *)folder,
-							     parent_store, full_name, flags, ex);
+	folder = (CamelFolder *) camel_local_folder_construct (
+		CAMEL_LOCAL_FOLDER (folder),
+		parent_store, full_name, flags, ex);
 
 	return folder;
 }
 
-static CamelLocalSummary *mh_create_summary(CamelLocalFolder *lf, const gchar *path, const gchar *folder, CamelIndex *index)
+static CamelLocalSummary *
+mh_create_summary (CamelLocalFolder *lf,
+                   const gchar *path,
+                   const gchar *folder,
+                   CamelIndex *index)
 {
-	return (CamelLocalSummary *)camel_mh_summary_new((CamelFolder *)lf, path, folder, index);
+	return (CamelLocalSummary *) camel_mh_summary_new (
+		CAMEL_FOLDER (lf), path, folder, index);
 }
 
-static void
-mh_append_message (CamelFolder *folder, CamelMimeMessage *message, const CamelMessageInfo *info, gchar **appended_uid, CamelException *ex)
+static gboolean
+mh_append_message (CamelFolder *folder,
+                   CamelMimeMessage *message,
+                   const CamelMessageInfo *info,
+                   gchar **appended_uid,
+                   CamelException *ex)
 {
 	CamelLocalFolder *lf = (CamelLocalFolder *)folder;
 	CamelStream *output_stream;
@@ -133,11 +134,11 @@ mh_append_message (CamelFolder *folder, CamelMimeMessage *message, const CamelMe
 
 	/* If we can't lock, don't do anything */
 	if (camel_local_folder_lock (lf, CAMEL_LOCK_WRITE, ex) == -1)
-		return;
+		return FALSE;
 
 	/* add it to the summary/assign the uid, etc */
 	mi = camel_local_summary_add((CamelLocalSummary *)folder->summary, message, info, lf->changes, ex);
-	if (camel_exception_is_set (ex))
+	if (mi == NULL)
 		goto check_changed;
 
 	if ((camel_message_info_flags (mi) & CAMEL_MESSAGE_ATTACHMENTS) && !camel_mime_message_has_attachment (message))
@@ -147,7 +148,8 @@ mh_append_message (CamelFolder *folder, CamelMimeMessage *message, const CamelMe
 
 	/* write it out, use the uid we got from the summary */
 	name = g_strdup_printf("%s/%s", lf->folder_path, camel_message_info_uid(mi));
-	output_stream = camel_stream_fs_new_with_name(name, O_WRONLY|O_CREAT, 0600);
+	output_stream = camel_stream_fs_new_with_name (
+		name, O_WRONLY|O_CREAT, 0600);
 	if (output_stream == NULL)
 		goto fail_write;
 
@@ -172,12 +174,14 @@ mh_append_message (CamelFolder *folder, CamelMimeMessage *message, const CamelMe
 					 camel_message_info_uid (mi));
 
 	if (errno == EINTR)
-		camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL,
-				     _("MH append message canceled"));
+		camel_exception_set (
+			ex, CAMEL_EXCEPTION_USER_CANCEL,
+			_("MH append message canceled"));
 	else
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Cannot append message to mh folder: %s: %s"),
-				      name, g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Cannot append message to mh folder: %s: %s"),
+			name, g_strerror (errno));
 
 	if (output_stream) {
 		camel_object_unref (CAMEL_OBJECT (output_stream));
@@ -193,16 +197,24 @@ mh_append_message (CamelFolder *folder, CamelMimeMessage *message, const CamelMe
 		camel_object_trigger_event (CAMEL_OBJECT (folder), "folder_changed", lf->changes);
 		camel_folder_change_info_clear (lf->changes);
 	}
+
+	return TRUE;
 }
 
-static gchar * mh_get_filename (CamelFolder *folder, const gchar *uid, CamelException *ex)
+static gchar *
+mh_get_filename (CamelFolder *folder,
+                 const gchar *uid,
+                 CamelException *ex)
 {
 	CamelLocalFolder *lf = (CamelLocalFolder *)folder;
 
 	return g_strdup_printf("%s/%s", lf->folder_path, uid);
 }
 
-static CamelMimeMessage *mh_get_message(CamelFolder * folder, const gchar * uid, CamelException * ex)
+static CamelMimeMessage *
+mh_get_message (CamelFolder *folder,
+                const gchar *uid,
+                CamelException * ex)
 {
 	CamelLocalFolder *lf = (CamelLocalFolder *)folder;
 	CamelStream *message_stream = NULL;
@@ -217,8 +229,9 @@ static CamelMimeMessage *mh_get_message(CamelFolder * folder, const gchar * uid,
 
 	/* get the message summary info */
 	if ((info = camel_folder_summary_uid(folder->summary, uid)) == NULL) {
-		set_cannot_get_message_ex (ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID,
-				     uid, lf->folder_path, _("No such message"));
+		set_cannot_get_message_ex (
+			ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID,
+			uid, lf->folder_path, _("No such message"));
 		goto fail;
 	}
 
@@ -227,15 +240,18 @@ static CamelMimeMessage *mh_get_message(CamelFolder * folder, const gchar * uid,
 
 	name = g_strdup_printf("%s/%s", lf->folder_path, uid);
 	if ((message_stream = camel_stream_fs_new_with_name(name, O_RDONLY, 0)) == NULL) {
-		set_cannot_get_message_ex (ex, CAMEL_EXCEPTION_SYSTEM,
-				      name, lf->folder_path, g_strerror (errno));
+		set_cannot_get_message_ex (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			name, lf->folder_path, g_strerror (errno));
 		goto fail;
 	}
 
 	message = camel_mime_message_new();
 	if (camel_data_wrapper_construct_from_stream((CamelDataWrapper *)message, message_stream) == -1) {
-		set_cannot_get_message_ex (ex, CAMEL_EXCEPTION_SYSTEM,
-				      name, lf->folder_path, _("Message construction failed."));
+		set_cannot_get_message_ex (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			name, lf->folder_path,
+			_("Message construction failed."));
 		camel_object_unref (message);
 		message = NULL;
 
diff --git a/camel/providers/local/camel-mh-folder.h b/camel/providers/local/camel-mh-folder.h
index c9d0af6..7304ba3 100644
--- a/camel/providers/local/camel-mh-folder.h
+++ b/camel/providers/local/camel-mh-folder.h
@@ -32,22 +32,20 @@
 
 G_BEGIN_DECLS
 
-typedef struct {
-	CamelLocalFolder parent;
+typedef struct _CamelMhFolder CamelMhFolder;
+typedef struct _CamelMhFolderClass CamelMhFolderClass;
 
-} CamelMhFolder;
+struct _CamelMhFolder {
+	CamelLocalFolder parent;
+};
 
-typedef struct {
+struct _CamelMhFolderClass {
 	CamelLocalFolderClass parent_class;
-
-	/* Virtual methods */
-
-} CamelMhFolderClass;
+};
 
 /* public methods */
 CamelFolder *camel_mh_folder_new(CamelStore *parent_store, const gchar *full_name, guint32 flags, CamelException *ex);
 
-/* Standard Camel function */
 CamelType camel_mh_folder_get_type(void);
 
 G_END_DECLS
diff --git a/camel/providers/local/camel-mh-store.c b/camel/providers/local/camel-mh-store.c
index 00a1774..b225f7e 100644
--- a/camel/providers/local/camel-mh-store.c
+++ b/camel/providers/local/camel-mh-store.c
@@ -35,40 +35,38 @@
 #include "camel-mh-store.h"
 #include "camel-mh-summary.h"
 
-static CamelLocalStoreClass *parent_class = NULL;
+static gpointer camel_mh_store_parent_class;
 
 #define d(x)
 
-/* Returns the class for a CamelMhStore */
-#define CMHS_CLASS(so) CAMEL_MH_STORE_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CMHF_CLASS(so) CAMEL_MH_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-
-static void construct (CamelService *service, CamelSession *session, CamelProvider *provider, CamelURL *url, CamelException *ex);
+static gboolean construct (CamelService *service, CamelSession *session, CamelProvider *provider, CamelURL *url, CamelException *ex);
 static CamelFolder *get_folder(CamelStore * store, const gchar *folder_name, guint32 flags, CamelException * ex);
 static CamelFolder *get_inbox (CamelStore *store, CamelException *ex);
-static void delete_folder(CamelStore * store, const gchar *folder_name, CamelException * ex);
-static void rename_folder(CamelStore *store, const gchar *old, const gchar *new, CamelException *ex);
+static gboolean delete_folder(CamelStore * store, const gchar *folder_name, CamelException * ex);
+static gboolean rename_folder(CamelStore *store, const gchar *old, const gchar *new, CamelException *ex);
 static CamelFolderInfo * get_folder_info (CamelStore *store, const gchar *top, guint32 flags, CamelException *ex);
 
-static void camel_mh_store_class_init(CamelObjectClass * camel_mh_store_class)
+static void
+camel_mh_store_class_init (CamelObjectClass *class)
 {
-	CamelStoreClass *camel_store_class = CAMEL_STORE_CLASS(camel_mh_store_class);
-	CamelServiceClass *camel_service_class = CAMEL_SERVICE_CLASS(camel_mh_store_class);
+	CamelServiceClass *service_class;
+	CamelStoreClass *store_class;
 
-	parent_class = (CamelLocalStoreClass *)camel_type_get_global_classfuncs(camel_local_store_get_type());
+	camel_mh_store_parent_class = (CamelLocalStoreClass *)camel_type_get_global_classfuncs(camel_local_store_get_type());
 
-	/* virtual method overload, use defaults for most */
-	camel_service_class->construct = construct;
+	service_class = CAMEL_SERVICE_CLASS (class);
+	service_class->construct = construct;
 
-	camel_store_class->get_folder = get_folder;
-	camel_store_class->get_inbox = get_inbox;
-	camel_store_class->delete_folder = delete_folder;
-	camel_store_class->rename_folder = rename_folder;
-	camel_store_class->get_folder_info = get_folder_info;
+	store_class = CAMEL_STORE_CLASS (class);
+	store_class->get_folder = get_folder;
+	store_class->get_inbox = get_inbox;
+	store_class->delete_folder = delete_folder;
+	store_class->rename_folder = rename_folder;
+	store_class->get_folder_info = get_folder_info;
 }
 
-CamelType camel_mh_store_get_type(void)
+CamelType
+camel_mh_store_get_type(void)
 {
 	static CamelType camel_mh_store_type = CAMEL_INVALID_TYPE;
 
@@ -85,17 +83,25 @@ CamelType camel_mh_store_get_type(void)
 	return camel_mh_store_type;
 }
 
-static void
-construct (CamelService *service, CamelSession *session, CamelProvider *provider, CamelURL *url, CamelException *ex)
+static gboolean
+construct (CamelService *service,
+           CamelSession *session,
+           CamelProvider *provider,
+           CamelURL *url,
+           CamelException *ex)
 {
+	CamelServiceClass *service_class;
 	CamelMhStore *mh_store = (CamelMhStore *)service;
 
-	CAMEL_SERVICE_CLASS (parent_class)->construct (service, session, provider, url, ex);
-	if (camel_exception_is_set (ex))
-		return;
+	/* Chain up to parent's construct() method. */
+	service_class = CAMEL_SERVICE_CLASS (camel_mh_store_parent_class);
+	if (!service_class->construct (service, session, provider, url, ex))
+		return FALSE;
 
 	if (camel_url_get_param(url, "dotfolders"))
 		mh_store->flags |= CAMEL_MH_DOTFOLDERS;
+
+	return TRUE;
 }
 
 enum {
@@ -107,7 +113,10 @@ enum {
 
 /* update the .folders file if it exists, or create it if it doesn't */
 static void
-folders_update(const gchar *root, gint mode, const gchar *folder, const gchar *new)
+folders_update (const gchar *root,
+                gint mode,
+                const gchar *folder,
+                const gchar *new)
 {
 	gchar *tmp, *tmpnew, *line = NULL;
 	CamelStream *stream, *in = NULL, *out = NULL;
@@ -116,19 +125,20 @@ folders_update(const gchar *root, gint mode, const gchar *folder, const gchar *n
 	tmpnew = g_alloca (strlen (root) + 16);
 	sprintf (tmpnew, "%s.folders~", root);
 
-	out = camel_stream_fs_new_with_name(tmpnew, O_WRONLY|O_CREAT|O_TRUNC, 0666);
+	out = camel_stream_fs_new_with_name (
+		tmpnew, O_WRONLY|O_CREAT|O_TRUNC, 0666);
 	if (out == NULL)
 		goto fail;
 
 	tmp = g_alloca (strlen (root) + 16);
 	sprintf (tmp, "%s.folders", root);
-	stream = camel_stream_fs_new_with_name(tmp, O_RDONLY, 0);
+	stream = camel_stream_fs_new_with_name (tmp, O_RDONLY, 0);
 	if (stream) {
 		in = camel_stream_buffer_new(stream, CAMEL_STREAM_BUFFER_READ);
 		camel_object_unref (stream);
 	}
 	if (in == NULL || stream == NULL) {
-		if (mode == UPDATE_ADD && camel_stream_printf(out, "%s\n", folder) == -1)
+		if (mode == UPDATE_ADD && camel_stream_printf (out, "%s\n", folder) == -1)
 			goto fail;
 		goto done;
 	}
@@ -195,36 +205,45 @@ fail:
 }
 
 static CamelFolder *
-get_folder(CamelStore * store, const gchar *folder_name, guint32 flags, CamelException * ex)
+get_folder (CamelStore *store,
+            const gchar *folder_name,
+            guint32 flags,
+            CamelException * ex)
 {
+	CamelStoreClass *store_class;
 	gchar *name;
 	struct stat st;
 
-	if (!((CamelStoreClass *)parent_class)->get_folder(store, folder_name, flags, ex))
+	/* Chain up to parent's get_folder() method. */
+	store_class = CAMEL_STORE_CLASS (camel_mh_store_parent_class);
+	if (store_class->get_folder (store, folder_name, flags, ex) == NULL)
 		return NULL;
 
 	name = g_strdup_printf("%s%s", CAMEL_LOCAL_STORE(store)->toplevel_dir, folder_name);
 
 	if (stat(name, &st) == -1) {
 		if (errno != ENOENT) {
-			camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-					     _("Cannot get folder '%s': %s"),
-					     folder_name, g_strerror (errno));
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Cannot get folder '%s': %s"),
+				folder_name, g_strerror (errno));
 			g_free (name);
 			return NULL;
 		}
 		if ((flags & CAMEL_STORE_FOLDER_CREATE) == 0) {
-			camel_exception_setv(ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-					     _("Cannot get folder '%s': folder does not exist."),
-					     folder_name);
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
+				_("Cannot get folder '%s': folder does not exist."),
+				folder_name);
 			g_free (name);
 			return NULL;
 		}
 
 		if (mkdir(name, 0777) != 0) {
-			camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-					     _("Could not create folder '%s': %s"),
-					     folder_name, g_strerror (errno));
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Could not create folder '%s': %s"),
+				folder_name, g_strerror (errno));
 			g_free (name);
 			return NULL;
 		}
@@ -234,13 +253,17 @@ get_folder(CamelStore * store, const gchar *folder_name, guint32 flags, CamelExc
 		if (((CamelMhStore *)store)->flags & CAMEL_MH_DOTFOLDERS)
 			folders_update(((CamelLocalStore *)store)->toplevel_dir, UPDATE_ADD, folder_name, NULL);
 	} else if (!S_ISDIR(st.st_mode)) {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-				     _("Cannot get folder '%s': not a directory."), folder_name);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
+			_("Cannot get folder '%s': not a directory."),
+			folder_name);
 		g_free (name);
 		return NULL;
 	} else if (flags & CAMEL_STORE_FOLDER_EXCL) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Cannot create folder '%s': folder exists."), folder_name);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Cannot create folder '%s': folder exists."),
+			folder_name);
 		g_free (name);
 		return NULL;
 	}
@@ -251,23 +274,29 @@ get_folder(CamelStore * store, const gchar *folder_name, guint32 flags, CamelExc
 }
 
 static CamelFolder *
-get_inbox (CamelStore *store, CamelException *ex)
+get_inbox (CamelStore *store,
+           CamelException *ex)
 {
 	return get_folder (store, "inbox", 0, ex);
 }
 
-static void delete_folder(CamelStore * store, const gchar *folder_name, CamelException * ex)
+static gboolean
+delete_folder (CamelStore *store,
+               const gchar *folder_name,
+               CamelException *ex)
 {
+	CamelStoreClass *store_class;
 	gchar *name;
 
 	/* remove folder directory - will fail if not empty */
 	name = g_strdup_printf("%s%s", CAMEL_LOCAL_STORE(store)->toplevel_dir, folder_name);
 	if (rmdir(name) == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Could not delete folder '%s': %s"),
-				      folder_name, g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not delete folder '%s': %s"),
+			folder_name, g_strerror (errno));
 		g_free(name);
-		return;
+		return FALSE;
 	}
 	g_free(name);
 
@@ -275,31 +304,36 @@ static void delete_folder(CamelStore * store, const gchar *folder_name, CamelExc
 	if (((CamelMhStore *)store)->flags & CAMEL_MH_DOTFOLDERS)
 		folders_update(((CamelLocalStore *)store)->toplevel_dir, UPDATE_REMOVE, folder_name, NULL);
 
-	/* and remove metadata */
-	((CamelStoreClass *)parent_class)->delete_folder(store, folder_name, ex);
+	/* Chain up to parent's delete_folder() method. */
+	store_class = CAMEL_STORE_CLASS (camel_mh_store_parent_class);
+	return store_class->delete_folder (store, folder_name, ex);
 }
 
-static void
-rename_folder(CamelStore *store, const gchar *old, const gchar *new, CamelException *ex)
+static gboolean
+rename_folder (CamelStore *store,
+               const gchar *old,
+               const gchar *new,
+               CamelException *ex)
 {
-	CamelException e;
+	CamelStoreClass *store_class;
 
-	camel_exception_init(&e);
-	((CamelStoreClass *)parent_class)->rename_folder(store, old, new, &e);
-	if (camel_exception_is_set(&e)) {
-		camel_exception_xfer(ex, &e);
-		return;
-	}
-	camel_exception_clear(&e);
+	/* Chain up to parent's rename_folder() method. */
+	store_class = CAMEL_STORE_CLASS (camel_mh_store_parent_class);
+	if (!store_class->rename_folder (store, old, new, ex))
+		return FALSE;
 
 	if (((CamelMhStore *)store)->flags & CAMEL_MH_DOTFOLDERS) {
 		/* yeah this is messy, but so is mh! */
 		folders_update(((CamelLocalStore *)store)->toplevel_dir, UPDATE_RENAME, old, new);
 	}
+
+	return TRUE;
 }
 
 static void
-fill_fi(CamelStore *store, CamelFolderInfo *fi, guint32 flags)
+fill_fi (CamelStore *store,
+         CamelFolderInfo *fi,
+         guint32 flags)
 {
 	CamelFolder *folder;
 
@@ -341,7 +375,11 @@ fill_fi(CamelStore *store, CamelFolderInfo *fi, guint32 flags)
 }
 
 static CamelFolderInfo *
-folder_info_new (CamelStore *store, CamelURL *url, const gchar *root, const gchar *path, guint32 flags)
+folder_info_new (CamelStore *store,
+                 CamelURL *url,
+                 const gchar *root,
+                 const gchar *path,
+                 guint32 flags)
 {
 	/* FIXME: need to set fi->flags = CAMEL_FOLDER_NOSELECT (and possibly others) when appropriate */
 	CamelFolderInfo *fi;
@@ -372,8 +410,14 @@ struct _inode {
 /* Scan path, under root, for directories to add folders for.  Both
  * root and path should have a trailing "/" if they aren't empty. */
 static void
-recursive_scan (CamelStore *store, CamelURL *url, CamelFolderInfo **fip, CamelFolderInfo *parent,
-		GHashTable *visited, const gchar *root, const gchar *path, guint32 flags)
+recursive_scan (CamelStore *store,
+                CamelURL *url,
+                CamelFolderInfo **fip,
+                CamelFolderInfo *parent,
+                GHashTable *visited,
+                const gchar *root,
+                const gchar *path,
+                guint32 flags)
 {
 	gchar *fullpath, *tmp;
 	DIR *dp;
@@ -443,7 +487,12 @@ recursive_scan (CamelStore *store, CamelURL *url, CamelFolderInfo **fip, CamelFo
 
 /* scan a .folders file */
 static void
-folders_scan(CamelStore *store, CamelURL *url, const gchar *root, const gchar *top, CamelFolderInfo **fip, guint32 flags)
+folders_scan (CamelStore *store,
+              CamelURL *url,
+              const gchar *root,
+              const gchar *top,
+              CamelFolderInfo **fip,
+              guint32 flags)
 {
 	CamelFolderInfo *fi;
 	gchar  line[512], *path, *tmp;
@@ -524,27 +573,33 @@ folders_scan(CamelStore *store, CamelURL *url, const gchar *root, const gchar *t
 }
 
 /* FIXME: move to camel-local, this is shared with maildir code */
-static guint inode_hash(gconstpointer d)
+static guint
+inode_hash (gconstpointer d)
 {
 	const struct _inode *v = d;
 
 	return v->inode ^ v->dnode;
 }
 
-static gboolean inode_equal(gconstpointer a, gconstpointer b)
+static gboolean
+inode_equal (gconstpointer a, gconstpointer b)
 {
 	const struct _inode *v1 = a, *v2 = b;
 
 	return v1->inode == v2->inode && v1->dnode == v2->dnode;
 }
 
-static void inode_free(gpointer k, gpointer v, gpointer d)
+static void
+inode_free (gpointer k, gpointer v, gpointer d)
 {
 	g_free(k);
 }
 
 static CamelFolderInfo *
-get_folder_info (CamelStore *store, const gchar *top, guint32 flags, CamelException *ex)
+get_folder_info (CamelStore *store,
+                 const gchar *top,
+                 guint32 flags,
+                 CamelException *ex)
 {
 	CamelFolderInfo *fi = NULL;
 	CamelURL *url;
diff --git a/camel/providers/local/camel-mh-store.h b/camel/providers/local/camel-mh-store.h
index 05fa55a..2558590 100644
--- a/camel/providers/local/camel-mh-store.h
+++ b/camel/providers/local/camel-mh-store.h
@@ -31,24 +31,23 @@
 
 G_BEGIN_DECLS
 
+typedef struct _CamelMhStore CamelMhStore;
+typedef struct _CamelMhStoreClass CamelMhStoreClass;
+
 enum {
 	CAMEL_MH_DOTFOLDERS = (1<<0) /* update/use .folders file */
 };
 
-typedef struct {
+struct _CamelMhStore {
 	CamelLocalStore parent;
 
 	guint32 flags;
-} CamelMhStore;
+};
 
-typedef struct {
+struct _CamelMhStoreClass {
 	CamelLocalStoreClass parent_class;
+};
 
-} CamelMhStoreClass;
-
-/* public methods */
-
-/* Standard Camel function */
 CamelType camel_mh_store_get_type(void);
 
 G_END_DECLS
diff --git a/camel/providers/local/camel-mh-summary.c b/camel/providers/local/camel-mh-summary.c
index 27c87de..e00a2d9 100644
--- a/camel/providers/local/camel-mh-summary.c
+++ b/camel/providers/local/camel-mh-summary.c
@@ -47,68 +47,63 @@ static gint mh_summary_sync(CamelLocalSummary *cls, gboolean expunge, CamelFolde
 
 static gchar *mh_summary_next_uid_string(CamelFolderSummary *s);
 
-static void camel_mh_summary_class_init	(CamelMhSummaryClass *class);
-static void camel_mh_summary_init	(CamelMhSummary *gspaper);
-static void camel_mh_summary_finalize	(CamelObject *obj);
-
-#define _PRIVATE(x) (((CamelMhSummary *)(x))->priv)
-
 struct _CamelMhSummaryPrivate {
 	gchar *current_uid;
 };
 
-static CamelLocalSummaryClass *parent_class;
+static gpointer camel_mh_summary_parent_class;
 
-CamelType
-camel_mh_summary_get_type (void)
+static void
+mh_summary_finalize (CamelMhSummary *mh_summary)
 {
-	static CamelType type = CAMEL_INVALID_TYPE;
-
-	if (type == CAMEL_INVALID_TYPE) {
-		type = camel_type_register(camel_local_summary_get_type (), "CamelMhSummary",
-					   sizeof(CamelMhSummary),
-					   sizeof(CamelMhSummaryClass),
-					   (CamelObjectClassInitFunc)camel_mh_summary_class_init,
-					   NULL,
-					   (CamelObjectInitFunc)camel_mh_summary_init,
-					   (CamelObjectFinalizeFunc)camel_mh_summary_finalize);
-	}
-
-	return type;
+	g_free (mh_summary->priv);
 }
 
 static void
 camel_mh_summary_class_init (CamelMhSummaryClass *class)
 {
-	CamelFolderSummaryClass *sklass = (CamelFolderSummaryClass *) class;
-	CamelLocalSummaryClass *lklass = (CamelLocalSummaryClass *)class;
+	CamelFolderSummaryClass *folder_summary_class;
+	CamelLocalSummaryClass *local_summary_class;
 
-	parent_class = (CamelLocalSummaryClass *)camel_type_get_global_classfuncs(camel_local_summary_get_type ());
+	camel_mh_summary_parent_class = (CamelLocalSummaryClass *)camel_type_get_global_classfuncs(camel_local_summary_get_type ());
 
-	/* override methods */
-	sklass->next_uid_string = mh_summary_next_uid_string;
+	folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (class);
+	folder_summary_class->next_uid_string = mh_summary_next_uid_string;
 
-	lklass->check = mh_summary_check;
-	lklass->sync = mh_summary_sync;
-	/*lklass->add = mh_summary_add;*/
+	local_summary_class = CAMEL_LOCAL_SUMMARY_CLASS (class);
+	local_summary_class->check = mh_summary_check;
+	local_summary_class->sync = mh_summary_sync;
 }
 
 static void
-camel_mh_summary_init (CamelMhSummary *o)
+camel_mh_summary_init (CamelMhSummary *mh_summary)
 {
-	struct _CamelFolderSummary *s = (CamelFolderSummary *) o;
+	CamelFolderSummary *folder_summary;
+
+	mh_summary->priv = g_new0 (CamelMhSummaryPrivate, 1);
+
+	folder_summary = CAMEL_FOLDER_SUMMARY (mh_summary);
 
-	o->priv = g_malloc0(sizeof(*o->priv));
 	/* set unique file version */
-	s->version += CAMEL_MH_SUMMARY_VERSION;
+	folder_summary->version += CAMEL_MH_SUMMARY_VERSION;
 }
 
-static void
-camel_mh_summary_finalize(CamelObject *obj)
+CamelType
+camel_mh_summary_get_type (void)
 {
-	CamelMhSummary *o = (CamelMhSummary *)obj;
+	static CamelType type = CAMEL_INVALID_TYPE;
 
-	g_free(o->priv);
+	if (type == CAMEL_INVALID_TYPE) {
+		type = camel_type_register(camel_local_summary_get_type (), "CamelMhSummary",
+					   sizeof(CamelMhSummary),
+					   sizeof(CamelMhSummaryClass),
+					   (CamelObjectClassInitFunc)camel_mh_summary_class_init,
+					   NULL,
+					   (CamelObjectInitFunc)camel_mh_summary_init,
+					   (CamelObjectFinalizeFunc)mh_summary_finalize);
+	}
+
+	return type;
 }
 
 /**
@@ -118,10 +113,15 @@ camel_mh_summary_finalize(CamelObject *obj)
  *
  * Returns: A new #CamelMhSummary object.
  **/
-CamelMhSummary	*camel_mh_summary_new(struct _CamelFolder *folder, const gchar *filename, const gchar *mhdir, CamelIndex *index)
+CamelMhSummary *
+camel_mh_summary_new (CamelFolder *folder,
+                      const gchar *filename,
+                      const gchar *mhdir,
+                      CamelIndex *index)
 {
-	CamelMhSummary *o = (CamelMhSummary *)camel_object_new(camel_mh_summary_get_type ());
+	CamelMhSummary *o;
 
+	o = (CamelMhSummary *)camel_object_new(camel_mh_summary_get_type ());
 	((CamelFolderSummary *)o)->folder = folder;
 	if (folder) {
 		camel_db_set_collate (folder->parent_store->cdb_r, "uid", "mh_uid_sort", (CamelDBCollate)camel_local_frompos_sort);
@@ -133,7 +133,8 @@ CamelMhSummary	*camel_mh_summary_new(struct _CamelFolder *folder, const gchar *f
 	return o;
 }
 
-static gchar *mh_summary_next_uid_string(CamelFolderSummary *s)
+static gchar *
+mh_summary_next_uid_string (CamelFolderSummary *s)
 {
 	CamelMhSummary *mhs = (CamelMhSummary *)s;
 	CamelLocalSummary *cls = (CamelLocalSummary *)s;
@@ -168,7 +169,10 @@ static gchar *mh_summary_next_uid_string(CamelFolderSummary *s)
 	return uidstr;
 }
 
-static gint camel_mh_summary_add(CamelLocalSummary *cls, const gchar *name, gint forceindex)
+static gint
+camel_mh_summary_add (CamelLocalSummary *cls,
+                      const gchar *name,
+                      gint forceindex)
 {
 	CamelMhSummary *mhs = (CamelMhSummary *)cls;
 	gchar *filename = g_strdup_printf("%s/%s", cls->folder_path, name);
@@ -202,7 +206,9 @@ static gint camel_mh_summary_add(CamelLocalSummary *cls, const gchar *name, gint
 }
 
 static void
-remove_summary(gchar *key, CamelMessageInfo *info, CamelLocalSummary *cls)
+remove_summary (gchar *key,
+                CamelMessageInfo *info,
+                CamelLocalSummary *cls)
 {
 	d(printf("removing message %s from summary\n", key));
 	if (cls->index)
@@ -212,7 +218,9 @@ remove_summary(gchar *key, CamelMessageInfo *info, CamelLocalSummary *cls)
 }
 
 static gint
-mh_summary_check(CamelLocalSummary *cls, CamelFolderChangeInfo *changeinfo, CamelException *ex)
+mh_summary_check (CamelLocalSummary *cls,
+                  CamelFolderChangeInfo *changeinfo,
+                  CamelException *ex)
 {
 	DIR *dir;
 	struct dirent *d;
@@ -231,9 +239,10 @@ mh_summary_check(CamelLocalSummary *cls, CamelFolderChangeInfo *changeinfo, Came
 	   no longer exist */
 	dir = opendir(cls->folder_path);
 	if (dir == NULL) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Cannot open MH directory path: %s: %s"),
-				      cls->folder_path, g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Cannot open MH directory path: %s: %s"),
+			cls->folder_path, g_strerror (errno));
 		return -1;
 	}
 
@@ -290,8 +299,12 @@ mh_summary_check(CamelLocalSummary *cls, CamelFolderChangeInfo *changeinfo, Came
 
 /* sync the summary file with the ondisk files */
 static gint
-mh_summary_sync(CamelLocalSummary *cls, gboolean expunge, CamelFolderChangeInfo *changes, CamelException *ex)
+mh_summary_sync (CamelLocalSummary *cls,
+                 gboolean expunge,
+                 CamelFolderChangeInfo *changes,
+                 CamelException *ex)
 {
+	CamelLocalSummaryClass *local_summary_class;
 	gint count, i;
 	CamelLocalMessageInfo *info;
 	gchar *name;
@@ -330,5 +343,7 @@ mh_summary_sync(CamelLocalSummary *cls, gboolean expunge, CamelFolderChangeInfo
 		camel_message_info_free(info);
 	}
 
-	return ((CamelLocalSummaryClass *)parent_class)->sync(cls, expunge, changes, ex);
+	/* Chain up to parent's sync() method. */
+	local_summary_class = CAMEL_LOCAL_SUMMARY_CLASS (camel_mh_summary_parent_class);
+	return local_summary_class->sync (cls, expunge, changes, ex);
 }
diff --git a/camel/providers/local/camel-mh-summary.h b/camel/providers/local/camel-mh-summary.h
index b778a73..218eed2 100644
--- a/camel/providers/local/camel-mh-summary.h
+++ b/camel/providers/local/camel-mh-summary.h
@@ -30,19 +30,16 @@
 G_BEGIN_DECLS
 
 typedef struct _CamelMhSummary	CamelMhSummary;
-typedef struct _CamelMhSummaryClass	CamelMhSummaryClass;
+typedef struct _CamelMhSummaryClass CamelMhSummaryClass;
+typedef struct _CamelMhSummaryPrivate CamelMhSummaryPrivate;
 
 struct _CamelMhSummary {
 	CamelLocalSummary parent;
-	struct _CamelMhSummaryPrivate *priv;
+	CamelMhSummaryPrivate *priv;
 };
 
 struct _CamelMhSummaryClass {
 	CamelLocalSummaryClass parent_class;
-
-	/* virtual methods */
-
-	/* signals */
 };
 
 CamelType	 camel_mh_summary_get_type	(void);
diff --git a/camel/providers/local/camel-spool-folder.c b/camel/providers/local/camel-spool-folder.c
index 1e9b3a3..c55fadb 100644
--- a/camel/providers/local/camel-spool-folder.c
+++ b/camel/providers/local/camel-spool-folder.c
@@ -42,45 +42,32 @@
 
 static CamelFolderClass *parent_class = NULL;
 
-/* Returns the class for a CamelSpoolFolder */
-#define CSPOOLF_CLASS(so) CAMEL_SPOOL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CSPOOLS_CLASS(so) CAMEL_STORE_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-
 static CamelLocalSummary *spool_create_summary(CamelLocalFolder *lf, const gchar *path, const gchar *folder, CamelIndex *index);
 
 static gint spool_lock(CamelLocalFolder *lf, CamelLockType type, CamelException *ex);
 static void spool_unlock(CamelLocalFolder *lf);
 
-static void spool_finalize(CamelObject * object);
-
 static void
-camel_spool_folder_class_init(CamelSpoolFolderClass *klass)
+camel_spool_folder_class_init (CamelSpoolFolderClass *class)
 {
-	CamelLocalFolderClass *lklass = (CamelLocalFolderClass *)klass;
+	CamelLocalFolderClass *local_folder_class;
 
 	parent_class = (CamelFolderClass *)camel_mbox_folder_get_type();
 
-	lklass->create_summary = spool_create_summary;
-	lklass->lock = spool_lock;
-	lklass->unlock = spool_unlock;
+	local_folder_class = CAMEL_LOCAL_FOLDER_CLASS (class);
+	local_folder_class->create_summary = spool_create_summary;
+	local_folder_class->lock = spool_lock;
+	local_folder_class->unlock = spool_unlock;
 }
 
 static void
-spool_init(gpointer object, gpointer klass)
+camel_spool_folder_init (CamelSpoolFolder *spool_folder)
 {
-	CamelSpoolFolder *spool_folder = object;
-
 	spool_folder->lockid = -1;
 }
 
-static void
-spool_finalize(CamelObject * object)
-{
-	/*CamelSpoolFolder *spool_folder = CAMEL_SPOOL_FOLDER(object);*/
-}
-
-CamelType camel_spool_folder_get_type(void)
+CamelType
+camel_spool_folder_get_type (void)
 {
 	static CamelType camel_spool_folder_type = CAMEL_INVALID_TYPE;
 
@@ -90,15 +77,18 @@ CamelType camel_spool_folder_get_type(void)
 							     sizeof(CamelSpoolFolderClass),
 							     (CamelObjectClassInitFunc) camel_spool_folder_class_init,
 							     NULL,
-							     (CamelObjectInitFunc) spool_init,
-							     (CamelObjectFinalizeFunc) spool_finalize);
+							     (CamelObjectInitFunc) camel_spool_folder_init,
+							     (CamelObjectFinalizeFunc) NULL);
 	}
 
 	return camel_spool_folder_type;
 }
 
 CamelFolder *
-camel_spool_folder_new(CamelStore *parent_store, const gchar *full_name, guint32 flags, CamelException *ex)
+camel_spool_folder_new (CamelStore *parent_store,
+                        const gchar *full_name,
+                        guint32 flags,
+                        CamelException *ex)
 {
 	CamelFolder *folder;
 
@@ -121,13 +111,19 @@ camel_spool_folder_new(CamelStore *parent_store, const gchar *full_name, guint32
 }
 
 static CamelLocalSummary *
-spool_create_summary(CamelLocalFolder *lf, const gchar *path, const gchar *folder, CamelIndex *index)
+spool_create_summary (CamelLocalFolder *lf,
+                      const gchar *path,
+                      const gchar *folder,
+                      CamelIndex *index)
 {
-	return (CamelLocalSummary *)camel_spool_summary_new((CamelFolder *)lf, folder);
+	return (CamelLocalSummary *) camel_spool_summary_new (
+		CAMEL_FOLDER (lf), folder);
 }
 
 static gint
-spool_lock(CamelLocalFolder *lf, CamelLockType type, CamelException *ex)
+spool_lock (CamelLocalFolder *lf,
+            CamelLockType type,
+            CamelException *ex)
 {
 	gint retry = 0;
 	CamelMboxFolder *mf = (CamelMboxFolder *)lf;
@@ -135,9 +131,10 @@ spool_lock(CamelLocalFolder *lf, CamelLockType type, CamelException *ex)
 
 	mf->lockfd = open(lf->folder_path, O_RDWR|O_LARGEFILE, 0);
 	if (mf->lockfd == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Cannot create folder lock on %s: %s"),
-				      lf->folder_path, g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Cannot create folder lock on %s: %s"),
+			lf->folder_path, g_strerror (errno));
 		return -1;
 	}
 
@@ -165,7 +162,7 @@ spool_lock(CamelLocalFolder *lf, CamelLockType type, CamelException *ex)
 }
 
 static void
-spool_unlock(CamelLocalFolder *lf)
+spool_unlock (CamelLocalFolder *lf)
 {
 	CamelMboxFolder *mf = (CamelMboxFolder *)lf;
 	CamelSpoolFolder *sf = (CamelSpoolFolder *)lf;
diff --git a/camel/providers/local/camel-spool-folder.h b/camel/providers/local/camel-spool-folder.h
index 1b85078..ec0280a 100644
--- a/camel/providers/local/camel-spool-folder.h
+++ b/camel/providers/local/camel-spool-folder.h
@@ -25,8 +25,6 @@
 #include "camel-mbox-folder.h"
 #include "camel-spool-summary.h"
 
-/*  #include "camel-store.h" */
-
 #define CAMEL_SPOOL_FOLDER_TYPE     (camel_spool_folder_get_type ())
 #define CAMEL_SPOOL_FOLDER(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_SPOOL_FOLDER_TYPE, CamelSpoolFolder))
 #define CAMEL_SPOOL_FOLDER_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_SPOOL_FOLDER_TYPE, CamelSpoolFolderClass))
@@ -34,19 +32,21 @@
 
 G_BEGIN_DECLS
 
-typedef struct {
-	CamelMboxFolder parent;
+typedef struct _CamelSpoolFolder CamelSpoolFolder;
+typedef struct _CamelSpoolFolderClass CamelSpoolFolderClass;
+typedef struct _CamelSpoolFolderPrivate CamelSpoolFolderPrivate;
 
-	struct _CamelSpoolFolderPrivate *priv;
+struct _CamelSpoolFolder {
+	CamelMboxFolder parent;
+	CamelSpoolFolderPrivate *priv;
 
 	gint lockid;		/* lock id for dot locking */
-} CamelSpoolFolder;
+};
 
-typedef struct {
+struct _CamelSpoolFolderClass {
 	CamelMboxFolderClass parent_class;
-} CamelSpoolFolderClass;
+};
 
-/* Standard Camel function */
 CamelType camel_spool_folder_get_type(void);
 
 CamelFolder *camel_spool_folder_new(CamelStore *parent_store, const gchar *full_name, guint32 flags, CamelException *ex);
diff --git a/camel/providers/local/camel-spool-store.c b/camel/providers/local/camel-spool-store.c
index 87b6d7c..e476ff1 100644
--- a/camel/providers/local/camel-spool-store.c
+++ b/camel/providers/local/camel-spool-store.c
@@ -43,46 +43,45 @@
 
 #define d(x)
 
-/* Returns the class for a CamelSpoolStore */
-#define CSPOOLS_CLASS(so) CAMEL_SPOOL_STORE_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-
-static void construct (CamelService *service, CamelSession *session, CamelProvider *provider, CamelURL *url, CamelException *ex);
+static gboolean construct (CamelService *service, CamelSession *session, CamelProvider *provider, CamelURL *url, CamelException *ex);
 static CamelFolder *get_folder(CamelStore * store, const gchar *folder_name, guint32 flags, CamelException * ex);
 static gchar *get_name(CamelService *service, gboolean brief);
 static CamelFolder *get_inbox (CamelStore *store, CamelException *ex);
-static void rename_folder(CamelStore *store, const gchar *old_name, const gchar *new_name, CamelException *ex);
+static gboolean rename_folder(CamelStore *store, const gchar *old_name, const gchar *new_name, CamelException *ex);
 static CamelFolderInfo *get_folder_info (CamelStore *store, const gchar *top, guint32 flags, CamelException *ex);
 static void free_folder_info (CamelStore *store, CamelFolderInfo *fi);
 
-static void delete_folder(CamelStore *store, const gchar *folder_name, CamelException *ex);
+static gboolean delete_folder(CamelStore *store, const gchar *folder_name, CamelException *ex);
 
 static gchar *spool_get_meta_path(CamelLocalStore *ls, const gchar *full_name, const gchar *ext);
 static gchar *spool_get_full_path(CamelLocalStore *ls, const gchar *full_name);
 
-static CamelStoreClass *parent_class = NULL;
+static gpointer camel_spool_store_parent_class;
 
 static void
-camel_spool_store_class_init (CamelSpoolStoreClass *camel_spool_store_class)
+camel_spool_store_class_init (CamelSpoolStoreClass *class)
 {
-	CamelStoreClass *camel_store_class = CAMEL_STORE_CLASS (camel_spool_store_class);
-	CamelServiceClass *camel_service_class = CAMEL_SERVICE_CLASS (camel_spool_store_class);
-
-	parent_class = CAMEL_STORE_CLASS(camel_mbox_store_get_type());
-
-	/* virtual method overload */
-	camel_service_class->construct = construct;
-	camel_service_class->get_name = get_name;
-	camel_store_class->get_folder = get_folder;
-	camel_store_class->get_inbox = get_inbox;
-	camel_store_class->get_folder_info = get_folder_info;
-	camel_store_class->free_folder_info = free_folder_info;
-
-	camel_store_class->delete_folder = delete_folder;
-	camel_store_class->rename_folder = rename_folder;
-
-	((CamelLocalStoreClass *)camel_store_class)->get_full_path = spool_get_full_path;
-	((CamelLocalStoreClass *)camel_store_class)->get_meta_path = spool_get_meta_path;
+	CamelServiceClass *service_class;
+	CamelStoreClass *store_class;
+	CamelLocalStoreClass *local_store_class;
+
+	camel_spool_store_parent_class = CAMEL_STORE_CLASS(camel_mbox_store_get_type());
+
+	service_class = CAMEL_SERVICE_CLASS (class);
+	service_class->construct = construct;
+	service_class->get_name = get_name;
+
+	store_class = CAMEL_STORE_CLASS (class);
+	store_class->get_folder = get_folder;
+	store_class->get_inbox = get_inbox;
+	store_class->get_folder_info = get_folder_info;
+	store_class->free_folder_info = free_folder_info;
+	store_class->delete_folder = delete_folder;
+	store_class->rename_folder = rename_folder;
+
+	local_store_class = CAMEL_LOCAL_STORE_CLASS (class);
+	local_store_class->get_full_path = spool_get_full_path;
+	local_store_class->get_meta_path = spool_get_meta_path;
 }
 
 CamelType
@@ -103,29 +102,38 @@ camel_spool_store_get_type (void)
 	return camel_spool_store_type;
 }
 
-static void
-construct (CamelService *service, CamelSession *session, CamelProvider *provider, CamelURL *url, CamelException *ex)
+static gboolean
+construct (CamelService *service,
+           CamelSession *session,
+           CamelProvider *provider,
+           CamelURL *url,
+           CamelException *ex)
 {
+	CamelServiceClass *service_class;
 	struct stat st;
 
 	d(printf("constructing store of type %s '%s:%s'\n",
 		 camel_type_to_name(((CamelObject *)service)->s.type), url->protocol, url->path));
 
-	CAMEL_SERVICE_CLASS (parent_class)->construct (service, session, provider, url, ex);
-	if (camel_exception_is_set (ex))
-		return;
+	/* Chain up to parent's construct() method. */
+	service_class = CAMEL_SERVICE_CLASS (camel_spool_store_parent_class);
+	if (!service_class->construct (service, session, provider, url, ex))
+		return FALSE;
 
 	if (service->url->path[0] != '/') {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-				     _("Store root %s is not an absolute path"), service->url->path);
-		return;
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
+			_("Store root %s is not an absolute path"),
+			service->url->path);
+		return FALSE;
 	}
 
 	if (stat(service->url->path, &st) == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-				      _("Spool '%s' cannot be opened: %s"),
-				      service->url->path, g_strerror (errno));
-		return;
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
+			_("Spool '%s' cannot be opened: %s"),
+			service->url->path, g_strerror (errno));
+		return FALSE;
 	}
 
 	if (S_ISREG(st.st_mode))
@@ -134,15 +142,21 @@ construct (CamelService *service, CamelSession *session, CamelProvider *provider
 		/* we could check here for slight variations */
 		((CamelSpoolStore *)service)->type = CAMEL_SPOOL_STORE_ELM;
 	else {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-				     _("Spool '%s' is not a regular file or directory"),
-				     service->url->path);
-		return;
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
+			_("Spool '%s' is not a regular file or directory"),
+			service->url->path);
+		return FALSE;
 	}
+
+	return TRUE;
 }
 
 static CamelFolder *
-get_folder(CamelStore * store, const gchar *folder_name, guint32 flags, CamelException * ex)
+get_folder (CamelStore *store,
+            const gchar *folder_name,
+            guint32 flags,
+            CamelException * ex)
 {
 	CamelFolder *folder = NULL;
 	struct stat st;
@@ -153,9 +167,10 @@ get_folder(CamelStore * store, const gchar *folder_name, guint32 flags, CamelExc
 	/* we only support an 'INBOX' in mbox mode */
 	if (((CamelSpoolStore *)store)->type == CAMEL_SPOOL_STORE_MBOX) {
 		if (strcmp(folder_name, "INBOX") != 0) {
-			camel_exception_setv(ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-					     _("Folder '%s/%s' does not exist."),
-					     ((CamelService *)store)->url->path, folder_name);
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
+				_("Folder '%s/%s' does not exist."),
+				((CamelService *)store)->url->path, folder_name);
 		} else {
 			folder = camel_spool_folder_new(store, folder_name, flags, ex);
 		}
@@ -163,25 +178,29 @@ get_folder(CamelStore * store, const gchar *folder_name, guint32 flags, CamelExc
 		name = g_strdup_printf("%s%s", CAMEL_LOCAL_STORE(store)->toplevel_dir, folder_name);
 		if (stat(name, &st) == -1) {
 			if (errno != ENOENT) {
-				camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-						      _("Could not open folder '%s':\n%s"),
-						      folder_name, g_strerror (errno));
+				camel_exception_setv (
+					ex, CAMEL_EXCEPTION_SYSTEM,
+					_("Could not open folder '%s':\n%s"),
+					folder_name, g_strerror (errno));
 			} else if ((flags & CAMEL_STORE_FOLDER_CREATE) == 0) {
-				camel_exception_setv (ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-						      _("Folder '%s' does not exist."),
-						      folder_name);
+				camel_exception_setv (
+					ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
+					_("Folder '%s' does not exist."),
+					folder_name);
 			} else {
 				if (creat (name, 0600) == -1) {
-					camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-							      _("Could not create folder '%s':\n%s"),
-							      folder_name, g_strerror (errno));
+					camel_exception_setv (
+						ex, CAMEL_EXCEPTION_SYSTEM,
+						_("Could not create folder '%s':\n%s"),
+						folder_name, g_strerror (errno));
 				} else {
 					folder = camel_spool_folder_new(store, folder_name, flags, ex);
 				}
 			}
 		} else if (!S_ISREG(st.st_mode)) {
-			camel_exception_setv(ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-					     _("'%s' is not a mailbox file."), name);
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
+				_("'%s' is not a mailbox file."), name);
 		} else {
 			folder = camel_spool_folder_new(store, folder_name, flags, ex);
 		}
@@ -192,19 +211,22 @@ get_folder(CamelStore * store, const gchar *folder_name, guint32 flags, CamelExc
 }
 
 static CamelFolder *
-get_inbox(CamelStore *store, CamelException *ex)
+get_inbox (CamelStore *store,
+           CamelException *ex)
 {
 	if (((CamelSpoolStore *)store)->type == CAMEL_SPOOL_STORE_MBOX)
 		return get_folder (store, "INBOX", CAMEL_STORE_FOLDER_CREATE, ex);
 	else {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-				     _("Store does not support an INBOX"));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
+			_("Store does not support an INBOX"));
 		return NULL;
 	}
 }
 
 static gchar *
-get_name (CamelService *service, gboolean brief)
+get_name (CamelService *service,
+          gboolean brief)
 {
 	if (brief)
 		return g_strdup(service->url->path);
@@ -214,22 +236,35 @@ get_name (CamelService *service, gboolean brief)
 }
 
 /* default implementation, rename all */
-static void
-rename_folder(CamelStore *store, const gchar *old, const gchar *new, CamelException *ex)
+static gboolean
+rename_folder (CamelStore *store,
+               const gchar *old,
+               const gchar *new,
+               CamelException *ex)
 {
-	camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-			     _("Spool folders cannot be renamed"));
+	camel_exception_setv (
+		ex, CAMEL_EXCEPTION_SYSTEM,
+		_("Spool folders cannot be renamed"));
+
+	return FALSE;
 }
 
 /* default implementation, only delete metadata */
-static void
-delete_folder(CamelStore *store, const gchar *folder_name, CamelException *ex)
+static gboolean
+delete_folder (CamelStore *store,
+               const gchar *folder_name,
+               CamelException *ex)
 {
-	camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-			     _("Spool folders cannot be deleted"));
+	camel_exception_setv (
+		ex, CAMEL_EXCEPTION_SYSTEM,
+		_("Spool folders cannot be deleted"));
+
+	return FALSE;
 }
 
-static void free_folder_info (CamelStore *store, CamelFolderInfo *fi)
+static void
+free_folder_info (CamelStore *store,
+                  CamelFolderInfo *fi)
 {
 	if (fi) {
 		g_free(fi->uri);
@@ -241,7 +276,9 @@ static void free_folder_info (CamelStore *store, CamelFolderInfo *fi)
 
 /* partially copied from mbox */
 static void
-spool_fill_fi(CamelStore *store, CamelFolderInfo *fi, guint32 flags)
+spool_fill_fi (CamelStore *store,
+               CamelFolderInfo *fi,
+               guint32 flags)
 {
 	CamelFolder *folder;
 
@@ -258,7 +295,11 @@ spool_fill_fi(CamelStore *store, CamelFolderInfo *fi, guint32 flags)
 }
 
 static CamelFolderInfo *
-spool_new_fi(CamelStore *store, CamelFolderInfo *parent, CamelFolderInfo **fip, const gchar *full, guint32 flags)
+spool_new_fi (CamelStore *store,
+              CamelFolderInfo *parent,
+              CamelFolderInfo **fip,
+              const gchar *full,
+              guint32 flags)
 {
 	CamelFolderInfo *fi;
 	const gchar *name;
@@ -297,7 +338,15 @@ struct _inode {
 };
 
 /* returns number of records found at or below this level */
-static gint scan_dir(CamelStore *store, GHashTable *visited, gchar *root, const gchar *path, guint32 flags, CamelFolderInfo *parent, CamelFolderInfo **fip, CamelException *ex)
+static gint
+scan_dir (CamelStore *store,
+          GHashTable *visited,
+          gchar *root,
+          const gchar *path,
+          guint32 flags,
+          CamelFolderInfo *parent,
+          CamelFolderInfo **fip,
+          CamelException *ex)
 {
 	DIR *dir;
 	struct dirent *d;
@@ -318,9 +367,10 @@ static gint scan_dir(CamelStore *store, GHashTable *visited, gchar *root, const
 		name = root;
 
 	if (stat(name, &st) == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Could not scan folder '%s': %s"),
-				      name, g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not scan folder '%s': %s"),
+			name, g_strerror (errno));
 	} else if (S_ISREG(st.st_mode)) {
 		/* incase we start scanning from a file.  messy duplication :-/ */
 		if (path) {
@@ -332,9 +382,10 @@ static gint scan_dir(CamelStore *store, GHashTable *visited, gchar *root, const
 
 	dir = opendir(name);
 	if (dir == NULL) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Could not scan folder '%s': %s"),
-				      name, g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not scan folder '%s': %s"),
+			name, g_strerror (errno));
 		return -1;
 	}
 
@@ -406,27 +457,33 @@ static gint scan_dir(CamelStore *store, GHashTable *visited, gchar *root, const
 	return 0;
 }
 
-static guint inode_hash(gconstpointer d)
+static guint
+inode_hash (gconstpointer d)
 {
 	const struct _inode *v = d;
 
 	return v->inode ^ v->dnode;
 }
 
-static gboolean inode_equal(gconstpointer a, gconstpointer b)
+static gboolean
+inode_equal (gconstpointer a, gconstpointer b)
 {
 	const struct _inode *v1 = a, *v2 = b;
 
 	return v1->inode == v2->inode && v1->dnode == v2->dnode;
 }
 
-static void inode_free(gpointer k, gpointer v, gpointer d)
+static void
+inode_free (gpointer k, gpointer v, gpointer d)
 {
 	g_free(k);
 }
 
 static CamelFolderInfo *
-get_folder_info_elm(CamelStore *store, const gchar *top, guint32 flags, CamelException *ex)
+get_folder_info_elm (CamelStore *store,
+                     const gchar *top,
+                     guint32 flags,
+                     CamelException *ex)
 {
 	CamelFolderInfo *fi = NULL;
 	GHashTable *visited;
@@ -445,7 +502,10 @@ get_folder_info_elm(CamelStore *store, const gchar *top, guint32 flags, CamelExc
 }
 
 static CamelFolderInfo *
-get_folder_info_mbox(CamelStore *store, const gchar *top, guint32 flags, CamelException *ex)
+get_folder_info_mbox (CamelStore *store,
+                      const gchar *top,
+                      guint32 flags,
+                      CamelException *ex)
 {
 	CamelFolderInfo *fi = NULL, *fip = NULL;
 
@@ -460,16 +520,20 @@ get_folder_info_mbox(CamelStore *store, const gchar *top, guint32 flags, CamelEx
 }
 
 static CamelFolderInfo *
-get_folder_info(CamelStore *store, const gchar *top, guint32 flags, CamelException *ex)
+get_folder_info (CamelStore *store,
+                 const gchar *top,
+                 guint32 flags,
+                 CamelException *ex)
 {
 	if (((CamelSpoolStore *)store)->type == CAMEL_SPOOL_STORE_MBOX)
-		return get_folder_info_mbox(store, top, flags, ex);
+		return get_folder_info_mbox (store, top, flags, ex);
 	else
-		return get_folder_info_elm(store, top, flags, ex);
+		return get_folder_info_elm (store, top, flags, ex);
 }
 
 static gchar *
-spool_get_full_path(CamelLocalStore *ls, const gchar *full_name)
+spool_get_full_path (CamelLocalStore *ls,
+                     const gchar *full_name)
 {
 	if (((CamelSpoolStore *)ls)->type == CAMEL_SPOOL_STORE_MBOX)
 		/* a trailing / is always present on toplevel_dir from CamelLocalStore */
@@ -479,7 +543,9 @@ spool_get_full_path(CamelLocalStore *ls, const gchar *full_name)
 }
 
 static gchar *
-spool_get_meta_path(CamelLocalStore *ls, const gchar *full_name, const gchar *ext)
+spool_get_meta_path (CamelLocalStore *ls,
+                     const gchar *full_name,
+                     const gchar *ext)
 {
 	gchar *root = camel_session_get_storage_path(((CamelService *)ls)->session, (CamelService *)ls, NULL);
 	gchar *path, *key;
diff --git a/camel/providers/local/camel-spool-store.h b/camel/providers/local/camel-spool-store.h
index 382a905..0c5f609 100644
--- a/camel/providers/local/camel-spool-store.h
+++ b/camel/providers/local/camel-spool-store.h
@@ -31,25 +31,24 @@
 
 G_BEGIN_DECLS
 
+typedef struct _CamelSpoolStore CamelSpoolStore;
+typedef struct _CamelSpoolStoreClass CamelSpoolStoreClass;
+
 typedef enum _camel_spool_store_t {
 	CAMEL_SPOOL_STORE_MBOX,	/* a single mbox */
 	CAMEL_SPOOL_STORE_ELM	/* elm/pine/etc tree of mbox files in folders */
 } camel_spool_store_t;
 
-typedef struct {
+struct _CamelSpoolStore {
 	CamelMboxStore parent;
 
 	camel_spool_store_t type;
-} CamelSpoolStore;
+};
 
-typedef struct {
+struct _CamelSpoolStoreClass {
 	CamelMboxStoreClass parent_class;
+};
 
-} CamelSpoolStoreClass;
-
-/* public methods */
-
-/* Standard Camel function */
 CamelType camel_spool_store_get_type (void);
 
 G_END_DECLS
diff --git a/camel/providers/local/camel-spool-summary.c b/camel/providers/local/camel-spool-summary.c
index 511a4ca..b4b789c 100644
--- a/camel/providers/local/camel-spool-summary.c
+++ b/camel/providers/local/camel-spool-summary.c
@@ -49,67 +49,63 @@ static gint spool_summary_check(CamelLocalSummary *cls, CamelFolderChangeInfo *c
 static gint spool_summary_sync_full(CamelMboxSummary *cls, gboolean expunge, CamelFolderChangeInfo *changeinfo, CamelException *ex);
 static gint spool_summary_need_index(void);
 
-static void camel_spool_summary_class_init (CamelSpoolSummaryClass *klass);
-static void camel_spool_summary_init       (CamelSpoolSummary *obj);
-static void camel_spool_summary_finalize   (CamelObject *obj);
-
-static CamelFolderSummaryClass *camel_spool_summary_parent;
-
-CamelType
-camel_spool_summary_get_type(void)
-{
-	static CamelType type = CAMEL_INVALID_TYPE;
-
-	if (type == CAMEL_INVALID_TYPE) {
-		type = camel_type_register(camel_mbox_summary_get_type(), "CamelSpoolSummary",
-					   sizeof (CamelSpoolSummary),
-					   sizeof (CamelSpoolSummaryClass),
-					   (CamelObjectClassInitFunc) camel_spool_summary_class_init,
-					   NULL,
-					   (CamelObjectInitFunc) camel_spool_summary_init,
-					   (CamelObjectFinalizeFunc) camel_spool_summary_finalize);
-	}
-
-	return type;
-}
+static gpointer camel_spool_summary_parent_class;
 
 static void
-camel_spool_summary_class_init(CamelSpoolSummaryClass *klass)
+camel_spool_summary_class_init (CamelSpoolSummaryClass *class)
 {
-	CamelLocalSummaryClass *lklass = (CamelLocalSummaryClass *)klass;
-	CamelMboxSummaryClass *mklass = (CamelMboxSummaryClass *)klass;
+	CamelLocalSummaryClass *local_summary_class;
+	CamelMboxSummaryClass *mbox_summary_class;
 
-	camel_spool_summary_parent = CAMEL_FOLDER_SUMMARY_CLASS(camel_mbox_summary_get_type());
+	camel_spool_summary_parent_class = CAMEL_FOLDER_SUMMARY_CLASS(camel_mbox_summary_get_type());
 
-	lklass->load = spool_summary_load;
-	lklass->check = spool_summary_check;
-	lklass->need_index = spool_summary_need_index;
+	local_summary_class = CAMEL_LOCAL_SUMMARY_CLASS (class);
+	local_summary_class->load = spool_summary_load;
+	local_summary_class->check = spool_summary_check;
+	local_summary_class->need_index = spool_summary_need_index;
 
-	mklass->sync_full = spool_summary_sync_full;
+	mbox_summary_class = CAMEL_MBOX_SUMMARY_CLASS (class);
+	mbox_summary_class->sync_full = spool_summary_sync_full;
 }
 
 static void
-camel_spool_summary_init(CamelSpoolSummary *obj)
+camel_spool_summary_init(CamelSpoolSummary *spool_summary)
 {
-	struct _CamelFolderSummary *s = (CamelFolderSummary *)obj;
+	CamelFolderSummary *folder_summary;
+
+	folder_summary = CAMEL_FOLDER_SUMMARY (spool_summary);
 
 	/* message info size is from mbox parent */
 
 	/* and a unique file version */
-	s->version += CAMEL_SPOOL_SUMMARY_VERSION;
+	folder_summary->version += CAMEL_SPOOL_SUMMARY_VERSION;
 }
 
-static void
-camel_spool_summary_finalize(CamelObject *obj)
+CamelType
+camel_spool_summary_get_type(void)
 {
-	/*CamelSpoolSummary *mbs = CAMEL_SPOOL_SUMMARY(obj);*/
+	static CamelType type = CAMEL_INVALID_TYPE;
+
+	if (type == CAMEL_INVALID_TYPE) {
+		type = camel_type_register(camel_mbox_summary_get_type(), "CamelSpoolSummary",
+					   sizeof (CamelSpoolSummary),
+					   sizeof (CamelSpoolSummaryClass),
+					   (CamelObjectClassInitFunc) camel_spool_summary_class_init,
+					   NULL,
+					   (CamelObjectInitFunc) camel_spool_summary_init,
+					   (CamelObjectFinalizeFunc) NULL);
+	}
+
+	return type;
 }
 
 CamelSpoolSummary *
-camel_spool_summary_new(struct _CamelFolder *folder, const gchar *mbox_name)
+camel_spool_summary_new (CamelFolder *folder,
+                         const gchar *mbox_name)
 {
-	CamelSpoolSummary *new = (CamelSpoolSummary *)camel_object_new(camel_spool_summary_get_type());
+	CamelSpoolSummary *new;
 
+	new = (CamelSpoolSummary *)camel_object_new(camel_spool_summary_get_type());
 	((CamelFolderSummary *)new)->folder = folder;
 	if (folder) {
 		camel_db_set_collate (folder->parent_store->cdb_r, "bdata", "spool_frompos_sort", (CamelDBCollate)camel_local_frompos_sort);
@@ -122,7 +118,9 @@ camel_spool_summary_new(struct _CamelFolder *folder, const gchar *mbox_name)
 }
 
 static gint
-spool_summary_load(CamelLocalSummary *cls, gint forceindex, CamelException *ex)
+spool_summary_load (CamelLocalSummary *cls,
+                    gint forceindex,
+                    CamelException *ex)
 {
 	g_warning("spool summary - not loading anything\n");
 	return 0;
@@ -130,7 +128,10 @@ spool_summary_load(CamelLocalSummary *cls, gint forceindex, CamelException *ex)
 
 /* perform a full sync */
 static gint
-spool_summary_sync_full(CamelMboxSummary *cls, gboolean expunge, CamelFolderChangeInfo *changeinfo, CamelException *ex)
+spool_summary_sync_full (CamelMboxSummary *cls,
+                         gboolean expunge,
+                         CamelFolderChangeInfo *changeinfo,
+                         CamelException *ex)
 {
 	gint fd = -1, fdout = -1;
 	gchar tmpname[64] = { '\0' };
@@ -146,10 +147,11 @@ spool_summary_sync_full(CamelMboxSummary *cls, gboolean expunge, CamelFolderChan
 
 	fd = open(((CamelLocalSummary *)cls)->folder_path, O_RDWR|O_LARGEFILE);
 	if (fd == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Could not open file: %s: %s"),
-				      ((CamelLocalSummary *)cls)->folder_path,
-				      g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not open file: %s: %s"),
+			((CamelLocalSummary *)cls)->folder_path,
+			g_strerror (errno));
 		camel_operation_end(NULL);
 		return -1;
 	}
@@ -159,9 +161,10 @@ spool_summary_sync_full(CamelMboxSummary *cls, gboolean expunge, CamelFolderChan
 
 	d(printf("Writing tmp file to %s\n", tmpname));
 	if (fdout == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Cannot open temporary mailbox: %s"),
-				      g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Cannot open temporary mailbox: %s"),
+			g_strerror (errno));
 		goto error;
 	}
 
@@ -171,30 +174,33 @@ spool_summary_sync_full(CamelMboxSummary *cls, gboolean expunge, CamelFolderChan
 	/* sync out content */
 	if (fsync(fdout) == -1) {
 		g_warning("Cannot sync temporary folder: %s", g_strerror (errno));
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Could not synchronize temporary folder %s: %s"),
-				      ((CamelLocalSummary *)cls)->folder_path,
-				      g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not sync temporary folder %s: %s"),
+			((CamelLocalSummary *)cls)->folder_path,
+			g_strerror (errno));
 		goto error;
 	}
 
 	/* see if we can write this much to the spool file */
 	if (fstat(fd, &st) == -1) {
 		g_warning("Cannot sync temporary folder: %s", g_strerror (errno));
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Could not synchronize temporary folder %s: %s"),
-				      ((CamelLocalSummary *)cls)->folder_path,
-				      g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not sync temporary folder %s: %s"),
+			((CamelLocalSummary *)cls)->folder_path,
+			g_strerror (errno));
 		goto error;
 	}
 	spoollen = st.st_size;
 
 	if (fstat(fdout, &st) == -1) {
 		g_warning("Cannot sync temporary folder: %s", g_strerror (errno));
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Could not synchronize temporary folder %s: %s"),
-				      ((CamelLocalSummary *)cls)->folder_path,
-				      g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not sync temporary folder %s: %s"),
+			((CamelLocalSummary *)cls)->folder_path,
+			g_strerror (errno));
 		goto error;
 	}
 	outlen = st.st_size;
@@ -207,10 +213,11 @@ spool_summary_sync_full(CamelMboxSummary *cls, gboolean expunge, CamelFolderChan
 		|| lseek(fd, 0, SEEK_SET) == -1
 		|| lseek(fdout, 0, SEEK_SET) == -1)) {
 		g_warning("Cannot sync spool folder: %s", g_strerror (errno));
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Could not synchronize spool folder %s: %s"),
-				      ((CamelLocalSummary *)cls)->folder_path,
-				      g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not sync spool folder %s: %s"),
+			((CamelLocalSummary *)cls)->folder_path,
+			g_strerror (errno));
 		/* incase we ran out of room, remove any trailing space first */
 		ftruncate(fd, spoollen);
 		goto error;
@@ -237,11 +244,12 @@ spool_summary_sync_full(CamelMboxSummary *cls, gboolean expunge, CamelFolderChan
 		}
 
 		if (size == -1) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      _("Could not synchronize spool folder %s: %s\n"
-						"Folder may be corrupt; copy saved in '%s'"),
-					      ((CamelLocalSummary *)cls)->folder_path,
-					      g_strerror (errno), tmpname);
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Could not sync spool folder %s: %s\n"
+				  "Folder may be corrupt, copy saved in '%s'"),
+				((CamelLocalSummary *)cls)->folder_path,
+				g_strerror (errno), tmpname);
 			/* so we dont delete it */
 			tmpname[0] = '\0';
 			g_free(buffer);
@@ -254,22 +262,24 @@ spool_summary_sync_full(CamelMboxSummary *cls, gboolean expunge, CamelFolderChan
 	d(printf("Closing folders\n"));
 
 	if (ftruncate(fd, outlen) == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Could not synchronize spool folder %s: %s\n"
-					"Folder may be corrupt; copy saved in '%s'"),
-				      ((CamelLocalSummary *)cls)->folder_path,
-				      g_strerror (errno), tmpname);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not sync spool folder %s: %s\n"
+			  "Folder may be corrupt, copy saved in '%s'"),
+			((CamelLocalSummary *)cls)->folder_path,
+			g_strerror (errno), tmpname);
 		tmpname[0] = '\0';
 		goto error;
 	}
 
 	if (close(fd) == -1) {
 		g_warning("Cannot close source folder: %s", g_strerror (errno));
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Could not synchronize spool folder %s: %s\n"
-					"Folder may be corrupt; copy saved in '%s'"),
-				      ((CamelLocalSummary *)cls)->folder_path,
-				      g_strerror (errno), tmpname);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not sync spool folder %s: %s\n"
+			  "Folder may be corrupt, copy saved in '%s'"),
+			((CamelLocalSummary *)cls)->folder_path,
+			g_strerror (errno), tmpname);
 		tmpname[0] = '\0';
 		fd = -1;
 		goto error;
@@ -299,13 +309,15 @@ spool_summary_sync_full(CamelMboxSummary *cls, gboolean expunge, CamelFolderChan
 }
 
 static gint
-spool_summary_check(CamelLocalSummary *cls, CamelFolderChangeInfo *changeinfo, CamelException *ex)
+spool_summary_check (CamelLocalSummary *cls,
+                     CamelFolderChangeInfo *changeinfo,
+                     CamelException *ex)
 {
 	gint i, work, count;
 	struct stat st;
 	CamelFolderSummary *s = (CamelFolderSummary *)cls;
 
-	if (((CamelLocalSummaryClass *)camel_spool_summary_parent)->check(cls, changeinfo, ex) == -1)
+	if (CAMEL_LOCAL_SUMMARY_CLASS (camel_spool_summary_parent_class)->check(cls, changeinfo, ex) == -1)
 		return -1;
 
 	/* check to see if we need to copy/update the file; missing xev headers prompt this */
@@ -321,13 +333,14 @@ spool_summary_check(CamelLocalSummary *cls, CamelFolderChangeInfo *changeinfo, C
 	/* if we do, then write out the headers using sync_full, etc */
 	if (work) {
 		d(printf("Have to add new headers, re-syncing from the start to accomplish this\n"));
-		if (((CamelMboxSummaryClass *)((CamelObject *)cls)->klass)->sync_full((CamelMboxSummary *)cls, FALSE, changeinfo, ex) == -1)
+		if (CAMEL_MBOX_SUMMARY_GET_CLASS (cls)->sync_full (CAMEL_MBOX_SUMMARY (cls), FALSE, changeinfo, ex) == -1)
 			return -1;
 
 		if (stat(cls->folder_path, &st) == -1) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      _("Unknown error: %s"),
-					      g_strerror (errno));
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Unknown error: %s"),
+				g_strerror (errno));
 			return -1;
 		}
 
diff --git a/camel/providers/local/camel-spool-summary.h b/camel/providers/local/camel-spool-summary.h
index b5c4d63..b4fd894 100644
--- a/camel/providers/local/camel-spool-summary.h
+++ b/camel/providers/local/camel-spool-summary.h
@@ -31,7 +31,7 @@
 
 G_BEGIN_DECLS
 
-typedef struct _CamelSpoolSummary      CamelSpoolSummary;
+typedef struct _CamelSpoolSummary CamelSpoolSummary;
 typedef struct _CamelSpoolSummaryClass CamelSpoolSummaryClass;
 
 struct _CamelSpoolSummary {
diff --git a/camel/providers/nntp/camel-nntp-folder.c b/camel/providers/nntp/camel-nntp-folder.c
index 91e961c..0a9c882 100644
--- a/camel/providers/nntp/camel-nntp-folder.c
+++ b/camel/providers/nntp/camel-nntp-folder.c
@@ -39,36 +39,51 @@
 #include "camel-nntp-store.h"
 #include "camel-nntp-summary.h"
 
-static CamelFolderClass *folder_class = NULL;
 static CamelDiscoFolderClass *parent_class = NULL;
 
-/* Returns the class for a CamelNNTPFolder */
-#define CNNTPF_CLASS(so) CAMEL_NNTP_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CNNTPS_CLASS(so) CAMEL_STORE_CLASS (CAMEL_OBJECT_GET_CLASS(so))
+static void
+nntp_folder_finalize (CamelNNTPFolder *nntp_folder)
+{
+	CamelException ex;
+
+	camel_exception_init (&ex);
+
+	camel_folder_summary_save_to_db (
+		CAMEL_FOLDER (nntp_folder)->summary, &ex);
 
-void
-camel_nntp_folder_selected(CamelNNTPFolder *folder, gchar *line, CamelException *ex)
+	g_mutex_free (nntp_folder->priv->search_lock);
+	g_mutex_free (nntp_folder->priv->cache_lock);
+	g_free (nntp_folder->priv);
+}
+
+gboolean
+camel_nntp_folder_selected (CamelNNTPFolder *folder,
+                            gchar *line,
+                            CamelException *ex)
 {
-	camel_nntp_summary_check((CamelNNTPSummary *)((CamelFolder *)folder)->summary,
-				 (CamelNNTPStore *)((CamelFolder *)folder)->parent_store,
-				 line, folder->changes, ex);
+	return camel_nntp_summary_check (
+		(CamelNNTPSummary *)((CamelFolder *)folder)->summary,
+		(CamelNNTPStore *)((CamelFolder *)folder)->parent_store,
+		line, folder->changes, ex);
 }
 
-static void
-nntp_folder_refresh_info_online (CamelFolder *folder, CamelException *ex)
+static gboolean
+nntp_folder_refresh_info_online (CamelFolder *folder,
+                                 CamelException *ex)
 {
 	CamelNNTPStore *nntp_store;
 	CamelFolderChangeInfo *changes = NULL;
 	CamelNNTPFolder *nntp_folder;
 	gchar *line;
+	gboolean success;
 
 	nntp_store = (CamelNNTPStore *) folder->parent_store;
 	nntp_folder = (CamelNNTPFolder *) folder;
 
 	camel_service_lock (CAMEL_SERVICE (nntp_store), CS_REC_CONNECT_LOCK);
 
-	camel_nntp_command(nntp_store, ex, nntp_folder, &line, NULL);
+	success = camel_nntp_command (
+		nntp_store, ex, nntp_folder, &line, NULL);
 
 	if (camel_folder_change_info_changed(nntp_folder->changes)) {
 		changes = nntp_folder->changes;
@@ -81,28 +96,32 @@ nntp_folder_refresh_info_online (CamelFolder *folder, CamelException *ex)
 		camel_object_trigger_event ((CamelObject *) folder, "folder_changed", changes);
 		camel_folder_change_info_free (changes);
 	}
+
+	return success;
 }
 
-static void
+static gboolean
 nntp_folder_sync_online (CamelFolder *folder, CamelException *ex)
 {
+	gboolean success;
+
 	camel_service_lock (CAMEL_SERVICE (folder->parent_store), CS_REC_CONNECT_LOCK);
-	camel_folder_summary_save_to_db (folder->summary, ex);
+	success = camel_folder_summary_save_to_db (folder->summary, ex);
 	camel_service_unlock (CAMEL_SERVICE (folder->parent_store), CS_REC_CONNECT_LOCK);
+
+	return success;
 }
 
-static void
+static gboolean
 nntp_folder_sync_offline (CamelFolder *folder, CamelException *ex)
 {
+	gboolean success;
+
 	camel_service_lock (CAMEL_SERVICE (folder->parent_store), CS_REC_CONNECT_LOCK);
-	camel_folder_summary_save_to_db (folder->summary, ex);
+	success = camel_folder_summary_save_to_db (folder->summary, ex);
 	camel_service_unlock (CAMEL_SERVICE (folder->parent_store), CS_REC_CONNECT_LOCK);
-}
 
-static gboolean
-nntp_folder_set_message_flags (CamelFolder *folder, const gchar *uid, guint32 flags, guint32 set)
-{
-        return ((CamelFolderClass *) folder_class)->set_message_flags (folder, uid, flags, set);
+	return success;
 }
 
 static gchar *
@@ -115,8 +134,9 @@ nntp_get_filename (CamelFolder *folder, const gchar *uid, CamelException *ex)
 	strcpy(article, uid);
 	msgid = strchr (article, ',');
 	if (msgid == NULL) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Internal error: UID in invalid format: %s"), uid);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Internal error: UID in invalid format: %s"), uid);
 		return NULL;
 	}
 	*msgid++ = 0;
@@ -144,46 +164,64 @@ nntp_folder_download_message (CamelNNTPFolder *nntp_folder, const gchar *id, con
 			stream = camel_object_ref (nntp_store->stream);
 		}
 	} else if (ret == 423 || ret == 430) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID, _("Cannot get message %s: %s"), msgid, line);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID,
+			_("Cannot get message %s: %s"), msgid, line);
 	} else if (ret != -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, _("Cannot get message %s: %s"), msgid, line);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Cannot get message %s: %s"), msgid, line);
 	}
 
 	return stream;
 
- fail:
+fail:
 	if (errno == EINTR)
-		camel_exception_setv (ex, CAMEL_EXCEPTION_USER_CANCEL, _("User cancelled the operation"));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_USER_CANCEL,
+			_("User cancelled the operation"));
 	else
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, _("Cannot get message %s: %s"), msgid, g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Cannot get message %s: %s"), msgid,
+			g_strerror (errno));
 
 	return NULL;
 }
 
-static void
-nntp_folder_cache_message (CamelDiscoFolder *disco_folder, const gchar *uid, CamelException *ex)
+static gboolean
+nntp_folder_cache_message (CamelDiscoFolder *disco_folder,
+                           const gchar *uid,
+                           CamelException *ex)
 {
 	CamelNNTPStore *nntp_store = (CamelNNTPStore *)((CamelFolder *) disco_folder)->parent_store;
 	CamelStream *stream;
 	gchar *article, *msgid;
+	gboolean success = TRUE;
 
 	article = alloca(strlen(uid)+1);
 	strcpy(article, uid);
 	msgid = strchr(article, ',');
 	if (!msgid) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Internal error: UID in invalid format: %s"), uid);
-		return;
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Internal error: UID in invalid format: %s"), uid);
+		return FALSE;
 	}
 	*msgid++ = 0;
 
 	camel_service_lock (CAMEL_SERVICE (nntp_store), CS_REC_CONNECT_LOCK);
 
-	stream = nntp_folder_download_message ((CamelNNTPFolder *) disco_folder, article, msgid, ex);
+	stream = nntp_folder_download_message (
+		(CamelNNTPFolder *) disco_folder, article, msgid, ex);
 	if (stream)
 		camel_object_unref (stream);
+	else
+		success = FALSE;
 
 	camel_service_unlock (CAMEL_SERVICE (nntp_store), CS_REC_CONNECT_LOCK);
+
+	return success;
 }
 
 static CamelMimeMessage *
@@ -203,8 +241,9 @@ nntp_folder_get_message (CamelFolder *folder, const gchar *uid, CamelException *
 	strcpy(article, uid);
 	msgid = strchr (article, ',');
 	if (msgid == NULL) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Internal error: UID in invalid format: %s"), uid);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Internal error: UID in invalid format: %s"), uid);
 		return NULL;
 	}
 	*msgid++ = 0;
@@ -215,8 +254,9 @@ nntp_folder_get_message (CamelFolder *folder, const gchar *uid, CamelException *
 	stream = camel_data_cache_get (nntp_store->cache, "cache", msgid, NULL);
 	if (stream == NULL) {
 		if (camel_disco_store_status ((CamelDiscoStore *) nntp_store) == CAMEL_DISCO_STORE_OFFLINE) {
-			camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-					     _("This message is not currently available"));
+			camel_exception_set (
+				ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+				_("This message is not currently available"));
 			goto fail;
 		}
 
@@ -228,9 +268,14 @@ nntp_folder_get_message (CamelFolder *folder, const gchar *uid, CamelException *
 	message = camel_mime_message_new ();
 	if (camel_data_wrapper_construct_from_stream ((CamelDataWrapper *) message, stream) == -1) {
 		if (errno == EINTR)
-			camel_exception_setv (ex, CAMEL_EXCEPTION_USER_CANCEL, _("User cancelled the operation"));
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_USER_CANCEL,
+				_("User cancelled the operation"));
 		else
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, _("Cannot get message %s: %s"), uid, g_strerror (errno));
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Cannot get message %s: %s"), uid,
+				g_strerror (errno));
 		camel_object_unref (message);
 		message = NULL;
 	}
@@ -324,10 +369,12 @@ nntp_folder_search_free (CamelFolder *folder, GPtrArray *result)
 	CAMEL_NNTP_FOLDER_UNLOCK(nntp_folder, search_lock);
 }
 
-static void
-nntp_folder_append_message_online (CamelFolder *folder, CamelMimeMessage *mime_message,
-				   const CamelMessageInfo *info, gchar **appended_uid,
-				   CamelException *ex)
+static gboolean
+nntp_folder_append_message_online (CamelFolder *folder,
+                                   CamelMimeMessage *mime_message,
+                                   const CamelMessageInfo *info,
+                                   gchar **appended_uid,
+                                   CamelException *ex)
 {
 	CamelNNTPStore *nntp_store = (CamelNNTPStore *) folder->parent_store;
 	CamelStream *stream = (CamelStream*)nntp_store->stream;
@@ -337,20 +384,26 @@ nntp_folder_append_message_online (CamelFolder *folder, CamelMimeMessage *mime_m
 	guint u;
 	struct _camel_header_raw *header, *savedhdrs, *n, *tail;
 	gchar *group, *line;
+	gboolean success = TRUE;
 
 	camel_service_lock (CAMEL_SERVICE (nntp_store), CS_REC_CONNECT_LOCK);
 
 	/* send 'POST' command */
 	ret = camel_nntp_command (nntp_store, ex, NULL, &line, "post");
 	if (ret != 340) {
-		if (ret == 440)
-			camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_INSUFFICIENT_PERMISSION,
-					      _("Posting failed: %s"), line);
-		else if (ret != -1)
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      _("Posting failed: %s"), line);
+		if (ret == 440) {
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_FOLDER_INSUFFICIENT_PERMISSION,
+				_("Posting failed: %s"), line);
+			success = FALSE;
+		} else if (ret != -1) {
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Posting failed: %s"), line);
+			success = FALSE;
+		}
 		camel_service_unlock (CAMEL_SERVICE (nntp_store), CS_REC_CONNECT_LOCK);
-		return;
+		return success;
 	}
 
 	/* the 'Newsgroups: ' header */
@@ -384,16 +437,24 @@ nntp_folder_append_message_online (CamelFolder *folder, CamelMimeMessage *mime_m
 
 	/* write the message */
 	if (camel_stream_write(stream, group, strlen(group)) == -1
-	    || camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (mime_message), CAMEL_STREAM (filtered_stream)) == -1
-	    || camel_stream_flush (CAMEL_STREAM (filtered_stream)) == -1
+	    || camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (mime_message), filtered_stream) == -1
+	    || camel_stream_flush (filtered_stream) == -1
 	    || camel_stream_write (stream, "\r\n.\r\n", 5) == -1
 	    || (ret = camel_nntp_stream_line (nntp_store->stream, (guchar **)&line, &u)) == -1) {
 		if (errno == EINTR)
-			camel_exception_setv (ex, CAMEL_EXCEPTION_USER_CANCEL, _("User cancelled the operation"));
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_USER_CANCEL,
+				_("User cancelled the operation"));
 		else
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, _("Posting failed: %s"), g_strerror (errno));
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Posting failed: %s"), g_strerror (errno));
+		success = FALSE;
 	} else if (atoi(line) != 240) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, _("Posting failed: %s"), line);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Posting failed: %s"), line);
+		success = FALSE;
 	}
 
 	camel_object_unref (filtered_stream);
@@ -402,88 +463,80 @@ nntp_folder_append_message_online (CamelFolder *folder, CamelMimeMessage *mime_m
 
 	camel_service_unlock (CAMEL_SERVICE (nntp_store), CS_REC_CONNECT_LOCK);
 
-	return;
+	return success;
 }
 
-static void
-nntp_folder_append_message_offline (CamelFolder *folder, CamelMimeMessage *mime_message,
-				    const CamelMessageInfo *info, gchar **appended_uid,
-				    CamelException *ex)
+static gboolean
+nntp_folder_append_message_offline (CamelFolder *folder,
+                                    CamelMimeMessage *mime_message,
+                                    const CamelMessageInfo *info,
+                                    gchar **appended_uid,
+                                    CamelException *ex)
 {
-	camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-			      _("You cannot post NNTP messages while working offline!"));
+	camel_exception_setv (
+		ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+		_("You cannot post NNTP messages while working offline!"));
+
+	return FALSE;
 }
 
 /* I do not know what to do this exactly. Looking at the IMAP implementation for this, it
    seems to assume the message is copied to a folder on the same store. In that case, an
    NNTP implementation doesn't seem to make any sense. */
-static void
-nntp_folder_transfer_message (CamelFolder *source, GPtrArray *uids, CamelFolder *dest,
-			      GPtrArray **transferred_uids, gboolean delete_orig, CamelException *ex)
-{
-	camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-			      _("You cannot copy messages from a NNTP folder!"));
-}
-
-static void
-nntp_folder_init (CamelNNTPFolder *nntp_folder, CamelNNTPFolderClass *klass)
+static gboolean
+nntp_folder_transfer_message (CamelFolder *source,
+                              GPtrArray *uids,
+                              CamelFolder *dest,
+                              GPtrArray **transferred_uids,
+                              gboolean delete_orig,
+                              CamelException *ex)
 {
-	struct _CamelNNTPFolderPrivate *p;
+	camel_exception_setv (
+		ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+		_("You cannot copy messages from a NNTP folder!"));
 
-	nntp_folder->changes = camel_folder_change_info_new ();
-	p = nntp_folder->priv = g_malloc0 (sizeof (*nntp_folder->priv));
-	p->search_lock = g_mutex_new ();
-	p->cache_lock = g_mutex_new ();
+	return FALSE;
 }
 
 static void
-nntp_folder_finalize (CamelNNTPFolder *nntp_folder)
+camel_nntp_folder_class_init (CamelNNTPFolderClass *class)
 {
-	struct _CamelNNTPFolderPrivate *p;
-
-	CamelException ex;
+	CamelFolderClass *folder_class;
+	CamelDiscoFolderClass *disco_folder_class;
 
-	camel_exception_init (&ex);
-
-	camel_folder_summary_save_to_db (((CamelFolder*) nntp_folder)->summary, &ex);
+	parent_class = CAMEL_DISCO_FOLDER_CLASS (camel_type_get_global_classfuncs (camel_disco_folder_get_type ()));
+	folder_class = CAMEL_FOLDER_CLASS (camel_type_get_global_classfuncs (camel_folder_get_type ()));
 
-	p = nntp_folder->priv;
-	g_mutex_free (p->search_lock);
-	g_mutex_free (p->cache_lock);
-	g_free (p);
+	folder_class = CAMEL_FOLDER_CLASS (class);
+	folder_class->get_message = nntp_folder_get_message;
+	folder_class->search_by_expression = nntp_folder_search_by_expression;
+	folder_class->count_by_expression = nntp_folder_count_by_expression;
+	folder_class->search_by_uids = nntp_folder_search_by_uids;
+	folder_class->search_free = nntp_folder_search_free;
+	folder_class->get_filename = nntp_get_filename;
+
+	disco_folder_class = CAMEL_DISCO_FOLDER_CLASS (class);
+	disco_folder_class->sync_online = nntp_folder_sync_online;
+	disco_folder_class->sync_resyncing = nntp_folder_sync_offline;
+	disco_folder_class->sync_offline = nntp_folder_sync_offline;
+	disco_folder_class->cache_message = nntp_folder_cache_message;
+	disco_folder_class->append_online = nntp_folder_append_message_online;
+	disco_folder_class->append_resyncing = nntp_folder_append_message_online;
+	disco_folder_class->append_offline = nntp_folder_append_message_offline;
+	disco_folder_class->transfer_online = nntp_folder_transfer_message;
+	disco_folder_class->transfer_resyncing = nntp_folder_transfer_message;
+	disco_folder_class->transfer_offline = nntp_folder_transfer_message;
+	disco_folder_class->refresh_info_online = nntp_folder_refresh_info_online;
 }
 
 static void
-nntp_folder_class_init (CamelNNTPFolderClass *camel_nntp_folder_class)
+camel_nntp_folder_init (CamelNNTPFolder *nntp_folder)
 {
-	CamelDiscoFolderClass *camel_disco_folder_class = CAMEL_DISCO_FOLDER_CLASS (camel_nntp_folder_class);
-	CamelFolderClass *camel_folder_class = CAMEL_FOLDER_CLASS (camel_nntp_folder_class);
-
-	parent_class = CAMEL_DISCO_FOLDER_CLASS (camel_type_get_global_classfuncs (camel_disco_folder_get_type ()));
-	folder_class = CAMEL_FOLDER_CLASS (camel_type_get_global_classfuncs (camel_folder_get_type ()));
+	nntp_folder->priv = g_new0 (CamelNNTPFolderPrivate, 1);
 
-	/* virtual method definition */
-
-	/* virtual method overload */
-	camel_disco_folder_class->sync_online = nntp_folder_sync_online;
-	camel_disco_folder_class->sync_resyncing = nntp_folder_sync_offline;
-	camel_disco_folder_class->sync_offline = nntp_folder_sync_offline;
-	camel_disco_folder_class->cache_message = nntp_folder_cache_message;
-	camel_disco_folder_class->append_online = nntp_folder_append_message_online;
-	camel_disco_folder_class->append_resyncing = nntp_folder_append_message_online;
-	camel_disco_folder_class->append_offline = nntp_folder_append_message_offline;
-	camel_disco_folder_class->transfer_online = nntp_folder_transfer_message;
-	camel_disco_folder_class->transfer_resyncing = nntp_folder_transfer_message;
-	camel_disco_folder_class->transfer_offline = nntp_folder_transfer_message;
-	camel_disco_folder_class->refresh_info_online = nntp_folder_refresh_info_online;
-
-	camel_folder_class->set_message_flags = nntp_folder_set_message_flags;
-	camel_folder_class->get_message = nntp_folder_get_message;
-	camel_folder_class->search_by_expression = nntp_folder_search_by_expression;
-	camel_folder_class->count_by_expression = nntp_folder_count_by_expression;
-	camel_folder_class->search_by_uids = nntp_folder_search_by_uids;
-	camel_folder_class->search_free = nntp_folder_search_free;
-	camel_folder_class->get_filename = nntp_get_filename;
+	nntp_folder->changes = camel_folder_change_info_new ();
+	nntp_folder->priv->search_lock = g_mutex_new ();
+	nntp_folder->priv->cache_lock = g_mutex_new ();
 }
 
 CamelType
@@ -495,9 +548,9 @@ camel_nntp_folder_get_type (void)
 		camel_nntp_folder_type = camel_type_register (CAMEL_DISCO_FOLDER_TYPE, "CamelNNTPFolder",
 							      sizeof (CamelNNTPFolder),
 							      sizeof (CamelNNTPFolderClass),
-							      (CamelObjectClassInitFunc) nntp_folder_class_init,
+							      (CamelObjectClassInitFunc) camel_nntp_folder_class_init,
 							      NULL,
-							      (CamelObjectInitFunc) nntp_folder_init,
+							      (CamelObjectInitFunc) camel_nntp_folder_init,
 							      (CamelObjectFinalizeFunc) nntp_folder_finalize);
 	}
 
@@ -505,7 +558,9 @@ camel_nntp_folder_get_type (void)
 }
 
 CamelFolder *
-camel_nntp_folder_new (CamelStore *parent, const gchar *folder_name, CamelException *ex)
+camel_nntp_folder_new (CamelStore *parent,
+                       const gchar *folder_name,
+                       CamelException *ex)
 {
 	CamelFolder *folder;
 	CamelNNTPFolder *nntp_folder;
@@ -548,12 +603,9 @@ camel_nntp_folder_new (CamelStore *parent, const gchar *folder_name, CamelExcept
 		camel_store_summary_info_free ((CamelStoreSummary *) ((CamelNNTPStore*) parent)->summary, si);
 	}
 
-	if (subscribed) {
-		camel_folder_refresh_info(folder, ex);
-		if (camel_exception_is_set(ex)) {
-			camel_object_unref (folder);
-			folder = NULL;
-		}
+	if (subscribed && !camel_folder_refresh_info (folder, ex)) {
+		camel_object_unref (folder);
+		folder = NULL;
         }
 
 	return folder;
diff --git a/camel/providers/nntp/camel-nntp-folder.h b/camel/providers/nntp/camel-nntp-folder.h
index 3e1cade..10e88e1 100644
--- a/camel/providers/nntp/camel-nntp-folder.h
+++ b/camel/providers/nntp/camel-nntp-folder.h
@@ -27,8 +27,6 @@
 
 #include <camel/camel.h>
 
-/*  #include "camel-store.h" */
-
 #define CAMEL_NNTP_FOLDER_TYPE     (camel_nntp_folder_get_type ())
 #define CAMEL_NNTP_FOLDER(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_NNTP_FOLDER_TYPE, CamelNNTPFolder))
 #define CAMEL_NNTP_FOLDER_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_NNTP_FOLDER_TYPE, CamelNNTPFolderClass))
@@ -54,14 +52,11 @@ struct _CamelNNTPFolderClass {
 	CamelDiscoFolderClass parent;
 };
 
-/* public methods */
-
-/* Standard Camel function */
 CamelType camel_nntp_folder_get_type (void);
 
 CamelFolder *camel_nntp_folder_new (CamelStore *parent, const gchar *folder_name, CamelException *ex);
 
-void camel_nntp_folder_selected(CamelNNTPFolder *folder, gchar *line, CamelException *ex);
+gboolean camel_nntp_folder_selected(CamelNNTPFolder *folder, gchar *line, CamelException *ex);
 
 G_END_DECLS
 
diff --git a/camel/providers/nntp/camel-nntp-grouplist.c b/camel/providers/nntp/camel-nntp-grouplist.c
index e1590e0..062cca3 100644
--- a/camel/providers/nntp/camel-nntp-grouplist.c
+++ b/camel/providers/nntp/camel-nntp-grouplist.c
@@ -28,7 +28,6 @@
 #include <errno.h>
 #include <string.h>
 
-#include <glib.h>
 #include <glib/gstdio.h>
 
 #include "camel-nntp-grouplist.h"
diff --git a/camel/providers/nntp/camel-nntp-newsrc.c b/camel/providers/nntp/camel-nntp-newsrc.c
index 3be4004..f999741 100644
--- a/camel/providers/nntp/camel-nntp-newsrc.c
+++ b/camel/providers/nntp/camel-nntp-newsrc.c
@@ -31,7 +31,6 @@
 #include <string.h>
 #include <unistd.h>
 
-#include <glib.h>
 #include <glib/gstdio.h>
 
 #include "camel-nntp-newsrc.h"
diff --git a/camel/providers/nntp/camel-nntp-provider.c b/camel/providers/nntp/camel-nntp-provider.c
index 09efcb4..3f8a3ac 100644
--- a/camel/providers/nntp/camel-nntp-provider.c
+++ b/camel/providers/nntp/camel-nntp-provider.c
@@ -81,7 +81,7 @@ CamelServiceAuthType camel_nntp_password_authtype = {
 void
 camel_provider_module_init(void)
 {
-	news_provider.object_types[CAMEL_PROVIDER_STORE] = camel_nntp_store_get_type();
+	news_provider.object_types[CAMEL_PROVIDER_STORE] = camel_nntp_store_get_type ();
 
 	news_provider.url_hash = nntp_url_hash;
 	news_provider.url_equal = nntp_url_equal;
diff --git a/camel/providers/nntp/camel-nntp-store-summary.c b/camel/providers/nntp/camel-nntp-store-summary.c
index 6e8164f..781da0a 100644
--- a/camel/providers/nntp/camel-nntp-store-summary.c
+++ b/camel/providers/nntp/camel-nntp-store-summary.c
@@ -39,12 +39,9 @@
 
 #define CAMEL_NNTP_STORE_SUMMARY_VERSION (1)
 
-#define _PRIVATE(o) (((CamelNNTPStoreSummary *)(o))->priv)
-
 static gint summary_header_load(CamelStoreSummary *, FILE *);
 static gint summary_header_save(CamelStoreSummary *, FILE *);
 
-/*static CamelStoreInfo * store_info_new(CamelStoreSummary *, const gchar *);*/
 static CamelStoreInfo * store_info_load(CamelStoreSummary *, FILE *);
 static gint		 store_info_save(CamelStoreSummary *, FILE *, CamelStoreInfo *);
 static void		 store_info_free(CamelStoreSummary *, CamelStoreInfo *);
@@ -52,49 +49,38 @@ static void		 store_info_free(CamelStoreSummary *, CamelStoreInfo *);
 static const gchar *store_info_string(CamelStoreSummary *, const CamelStoreInfo *, gint);
 static void store_info_set_string(CamelStoreSummary *, CamelStoreInfo *, int, const gchar *);
 
-static void camel_nntp_store_summary_class_init (CamelNNTPStoreSummaryClass *klass);
-static void camel_nntp_store_summary_init       (CamelNNTPStoreSummary *obj);
-static void camel_nntp_store_summary_finalize   (CamelObject *obj);
-
-static CamelStoreSummaryClass *camel_nntp_store_summary_parent;
+static gpointer camel_nntp_store_summary_parent_class;
 
 static void
-camel_nntp_store_summary_class_init (CamelNNTPStoreSummaryClass *klass)
+camel_nntp_store_summary_class_init (CamelNNTPStoreSummaryClass *class)
 {
-	CamelStoreSummaryClass *ssklass = (CamelStoreSummaryClass *)klass;
-
-	ssklass->summary_header_load = summary_header_load;
-	ssklass->summary_header_save = summary_header_save;
-
-	/*ssklass->store_info_new  = store_info_new;*/
-	ssklass->store_info_load = store_info_load;
-	ssklass->store_info_save = store_info_save;
-	ssklass->store_info_free = store_info_free;
-
-	ssklass->store_info_string = store_info_string;
-	ssklass->store_info_set_string = store_info_set_string;
+	CamelStoreSummaryClass *store_summary_class;
+
+	camel_nntp_store_summary_parent_class = CAMEL_STORE_SUMMARY_CLASS (camel_type_get_global_classfuncs (camel_store_summary_get_type ()));
+
+	store_summary_class = CAMEL_STORE_SUMMARY_CLASS (class);
+	store_summary_class->summary_header_load = summary_header_load;
+	store_summary_class->summary_header_save = summary_header_save;
+	store_summary_class->store_info_load = store_info_load;
+	store_summary_class->store_info_save = store_info_save;
+	store_summary_class->store_info_free = store_info_free;
+	store_summary_class->store_info_string = store_info_string;
+	store_summary_class->store_info_set_string = store_info_set_string;
 }
 
 static void
-camel_nntp_store_summary_init (CamelNNTPStoreSummary *s)
+camel_nntp_store_summary_init (CamelNNTPStoreSummary *nntp_store_summary)
 {
-	/*struct _CamelNNTPStoreSummaryPrivate *p;
+	CamelStoreSummary *store_summary;
 
-	  p = _PRIVATE(s) = g_malloc0(sizeof(*p));*/
+	store_summary = CAMEL_STORE_SUMMARY (nntp_store_summary);
+	store_summary->store_info_size = sizeof (CamelNNTPStoreInfo);
 
-	((CamelStoreSummary *) s)->store_info_size = sizeof (CamelNNTPStoreInfo);
-	s->version = CAMEL_NNTP_STORE_SUMMARY_VERSION;
-	memset (&s->last_newslist, 0, sizeof (s->last_newslist));
-}
-
-static void
-camel_nntp_store_summary_finalize (CamelObject *obj)
-{
-	/*struct _CamelNNTPStoreSummaryPrivate *p;*/
-	/*CamelNNTPStoreSummary *s = (CamelNNTPStoreSummary *)obj;*/
+	nntp_store_summary->version = CAMEL_NNTP_STORE_SUMMARY_VERSION;
 
-	/*p = _PRIVATE(obj);
-	  g_free(p);*/
+	memset (
+		&nntp_store_summary->last_newslist, 0,
+		sizeof (nntp_store_summary->last_newslist));
 }
 
 CamelType
@@ -103,14 +89,14 @@ camel_nntp_store_summary_get_type (void)
 	static CamelType type = CAMEL_INVALID_TYPE;
 
 	if (type == CAMEL_INVALID_TYPE) {
-		camel_nntp_store_summary_parent = (CamelStoreSummaryClass *)camel_store_summary_get_type();
-		type = camel_type_register((CamelType)camel_nntp_store_summary_parent, "CamelNNTPStoreSummary",
+		type = camel_type_register(camel_store_summary_get_type (),
+					   "CamelNNTPStoreSummary",
 					   sizeof (CamelNNTPStoreSummary),
 					   sizeof (CamelNNTPStoreSummaryClass),
 					   (CamelObjectClassInitFunc) camel_nntp_store_summary_class_init,
 					   NULL,
 					   (CamelObjectInitFunc) camel_nntp_store_summary_init,
-					   (CamelObjectFinalizeFunc) camel_nntp_store_summary_finalize);
+					   (CamelObjectFinalizeFunc) NULL);
 	}
 
 	return type;
@@ -311,7 +297,7 @@ summary_header_load (CamelStoreSummary *s, FILE *in)
 	CamelNNTPStoreSummary *is = (CamelNNTPStoreSummary *) s;
 	gint32 version, nil;
 
-	if (camel_nntp_store_summary_parent->summary_header_load ((CamelStoreSummary *) s, in) == -1
+	if (CAMEL_STORE_SUMMARY_CLASS (camel_nntp_store_summary_parent_class)->summary_header_load ((CamelStoreSummary *) s, in) == -1
 	    || camel_file_util_decode_fixed_int32 (in, &version) == -1)
 		return -1;
 
@@ -336,7 +322,7 @@ summary_header_save (CamelStoreSummary *s, FILE *out)
 	CamelNNTPStoreSummary *is = (CamelNNTPStoreSummary *) s;
 
 	/* always write as latest version */
-	if (camel_nntp_store_summary_parent->summary_header_save ((CamelStoreSummary *) s, out) == -1
+	if (CAMEL_STORE_SUMMARY_CLASS (camel_nntp_store_summary_parent_class)->summary_header_save ((CamelStoreSummary *) s, out) == -1
 	    || camel_file_util_encode_fixed_int32 (out, CAMEL_NNTP_STORE_SUMMARY_VERSION) == -1
 	    || fwrite (is->last_newslist, 1, NNTP_DATE_SIZE, out) < NNTP_DATE_SIZE
 	    || camel_file_util_encode_fixed_int32 (out, 0) == -1)
@@ -350,7 +336,7 @@ store_info_load (CamelStoreSummary *s, FILE *in)
 {
 	CamelNNTPStoreInfo *ni;
 
-	ni = (CamelNNTPStoreInfo *) camel_nntp_store_summary_parent->store_info_load (s, in);
+	ni = (CamelNNTPStoreInfo *) CAMEL_STORE_SUMMARY_CLASS (camel_nntp_store_summary_parent_class)->store_info_load (s, in);
 	if (ni) {
 		if (camel_file_util_decode_string (in, &ni->full_name) == -1) {
 			camel_store_summary_info_free (s, (CamelStoreInfo *) ni);
@@ -374,7 +360,7 @@ store_info_save (CamelStoreSummary *s, FILE *out, CamelStoreInfo *mi)
 {
 	CamelNNTPStoreInfo *isi = (CamelNNTPStoreInfo *)mi;
 
-	if (camel_nntp_store_summary_parent->store_info_save (s, out, mi) == -1
+	if (CAMEL_STORE_SUMMARY_CLASS (camel_nntp_store_summary_parent_class)->store_info_save (s, out, mi) == -1
 	    || camel_file_util_encode_string (out, isi->full_name) == -1
 	    || camel_file_util_encode_uint32(out, isi->first) == -1
 	    || camel_file_util_encode_uint32(out, isi->last) == -1)
@@ -389,7 +375,7 @@ store_info_free (CamelStoreSummary *s, CamelStoreInfo *mi)
 	CamelNNTPStoreInfo *nsi = (CamelNNTPStoreInfo *) mi;
 
 	g_free (nsi->full_name);
-	camel_nntp_store_summary_parent->store_info_free (s, mi);
+	CAMEL_STORE_SUMMARY_CLASS (camel_nntp_store_summary_parent_class)->store_info_free (s, mi);
 }
 
 static const gchar *
@@ -405,7 +391,7 @@ store_info_string(CamelStoreSummary *s, const CamelStoreInfo *mi, gint type)
 	case CAMEL_NNTP_STORE_INFO_FULL_NAME:
 		return nsi->full_name;
 	default:
-		return camel_nntp_store_summary_parent->store_info_string(s, mi, type);
+		return CAMEL_STORE_SUMMARY_CLASS (camel_nntp_store_summary_parent_class)->store_info_string(s, mi, type);
 	}
 }
 
@@ -425,7 +411,7 @@ store_info_set_string(CamelStoreSummary *s, CamelStoreInfo *mi, gint type, const
 		camel_store_summary_unlock (s, CSS_SUMMARY_LOCK);
 		break;
 	default:
-		camel_nntp_store_summary_parent->store_info_set_string (s, mi, type, str);
+		CAMEL_STORE_SUMMARY_CLASS (camel_nntp_store_summary_parent_class)->store_info_set_string (s, mi, type, str);
 		break;
 	}
 }
diff --git a/camel/providers/nntp/camel-nntp-store-summary.h b/camel/providers/nntp/camel-nntp-store-summary.h
index 26be244..8ba6400 100644
--- a/camel/providers/nntp/camel-nntp-store-summary.h
+++ b/camel/providers/nntp/camel-nntp-store-summary.h
@@ -32,8 +32,9 @@
 
 G_BEGIN_DECLS
 
-typedef struct _CamelNNTPStoreSummary      CamelNNTPStoreSummary;
+typedef struct _CamelNNTPStoreSummary CamelNNTPStoreSummary;
 typedef struct _CamelNNTPStoreSummaryClass CamelNNTPStoreSummaryClass;
+typedef struct _CamelNNTPStoreSummaryPrivate CamelNNTPStoreSummaryPrivate;
 
 typedef struct _CamelNNTPStoreInfo CamelNNTPStoreInfo;
 
@@ -53,8 +54,7 @@ struct _CamelNNTPStoreInfo {
 
 struct _CamelNNTPStoreSummary {
 	CamelStoreSummary summary;
-
-	struct _CamelNNTPStoreSummaryPrivate *priv;
+	CamelNNTPStoreSummaryPrivate *priv;
 
 	/* header info */
 	guint32 version;	/* version of base part of file */
diff --git a/camel/providers/nntp/camel-nntp-store.c b/camel/providers/nntp/camel-nntp-store.c
index 6b4745b..aebfc26 100644
--- a/camel/providers/nntp/camel-nntp-store.c
+++ b/camel/providers/nntp/camel-nntp-store.c
@@ -54,19 +54,53 @@
 
 #define DUMP_EXTENSIONS
 
-static CamelDiscoStoreClass *parent_class = NULL;
-static CamelServiceClass *service_class = NULL;
-
-/* Returns the class for a CamelNNTPStore */
-#define CNNTPS_CLASS(so) CAMEL_NNTP_STORE_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CNNTPF_CLASS(so) CAMEL_NNTP_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
+static gpointer camel_nntp_store_parent_class;
 
 static gint camel_nntp_try_authenticate (CamelNNTPStore *store, CamelException *ex);
 
-static void nntp_construct (CamelService *service, CamelSession *session,
-			    CamelProvider *provider, CamelURL *url,
-			    CamelException *ex);
+static void
+nntp_store_finalize (CamelObject *object)
+{
+	/* call base finalize */
+	CamelNNTPStore *nntp_store = CAMEL_NNTP_STORE (object);
+	CamelDiscoStore *disco_store = (CamelDiscoStore *) nntp_store;
+	struct _CamelNNTPStorePrivate *p = nntp_store->priv;
+	struct _xover_header *xover, *xn;
+
+	camel_service_disconnect ((CamelService *)object, TRUE, NULL);
+
+	if (nntp_store->summary) {
+		camel_store_summary_save ((CamelStoreSummary *) nntp_store->summary);
+		camel_object_unref (nntp_store->summary);
+	}
+
+	camel_object_unref (nntp_store->mem);
+	nntp_store->mem = NULL;
+	if (nntp_store->stream)
+		camel_object_unref (nntp_store->stream);
+
+	if (nntp_store->base_url)
+		g_free (nntp_store->base_url);
+	if (nntp_store->storage_path)
+		g_free (nntp_store->storage_path);
+
+	xover = nntp_store->xover;
+	while (xover) {
+		xn = xover->next;
+		g_free(xover);
+		xover = xn;
+	}
+
+	if (nntp_store->cache)
+		camel_object_unref (nntp_store->cache);
+
+	if (disco_store->diary) {
+		camel_object_unref (disco_store->diary);
+		disco_store->diary = NULL;
+	}
+
+	g_free(p);
+}
 
 static gboolean
 nntp_can_work_offline(CamelDiscoStore *store)
@@ -170,10 +204,10 @@ connect_to_server (CamelService *service, struct addrinfo *ai, gint ssl_mode, Ca
 			tcp_stream = camel_tcp_stream_ssl_new (service->session, service->url->host, SSL_PORT_FLAGS);
 		}
 #else
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      _("Could not connect to %s: %s"),
-				      service->url->host, _("SSL unavailable"));
-
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+			_("Could not connect to %s: %s"),
+			service->url->host, _("SSL unavailable"));
 		goto fail;
 #endif /* HAVE_SSL */
 	} else {
@@ -182,14 +216,14 @@ connect_to_server (CamelService *service, struct addrinfo *ai, gint ssl_mode, Ca
 
 	if (camel_tcp_stream_connect ((CamelTcpStream *) tcp_stream, ai) == -1) {
 		if (errno == EINTR)
-			camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL,
-					     _("Connection canceled"));
+			camel_exception_set (
+				ex, CAMEL_EXCEPTION_USER_CANCEL,
+				_("Connection canceled"));
 		else
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-					      _("Could not connect to %s: %s"),
-					      service->url->host,
-					      g_strerror (errno));
-
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+				_("Could not connect to %s: %s"),
+				service->url->host, g_strerror (errno));
 		camel_object_unref (tcp_stream);
 
 		goto fail;
@@ -353,8 +387,11 @@ static gboolean
 nntp_disconnect_online (CamelService *service, gboolean clean, CamelException *ex)
 {
 	CamelNNTPStore *store = CAMEL_NNTP_STORE (service);
+	CamelServiceClass *service_class;
 	gchar *line;
 
+	service_class = CAMEL_SERVICE_GET_CLASS (service);
+
 	camel_service_lock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
 
 	if (clean) {
@@ -362,6 +399,7 @@ nntp_disconnect_online (CamelService *service, gboolean clean, CamelException *e
 		camel_exception_clear(ex);
 	}
 
+	/* Chain up to parent's disconnect() method. */
 	if (!service_class->disconnect (service, clean, ex)) {
 		camel_service_unlock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
 		return FALSE;
@@ -381,7 +419,10 @@ static gboolean
 nntp_disconnect_offline (CamelService *service, gboolean clean, CamelException *ex)
 {
 	CamelDiscoStore *disco = CAMEL_DISCO_STORE(service);
+	CamelServiceClass *service_class;
 
+	/* Chain up to parent's disconnect() method. */
+	service_class = CAMEL_SERVICE_CLASS (camel_nntp_store_parent_class);
 	if (!service_class->disconnect (service, clean, ex))
 		return FALSE;
 
@@ -807,8 +848,9 @@ nntp_store_get_folder_info_all(CamelNNTPStore *nntp_store, const gchar *top, gui
 			if (ret == -1)
 				goto error;
 			else if (ret != 215) {
-				camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_INVALID,
-						      _("Error retrieving newsgroups:\n\n%s"), line);
+				camel_exception_setv (
+					ex, CAMEL_EXCEPTION_SERVICE_INVALID,
+					_("Error retrieving newsgroups:\n\n%s"), line);
 				goto error;
 			}
 
@@ -889,21 +931,25 @@ nntp_store_folder_subscribed (CamelStore *store, const gchar *folder_name)
 	return truth;
 }
 
-static void
+static gboolean
 nntp_store_subscribe_folder (CamelStore *store, const gchar *folder_name,
 			     CamelException *ex)
 {
 	CamelNNTPStore *nntp_store = CAMEL_NNTP_STORE(store);
 	CamelStoreInfo *si;
 	CamelFolderInfo *fi;
+	gboolean success = TRUE;
 
 	camel_service_lock (CAMEL_SERVICE (nntp_store), CS_REC_CONNECT_LOCK);
 
 	si = camel_store_summary_path(CAMEL_STORE_SUMMARY(nntp_store->summary), folder_name);
 	if (!si) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_INVALID,
-				      _("You cannot subscribe to this newsgroup:\n\n"
-					"No such newsgroup. The selected item is a probably a parent folder."));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_FOLDER_INVALID,
+			_("You cannot subscribe to this newsgroup:\n\n"
+			  "No such newsgroup. The selected item is a "
+			  "probably a parent folder."));
+		success = FALSE;
 	} else {
 		if (!(si->flags & CAMEL_STORE_INFO_FOLDER_SUBSCRIBED)) {
 			si->flags |= CAMEL_STORE_INFO_FOLDER_SUBSCRIBED;
@@ -914,28 +960,34 @@ nntp_store_subscribe_folder (CamelStore *store, const gchar *folder_name,
 			camel_service_unlock (CAMEL_SERVICE (nntp_store), CS_REC_CONNECT_LOCK);
 			camel_object_trigger_event ((CamelObject *) nntp_store, "folder_subscribed", fi);
 			camel_folder_info_free (fi);
-			return;
+			return TRUE;
 		}
 	}
 
 	camel_service_unlock (CAMEL_SERVICE (nntp_store), CS_REC_CONNECT_LOCK);
+
+	return success;
 }
 
-static void
+static gboolean
 nntp_store_unsubscribe_folder (CamelStore *store, const gchar *folder_name,
 			       CamelException *ex)
 {
 	CamelNNTPStore *nntp_store = CAMEL_NNTP_STORE(store);
 	CamelFolderInfo *fi;
 	CamelStoreInfo *fitem;
+	gboolean success = TRUE;
+
 	camel_service_lock (CAMEL_SERVICE (nntp_store), CS_REC_CONNECT_LOCK);
 
 	fitem = camel_store_summary_path(CAMEL_STORE_SUMMARY(nntp_store->summary), folder_name);
 
 	if (!fitem) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_INVALID,
-				      _("You cannot unsubscribe to this newsgroup:\n\n"
-					"newsgroup does not exist!"));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_FOLDER_INVALID,
+			_("You cannot unsubscribe to this newsgroup:\n\n"
+			  "newsgroup does not exist!"));
+		success = FALSE;
 	} else {
 		if (fitem->flags & CAMEL_STORE_INFO_FOLDER_SUBSCRIBED) {
 			fitem->flags &= ~CAMEL_STORE_INFO_FOLDER_SUBSCRIBED;
@@ -945,11 +997,13 @@ nntp_store_unsubscribe_folder (CamelStore *store, const gchar *folder_name,
 			camel_service_unlock (CAMEL_SERVICE (nntp_store), CS_REC_CONNECT_LOCK);
 			camel_object_trigger_event ((CamelObject *) nntp_store, "folder_unsubscribed", fi);
 			camel_folder_info_free (fi);
-			return;
+			return TRUE;
 		}
 	}
 
 	camel_service_unlock (CAMEL_SERVICE (nntp_store), CS_REC_CONNECT_LOCK);
+
+	return success;
 }
 
 /* stubs for various folder operations we're not implementing */
@@ -958,69 +1012,35 @@ static CamelFolderInfo *
 nntp_create_folder (CamelStore *store, const gchar *parent_name,
                     const gchar *folder_name, CamelException *ex)
 {
-	camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_INVALID,
-		    _("You cannot create a folder in a News store: subscribe instead."));
+	camel_exception_setv (
+		ex, CAMEL_EXCEPTION_FOLDER_INVALID,
+		_("You cannot create a folder in a News store: "
+		  "subscribe instead."));
+
 	return NULL;
 }
 
-static void
+static gboolean
 nntp_rename_folder (CamelStore *store, const gchar *old_name, const gchar *new_name_in, CamelException *ex)
 {
-	camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_INVALID,
-		  _("You cannot rename a folder in a News store."));
+	camel_exception_setv (
+		ex, CAMEL_EXCEPTION_FOLDER_INVALID,
+		_("You cannot rename a folder in a News store."));
+
+	return FALSE;
 }
 
-static void
+static gboolean
 nntp_delete_folder (CamelStore *store, const gchar *folder_name, CamelException *ex)
 {
 	nntp_store_unsubscribe_folder (store, folder_name, ex);
-	camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_INVALID,
-		  _("You cannot remove a folder in a News store: unsubscribe instead."));
-	return;
-}
-
-static void
-nntp_store_finalize (CamelObject *object)
-{
-	/* call base finalize */
-	CamelNNTPStore *nntp_store = CAMEL_NNTP_STORE (object);
-	CamelDiscoStore *disco_store = (CamelDiscoStore *) nntp_store;
-	struct _CamelNNTPStorePrivate *p = nntp_store->priv;
-	struct _xover_header *xover, *xn;
-
-	camel_service_disconnect ((CamelService *)object, TRUE, NULL);
-
-	if (nntp_store->summary) {
-		camel_store_summary_save ((CamelStoreSummary *) nntp_store->summary);
-		camel_object_unref (nntp_store->summary);
-	}
-
-	camel_object_unref (nntp_store->mem);
-	nntp_store->mem = NULL;
-	if (nntp_store->stream)
-		camel_object_unref (nntp_store->stream);
 
-	if (nntp_store->base_url)
-		g_free (nntp_store->base_url);
-	if (nntp_store->storage_path)
-		g_free (nntp_store->storage_path);
+	camel_exception_setv (
+		ex, CAMEL_EXCEPTION_FOLDER_INVALID,
+		_("You cannot remove a folder in a News store: "
+		  "unsubscribe instead."));
 
-	xover = nntp_store->xover;
-	while (xover) {
-		xn = xover->next;
-		g_free(xover);
-		xover = xn;
-	}
-
-	if (nntp_store->cache)
-		camel_object_unref (nntp_store->cache);
-
-	if (disco_store->diary) {
-		camel_object_unref (disco_store->diary);
-		disco_store->diary = NULL;
-	}
-
-	g_free(p);
+	return FALSE;
 }
 
 static gboolean
@@ -1030,65 +1050,26 @@ nntp_can_refresh_folder (CamelStore *store, CamelFolderInfo *info, CamelExceptio
 	return TRUE;
 }
 
-static void
-nntp_store_class_init (CamelNNTPStoreClass *camel_nntp_store_class)
-{
-	CamelDiscoStoreClass *camel_disco_store_class = CAMEL_DISCO_STORE_CLASS (camel_nntp_store_class);
-	CamelStoreClass *camel_store_class = CAMEL_STORE_CLASS (camel_nntp_store_class);
-	CamelServiceClass *camel_service_class = CAMEL_SERVICE_CLASS (camel_nntp_store_class);
-
-	parent_class = CAMEL_DISCO_STORE_CLASS (camel_type_get_global_classfuncs (camel_disco_store_get_type ()));
-	service_class = CAMEL_SERVICE_CLASS (camel_type_get_global_classfuncs (camel_service_get_type ()));
-
-	/* virtual method overload */
-	camel_service_class->construct = nntp_construct;
-	camel_service_class->query_auth_types = nntp_store_query_auth_types;
-	camel_service_class->get_name = nntp_store_get_name;
-
-	camel_disco_store_class->can_work_offline = nntp_can_work_offline;
-	camel_disco_store_class->connect_online = nntp_connect_online;
-	camel_disco_store_class->connect_offline = nntp_connect_offline;
-	camel_disco_store_class->disconnect_online = nntp_disconnect_online;
-	camel_disco_store_class->disconnect_offline = nntp_disconnect_offline;
-	camel_disco_store_class->get_folder_online = nntp_get_folder;
-	camel_disco_store_class->get_folder_resyncing = nntp_get_folder;
-	camel_disco_store_class->get_folder_offline = nntp_get_folder;
-
-	camel_disco_store_class->get_folder_info_online = nntp_get_folder_info_online;
-	camel_disco_store_class->get_folder_info_resyncing = nntp_get_folder_info_online;
-	camel_disco_store_class->get_folder_info_offline = nntp_get_folder_info_offline;
-
-	camel_store_class->free_folder_info = camel_store_free_folder_info_full;
-
-	camel_store_class->folder_subscribed = nntp_store_folder_subscribed;
-	camel_store_class->subscribe_folder = nntp_store_subscribe_folder;
-	camel_store_class->unsubscribe_folder = nntp_store_unsubscribe_folder;
-
-	camel_store_class->create_folder = nntp_create_folder;
-	camel_store_class->delete_folder = nntp_delete_folder;
-	camel_store_class->rename_folder = nntp_rename_folder;
-	camel_store_class->can_refresh_folder = nntp_can_refresh_folder;
-}
-
 /* construction function in which we set some basic store properties */
-static void
+static gboolean
 nntp_construct (CamelService *service, CamelSession *session,
 		CamelProvider *provider, CamelURL *url,
 		CamelException *ex)
 {
+	CamelServiceClass *service_class;
 	CamelNNTPStore *nntp_store = CAMEL_NNTP_STORE(service);
 	CamelURL *summary_url;
 	gchar *tmp;
 
 	/* construct the parent first */
-	CAMEL_SERVICE_CLASS (parent_class)->construct (service, session, provider, url, ex);
-	if (camel_exception_is_set (ex))
-		return;
+	service_class = CAMEL_SERVICE_CLASS (camel_nntp_store_parent_class);
+	if (!service_class->construct (service, session, provider, url, ex))
+		return FALSE;
 
 	/* find out the storage path, base url */
 	nntp_store->storage_path = camel_session_get_storage_path (session, service, ex);
 	if (!nntp_store->storage_path)
-		return;
+		return FALSE;
 
 	/* FIXME */
 	nntp_store->base_url = camel_url_to_string (service->url, (CAMEL_URL_HIDE_PASSWORD |
@@ -1118,25 +1099,63 @@ nntp_construct (CamelService *service, CamelSession *session,
 	/* setup store-wide cache */
 	nntp_store->cache = camel_data_cache_new(nntp_store->storage_path, ex);
 	if (nntp_store->cache == NULL)
-		return;
+		return FALSE;
 
 	/* Default cache expiry - 2 weeks old, or not visited in 5 days */
 	camel_data_cache_set_expire_age(nntp_store->cache, 60*60*24*14);
 	camel_data_cache_set_expire_access(nntp_store->cache, 60*60*24*5);
+
+	return TRUE;
 }
 
 static void
-nntp_store_init (gpointer object, gpointer klass)
+camel_nntp_store_class_init (CamelNNTPStoreClass *class)
 {
-	CamelNNTPStore *nntp_store = CAMEL_NNTP_STORE(object);
-	CamelStore *store = CAMEL_STORE (object);
-	struct _CamelNNTPStorePrivate *p;
+	CamelServiceClass *service_class;
+	CamelStoreClass *store_class;
+	CamelDiscoStoreClass *disco_store_class;
+
+	camel_nntp_store_parent_class = CAMEL_DISCO_STORE_CLASS (camel_type_get_global_classfuncs (camel_disco_store_get_type ()));
+
+	service_class = CAMEL_SERVICE_CLASS (class);
+	service_class->construct = nntp_construct;
+	service_class->query_auth_types = nntp_store_query_auth_types;
+	service_class->get_name = nntp_store_get_name;
+
+	store_class = CAMEL_STORE_CLASS (class);
+	store_class->free_folder_info = camel_store_free_folder_info_full;
+	store_class->folder_subscribed = nntp_store_folder_subscribed;
+	store_class->subscribe_folder = nntp_store_subscribe_folder;
+	store_class->unsubscribe_folder = nntp_store_unsubscribe_folder;
+	store_class->create_folder = nntp_create_folder;
+	store_class->delete_folder = nntp_delete_folder;
+	store_class->rename_folder = nntp_rename_folder;
+	store_class->can_refresh_folder = nntp_can_refresh_folder;
+
+	disco_store_class = CAMEL_DISCO_STORE_CLASS (class);
+	disco_store_class->can_work_offline = nntp_can_work_offline;
+	disco_store_class->connect_online = nntp_connect_online;
+	disco_store_class->connect_offline = nntp_connect_offline;
+	disco_store_class->disconnect_online = nntp_disconnect_online;
+	disco_store_class->disconnect_offline = nntp_disconnect_offline;
+	disco_store_class->get_folder_online = nntp_get_folder;
+	disco_store_class->get_folder_resyncing = nntp_get_folder;
+	disco_store_class->get_folder_offline = nntp_get_folder;
+	disco_store_class->get_folder_info_online = nntp_get_folder_info_online;
+	disco_store_class->get_folder_info_resyncing = nntp_get_folder_info_online;
+	disco_store_class->get_folder_info_offline = nntp_get_folder_info_offline;
+}
+
+static void
+camel_nntp_store_init (CamelNNTPStore *nntp_store)
+{
+	CamelStore *store = CAMEL_STORE (nntp_store);
 
 	store->flags = CAMEL_STORE_SUBSCRIPTIONS;
 
 	nntp_store->mem = (CamelStreamMem *)camel_stream_mem_new();
 
-	p = nntp_store->priv = g_malloc0(sizeof(*p));
+	nntp_store->priv = g_new0 (CamelNNTPStorePrivate, 1);
 }
 
 CamelType
@@ -1150,9 +1169,9 @@ camel_nntp_store_get_type (void)
 					     "CamelNNTPStore",
 					     sizeof (CamelNNTPStore),
 					     sizeof (CamelNNTPStoreClass),
-					     (CamelObjectClassInitFunc) nntp_store_class_init,
+					     (CamelObjectClassInitFunc) camel_nntp_store_class_init,
 					     NULL,
-					     (CamelObjectInitFunc) nntp_store_init,
+					     (CamelObjectInitFunc) camel_nntp_store_init,
 					     (CamelObjectFinalizeFunc) nntp_store_finalize);
 	}
 
@@ -1168,8 +1187,9 @@ camel_nntp_try_authenticate (CamelNNTPStore *store, CamelException *ex)
 	gchar *line = NULL;
 
 	if (!service->url->user) {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_INVALID_PARAM,
-				     _("Authentication requested but no username provided"));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_INVALID_PARAM,
+			_("Authentication requested but no username provided"));
 		return -1;
 	}
 
@@ -1279,11 +1299,11 @@ camel_nntp_raw_commandv (CamelNNTPStore *store, CamelException *ex, gchar **line
 		}
 	}
 
-	byte_array = camel_stream_mem_get_byte_array (store->mem);
 	camel_stream_write ((CamelStream *) store->mem, (const gchar *) ps, p-ps-1);
-	dd(printf("NNTP_COMMAND: '%.*s'\n", (gint)byte_array->len, byte_array->data));
 	camel_stream_write ((CamelStream *) store->mem, "\r\n", 2);
 
+	byte_array = camel_stream_mem_get_byte_array (store->mem);
+
 	if (camel_stream_write((CamelStream *) store->stream, (const gchar *) byte_array->data, byte_array->len) == -1)
 		goto ioerror;
 
@@ -1304,9 +1324,13 @@ camel_nntp_raw_commandv (CamelNNTPStore *store, CamelException *ex, gchar **line
 
 ioerror:
 	if (errno == EINTR)
-		camel_exception_setv(ex, CAMEL_EXCEPTION_USER_CANCEL, _("User cancelled the operation"));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_USER_CANCEL,
+			_("User cancelled the operation"));
 	else
-		camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM, _("NNTP Command failed: %s"), g_strerror(errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("NNTP Command failed: %s"), g_strerror(errno));
 	return -1;
 }
 
@@ -1359,8 +1383,9 @@ camel_nntp_command (CamelNNTPStore *store, CamelException *ex, CamelNNTPFolder *
 	guint u;
 
 	if (((CamelDiscoStore *)store)->status == CAMEL_DISCO_STORE_OFFLINE) {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_SERVICE_NOT_CONNECTED,
-				     _("Not connected."));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SERVICE_NOT_CONNECTED,
+			_("Not connected."));
 		return -1;
 	}
 
@@ -1412,8 +1437,9 @@ camel_nntp_command (CamelNNTPStore *store, CamelException *ex, CamelNNTPFolder *
 			ret = -1;
 			continue;
 		case 411:	/* no such group */
-			camel_exception_setv(ex, CAMEL_EXCEPTION_FOLDER_INVALID,
-					     _("No such folder: %s"), line);
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_FOLDER_INVALID,
+				_("No such folder: %s"), line);
 			return -1;
 		case 400:	/* service discontinued */
 		case 401:	/* wrong client state - this should quit but this is what the old code did */
diff --git a/camel/providers/nntp/camel-nntp-store.h b/camel/providers/nntp/camel-nntp-store.h
index 5843d4a..49c23a1 100644
--- a/camel/providers/nntp/camel-nntp-store.h
+++ b/camel/providers/nntp/camel-nntp-store.h
@@ -93,7 +93,6 @@ struct _CamelNNTPStoreClass {
 
 };
 
-/* Standard Camel function */
 CamelType camel_nntp_store_get_type (void);
 
 gint camel_nntp_raw_commandv (CamelNNTPStore *store, struct _CamelException *ex, gchar **line, const gchar *fmt, va_list ap);
diff --git a/camel/providers/nntp/camel-nntp-stream.c b/camel/providers/nntp/camel-nntp-stream.c
index 60c9867..da0d56d 100644
--- a/camel/providers/nntp/camel-nntp-stream.c
+++ b/camel/providers/nntp/camel-nntp-stream.c
@@ -28,8 +28,6 @@
 #include <stdio.h>
 #include <string.h>
 
-#include <glib.h>
-
 #include "camel-nntp-stream.h"
 
 #define dd(x) (camel_debug("nntp:stream";)?(x):0)
@@ -40,23 +38,20 @@
 
 static CamelObjectClass *parent_class = NULL;
 
-/* Returns the class for a CamelStream */
-#define CS_CLASS(so) CAMEL_NNTP_STREAM_CLASS(CAMEL_OBJECT_GET_CLASS(so))
-
 #define CAMEL_NNTP_STREAM_SIZE (4096)
 #define CAMEL_NNTP_STREAM_LINE_SIZE (1024) /* maximum line size */
 
 static gint
-stream_fill(CamelNNTPStream *is)
+nntp_stream_fill (CamelNNTPStream *is)
 {
 	gint left = 0;
 
 	if (is->source) {
 		left = is->end - is->ptr;
-		memcpy(is->buf, is->ptr, left);
+		memcpy (is->buf, is->ptr, left);
 		is->end = is->buf + left;
 		is->ptr = is->buf;
-		left = camel_stream_read(is->source, (gchar *) is->end, CAMEL_NNTP_STREAM_SIZE - (is->end - is->buf));
+		left = camel_stream_read (is->source, (gchar *) is->end, CAMEL_NNTP_STREAM_SIZE - (is->end - is->buf));
 		if (left > 0) {
 			is->end += left;
 			is->end[0] = '\n';
@@ -64,7 +59,7 @@ stream_fill(CamelNNTPStream *is)
 		} else {
 			if (left == 0)
 				errno = ECONNRESET;
-			dd(printf("NNTP_STREAM_FILL(ERROR): %d - '%s'\n", left, g_strerror(errno)));
+			dd (printf ("NNTP_STREAM_FILL (ERROR): %d - '%s'\n", left, g_strerror (errno)));
 			return -1;
 		}
 	}
@@ -72,8 +67,20 @@ stream_fill(CamelNNTPStream *is)
 	return 0;
 }
 
+static void
+camel_nntp_stream_finalize(CamelNNTPStream *is)
+{
+	g_free (is->buf);
+	g_free (is->linebuf);
+	if (is->source)
+		camel_object_unref (is->source);
+}
+
+
 static gssize
-stream_read(CamelStream *stream, gchar *buffer, gsize n)
+nntp_stream_read (CamelStream *stream,
+                  gchar *buffer,
+                  gsize n)
 {
 	CamelNNTPStream *is = (CamelNNTPStream *)stream;
 	gchar *o, *oe;
@@ -96,7 +103,7 @@ stream_read(CamelStream *stream, gchar *buffer, gsize n)
 	case 0:		/* start of line, always read at least 3 chars */
 		while (e - p < 3) {
 			is->ptr = p;
-			if (stream_fill(is) == -1)
+			if (nntp_stream_fill (is) == -1)
 				return -1;
 			p = is->ptr;
 			e = is->end;
@@ -106,7 +113,7 @@ stream_read(CamelStream *stream, gchar *buffer, gsize n)
 				is->ptr = p+3;
 				is->mode = CAMEL_NNTP_STREAM_EOD;
 				is->state = 0;
-				dd(printf("NNTP_STREAM_READ(%d):\n%.*s\n", (gint)(o-buffer), (gint)(o-buffer), buffer));
+				dd (printf ("NNTP_STREAM_READ (%d):\n%.*s\n", (gint)(o-buffer), (gint)(o-buffer), buffer));
 				return o-buffer;
 			}
 			p++;
@@ -120,7 +127,7 @@ stream_read(CamelStream *stream, gchar *buffer, gsize n)
 				/* end of input sentinal check */
 				if (p > e) {
 					is->ptr = e;
-					if (stream_fill(is) == -1)
+					if (nntp_stream_fill (is) == -1)
 						return -1;
 					p = is->ptr;
 					e = is->end;
@@ -139,35 +146,37 @@ stream_read(CamelStream *stream, gchar *buffer, gsize n)
 	is->ptr = p;
 	is->state = state;
 
-	dd(printf("NNTP_STREAM_READ(%d):\n%.*s\n", (gint)(o-buffer), (gint)(o-buffer), buffer));
+	dd (printf ("NNTP_STREAM_READ (%d):\n%.*s\n", (gint)(o-buffer), (gint)(o-buffer), buffer));
 
 	return o-buffer;
 }
 
 static gssize
-stream_write(CamelStream *stream, const gchar *buffer, gsize n)
+nntp_stream_write (CamelStream *stream,
+                   const gchar *buffer,
+                   gsize n)
 {
 	CamelNNTPStream *is = (CamelNNTPStream *)stream;
 
-	return camel_stream_write(is->source, buffer, n);
+	return camel_stream_write (is->source, buffer, n);
 }
 
 static gint
-stream_close(CamelStream *stream)
+nntp_stream_close (CamelStream *stream)
 {
 	/* nop? */
 	return 0;
 }
 
 static gint
-stream_flush(CamelStream *stream)
+nntp_stream_flush (CamelStream *stream)
 {
 	/* nop? */
 	return 0;
 }
 
 static gboolean
-stream_eos(CamelStream *stream)
+nntp_stream_eos (CamelStream *stream)
 {
 	CamelNNTPStream *is = (CamelNNTPStream *)stream;
 
@@ -175,34 +184,34 @@ stream_eos(CamelStream *stream)
 }
 
 static gint
-stream_reset(CamelStream *stream)
+nntp_stream_reset (CamelStream *stream)
 {
 	/* nop?  reset literal mode? */
 	return 0;
 }
 
 static void
-camel_nntp_stream_class_init (CamelStreamClass *camel_nntp_stream_class)
+camel_nntp_stream_class_init (CamelStreamClass *class)
 {
-	CamelStreamClass *camel_stream_class = (CamelStreamClass *)camel_nntp_stream_class;
+	CamelStreamClass *stream_class;
 
 	parent_class = camel_type_get_global_classfuncs( CAMEL_TYPE_OBJECT );
 
-	/* virtual method definition */
-	camel_stream_class->read = stream_read;
-	camel_stream_class->write = stream_write;
-	camel_stream_class->close = stream_close;
-	camel_stream_class->flush = stream_flush;
-	camel_stream_class->eos = stream_eos;
-	camel_stream_class->reset = stream_reset;
+	stream_class = CAMEL_STREAM_CLASS (class);
+	stream_class->read = nntp_stream_read;
+	stream_class->write = nntp_stream_write;
+	stream_class->close = nntp_stream_close;
+	stream_class->flush = nntp_stream_flush;
+	stream_class->eos = nntp_stream_eos;
+	stream_class->reset = nntp_stream_reset;
 }
 
 static void
-camel_nntp_stream_init(CamelNNTPStream *is, CamelNNTPStreamClass *isclass)
+camel_nntp_stream_init (CamelNNTPStream *is)
 {
 	/* +1 is room for appending a 0 if we need to for a line */
-	is->ptr = is->end = is->buf = g_malloc(CAMEL_NNTP_STREAM_SIZE+1);
-	is->lineptr = is->linebuf = g_malloc(CAMEL_NNTP_STREAM_LINE_SIZE+1);
+	is->ptr = is->end = is->buf = g_malloc (CAMEL_NNTP_STREAM_SIZE+1);
+	is->lineptr = is->linebuf = g_malloc (CAMEL_NNTP_STREAM_LINE_SIZE+1);
 	is->lineend = is->linebuf + CAMEL_NNTP_STREAM_LINE_SIZE;
 
 	/* init sentinal */
@@ -212,15 +221,6 @@ camel_nntp_stream_init(CamelNNTPStream *is, CamelNNTPStreamClass *isclass)
 	is->mode = CAMEL_NNTP_STREAM_LINE;
 }
 
-static void
-camel_nntp_stream_finalize(CamelNNTPStream *is)
-{
-	g_free(is->buf);
-	g_free(is->linebuf);
-	if (is->source)
-		camel_object_unref (is->source);
-}
-
 CamelType
 camel_nntp_stream_get_type (void)
 {
@@ -249,7 +249,7 @@ camel_nntp_stream_get_type (void)
  * Returns: the stream
  **/
 CamelStream *
-camel_nntp_stream_new(CamelStream *source)
+camel_nntp_stream_new (CamelStream *source)
 {
 	CamelNNTPStream *is;
 
@@ -261,7 +261,9 @@ camel_nntp_stream_new(CamelStream *source)
 
 /* Get one line from the nntp stream */
 gint
-camel_nntp_stream_line(CamelNNTPStream *is, guchar **data, guint *len)
+camel_nntp_stream_line (CamelNNTPStream *is,
+                        guchar **data,
+                        guint *len)
 {
 	register guchar c, *p, *o, *oe;
 	gint newlen, oldlen;
@@ -283,7 +285,7 @@ camel_nntp_stream_line(CamelNNTPStream *is, guchar **data, guint *len)
 		/* need at least 3 chars in buffer */
 		while (e-p < 3) {
 			is->ptr = p;
-			if (stream_fill(is) == -1)
+			if (nntp_stream_fill (is) == -1)
 				return -1;
 			p = is->ptr;
 			e = is->end;
@@ -298,7 +300,7 @@ camel_nntp_stream_line(CamelNNTPStream *is, guchar **data, guint *len)
 				*len = 0;
 				is->linebuf[0] = 0;
 
-				dd(printf("NNTP_STREAM_LINE(END)\n"));
+				dd (printf ("NNTP_STREAM_LINE (END)\n"));
 
 				return 0;
 			}
@@ -313,7 +315,7 @@ camel_nntp_stream_line(CamelNNTPStream *is, guchar **data, guint *len)
 				/* sentinal? */
 				if (p> e) {
 					is->ptr = e;
-					if (stream_fill(is) == -1)
+					if (nntp_stream_fill (is) == -1)
 						return -1;
 					p = is->ptr;
 					e = is->end;
@@ -323,7 +325,7 @@ camel_nntp_stream_line(CamelNNTPStream *is, guchar **data, guint *len)
 					*len = o - is->linebuf;
 					*o = 0;
 
-					dd(printf("NNTP_STREAM_LINE(%d): '%s'\n", *len, *data));
+					dd (printf ("NNTP_STREAM_LINE (%d): '%s'\n", *len, *data));
 
 					return 1;
 				}
@@ -335,7 +337,7 @@ camel_nntp_stream_line(CamelNNTPStream *is, guchar **data, guint *len)
 		/* limit this for bad server data? */
 		oldlen = o - is->linebuf;
 		newlen = (is->lineend - is->linebuf) * 3 / 2;
-		is->lineptr = is->linebuf = g_realloc(is->linebuf, newlen);
+		is->lineptr = is->linebuf = g_realloc (is->linebuf, newlen);
 		is->lineend = is->linebuf + newlen;
 		oe = is->lineend - 1;
 		o = is->linebuf + oldlen;
@@ -345,7 +347,10 @@ camel_nntp_stream_line(CamelNNTPStream *is, guchar **data, guint *len)
 }
 
 /* returns -1 on error, 0 if last lot of data, >0 if more remaining */
-gint camel_nntp_stream_gets(CamelNNTPStream *is, guchar **start, guint *len)
+gint
+camel_nntp_stream_gets (CamelNNTPStream *is,
+                        guchar **start,
+                        guint *len)
 {
 	gint max;
 	guchar *end;
@@ -354,31 +359,36 @@ gint camel_nntp_stream_gets(CamelNNTPStream *is, guchar **start, guint *len)
 
 	max = is->end - is->ptr;
 	if (max == 0) {
-		max = stream_fill(is);
+		max = nntp_stream_fill (is);
 		if (max <= 0)
 			return max;
 	}
 
 	*start = is->ptr;
-	end = memchr(is->ptr, '\n', max);
+	end = memchr (is->ptr, '\n', max);
 	if (end)
 		max = (end - is->ptr) + 1;
 	*start = is->ptr;
 	*len = max;
 	is->ptr += max;
 
-	dd(printf("NNTP_STREAM_GETS(%s,%d): '%.*s'\n", end==NULL?"more":"last", *len, (gint)*len, *start));
+	dd (printf ("NNTP_STREAM_GETS (%s,%d): '%.*s'\n", end==NULL?"more":"last", *len, (gint)*len, *start));
 
 	return end == NULL?1:0;
 }
 
-void camel_nntp_stream_set_mode(CamelNNTPStream *is, camel_nntp_stream_mode_t mode)
+void
+camel_nntp_stream_set_mode (CamelNNTPStream *is,
+                            camel_nntp_stream_mode_t mode)
 {
 	is->mode = mode;
 }
 
 /* returns -1 on erorr, 0 if last data, >0 if more data left */
-gint camel_nntp_stream_getd(CamelNNTPStream *is, guchar **start, guint *len)
+gint
+camel_nntp_stream_getd (CamelNNTPStream *is,
+                        guchar **start,
+                        guint *len)
 {
 	guchar *p, *e, *s;
 	gint state;
@@ -389,7 +399,7 @@ gint camel_nntp_stream_getd(CamelNNTPStream *is, guchar **start, guint *len)
 		return 0;
 
 	if (is->mode == CAMEL_NNTP_STREAM_LINE) {
-		g_warning("nntp_stream reading data in line mode\n");
+		g_warning ("nntp_stream reading data in line mode\n");
 		return 0;
 	}
 
@@ -399,7 +409,7 @@ gint camel_nntp_stream_getd(CamelNNTPStream *is, guchar **start, guint *len)
 
 	while (e - p < 3) {
 		is->ptr = p;
-		if (stream_fill(is) == -1)
+		if (nntp_stream_fill (is) == -1)
 			return -1;
 		p = is->ptr;
 		e = is->end;
@@ -419,7 +429,7 @@ gint camel_nntp_stream_getd(CamelNNTPStream *is, guchar **start, guint *len)
 					is->mode = CAMEL_NNTP_STREAM_EOD;
 					is->state = 0;
 
-					dd(printf("NNTP_STREAM_GETD(%s,%d): '%.*s'\n", "last", *len, (gint)*len, *start));
+					dd (printf ("NNTP_STREAM_GETD (%s,%d): '%.*s'\n", "last", *len, (gint)*len, *start));
 
 					return 0;
 				}
@@ -434,7 +444,7 @@ gint camel_nntp_stream_getd(CamelNNTPStream *is, guchar **start, guint *len)
 					*start = s;
 					is->state = 1;
 
-					dd(printf("NNTP_STREAM_GETD(%s,%d): '%.*s'\n", "more", *len, (gint)*len, *start));
+					dd (printf ("NNTP_STREAM_GETD (%s,%d): '%.*s'\n", "more", *len, (gint)*len, *start));
 
 					return 1;
 				}
@@ -459,7 +469,7 @@ gint camel_nntp_stream_getd(CamelNNTPStream *is, guchar **start, guint *len)
 	*len = p-s;
 	*start = s;
 
-	dd(printf("NNTP_STREAM_GETD(%s,%d): '%.*s'\n", "more", *len, (gint)*len, *start));
+	dd (printf ("NNTP_STREAM_GETD (%s,%d): '%.*s'\n", "more", *len, (gint)*len, *start));
 	return 1;
 }
 
diff --git a/camel/providers/nntp/camel-nntp-stream.h b/camel/providers/nntp/camel-nntp-stream.h
index 6058600..bd5e7a6 100644
--- a/camel/providers/nntp/camel-nntp-stream.h
+++ b/camel/providers/nntp/camel-nntp-stream.h
@@ -29,8 +29,8 @@
 
 G_BEGIN_DECLS
 
-typedef struct _CamelNNTPStreamClass CamelNNTPStreamClass;
 typedef struct _CamelNNTPStream CamelNNTPStream;
+typedef struct _CamelNNTPStreamClass CamelNNTPStreamClass;
 
 typedef enum {
 	CAMEL_NNTP_STREAM_LINE,
@@ -54,15 +54,21 @@ struct _CamelNNTPStreamClass {
 	CamelStreamClass parent_class;
 };
 
-CamelType		 camel_nntp_stream_get_type	(void);
-
-CamelStream     *camel_nntp_stream_new		(CamelStream *source);
-
-void		 camel_nntp_stream_set_mode     (CamelNNTPStream *is, camel_nntp_stream_mode_t mode);
-
-gint              camel_nntp_stream_line		(CamelNNTPStream *is, guchar **data, guint *len);
-gint		 camel_nntp_stream_gets		(CamelNNTPStream *is, guchar **start, guint *len);
-gint		 camel_nntp_stream_getd		(CamelNNTPStream *is, guchar **start, guint *len);
+CamelType	camel_nntp_stream_get_type	(void);
+
+CamelStream *	camel_nntp_stream_new		(CamelStream *source);
+
+void		camel_nntp_stream_set_mode	(CamelNNTPStream *is,
+						 camel_nntp_stream_mode_t mode);
+gint		camel_nntp_stream_line		(CamelNNTPStream *is,
+						 guchar **data,
+						 guint *len);
+gint		camel_nntp_stream_gets		(CamelNNTPStream *is,
+						 guchar **start,
+						 guint *len);
+gint		camel_nntp_stream_getd		(CamelNNTPStream *is,
+						 guchar **start,
+						 guint *len);
 
 G_END_DECLS
 
diff --git a/camel/providers/nntp/camel-nntp-summary.c b/camel/providers/nntp/camel-nntp-summary.c
index f665f2e..be3a060 100644
--- a/camel/providers/nntp/camel-nntp-summary.c
+++ b/camel/providers/nntp/camel-nntp-summary.c
@@ -39,8 +39,8 @@
 
 #define w(x)
 #define io(x)
-#define d(x) /*(printf("%s(%d): ", __FILE__, __LINE__),(x))*/
-#define dd(x) (camel_debug("nntp")?(x):0)
+#define d(x) /*(printf ("%s (%d): ", __FILE__, __LINE__),(x))*/
+#define dd(x) (camel_debug ("nntp")?(x):0)
 
 #define CAMEL_NNTP_SUMMARY_VERSION (1)
 
@@ -57,85 +57,82 @@ struct _CamelNNTPSummaryPrivate {
 #define _PRIVATE(o) (((CamelNNTPSummary *)(o))->priv)
 
 static CamelMessageInfo * message_info_new_from_header (CamelFolderSummary *, struct _camel_header_raw *);
-static gint summary_header_load(CamelFolderSummary *, FILE *);
-static gint summary_header_save(CamelFolderSummary *, FILE *);
+static gint summary_header_load (CamelFolderSummary *, FILE *);
+static gint summary_header_save (CamelFolderSummary *, FILE *);
 static gint summary_header_from_db (CamelFolderSummary *s, CamelFIRecord *mir);
 static CamelFIRecord * summary_header_to_db (CamelFolderSummary *s, CamelException *ex);
 
-static void camel_nntp_summary_class_init (CamelNNTPSummaryClass *klass);
-static void camel_nntp_summary_init       (CamelNNTPSummary *obj);
-static void camel_nntp_summary_finalize   (CamelObject *obj);
-static CamelFolderSummaryClass *camel_nntp_summary_parent;
+static gpointer camel_nntp_summary_parent_class;
 
-CamelType
-camel_nntp_summary_get_type(void)
+static void
+nntp_summary_finalize (CamelNNTPSummary *nntp_summary)
 {
-	static CamelType type = CAMEL_INVALID_TYPE;
-
-	if (type == CAMEL_INVALID_TYPE) {
-		type = camel_type_register(camel_folder_summary_get_type(), "CamelNNTPSummary",
-					   sizeof (CamelNNTPSummary),
-					   sizeof (CamelNNTPSummaryClass),
-					   (CamelObjectClassInitFunc) camel_nntp_summary_class_init,
-					   NULL,
-					   (CamelObjectInitFunc) camel_nntp_summary_init,
-					   (CamelObjectFinalizeFunc) camel_nntp_summary_finalize);
-	}
-
-	return type;
+	g_free (nntp_summary->priv);
 }
 
 static void
-camel_nntp_summary_class_init(CamelNNTPSummaryClass *klass)
+camel_nntp_summary_class_init (CamelNNTPSummaryClass *class)
 {
-	CamelFolderSummaryClass *sklass = (CamelFolderSummaryClass *) klass;
-
-	camel_nntp_summary_parent = CAMEL_FOLDER_SUMMARY_CLASS(camel_type_get_global_classfuncs(camel_folder_summary_get_type()));
-
-	sklass->message_info_size = sizeof(CamelMessageInfoBase);
-	sklass->content_info_size = sizeof(CamelMessageContentInfo);
-	sklass->message_info_new_from_header  = message_info_new_from_header;
-	sklass->summary_header_load = summary_header_load;
-	sklass->summary_header_save = summary_header_save;
-	sklass->summary_header_from_db = summary_header_from_db;
-	sklass->summary_header_to_db = summary_header_to_db;
+	CamelFolderSummaryClass *folder_summary_class;
+
+	camel_nntp_summary_parent_class = CAMEL_FOLDER_SUMMARY_CLASS(camel_type_get_global_classfuncs(camel_folder_summary_get_type()));
+
+	folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (class);
+	folder_summary_class->message_info_size = sizeof (CamelMessageInfoBase);
+	folder_summary_class->content_info_size = sizeof (CamelMessageContentInfo);
+	folder_summary_class->message_info_new_from_header = message_info_new_from_header;
+	folder_summary_class->summary_header_load = summary_header_load;
+	folder_summary_class->summary_header_save = summary_header_save;
+	folder_summary_class->summary_header_from_db = summary_header_from_db;
+	folder_summary_class->summary_header_to_db = summary_header_to_db;
 }
 
 static void
-camel_nntp_summary_init(CamelNNTPSummary *obj)
+camel_nntp_summary_init (CamelNNTPSummary *nntp_summary)
 {
-	struct _CamelNNTPSummaryPrivate *p;
-	struct _CamelFolderSummary *s = (CamelFolderSummary *)obj;
+	CamelFolderSummary *summary = CAMEL_FOLDER_SUMMARY (nntp_summary);
 
-	p = _PRIVATE(obj) = g_malloc0(sizeof(*p));
+	nntp_summary->priv = g_new0 (CamelNNTPSummaryPrivate, 1);
 
 	/* and a unique file version */
-	s->version += CAMEL_NNTP_SUMMARY_VERSION;
+	summary->version += CAMEL_NNTP_SUMMARY_VERSION;
 }
 
-static void
-camel_nntp_summary_finalize(CamelObject *obj)
+CamelType
+camel_nntp_summary_get_type(void)
 {
-	CamelNNTPSummary *cns = CAMEL_NNTP_SUMMARY(obj);
+	static CamelType type = CAMEL_INVALID_TYPE;
+
+	if (type == CAMEL_INVALID_TYPE) {
+		type = camel_type_register(camel_folder_summary_get_type(), "CamelNNTPSummary",
+					   sizeof (CamelNNTPSummary),
+					   sizeof (CamelNNTPSummaryClass),
+					   (CamelObjectClassInitFunc) camel_nntp_summary_class_init,
+					   NULL,
+					   (CamelObjectInitFunc) camel_nntp_summary_init,
+					   (CamelObjectFinalizeFunc) nntp_summary_finalize);
+	}
 
-	g_free(cns->priv);
+	return type;
 }
 
 CamelNNTPSummary *
-camel_nntp_summary_new(struct _CamelFolder *folder, const gchar *path)
+camel_nntp_summary_new (CamelFolder *folder, const gchar *path)
 {
-	CamelNNTPSummary *cns = (CamelNNTPSummary *)camel_object_new(camel_nntp_summary_get_type());
+	CamelNNTPSummary *cns;
 
+	cns = (CamelNNTPSummary *)camel_object_new(camel_nntp_summary_get_type());
 	((CamelFolderSummary *)cns)->folder = folder;
 
-	camel_folder_summary_set_filename((CamelFolderSummary *)cns, path);
-	camel_folder_summary_set_build_content((CamelFolderSummary *)cns, FALSE);
+	camel_folder_summary_set_filename ((CamelFolderSummary *)cns, path);
+	camel_folder_summary_set_build_content ((CamelFolderSummary *)cns, FALSE);
 
 	return cns;
 }
 
 static CamelMessageInfo *
-message_info_new_from_header(CamelFolderSummary *s, struct _camel_header_raw *h)
+message_info_new_from_header (CamelFolderSummary *s,
+                              struct _camel_header_raw *h)
 {
 	CamelMessageInfoBase *mi;
 	CamelNNTPSummary *cns = (CamelNNTPSummary *)s;
@@ -144,11 +141,11 @@ message_info_new_from_header(CamelFolderSummary *s, struct _camel_header_raw *h)
 	if (cns->priv->uid == NULL)
 		return NULL;
 
-	mi = (CamelMessageInfoBase *)((CamelFolderSummaryClass *)camel_nntp_summary_parent)->message_info_new_from_header(s, h);
+	mi = (CamelMessageInfoBase *)CAMEL_FOLDER_SUMMARY_CLASS (camel_nntp_summary_parent_class)->message_info_new_from_header(s, h);
 	if (mi) {
-		camel_pstring_free(mi->uid);
-		mi->uid = camel_pstring_strdup(cns->priv->uid);
-		g_free(cns->priv->uid);
+		camel_pstring_free (mi->uid);
+		mi->uid = camel_pstring_strdup (cns->priv->uid);
+		g_free (cns->priv->uid);
 		cns->priv->uid = NULL;
 	}
 
@@ -158,10 +155,10 @@ message_info_new_from_header(CamelFolderSummary *s, struct _camel_header_raw *h)
 static gint
 summary_header_from_db (CamelFolderSummary *s, CamelFIRecord *mir)
 {
-	CamelNNTPSummary *cns = CAMEL_NNTP_SUMMARY(s);
+	CamelNNTPSummary *cns = CAMEL_NNTP_SUMMARY (s);
 	gchar *part;
 
-	if (camel_nntp_summary_parent->summary_header_from_db (s, mir) == -1)
+	if (CAMEL_FOLDER_SUMMARY_CLASS (camel_nntp_summary_parent_class)->summary_header_from_db (s, mir) == -1)
 		return -1;
 
 	part = mir->bdata;
@@ -182,30 +179,30 @@ summary_header_from_db (CamelFolderSummary *s, CamelFIRecord *mir)
 }
 
 static gint
-summary_header_load(CamelFolderSummary *s, FILE *in)
+summary_header_load (CamelFolderSummary *s, FILE *in)
 {
-	CamelNNTPSummary *cns = CAMEL_NNTP_SUMMARY(s);
+	CamelNNTPSummary *cns = CAMEL_NNTP_SUMMARY (s);
 
-	if (((CamelFolderSummaryClass *)camel_nntp_summary_parent)->summary_header_load(s, in) == -1)
+	if (CAMEL_FOLDER_SUMMARY_CLASS (camel_nntp_summary_parent_class)->summary_header_load (s, in) == -1)
 		return -1;
 
 	/* Legacy version */
 	if (s->version == 0x20c) {
-		camel_file_util_decode_fixed_int32(in, (gint32 *) &cns->high);
-		return camel_file_util_decode_fixed_int32(in, (gint32 *) &cns->low);
+		camel_file_util_decode_fixed_int32 (in, (gint32 *) &cns->high);
+		return camel_file_util_decode_fixed_int32 (in, (gint32 *) &cns->low);
 	}
 
-	if (camel_file_util_decode_fixed_int32(in, (gint32 *) &cns->version) == -1)
+	if (camel_file_util_decode_fixed_int32 (in, (gint32 *) &cns->version) == -1)
 		return -1;
 
 	if (cns->version > CAMEL_NNTP_SUMMARY_VERSION) {
-		g_warning("Unknown NNTP summary version");
+		g_warning ("Unknown NNTP summary version");
 		errno = EINVAL;
 		return -1;
 	}
 
-	if (camel_file_util_decode_fixed_int32(in, (gint32 *) &cns->high) == -1
-	    || camel_file_util_decode_fixed_int32(in, (gint32 *) &cns->low) == -1)
+	if (camel_file_util_decode_fixed_int32 (in, (gint32 *) &cns->high) == -1
+	    || camel_file_util_decode_fixed_int32 (in, (gint32 *) &cns->low) == -1)
 		return -1;
 
 	return 0;
@@ -214,10 +211,10 @@ summary_header_load(CamelFolderSummary *s, FILE *in)
 static CamelFIRecord *
 summary_header_to_db (CamelFolderSummary *s, CamelException *ex)
 {
-	CamelNNTPSummary *cns = CAMEL_NNTP_SUMMARY(s);
+	CamelNNTPSummary *cns = CAMEL_NNTP_SUMMARY (s);
 	struct _CamelFIRecord *fir;
 
-	fir = camel_nntp_summary_parent->summary_header_to_db (s, ex);
+	fir = CAMEL_FOLDER_SUMMARY_CLASS (camel_nntp_summary_parent_class)->summary_header_to_db (s, ex);
 	if (!fir)
 		return NULL;
 	fir->bdata = g_strdup_printf ("%d %d %d", CAMEL_NNTP_SUMMARY_VERSION, cns->high, cns->low);
@@ -226,14 +223,14 @@ summary_header_to_db (CamelFolderSummary *s, CamelException *ex)
 }
 
 static gint
-summary_header_save(CamelFolderSummary *s, FILE *out)
+summary_header_save (CamelFolderSummary *s, FILE *out)
 {
-	CamelNNTPSummary *cns = CAMEL_NNTP_SUMMARY(s);
+	CamelNNTPSummary *cns = CAMEL_NNTP_SUMMARY (s);
 
-	if (((CamelFolderSummaryClass *)camel_nntp_summary_parent)->summary_header_save(s, out) == -1
-	    || camel_file_util_encode_fixed_int32(out, CAMEL_NNTP_SUMMARY_VERSION) == -1
-	    || camel_file_util_encode_fixed_int32(out, cns->high) == -1
-	    || camel_file_util_encode_fixed_int32(out, cns->low) == -1)
+	if (CAMEL_FOLDER_SUMMARY_CLASS (camel_nntp_summary_parent_class)->summary_header_save (s, out) == -1
+	    || camel_file_util_encode_fixed_int32 (out, CAMEL_NNTP_SUMMARY_VERSION) == -1
+	    || camel_file_util_encode_fixed_int32 (out, cns->high) == -1
+	    || camel_file_util_encode_fixed_int32 (out, cns->low) == -1)
 		return -1;
 
 	return 0;
@@ -243,7 +240,7 @@ summary_header_save(CamelFolderSummary *s, FILE *out)
 
 /* Note: This will be called from camel_nntp_command, so only use camel_nntp_raw_command */
 static gint
-add_range_xover(CamelNNTPSummary *cns, CamelNNTPStore *store, guint high, guint low, CamelFolderChangeInfo *changes, CamelException *ex)
+add_range_xover (CamelNNTPSummary *cns, CamelNNTPStore *store, guint high, guint low, CamelFolderChangeInfo *changes, CamelException *ex)
 {
 	CamelFolderSummary *s;
 	CamelMessageInfoBase *mi;
@@ -256,28 +253,29 @@ add_range_xover(CamelNNTPSummary *cns, CamelNNTPStore *store, guint high, guint
 	GHashTable *summary_table;
 
 	s = (CamelFolderSummary *)cns;
-	summary_table = camel_folder_summary_get_hashtable(s);
+	summary_table = camel_folder_summary_get_hashtable (s);
 
-	camel_operation_start(NULL, _("%s: Scanning new messages"), ((CamelService *)store)->url->host);
+	camel_operation_start (NULL, _("%s: Scanning new messages"), ((CamelService *)store)->url->host);
 
 	ret = camel_nntp_raw_command_auth (store, ex, &line, "over %r", low, high);
 	if (ret != 224)
 		ret = camel_nntp_raw_command_auth (store, ex, &line, "xover %r", low, high);
 
 	if (ret != 224) {
-		camel_operation_end(NULL);
+		camel_operation_end (NULL);
 		if (ret != -1)
-			camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-					     _("Unexpected server response from xover: %s"), line);
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Unexpected server response from xover: %s"), line);
 		return -1;
 	}
 
 	count = 0;
 	total = high-low+1;
-	while ((ret = camel_nntp_stream_line(store->stream, (guchar **)&line, &len)) > 0) {
-		camel_operation_progress(NULL, (count * 100) / total);
+	while ((ret = camel_nntp_stream_line (store->stream, (guchar **)&line, &len)) > 0) {
+		camel_operation_progress (NULL, (count * 100) / total);
 		count++;
-		n = strtoul(line, &tab, 10);
+		n = strtoul (line, &tab, 10);
 		if (*tab != '\t')
 			continue;
 		tab++;
@@ -285,25 +283,25 @@ add_range_xover(CamelNNTPSummary *cns, CamelNNTPStore *store, guint high, guint
 		size = 0;
 		for (;tab[0] && xover;xover = xover->next) {
 			line = tab;
-			tab = strchr(line, '\t');
+			tab = strchr (line, '\t');
 			if (tab)
 				*tab++ = 0;
 			else
-				tab = line+strlen(line);
+				tab = line+strlen (line);
 
 			/* do we care about this column? */
 			if (xover->name) {
 				line += xover->skip;
 				if (line < tab) {
-					camel_header_raw_append(&headers, xover->name, line, -1);
+					camel_header_raw_append (&headers, xover->name, line, -1);
 					switch (xover->type) {
 					case XOVER_STRING:
 						break;
 					case XOVER_MSGID:
-						cns->priv->uid = g_strdup_printf("%u,%s", n, line);
+						cns->priv->uid = g_strdup_printf ("%u,%s", n, line);
 						break;
 					case XOVER_SIZE:
-						size = strtoul(line, NULL, 10);
+						size = strtoul (line, NULL, 10);
 						break;
 					}
 				}
@@ -316,34 +314,34 @@ add_range_xover(CamelNNTPSummary *cns, CamelNNTPStore *store, guint high, guint
 
 		/* truncated line? ignore? */
 		if (xover == NULL) {
-			if (!GPOINTER_TO_INT(g_hash_table_lookup (summary_table, cns->priv->uid))) {
-				mi = (CamelMessageInfoBase *)camel_folder_summary_add_from_header(s, headers);
+			if (!GPOINTER_TO_INT (g_hash_table_lookup (summary_table, cns->priv->uid))) {
+				mi = (CamelMessageInfoBase *)camel_folder_summary_add_from_header (s, headers);
 				if (mi) {
 					mi->size = size;
 					cns->high = n;
-					camel_folder_change_info_add_uid(changes, camel_message_info_uid(mi));
+					camel_folder_change_info_add_uid (changes, camel_message_info_uid (mi));
 				}
 			}
 		}
 
 		if (cns->priv->uid) {
-			g_free(cns->priv->uid);
+			g_free (cns->priv->uid);
 			cns->priv->uid = NULL;
 		}
 
-		camel_header_raw_clear(&headers);
+		camel_header_raw_clear (&headers);
 	}
 
-	camel_operation_end(NULL);
+	camel_operation_end (NULL);
 
-	camel_folder_summary_free_hashtable(summary_table);
+	camel_folder_summary_free_hashtable (summary_table);
 
 	return ret;
 }
 
 /* Note: This will be called from camel_nntp_command, so only use camel_nntp_raw_command */
 static gint
-add_range_head(CamelNNTPSummary *cns, CamelNNTPStore *store, guint high, guint low, CamelFolderChangeInfo *changes, CamelException *ex)
+add_range_head (CamelNNTPSummary *cns, CamelNNTPStore *store, guint high, guint low, CamelFolderChangeInfo *changes, CamelException *ex)
 {
 	CamelFolderSummary *s;
 	gint ret = -1;
@@ -355,75 +353,82 @@ add_range_head(CamelNNTPSummary *cns, CamelNNTPStore *store, guint high, guint l
 
 	s = (CamelFolderSummary *)cns;
 
-	summary_table = camel_folder_summary_get_hashtable(s);
+	summary_table = camel_folder_summary_get_hashtable (s);
 
-	mp = camel_mime_parser_new();
+	mp = camel_mime_parser_new ();
 
-	camel_operation_start(NULL, _("%s: Scanning new messages"), ((CamelService *)store)->url->host);
+	camel_operation_start (NULL, _("%s: Scanning new messages"), ((CamelService *)store)->url->host);
 
 	count = 0;
 	total = high-low+1;
 	for (i=low;i<high+1;i++) {
-		camel_operation_progress(NULL, (count * 100) / total);
+		camel_operation_progress (NULL, (count * 100) / total);
 		count++;
-		ret = camel_nntp_raw_command_auth(store, ex, &line, "head %u", i);
+		ret = camel_nntp_raw_command_auth (store, ex, &line, "head %u", i);
 		/* unknown article, ignore */
 		if (ret == 423)
 			continue;
 		else if (ret == -1)
 			goto ioerror;
 		else if (ret != 221) {
-			camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM, _("Unexpected server response from head: %s"), line);
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Unexpected server response from head: %s"),
+				line);
 			goto ioerror;
 		}
 		line += 3;
-		n = strtoul(line, &line, 10);
+		n = strtoul (line, &line, 10);
 		if (n != i)
-			g_warning("retrieved message '%u' when i expected '%u'?\n", n, i);
+			g_warning ("retrieved message '%u' when i expected '%u'?\n", n, i);
 
 		/* FIXME: use camel-mime-utils.c function for parsing msgid? */
-		if ((msgid = strchr(line, '<')) && (line = strchr(msgid+1, '>'))) {
+		if ((msgid = strchr (line, '<')) && (line = strchr (msgid+1, '>'))) {
 			line[1] = 0;
-			cns->priv->uid = g_strdup_printf("%u,%s\n", n, msgid);
-			if (!GPOINTER_TO_INT(g_hash_table_lookup (summary_table, cns->priv->uid))) {
-				if (camel_mime_parser_init_with_stream(mp, (CamelStream *)store->stream) == -1)
+			cns->priv->uid = g_strdup_printf ("%u,%s\n", n, msgid);
+			if (!GPOINTER_TO_INT (g_hash_table_lookup (summary_table, cns->priv->uid))) {
+				if (camel_mime_parser_init_with_stream (mp, (CamelStream *)store->stream) == -1)
 					goto error;
-				mi = camel_folder_summary_add_from_parser(s, mp);
-				while (camel_mime_parser_step(mp, NULL, NULL) != CAMEL_MIME_PARSER_STATE_EOF)
+				mi = camel_folder_summary_add_from_parser (s, mp);
+				while (camel_mime_parser_step (mp, NULL, NULL) != CAMEL_MIME_PARSER_STATE_EOF)
 					;
 				if (mi == NULL) {
 					goto error;
 				}
 				cns->high = i;
-				camel_folder_change_info_add_uid(changes, camel_message_info_uid(mi));
+				camel_folder_change_info_add_uid (changes, camel_message_info_uid (mi));
 			}
 			if (cns->priv->uid) {
-				g_free(cns->priv->uid);
+				g_free (cns->priv->uid);
 				cns->priv->uid = NULL;
 			}
 		}
 	}
 
 	ret = 0;
-error:
 
+error:
 	if (ret == -1) {
 		if (errno == EINTR)
-			camel_exception_setv(ex, CAMEL_EXCEPTION_USER_CANCEL, _("User cancelled the operation"));
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_USER_CANCEL,
+				_("User cancelled the operation"));
 		else
-			camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM, _("Operation failed: %s"), g_strerror(errno));
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Operation failed: %s"), g_strerror(errno));
 	}
-ioerror:
 
+ioerror:
 	if (cns->priv->uid) {
-		g_free(cns->priv->uid);
+		g_free (cns->priv->uid);
 		cns->priv->uid = NULL;
 	}
 	camel_object_unref (mp);
 
-	camel_operation_end(NULL);
+	camel_operation_end (NULL);
 
-	camel_folder_summary_free_hashtable(summary_table);
+	camel_folder_summary_free_hashtable (summary_table);
 
 	return ret;
 }
@@ -431,7 +436,7 @@ ioerror:
 /* Assumes we have the stream */
 /* Note: This will be called from camel_nntp_command, so only use camel_nntp_raw_command */
 gint
-camel_nntp_summary_check(CamelNNTPSummary *cns, CamelNNTPStore *store, gchar *line, CamelFolderChangeInfo *changes, CamelException *ex)
+camel_nntp_summary_check (CamelNNTPSummary *cns, CamelNNTPStore *store, gchar *line, CamelFolderChangeInfo *changes, CamelException *ex)
 {
 	CamelFolderSummary *s;
 	gint ret = 0, i;
@@ -451,16 +456,16 @@ camel_nntp_summary_check(CamelNNTPSummary *cns, CamelNNTPStore *store, gchar *li
 		gchar *tmp;
 
 		folder = line+1;
-		tmp = strchr(folder, ' ');
+		tmp = strchr (folder, ' ');
 		if (tmp)
 			*tmp = 0;
-		tmp = g_alloca(strlen(folder)+1);
-		strcpy(tmp, folder);
+		tmp = g_alloca (strlen (folder)+1);
+		strcpy (tmp, folder);
 		folder = tmp;
 	}
 
 	if (cns->low == f && cns->high == l) {
-		dd(printf("nntp_summary: no work to do!\n"));
+		dd (printf ("nntp_summary: no work to do!\n"));
 		goto update;
 	}
 
@@ -468,23 +473,23 @@ camel_nntp_summary_check(CamelNNTPSummary *cns, CamelNNTPStore *store, gchar *li
 
 	/* Check for messages no longer on the server */
 	if (cns->low != f) {
-		count = camel_folder_summary_count(s);
+		count = camel_folder_summary_count (s);
 		for (i = 0; i < count; i++) {
 			gchar *uid;
 			const gchar *msgid;
 
-			uid  = camel_folder_summary_uid_from_index(s, i);
-			n = strtoul(uid, NULL, 10);
+			uid  = camel_folder_summary_uid_from_index (s, i);
+			n = strtoul (uid, NULL, 10);
 
 			if (n < f || n > l) {
-				dd(printf("nntp_summary: %u is lower/higher than lowest/highest article, removed\n", n));
+				dd (printf ("nntp_summary: %u is lower/higher than lowest/highest article, removed\n", n));
 				/* Since we use a global cache this could prematurely remove
 				   a cached message that might be in another folder - not that important as
 				   it is a true cache */
-				msgid = strchr(uid, ',');
+				msgid = strchr (uid, ',');
 				if (msgid)
-					camel_data_cache_remove(store->cache, "cache", msgid+1, NULL);
-				camel_folder_change_info_remove_uid(changes, uid);
+					camel_data_cache_remove (store->cache, "cache", msgid+1, NULL);
+				camel_folder_change_info_remove_uid (changes, uid);
 				del = g_slist_prepend (del, uid);
 				camel_folder_summary_remove_uid_fast (s, uid);
 				uid = NULL; /*Lets not free it */
@@ -505,20 +510,20 @@ camel_nntp_summary_check(CamelNNTPSummary *cns, CamelNNTPStore *store, gchar *li
 			cns->high = f-1;
 
 		if (store->xover) {
-			ret = add_range_xover(cns, store, l, cns->high+1, changes, ex);
+			ret = add_range_xover (cns, store, l, cns->high+1, changes, ex);
 		} else {
-			ret = add_range_head(cns, store, l, cns->high+1, changes, ex);
+			ret = add_range_head (cns, store, l, cns->high+1, changes, ex);
 		}
 	}
 
 	/* TODO: not from here */
-	camel_folder_summary_touch(s);
+	camel_folder_summary_touch (s);
 	camel_folder_summary_save_to_db (s, ex);
 
 update:
 	/* update store summary if we have it */
 	if (folder
-	    && (si = (CamelNNTPStoreInfo *)camel_store_summary_path((CamelStoreSummary *)store->summary, folder))) {
+	    && (si = (CamelNNTPStoreInfo *)camel_store_summary_path ((CamelStoreSummary *)store->summary, folder))) {
 		guint32 unread = 0;
 
 		count = camel_folder_summary_count (s);
@@ -532,15 +537,15 @@ update:
 			si->info.total = count;
 			si->first = f;
 			si->last = l;
-			camel_store_summary_touch((CamelStoreSummary *)store->summary);
-			camel_store_summary_save((CamelStoreSummary *)store->summary);
+			camel_store_summary_touch ((CamelStoreSummary *)store->summary);
+			camel_store_summary_save ((CamelStoreSummary *)store->summary);
 		}
 		camel_store_summary_info_free ((CamelStoreSummary *)store->summary, (CamelStoreInfo *)si);
 	} else {
 		if (folder)
-			g_warning("Group '%s' not present in summary", folder);
+			g_warning ("Group '%s' not present in summary", folder);
 		else
-			g_warning("Missing group from group response");
+			g_warning ("Missing group from group response");
 	}
 
 	return ret;
diff --git a/camel/providers/nntp/camel-nntp-summary.h b/camel/providers/nntp/camel-nntp-summary.h
index 6c0333c..5087bb9 100644
--- a/camel/providers/nntp/camel-nntp-summary.h
+++ b/camel/providers/nntp/camel-nntp-summary.h
@@ -33,13 +33,13 @@ struct _CamelNNTPStore;
 struct _CamelFolderChangeInfo;
 struct _CamelException;
 
-typedef struct _CamelNNTPSummary      CamelNNTPSummary;
+typedef struct _CamelNNTPSummary CamelNNTPSummary;
 typedef struct _CamelNNTPSummaryClass CamelNNTPSummaryClass;
+typedef struct _CamelNNTPSummaryPrivate CamelNNTPSummaryPrivate;
 
 struct _CamelNNTPSummary {
 	CamelFolderSummary parent;
-
-	struct _CamelNNTPSummaryPrivate *priv;
+	CamelNNTPSummaryPrivate *priv;
 
 	guint32 version;
 	guint32 high, low;
diff --git a/camel/providers/pop3/camel-pop3-engine.c b/camel/providers/pop3/camel-pop3-engine.c
index 9cf9875..631528b 100644
--- a/camel/providers/pop3/camel-pop3-engine.c
+++ b/camel/providers/pop3/camel-pop3-engine.c
@@ -28,7 +28,6 @@
 #include <stdio.h>
 #include <string.h>
 
-#include <glib.h>
 #include <glib/gi18n-lib.h>
 
 #include "camel-pop3-engine.h"
@@ -48,35 +47,31 @@ static void get_capabilities(CamelPOP3Engine *pe);
 
 static CamelObjectClass *parent_class = NULL;
 
-/* Returns the class for a CamelStream */
-#define CS_CLASS(so) CAMEL_POP3_ENGINE_CLASS(CAMEL_OBJECT_GET_CLASS(so))
-
 static void
-camel_pop3_engine_class_init (CamelPOP3EngineClass *camel_pop3_engine_class)
+pop3_engine_finalize (CamelPOP3Engine *engine)
 {
-	parent_class = camel_type_get_global_classfuncs( CAMEL_TYPE_OBJECT );
+	/* FIXME: Also flush/free any outstanding requests, etc */
+
+	if (engine->stream)
+		camel_object_unref (engine->stream);
+
+	g_list_free (engine->auth);
+	g_free (engine->apop);
 }
 
 static void
-camel_pop3_engine_init(CamelPOP3Engine *pe, CamelPOP3EngineClass *peclass)
+camel_pop3_engine_class_init (CamelPOP3EngineClass *class)
 {
-	camel_dlist_init(&pe->active);
-	camel_dlist_init(&pe->queue);
-	camel_dlist_init(&pe->done);
-	pe->state = CAMEL_POP3_ENGINE_DISCONNECT;
+	parent_class = camel_type_get_global_classfuncs( CAMEL_TYPE_OBJECT );
 }
 
 static void
-camel_pop3_engine_finalize(CamelPOP3Engine *pe)
+camel_pop3_engine_init (CamelPOP3Engine *engine)
 {
-	/* FIXME: Also flush/free any outstanding requests, etc */
-
-	if (pe->stream)
-		camel_object_unref (pe->stream);
-
-	g_list_free(pe->auth);
-	if (pe->apop)
-		g_free(pe->apop);
+	camel_dlist_init (&engine->active);
+	camel_dlist_init (&engine->queue);
+	camel_dlist_init (&engine->done);
+	engine->state = CAMEL_POP3_ENGINE_DISCONNECT;
 }
 
 CamelType
@@ -92,7 +87,7 @@ camel_pop3_engine_get_type (void)
 							     (CamelObjectClassInitFunc) camel_pop3_engine_class_init,
 							     NULL,
 							     (CamelObjectInitFunc) camel_pop3_engine_init,
-							     (CamelObjectFinalizeFunc) camel_pop3_engine_finalize );
+							     (CamelObjectFinalizeFunc) pop3_engine_finalize );
 	}
 
 	return camel_pop3_engine_type;
@@ -137,7 +132,7 @@ camel_pop3_engine_new(CamelStream *source, guint32 flags)
 {
 	CamelPOP3Engine *pe;
 
-	pe = (CamelPOP3Engine *)camel_object_new(camel_pop3_engine_get_type ());
+	pe = (CamelPOP3Engine *) camel_object_new(camel_pop3_engine_get_type ());
 
 	pe->stream = (CamelPOP3Stream *)camel_pop3_stream_new(source);
 	pe->state = CAMEL_POP3_ENGINE_AUTH;
diff --git a/camel/providers/pop3/camel-pop3-engine.h b/camel/providers/pop3/camel-pop3-engine.h
index e450c27..74cb476 100644
--- a/camel/providers/pop3/camel-pop3-engine.h
+++ b/camel/providers/pop3/camel-pop3-engine.h
@@ -31,8 +31,8 @@
 
 G_BEGIN_DECLS
 
-typedef struct _CamelPOP3EngineClass CamelPOP3EngineClass;
 typedef struct _CamelPOP3Engine CamelPOP3Engine;
+typedef struct _CamelPOP3EngineClass CamelPOP3EngineClass;
 typedef struct _CamelPOP3Command CamelPOP3Command;
 
 /* pop 3 connection states, actually since we're given a connected socket, we always start in auth state */
diff --git a/camel/providers/pop3/camel-pop3-folder.c b/camel/providers/pop3/camel-pop3-folder.c
index 6f9c84d..d774a75 100644
--- a/camel/providers/pop3/camel-pop3-folder.c
+++ b/camel/providers/pop3/camel-pop3-folder.c
@@ -38,12 +38,10 @@
 
 #define d(x)
 
-#define CF_CLASS(o) (CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(o)))
 static CamelFolderClass *parent_class;
 
-static void pop3_finalize (CamelObject *object);
-static void pop3_refresh_info (CamelFolder *folder, CamelException *ex);
-static void pop3_sync (CamelFolder *folder, gboolean expunge, CamelException *ex);
+static gboolean pop3_refresh_info (CamelFolder *folder, CamelException *ex);
+static gboolean pop3_sync (CamelFolder *folder, gboolean expunge, CamelException *ex);
 static gint pop3_get_message_count (CamelFolder *folder);
 static GPtrArray *pop3_get_uids (CamelFolder *folder);
 static CamelMimeMessage *pop3_get_message (CamelFolder *folder, const gchar *uid, CamelException *ex);
@@ -51,23 +49,46 @@ static gboolean pop3_set_message_flags (CamelFolder *folder, const gchar *uid, g
 static gchar * pop3_get_filename (CamelFolder *folder, const gchar *uid, CamelException *ex);
 
 static void
-camel_pop3_folder_class_init (CamelPOP3FolderClass *camel_pop3_folder_class)
+pop3_folder_finalize (CamelObject *object)
 {
-	CamelFolderClass *camel_folder_class = CAMEL_FOLDER_CLASS(camel_pop3_folder_class);
+	CamelPOP3Folder *pop3_folder = CAMEL_POP3_FOLDER (object);
+	CamelPOP3FolderInfo **fi = (CamelPOP3FolderInfo **)pop3_folder->uids->pdata;
+	CamelPOP3Store *pop3_store = (CamelPOP3Store *)((CamelFolder *)pop3_folder)->parent_store;
+	gint i;
 
-	parent_class = CAMEL_FOLDER_CLASS(camel_folder_get_type());
+	if (pop3_folder->uids) {
+		for (i=0;i<pop3_folder->uids->len;i++,fi++) {
+			if (fi[0]->cmd) {
+				while (camel_pop3_engine_iterate(pop3_store->engine, fi[0]->cmd) > 0)
+					;
+				camel_pop3_engine_command_free(pop3_store->engine, fi[0]->cmd);
+			}
 
-	/* virtual method overload */
-	camel_folder_class->refresh_info = pop3_refresh_info;
-	camel_folder_class->sync = pop3_sync;
+			g_free(fi[0]->uid);
+			g_free(fi[0]);
+		}
 
-	camel_folder_class->get_message_count = pop3_get_message_count;
-	camel_folder_class->get_uids = pop3_get_uids;
-	camel_folder_class->free_uids = camel_folder_free_shallow;
-	camel_folder_class->get_filename = pop3_get_filename;
+		g_ptr_array_free(pop3_folder->uids, TRUE);
+		g_hash_table_destroy(pop3_folder->uids_uid);
+	}
+}
+
+static void
+camel_pop3_folder_class_init (CamelPOP3FolderClass *class)
+{
+	CamelFolderClass *folder_class;
 
-	camel_folder_class->get_message = pop3_get_message;
-	camel_folder_class->set_message_flags = pop3_set_message_flags;
+	parent_class = CAMEL_FOLDER_CLASS(camel_folder_get_type());
+
+	folder_class = CAMEL_FOLDER_CLASS (class);
+	folder_class->refresh_info = pop3_refresh_info;
+	folder_class->sync = pop3_sync;
+	folder_class->get_message_count = pop3_get_message_count;
+	folder_class->get_uids = pop3_get_uids;
+	folder_class->free_uids = camel_folder_free_shallow;
+	folder_class->get_filename = pop3_get_filename;
+	folder_class->get_message = pop3_get_message;
+	folder_class->set_message_flags = pop3_set_message_flags;
 }
 
 CamelType
@@ -82,37 +103,12 @@ camel_pop3_folder_get_type (void)
 							      (CamelObjectClassInitFunc) camel_pop3_folder_class_init,
 							      NULL,
 							      NULL,
-							      (CamelObjectFinalizeFunc) pop3_finalize);
+							      (CamelObjectFinalizeFunc) pop3_folder_finalize);
 	}
 
 	return camel_pop3_folder_type;
 }
 
-static void
-pop3_finalize (CamelObject *object)
-{
-	CamelPOP3Folder *pop3_folder = CAMEL_POP3_FOLDER (object);
-	CamelPOP3FolderInfo **fi = (CamelPOP3FolderInfo **)pop3_folder->uids->pdata;
-	CamelPOP3Store *pop3_store = (CamelPOP3Store *)((CamelFolder *)pop3_folder)->parent_store;
-	gint i;
-
-	if (pop3_folder->uids) {
-		for (i=0;i<pop3_folder->uids->len;i++,fi++) {
-			if (fi[0]->cmd) {
-				while (camel_pop3_engine_iterate(pop3_store->engine, fi[0]->cmd) > 0)
-					;
-				camel_pop3_engine_command_free(pop3_store->engine, fi[0]->cmd);
-			}
-
-			g_free(fi[0]->uid);
-			g_free(fi[0]);
-		}
-
-		g_ptr_array_free(pop3_folder->uids, TRUE);
-		g_hash_table_destroy(pop3_folder->uids_uid);
-	}
-}
-
 CamelFolder *
 camel_pop3_folder_new (CamelStore *parent, CamelException *ex)
 {
@@ -124,9 +120,8 @@ camel_pop3_folder_new (CamelStore *parent, CamelException *ex)
 	camel_folder_construct (folder, parent, "inbox", "inbox");
 
 	/* mt-ok, since we dont have the folder-lock for new() */
-	camel_folder_refresh_info (folder, ex);/* mt-ok */
-	if (camel_exception_is_set (ex)) {
-		camel_object_unref (CAMEL_OBJECT (folder));
+	if (!camel_folder_refresh_info (folder, ex)) { /* mt-ok */
+		camel_object_unref (folder);
 		folder = NULL;
 	}
 
@@ -236,12 +231,13 @@ cmd_uidl(CamelPOP3Engine *pe, CamelPOP3Stream *stream, gpointer data)
 	} while (ret>0);
 }
 
-static void
+static gboolean
 pop3_refresh_info (CamelFolder *folder, CamelException *ex)
 {
 	CamelPOP3Store *pop3_store = CAMEL_POP3_STORE (folder->parent_store);
 	CamelPOP3Folder *pop3_folder = (CamelPOP3Folder *) folder;
 	CamelPOP3Command *pcl, *pcu = NULL;
+	gboolean success = TRUE;
 	gint i;
 
 	camel_operation_start (NULL, _("Retrieving POP summary"));
@@ -259,11 +255,15 @@ pop3_refresh_info (CamelFolder *folder, CamelException *ex)
 
 	if (i == -1) {
 		if (errno == EINTR)
-			camel_exception_setv(ex, CAMEL_EXCEPTION_USER_CANCEL, _("User canceled"));
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_USER_CANCEL,
+				_("User canceled"));
 		else
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      _("Cannot get POP summary: %s"),
-					      g_strerror (errno));
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Cannot get POP summary: %s"),
+				g_strerror (errno));
+		success = FALSE;
 	}
 
 	/* TODO: check every id has a uid & commands returned OK too? */
@@ -288,11 +288,14 @@ pop3_refresh_info (CamelFolder *folder, CamelException *ex)
 	g_hash_table_destroy(pop3_folder->uids_id);
 
 	camel_operation_end (NULL);
-	return;
+
+	return success;
 }
 
-static void
-pop3_sync (CamelFolder *folder, gboolean expunge, CamelException *ex)
+static gboolean
+pop3_sync (CamelFolder *folder,
+           gboolean expunge,
+           CamelException *ex)
 {
 	CamelPOP3Folder *pop3_folder;
 	CamelPOP3Store *pop3_store;
@@ -310,7 +313,7 @@ pop3_sync (CamelFolder *folder, gboolean expunge, CamelException *ex)
 	}
 
 	if (!expunge) {
-		return;
+		return TRUE;
 	}
 
 	camel_operation_start(NULL, _("Expunging deleted messages"));
@@ -354,6 +357,8 @@ pop3_sync (CamelFolder *folder, gboolean expunge, CamelException *ex)
 	camel_operation_end(NULL);
 
 	camel_pop3_store_expunge (pop3_store, ex);
+
+	return TRUE;
 }
 
 static gboolean
@@ -399,7 +404,9 @@ pop3_get_message_time_from_cache (CamelFolder *folder, const gchar *uid, time_t
 }
 
 gint
-camel_pop3_delete_old(CamelFolder *folder, gint days_to_delete,	CamelException *ex)
+camel_pop3_delete_old (CamelFolder *folder,
+                       gint days_to_delete,
+                       CamelException *ex)
 {
 	CamelPOP3Folder *pop3_folder;
 	CamelPOP3FolderInfo *fi;
@@ -488,7 +495,7 @@ cmd_tocache(CamelPOP3Engine *pe, CamelPOP3Stream *stream, gpointer data)
 
 	/* We write an '*' to the start of the stream to say its not complete yet */
 	/* This should probably be part of the cache code */
-	if ((n = camel_stream_write(fi->stream, "*", 1)) == -1)
+	if ((n = camel_stream_write (fi->stream, "*", 1)) == -1)
 		goto done;
 
 	while ((n = camel_stream_read((CamelStream *)stream, buffer, sizeof(buffer))) > 0) {
@@ -529,8 +536,9 @@ pop3_get_filename (CamelFolder *folder, const gchar *uid, CamelException *ex)
 
 	fi = g_hash_table_lookup(pop3_folder->uids_uid, uid);
 	if (fi == NULL) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID,
-				      _("No message with UID %s"), uid);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID,
+			_("No message with UID %s"), uid);
 		return NULL;
 	}
 
@@ -551,8 +559,9 @@ pop3_get_message (CamelFolder *folder, const gchar *uid, CamelException *ex)
 
 	fi = g_hash_table_lookup(pop3_folder->uids_uid, uid);
 	if (fi == NULL) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID,
-				      _("No message with UID %s"), uid);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID,
+			_("No message with UID %s"), uid);
 		return NULL;
 	}
 
@@ -578,11 +587,14 @@ pop3_get_message (CamelFolder *folder, const gchar *uid, CamelException *ex)
 
 		if (fi->err != 0) {
 			if (fi->err == EINTR)
-				camel_exception_setv(ex, CAMEL_EXCEPTION_USER_CANCEL, _("User canceled"));
+				camel_exception_setv (
+					ex, CAMEL_EXCEPTION_USER_CANCEL,
+					_("User canceled"));
 			else
-				camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-						      _("Cannot get message %s: %s"),
-						      uid, g_strerror (fi->err));
+				camel_exception_setv (
+					ex, CAMEL_EXCEPTION_SYSTEM,
+					_("Cannot get message %s: %s"),
+					uid, g_strerror (fi->err));
 			goto fail;
 		}
 	}
@@ -638,17 +650,22 @@ pop3_get_message (CamelFolder *folder, const gchar *uid, CamelException *ex)
 		/* Check to see we have safely written flag set */
 		if (fi->err != 0) {
 			if (fi->err == EINTR)
-				camel_exception_setv(ex, CAMEL_EXCEPTION_USER_CANCEL, _("User canceled"));
+				camel_exception_setv (
+					ex, CAMEL_EXCEPTION_USER_CANCEL,
+					_("User canceled"));
 			else
-				camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
+				camel_exception_setv (
+					ex, CAMEL_EXCEPTION_SYSTEM,
 					_("Cannot get message %s: %s"),
 					uid, g_strerror (fi->err));
 			goto done;
 		}
 
 		if (camel_stream_read(stream, buffer, 1) != 1 || buffer[0] != '#') {
-			camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-					_("Cannot get message %s: %s"), uid, _("Unknown reason"));
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Cannot get message %s: %s"),
+				uid, _("Unknown reason"));
 			goto done;
 		}
 	}
@@ -656,9 +673,11 @@ pop3_get_message (CamelFolder *folder, const gchar *uid, CamelException *ex)
 	message = camel_mime_message_new ();
 	if (camel_data_wrapper_construct_from_stream((CamelDataWrapper *)message, stream) == -1) {
 		if (errno == EINTR)
-			camel_exception_setv(ex, CAMEL_EXCEPTION_USER_CANCEL, _("User canceled"));
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_USER_CANCEL, _("User canceled"));
 		else
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
 				_("Cannot get message %s: %s"),
 				uid, g_strerror (errno));
 		camel_object_unref (message);
diff --git a/camel/providers/pop3/camel-pop3-folder.h b/camel/providers/pop3/camel-pop3-folder.h
index 7c631ac..08da313 100644
--- a/camel/providers/pop3/camel-pop3-folder.h
+++ b/camel/providers/pop3/camel-pop3-folder.h
@@ -35,7 +35,11 @@
 
 G_BEGIN_DECLS
 
-typedef struct {
+typedef struct _CamelPOP3Folder CamelPOP3Folder;
+typedef struct _CamelPOP3FolderClass CamelPOP3FolderClass;
+typedef struct _CamelPOP3FolderInfo CamelPOP3FolderInfo;
+
+struct _CamelPOP3FolderInfo {
 	guint32 id;
 	guint32 size;
 	guint32 flags;
@@ -44,27 +48,23 @@ typedef struct {
 	gint err;
 	struct _CamelPOP3Command *cmd;
 	struct _CamelStream *stream;
-} CamelPOP3FolderInfo;
+};
 
-typedef struct {
+struct _CamelPOP3Folder {
 	CamelFolder parent;
 
 	GPtrArray *uids;
 	GHashTable *uids_uid;	/* messageinfo by uid */
 	GHashTable *uids_id;	/* messageinfo by id */
-} CamelPOP3Folder;
+};
 
-typedef struct {
+struct _CamelPOP3FolderClass {
 	CamelFolderClass parent_class;
-
-	/* Virtual methods */
-
-} CamelPOP3FolderClass;
+};
 
 /* public methods */
 CamelFolder *camel_pop3_folder_new (CamelStore *parent, CamelException *ex);
 
-/* Standard Camel function */
 CamelType camel_pop3_folder_get_type (void);
 
 gint camel_pop3_delete_old(CamelFolder *folder, gint days_to_delete, CamelException *ex);
diff --git a/camel/providers/pop3/camel-pop3-provider.c b/camel/providers/pop3/camel-pop3-provider.c
index 21cb6e8..777c3a9 100644
--- a/camel/providers/pop3/camel-pop3-provider.c
+++ b/camel/providers/pop3/camel-pop3-provider.c
@@ -92,7 +92,7 @@ camel_provider_module_init(void)
 {
 	CamelServiceAuthType *auth;
 
-	pop3_provider.object_types[CAMEL_PROVIDER_STORE] = camel_pop3_store_get_type();
+	pop3_provider.object_types[CAMEL_PROVIDER_STORE] = camel_pop3_store_get_type ();
 	pop3_provider.url_hash = pop3_url_hash;
 	pop3_provider.url_equal = pop3_url_equal;
 
diff --git a/camel/providers/pop3/camel-pop3-store.c b/camel/providers/pop3/camel-pop3-store.c
index 34c10cb..4a471a4 100644
--- a/camel/providers/pop3/camel-pop3-store.c
+++ b/camel/providers/pop3/camel-pop3-store.c
@@ -52,9 +52,7 @@
 /* defines the length of the server error message we can display in the error dialog */
 #define POP3_ERROR_SIZE_LIMIT 60
 
-static CamelStoreClass *parent_class = NULL;
-
-static void finalize (CamelObject *object);
+static gpointer camel_pop3_store_parent_class;
 
 static gboolean pop3_connect (CamelService *service, CamelException *ex);
 static gboolean pop3_disconnect (CamelService *service, gboolean clean, CamelException *ex);
@@ -68,29 +66,43 @@ static CamelFolder *get_trash  (CamelStore *store, CamelException *ex);
 static gboolean pop3_can_refresh_folder (CamelStore *store, CamelFolderInfo *info, CamelException *ex);
 
 static void
-camel_pop3_store_class_init (CamelPOP3StoreClass *camel_pop3_store_class)
+pop3_store_finalize (CamelObject *object)
 {
-	CamelServiceClass *camel_service_class =
-		CAMEL_SERVICE_CLASS (camel_pop3_store_class);
-	CamelStoreClass *camel_store_class =
-		CAMEL_STORE_CLASS (camel_pop3_store_class);
+	CamelPOP3Store *pop3_store = CAMEL_POP3_STORE (object);
 
-	parent_class = CAMEL_STORE_CLASS (camel_type_get_global_classfuncs (camel_store_get_type ()));
+	/* force disconnect so we dont have it run later, after we've cleaned up some stuff */
+	/* SIGH */
 
-	/* virtual method overload */
-	camel_service_class->query_auth_types = query_auth_types;
-	camel_service_class->connect = pop3_connect;
-	camel_service_class->disconnect = pop3_disconnect;
+	camel_service_disconnect((CamelService *)pop3_store, TRUE, NULL);
 
-	camel_store_class->get_folder = get_folder;
-	camel_store_class->get_trash = get_trash;
-	camel_store_class->can_refresh_folder = pop3_can_refresh_folder;
+	if (pop3_store->engine)
+		camel_object_unref (pop3_store->engine);
+	if (pop3_store->cache)
+		camel_object_unref (pop3_store->cache);
 }
 
 static void
-camel_pop3_store_init (gpointer object, gpointer klass)
+camel_pop3_store_class_init (CamelPOP3StoreClass *class)
+{
+	CamelServiceClass *service_class;
+	CamelStoreClass *store_class;
+
+	camel_pop3_store_parent_class = CAMEL_STORE_CLASS (camel_type_get_global_classfuncs (camel_store_get_type ()));
+
+	service_class = CAMEL_SERVICE_CLASS (class);
+	service_class->query_auth_types = query_auth_types;
+	service_class->connect = pop3_connect;
+	service_class->disconnect = pop3_disconnect;
+
+	store_class = CAMEL_STORE_CLASS (class);
+	store_class->get_folder = get_folder;
+	store_class->get_trash = get_trash;
+	store_class->can_refresh_folder = pop3_can_refresh_folder;
+}
+
+static void
+camel_pop3_store_init (CamelPOP3Store *pop3_store)
 {
-	;
 }
 
 CamelType
@@ -106,28 +118,12 @@ camel_pop3_store_get_type (void)
 							     (CamelObjectClassInitFunc) camel_pop3_store_class_init,
 							     NULL,
 							     (CamelObjectInitFunc) camel_pop3_store_init,
-							     finalize);
+							     pop3_store_finalize);
 	}
 
 	return camel_pop3_store_type;
 }
 
-static void
-finalize (CamelObject *object)
-{
-	CamelPOP3Store *pop3_store = CAMEL_POP3_STORE (object);
-
-	/* force disconnect so we dont have it run later, after we've cleaned up some stuff */
-	/* SIGH */
-
-	camel_service_disconnect((CamelService *)pop3_store, TRUE, NULL);
-
-	if (pop3_store->engine)
-		camel_object_unref (pop3_store->engine);
-	if (pop3_store->cache)
-		camel_object_unref (pop3_store->cache);
-}
-
 enum {
 	MODE_CLEAR,
 	MODE_SSL,
@@ -160,7 +156,10 @@ get_valid_utf8_error (const gchar *text)
 }
 
 static gboolean
-connect_to_server (CamelService *service, struct addrinfo *ai, gint ssl_mode, CamelException *ex)
+connect_to_server (CamelService *service,
+                   struct addrinfo *ai,
+                   gint ssl_mode,
+                   CamelException *ex)
 {
 	CamelPOP3Store *store = CAMEL_POP3_STORE (service);
 	CamelStream *tcp_stream;
@@ -178,9 +177,10 @@ connect_to_server (CamelService *service, struct addrinfo *ai, gint ssl_mode, Ca
 			tcp_stream = camel_tcp_stream_ssl_new (service->session, service->url->host, SSL_PORT_FLAGS);
 		}
 #else
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				_("Could not connect to %s: %s"),
-				service->url->host, _("SSL unavailable"));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+			_("Could not connect to %s: %s"),
+			service->url->host, _("SSL unavailable"));
 
 		return FALSE;
 #endif /* HAVE_SSL */
@@ -189,13 +189,14 @@ connect_to_server (CamelService *service, struct addrinfo *ai, gint ssl_mode, Ca
 
 	if ((ret = camel_tcp_stream_connect ((CamelTcpStream *) tcp_stream, ai)) == -1) {
 		if (errno == EINTR)
-			camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL,
+			camel_exception_set (
+				ex, CAMEL_EXCEPTION_USER_CANCEL,
 				_("Connection canceled"));
 		else
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
 				_("Could not connect to %s: %s"),
-				service->url->host,
-				g_strerror (errno));
+				service->url->host, g_strerror (errno));
 
 		camel_object_unref (tcp_stream);
 
@@ -203,7 +204,7 @@ connect_to_server (CamelService *service, struct addrinfo *ai, gint ssl_mode, Ca
 	}
 
 	/* parent class connect initialization */
-	if (CAMEL_SERVICE_CLASS (parent_class)->connect (service, ex) == FALSE) {
+	if (CAMEL_SERVICE_CLASS (camel_pop3_store_parent_class)->connect (service, ex) == FALSE) {
 		camel_object_unref (tcp_stream);
 		return FALSE;
 	}
@@ -215,7 +216,8 @@ connect_to_server (CamelService *service, struct addrinfo *ai, gint ssl_mode, Ca
 		store->delete_after =  atoi(delete_days);
 
 	if (!(store->engine = camel_pop3_engine_new (tcp_stream, flags))) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
 			_("Failed to read a valid greeting from POP server %s"),
 			service->url->host);
 		camel_object_unref (tcp_stream);
@@ -232,7 +234,8 @@ connect_to_server (CamelService *service, struct addrinfo *ai, gint ssl_mode, Ca
 	clean_quit = FALSE;
 
 	if (!(store->engine->capa & CAMEL_POP3_CAP_STLS)) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
 			_("Failed to connect to POP server %s in secure mode: %s"),
 			service->url->host, _("STLS not supported by server"));
 		goto stls_exception;
@@ -246,13 +249,14 @@ connect_to_server (CamelService *service, struct addrinfo *ai, gint ssl_mode, Ca
 	camel_pop3_engine_command_free (store->engine, pc);
 
 	if (ret == FALSE) {
-		gchar *tmp = get_valid_utf8_error ((gchar *) store->engine->line);
-
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				/* Translators: Last %s is an optional explanation beginning with ": " separator */
-				_("Failed to connect to POP server %s in secure mode%s"),
-				service->url->host, tmp ? tmp:"");
-
+		gchar *tmp;
+
+		tmp = get_valid_utf8_error ((gchar *) store->engine->line);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			/* Translators: Last %s is an optional explanation beginning with ": " separator */
+			_("Failed to connect to POP server %s in secure mode%s"),
+			service->url->host, (tmp != NULL) ? tmp : "");
 		g_free (tmp);
 		goto stls_exception;
 	}
@@ -261,9 +265,10 @@ connect_to_server (CamelService *service, struct addrinfo *ai, gint ssl_mode, Ca
 	ret = camel_tcp_stream_ssl_enable_ssl (CAMEL_TCP_STREAM_SSL (tcp_stream));
 
 	if (ret == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Failed to connect to POP server %s in secure mode: %s"),
-				      service->url->host, _("TLS negotiations failed"));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Failed to connect to POP server %s in secure mode: %s"),
+			service->url->host, _("TLS negotiations failed"));
 		goto stls_exception;
 	}
 #else
@@ -311,7 +316,8 @@ static struct {
 };
 
 static gboolean
-connect_to_server_wrapper (CamelService *service, CamelException *ex)
+connect_to_server_wrapper (CamelService *service,
+                           CamelException *ex)
 {
 	struct addrinfo hints, *ai;
 	const gchar *ssl_mode;
@@ -361,12 +367,17 @@ extern CamelServiceAuthType camel_pop3_password_authtype;
 extern CamelServiceAuthType camel_pop3_apop_authtype;
 
 static GList *
-query_auth_types (CamelService *service, CamelException *ex)
+query_auth_types (CamelService *service,
+                  CamelException *ex)
 {
+	CamelServiceClass *service_class;
 	CamelPOP3Store *store = CAMEL_POP3_STORE (service);
 	GList *types = NULL;
 
-	types = CAMEL_SERVICE_CLASS (parent_class)->query_auth_types (service, ex);
+	/* Chain up to parent's query_auth_types() method. */
+	service_class = CAMEL_SERVICE_CLASS (camel_pop3_store_parent_class);
+	types = service_class->query_auth_types (service, ex);
+
 	if (camel_exception_is_set (ex))
 		return NULL;
 
@@ -374,9 +385,10 @@ query_auth_types (CamelService *service, CamelException *ex)
 		types = g_list_concat(types, g_list_copy(store->engine->auth));
 		pop3_disconnect (service, TRUE, NULL);
 	} else {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      _("Could not connect to POP server %s"),
-				      service->url->host);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
+			_("Could not connect to POP server %s"),
+			service->url->host);
 	}
 
 	return types;
@@ -405,7 +417,9 @@ camel_pop3_store_expunge (CamelPOP3Store *store, CamelException *ex)
 }
 
 static gint
-try_sasl(CamelPOP3Store *store, const gchar *mech, CamelException *ex)
+try_sasl (CamelPOP3Store *store,
+          const gchar *mech,
+          CamelException *ex)
 {
 	CamelPOP3Stream *stream = store->engine->stream;
 	guchar *line, *resp;
@@ -415,10 +429,11 @@ try_sasl(CamelPOP3Store *store, const gchar *mech, CamelException *ex)
 
 	sasl = camel_sasl_new("pop", mech, (CamelService *)store);
 	if (sasl == NULL) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_URL_INVALID,
-				      _("Unable to connect to POP server %s: "
-					"No support for requested authentication mechanism."),
-				      CAMEL_SERVICE (store)->url->host);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SERVICE_URL_INVALID,
+			_("Unable to connect to POP server %s: "
+			  "No support for requested authentication mechanism."),
+			CAMEL_SERVICE (store)->url->host);
 		return -1;
 	}
 
@@ -431,14 +446,18 @@ try_sasl(CamelPOP3Store *store, const gchar *mech, CamelException *ex)
 		if (strncmp((gchar *) line, "+OK", 3) == 0)
 			break;
 		if (strncmp((gchar *) line, "-ERR", 4) == 0) {
-			gchar *tmp = get_valid_utf8_error ((gchar *) store->engine->line);
-
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
-					      /* Translators: Last %s is an optional explanation beginning with ": " separator */
-					      _("SASL '%s' Login failed for POP server %s%s"),
-					      mech, CAMEL_SERVICE (store)->url->host, tmp ? tmp : "");
+			gchar *tmp;
 
+			tmp = get_valid_utf8_error (
+				(gchar *) store->engine->line);
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
+				/* Translators: Last %s is an optional explanation beginning with ": " separator */
+				_("SASL '%s' Login failed for POP server %s%s"),
+				mech, CAMEL_SERVICE (store)->url->host,
+				(tmp != NULL) ? tmp : "");
 			g_free (tmp);
+
 			goto done;
 		}
 		/* If we dont get continuation, or the sasl object's run out of work, or we dont get a challenge,
@@ -448,9 +467,10 @@ try_sasl(CamelPOP3Store *store, const gchar *mech, CamelException *ex)
 		    || (resp = (guchar *) camel_sasl_challenge_base64(sasl, (const gchar *) line+2, ex)) == NULL) {
 			camel_stream_printf((CamelStream *)stream, "*\r\n");
 			camel_pop3_stream_line(stream, &line, &len);
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
-					      _("Cannot login to POP server %s: SASL Protocol error"),
-					      CAMEL_SERVICE (store)->url->host);
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
+				_("Cannot login to POP server %s: SASL Protocol error"),
+				CAMEL_SERVICE (store)->url->host);
 			goto done;
 		}
 
@@ -465,11 +485,13 @@ try_sasl(CamelPOP3Store *store, const gchar *mech, CamelException *ex)
 
  ioerror:
 	if (errno == EINTR) {
-		camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL, _("Canceled"));
+		camel_exception_set (
+			ex, CAMEL_EXCEPTION_USER_CANCEL, _("Canceled"));
 	} else {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Failed to authenticate on POP server %s: %s"),
-				      CAMEL_SERVICE (store)->url->host, g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Failed to authenticate on POP server %s: %s"),
+			CAMEL_SERVICE (store)->url->host, g_strerror (errno));
 	}
  done:
 	camel_object_unref (sasl);
@@ -477,7 +499,10 @@ try_sasl(CamelPOP3Store *store, const gchar *mech, CamelException *ex)
 }
 
 static gint
-pop3_try_authenticate (CamelService *service, gboolean reprompt, const gchar *errmsg, CamelException *ex)
+pop3_try_authenticate (CamelService *service,
+                       gboolean reprompt,
+                       const gchar *errmsg,
+                       CamelException *ex)
 {
 	CamelPOP3Store *store = (CamelPOP3Store *)service;
 	CamelPOP3Command *pcu = NULL, *pcp = NULL;
@@ -526,9 +551,12 @@ pop3_try_authenticate (CamelService *service, gboolean reprompt, const gchar *er
 			if (!isascii((gint)*d)) {
 
 				/* README for Translators: The string APOP should not be translated */
-				camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_URL_INVALID,
-						_("Unable to connect to POP server %s:	Invalid APOP ID received. Impersonation attack suspected. Please contact your admin."),
-						CAMEL_SERVICE (store)->url->host);
+				camel_exception_setv (
+					ex, CAMEL_EXCEPTION_SERVICE_URL_INVALID,
+					_("Unable to connect to POP server %s:	"
+					  "Invalid APOP ID received. Impersonation "
+					  "attack suspected. Please contact your admin."),
+					CAMEL_SERVICE (store)->url->host);
 
 				return 0;
 			}
@@ -553,10 +581,11 @@ pop3_try_authenticate (CamelService *service, gboolean reprompt, const gchar *er
 			l = l->next;
 		}
 
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_URL_INVALID,
-				      _("Unable to connect to POP server %s: "
-					"No support for requested authentication mechanism."),
-				      CAMEL_SERVICE (store)->url->host);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SERVICE_URL_INVALID,
+			_("Unable to connect to POP server %s: "
+			  "No support for requested authentication mechanism."),
+			CAMEL_SERVICE (store)->url->host);
 		return 0;
 	}
 
@@ -565,33 +594,38 @@ pop3_try_authenticate (CamelService *service, gboolean reprompt, const gchar *er
 
 	if (status == -1) {
 		if (errno == EINTR) {
-			camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL, _("Canceled"));
+			camel_exception_set (
+				ex, CAMEL_EXCEPTION_USER_CANCEL, _("Canceled"));
 		} else {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      _("Unable to connect to POP server %s.\n"
-						"Error sending password: %s"),
-					      CAMEL_SERVICE (store)->url->host,
-					      errno ? g_strerror (errno) : _("Unknown error"));
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Unable to connect to POP server %s.\n"
+				  "Error sending password: %s"),
+				CAMEL_SERVICE (store)->url->host, errno ?
+				g_strerror (errno) : _("Unknown error"));
 		}
 	} else if (pcu && pcu->state != CAMEL_POP3_COMMAND_OK) {
 		gchar *tmp = get_valid_utf8_error ((gchar *) store->engine->line);
 
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
-				      /* Translators: Last %s is an optional explanation beginning with ": " separator */
-				      _("Unable to connect to POP server %s.\n"
-					"Error sending username%s"),
-				      CAMEL_SERVICE (store)->url->host,
-				      tmp ? tmp : "");
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
+			/* Translators: Last %s is an optional explanation beginning with ": " separator */
+			_("Unable to connect to POP server %s.\n"
+			  "Error sending username%s"),
+			CAMEL_SERVICE (store)->url->host,
+			(tmp != NULL) ? tmp : "");
 		g_free (tmp);
 	} else if (pcp->state != CAMEL_POP3_COMMAND_OK) {
-		gchar *tmp = get_valid_utf8_error ((gchar *) store->engine->line);
-
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
-				      /* Translators: Last %s is an optional explanation beginning with ": " separator */
-				      _("Unable to connect to POP server %s.\n"
-					"Error sending password%s"),
-				      CAMEL_SERVICE (store)->url->host,
-				      tmp ? tmp :"");
+		gchar *tmp;
+
+		tmp = get_valid_utf8_error ((gchar *) store->engine->line);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
+			/* Translators: Last %s is an optional explanation beginning with ": " separator */
+			_("Unable to connect to POP server %s.\n"
+			  "Error sending password%s"),
+			CAMEL_SERVICE (store)->url->host,
+			(tmp != NULL) ? tmp : "");
 		g_free (tmp);
 	}
 
@@ -604,7 +638,8 @@ pop3_try_authenticate (CamelService *service, gboolean reprompt, const gchar *er
 }
 
 static gboolean
-pop3_connect (CamelService *service, CamelException *ex)
+pop3_connect (CamelService *service,
+              CamelException *ex)
 {
 	CamelPOP3Store *store = (CamelPOP3Store *)service;
 	gboolean reprompt = FALSE;
@@ -619,7 +654,7 @@ pop3_connect (CamelService *service, CamelException *ex)
 
 		root = camel_session_get_storage_path (session, service, ex);
 		if (root) {
-			store->cache = camel_data_cache_new(root, ex);
+			store->cache = camel_data_cache_new (root, ex);
 			g_free(root);
 			if (store->cache) {
 				/* Default cache expiry - 1 week or not visited in a day */
@@ -633,16 +668,19 @@ pop3_connect (CamelService *service, CamelException *ex)
 		return FALSE;
 
 	while (1) {
-		status = pop3_try_authenticate (service, reprompt, errbuf, ex);
+		status = pop3_try_authenticate (
+			service, reprompt, errbuf, ex);
 		g_free (errbuf);
 		errbuf = NULL;
 
-		/* we only re-prompt if we failed to authenticate, any other error and we just abort */
+		/* we only re-prompt if we failed to authenticate,
+		 * any other error and we just abort */
 		if (status == 0 && camel_exception_get_id (ex) == CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE) {
 			errbuf = g_markup_printf_escaped ("%s\n\n", camel_exception_get_description (ex));
 			camel_exception_clear (ex);
 
-			camel_session_forget_password (session, service, NULL, "password", ex);
+			camel_session_forget_password (
+				session, service, NULL, "password", ex);
 			camel_exception_clear (ex);
 
 			g_free (service->url->passwd);
@@ -659,7 +697,8 @@ pop3_connect (CamelService *service, CamelException *ex)
 		return FALSE;
 	}
 
-	/* Now that we are in the TRANSACTION state, try regetting the capabilities */
+	/* Now that we are in the TRANSACTION state,
+	 * try regetting the capabilities */
 	store->engine->state = CAMEL_POP3_ENGINE_TRANSACTION;
 	camel_pop3_engine_reget_capabilities (store->engine);
 
@@ -667,8 +706,11 @@ pop3_connect (CamelService *service, CamelException *ex)
 }
 
 static gboolean
-pop3_disconnect (CamelService *service, gboolean clean, CamelException *ex)
+pop3_disconnect (CamelService *service,
+                 gboolean clean,
+                 CamelException *ex)
 {
+	CamelServiceClass *service_class;
 	CamelPOP3Store *store = CAMEL_POP3_STORE (service);
 
 	if (clean) {
@@ -680,7 +722,9 @@ pop3_disconnect (CamelService *service, gboolean clean, CamelException *ex)
 		camel_pop3_engine_command_free(store->engine, pc);
 	}
 
-	if (!CAMEL_SERVICE_CLASS (parent_class)->disconnect (service, clean, ex))
+	/* Chain up to parent's disconnect() method. */
+	service_class = CAMEL_SERVICE_CLASS (camel_pop3_store_parent_class);
+	if (!service_class->disconnect (service, clean, ex))
 		return FALSE;
 
 	camel_object_unref (store->engine);
@@ -690,13 +734,18 @@ pop3_disconnect (CamelService *service, gboolean clean, CamelException *ex)
 }
 
 static CamelFolder *
-get_folder (CamelStore *store, const gchar *folder_name, guint32 flags, CamelException *ex)
+get_folder (CamelStore *store,
+            const gchar *folder_name,
+            guint32 flags,
+            CamelException *ex)
 {
 	if (g_ascii_strcasecmp (folder_name, "inbox") != 0) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_INVALID,
-				      _("No such folder '%s'."), folder_name);
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_FOLDER_INVALID,
+			_("No such folder '%s'."), folder_name);
 		return NULL;
 	}
+
 	return camel_pop3_folder_new (store, ex);
 }
 
diff --git a/camel/providers/pop3/camel-pop3-store.h b/camel/providers/pop3/camel-pop3-store.h
index d55fa2e..cb0e80c 100644
--- a/camel/providers/pop3/camel-pop3-store.h
+++ b/camel/providers/pop3/camel-pop3-store.h
@@ -37,20 +37,24 @@
 
 G_BEGIN_DECLS
 
-typedef struct {
+typedef struct _CamelPOP3Store CamelPOP3Store;
+typedef struct _CamelPOP3StoreClass CamelPOP3StoreClass;
+
+struct _CamelPOP3Store {
 	CamelStore parent;
 
 	CamelPOP3Engine *engine; /* pop processing engine */
 
-	struct _CamelDataCache *cache;
+	CamelDataCache *cache;
 
 	guint delete_after;
-} CamelPOP3Store;
+};
 
-typedef struct {
+struct _CamelPOP3StoreClass {
 	CamelStoreClass parent_class;
+};
 
-} CamelPOP3StoreClass;
+CamelType camel_pop3_store_get_type (void);
 
 /* public methods */
 void camel_pop3_store_expunge (CamelPOP3Store *store, CamelException *ex);
@@ -60,9 +64,6 @@ enum { CAMEL_POP3_OK, CAMEL_POP3_ERR, CAMEL_POP3_FAIL };
 gint camel_pop3_command (CamelPOP3Store *store, gchar **ret, CamelException *ex, gchar *fmt, ...);
 gchar *camel_pop3_command_get_additional_data (CamelPOP3Store *store, gint total, CamelException *ex);
 
-/* Standard Camel function */
-CamelType camel_pop3_store_get_type (void);
-
 G_END_DECLS
 
 #endif /* CAMEL_POP3_STORE_H */
diff --git a/camel/providers/pop3/camel-pop3-stream.c b/camel/providers/pop3/camel-pop3-stream.c
index c8264ec..7f9ab1d 100644
--- a/camel/providers/pop3/camel-pop3-stream.c
+++ b/camel/providers/pop3/camel-pop3-stream.c
@@ -40,29 +40,37 @@ extern gint camel_verbose_debug;
 
 static CamelObjectClass *parent_class = NULL;
 
-/* Returns the class for a CamelStream */
-#define CS_CLASS(so) CAMEL_POP3_STREAM_CLASS(CAMEL_OBJECT_GET_CLASS(so))
-
 #define CAMEL_POP3_STREAM_SIZE (4096)
 #define CAMEL_POP3_STREAM_LINE (1024) /* maximum line size */
 
+static void
+pop3_stream_finalize (CamelPOP3Stream *is)
+{
+	g_free (is->buf);
+	g_free (is->linebuf);
+	if (is->source)
+		camel_object_unref (is->source);
+}
+
 static gint
-stream_fill(CamelPOP3Stream *is)
+stream_fill (CamelPOP3Stream *is)
 {
 	gint left = 0;
 
 	if (is->source) {
 		left = is->end - is->ptr;
-		memmove(is->buf, is->ptr, left);
+		memmove (is->buf, is->ptr, left);
 		is->end = is->buf + left;
 		is->ptr = is->buf;
-		left = camel_stream_read(is->source, (gchar *) is->end, CAMEL_POP3_STREAM_SIZE - (is->end - is->buf));
+		left = camel_stream_read (
+			is->source, (gchar *) is->end,
+			CAMEL_POP3_STREAM_SIZE - (is->end - is->buf));
 		if (left > 0) {
 			is->end += left;
 			is->end[0] = '\n';
 			return is->end - is->ptr;
 		} else {
-			dd(printf("POP3_STREAM_FILL(ERROR): '%s'\n", g_strerror (errno)));
+			dd (printf ("POP3_STREAM_FILL (ERROR): '%s'\n", g_strerror (errno)));
 			return -1;
 		}
 	}
@@ -71,7 +79,7 @@ stream_fill(CamelPOP3Stream *is)
 }
 
 static gssize
-stream_read(CamelStream *stream, gchar *buffer, gsize n)
+stream_read (CamelStream *stream, gchar *buffer, gsize n)
 {
 	CamelPOP3Stream *is = (CamelPOP3Stream *)stream;
 	gchar *o, *oe;
@@ -94,7 +102,7 @@ stream_read(CamelStream *stream, gchar *buffer, gsize n)
 	case 0:		/* start of line, always read at least 3 chars */
 		while (e - p < 3) {
 			is->ptr = p;
-			if (stream_fill(is) == -1)
+			if (stream_fill (is) == -1)
 				return -1;
 			p = is->ptr;
 			e = is->end;
@@ -104,7 +112,7 @@ stream_read(CamelStream *stream, gchar *buffer, gsize n)
 				is->ptr = p+3;
 				is->mode = CAMEL_POP3_STREAM_EOD;
 				is->state = 0;
-				dd(printf("POP3_STREAM_READ(%d):\n%.*s\n", (gint)(o-buffer), (gint)(o-buffer), buffer));
+				dd (printf ("POP3_STREAM_READ (%d):\n%.*s\n", (gint)(o-buffer), (gint)(o-buffer), buffer));
 				return o-buffer;
 			}
 			p++;
@@ -118,7 +126,7 @@ stream_read(CamelStream *stream, gchar *buffer, gsize n)
 				/* end of input sentinal check */
 				if (p > e) {
 					is->ptr = e;
-					if (stream_fill(is) == -1)
+					if (stream_fill (is) == -1)
 						return -1;
 					p = is->ptr;
 					e = is->end;
@@ -137,40 +145,42 @@ stream_read(CamelStream *stream, gchar *buffer, gsize n)
 	is->ptr = p;
 	is->state = state;
 
-	dd(printf("POP3_STREAM_READ(%d):\n%.*s\n", (gint)(o-buffer), (gint)(o-buffer), buffer));
+	dd (printf ("POP3_STREAM_READ (%d):\n%.*s\n", (gint)(o-buffer), (gint)(o-buffer), buffer));
 
 	return o-buffer;
 }
 
 static gssize
-stream_write(CamelStream *stream, const gchar *buffer, gsize n)
+stream_write (CamelStream *stream,
+              const gchar *buffer,
+              gsize n)
 {
 	CamelPOP3Stream *is = (CamelPOP3Stream *)stream;
 
 	if (strncmp (buffer, "PASS ", 5) != 0)
-		dd(printf("POP3_STREAM_WRITE(%d):\n%.*s\n", (gint)n, (gint)n, buffer));
+		dd (printf ("POP3_STREAM_WRITE (%d):\n%.*s\n", (gint)n, (gint)n, buffer));
 	else
-		dd(printf("POP3_STREAM_WRITE(%d):\nPASS xxxxxxxx\n", (gint)n));
+		dd (printf ("POP3_STREAM_WRITE (%d):\nPASS xxxxxxxx\n", (gint)n));
 
-	return camel_stream_write(is->source, buffer, n);
+	return camel_stream_write (is->source, buffer, n);
 }
 
 static gint
-stream_close(CamelStream *stream)
+stream_close (CamelStream *stream)
 {
 	/* nop? */
 	return 0;
 }
 
 static gint
-stream_flush(CamelStream *stream)
+stream_flush (CamelStream *stream)
 {
 	/* nop? */
 	return 0;
 }
 
 static gboolean
-stream_eos(CamelStream *stream)
+stream_eos (CamelStream *stream)
 {
 	CamelPOP3Stream *is = (CamelPOP3Stream *)stream;
 
@@ -178,34 +188,34 @@ stream_eos(CamelStream *stream)
 }
 
 static gint
-stream_reset(CamelStream *stream)
+stream_reset (CamelStream *stream)
 {
 	/* nop?  reset literal mode? */
 	return 0;
 }
 
 static void
-camel_pop3_stream_class_init (CamelStreamClass *camel_pop3_stream_class)
+camel_pop3_stream_class_init (CamelStreamClass *class)
 {
-	CamelStreamClass *camel_stream_class = (CamelStreamClass *)camel_pop3_stream_class;
+	CamelStreamClass *stream_class;
 
 	parent_class = camel_type_get_global_classfuncs( CAMEL_TYPE_OBJECT );
 
-	/* virtual method definition */
-	camel_stream_class->read = stream_read;
-	camel_stream_class->write = stream_write;
-	camel_stream_class->close = stream_close;
-	camel_stream_class->flush = stream_flush;
-	camel_stream_class->eos = stream_eos;
-	camel_stream_class->reset = stream_reset;
+	stream_class = CAMEL_STREAM_CLASS (class);
+	stream_class->read = stream_read;
+	stream_class->write = stream_write;
+	stream_class->close = stream_close;
+	stream_class->flush = stream_flush;
+	stream_class->eos = stream_eos;
+	stream_class->reset = stream_reset;
 }
 
 static void
-camel_pop3_stream_init(CamelPOP3Stream *is, CamelPOP3StreamClass *isclass)
+camel_pop3_stream_init (CamelPOP3Stream *is)
 {
 	/* +1 is room for appending a 0 if we need to for a line */
-	is->ptr = is->end = is->buf = g_malloc(CAMEL_POP3_STREAM_SIZE+1);
-	is->lineptr = is->linebuf = g_malloc(CAMEL_POP3_STREAM_LINE+1);
+	is->ptr = is->end = is->buf = g_malloc (CAMEL_POP3_STREAM_SIZE+1);
+	is->lineptr = is->linebuf = g_malloc (CAMEL_POP3_STREAM_LINE+1);
 	is->lineend = is->linebuf + CAMEL_POP3_STREAM_LINE;
 
 	/* init sentinal */
@@ -215,15 +225,6 @@ camel_pop3_stream_init(CamelPOP3Stream *is, CamelPOP3StreamClass *isclass)
 	is->mode = CAMEL_POP3_STREAM_LINE;
 }
 
-static void
-camel_pop3_stream_finalize(CamelPOP3Stream *is)
-{
-	g_free(is->buf);
-	g_free(is->linebuf);
-	if (is->source)
-		camel_object_unref (is->source);
-}
-
 CamelType
 camel_pop3_stream_get_type (void)
 {
@@ -237,7 +238,7 @@ camel_pop3_stream_get_type (void)
 							    (CamelObjectClassInitFunc) camel_pop3_stream_class_init,
 							    NULL,
 							    (CamelObjectInitFunc) camel_pop3_stream_init,
-							    (CamelObjectFinalizeFunc) camel_pop3_stream_finalize );
+							    (CamelObjectFinalizeFunc) pop3_stream_finalize );
 	}
 
 	return camel_pop3_stream_type;
@@ -252,7 +253,7 @@ camel_pop3_stream_get_type (void)
  * Returns: the stream
  **/
 CamelStream *
-camel_pop3_stream_new(CamelStream *source)
+camel_pop3_stream_new (CamelStream *source)
 {
 	CamelPOP3Stream *is;
 
@@ -264,7 +265,7 @@ camel_pop3_stream_new(CamelStream *source)
 
 /* Get one line from the pop3 stream */
 gint
-camel_pop3_stream_line(CamelPOP3Stream *is, guchar **data, guint *len)
+camel_pop3_stream_line (CamelPOP3Stream *is, guchar **data, guint *len)
 {
 	register guchar c, *p, *o, *oe;
 	gint newlen, oldlen;
@@ -286,7 +287,7 @@ camel_pop3_stream_line(CamelPOP3Stream *is, guchar **data, guint *len)
 		/* need at least 3 chars in buffer */
 		while (e-p < 3) {
 			is->ptr = p;
-			if (stream_fill(is) == -1)
+			if (stream_fill (is) == -1)
 				return -1;
 			p = is->ptr;
 			e = is->end;
@@ -301,7 +302,7 @@ camel_pop3_stream_line(CamelPOP3Stream *is, guchar **data, guint *len)
 				*len = 0;
 				is->linebuf[0] = 0;
 
-				dd(printf("POP3_STREAM_LINE(END)\n"));
+				dd (printf ("POP3_STREAM_LINE (END)\n"));
 
 				return 0;
 			}
@@ -316,7 +317,7 @@ camel_pop3_stream_line(CamelPOP3Stream *is, guchar **data, guint *len)
 				/* sentinal? */
 				if (p> e) {
 					is->ptr = e;
-					if (stream_fill(is) == -1)
+					if (stream_fill (is) == -1)
 						return -1;
 					p = is->ptr;
 					e = is->end;
@@ -326,7 +327,7 @@ camel_pop3_stream_line(CamelPOP3Stream *is, guchar **data, guint *len)
 					*len = o - is->linebuf;
 					*o = 0;
 
-					dd(printf("POP3_STREAM_LINE(%d): '%s'\n", *len, *data));
+					dd (printf ("POP3_STREAM_LINE (%d): '%s'\n", *len, *data));
 
 					return 1;
 				}
@@ -338,7 +339,7 @@ camel_pop3_stream_line(CamelPOP3Stream *is, guchar **data, guint *len)
 		/* limit this for bad server data? */
 		oldlen = o - is->linebuf;
 		newlen = (is->lineend - is->linebuf) * 3 / 2;
-		is->lineptr = is->linebuf = g_realloc(is->linebuf, newlen);
+		is->lineptr = is->linebuf = g_realloc (is->linebuf, newlen);
 		is->lineend = is->linebuf + newlen;
 		oe = is->lineend - 1;
 		o = is->linebuf + oldlen;
@@ -348,7 +349,7 @@ camel_pop3_stream_line(CamelPOP3Stream *is, guchar **data, guint *len)
 }
 
 /* returns -1 on error, 0 if last lot of data, >0 if more remaining */
-gint camel_pop3_stream_gets(CamelPOP3Stream *is, guchar **start, guint *len)
+gint camel_pop3_stream_gets (CamelPOP3Stream *is, guchar **start, guint *len)
 {
 	gint max;
 	guchar *end;
@@ -357,31 +358,31 @@ gint camel_pop3_stream_gets(CamelPOP3Stream *is, guchar **start, guint *len)
 
 	max = is->end - is->ptr;
 	if (max == 0) {
-		max = stream_fill(is);
+		max = stream_fill (is);
 		if (max <= 0)
 			return max;
 	}
 
 	*start = is->ptr;
-	end = memchr(is->ptr, '\n', max);
+	end = memchr (is->ptr, '\n', max);
 	if (end)
 		max = (end - is->ptr) + 1;
 	*start = is->ptr;
 	*len = max;
 	is->ptr += max;
 
-	dd(printf("POP3_STREAM_GETS(%s,%d): '%.*s'\n", end==NULL?"more":"last", *len, (gint)*len, *start));
+	dd (printf ("POP3_STREAM_GETS (%s,%d): '%.*s'\n", end==NULL?"more":"last", *len, (gint)*len, *start));
 
 	return end == NULL?1:0;
 }
 
-void camel_pop3_stream_set_mode(CamelPOP3Stream *is, camel_pop3_stream_mode_t mode)
+void camel_pop3_stream_set_mode (CamelPOP3Stream *is, camel_pop3_stream_mode_t mode)
 {
 	is->mode = mode;
 }
 
 /* returns -1 on erorr, 0 if last data, >0 if more data left */
-gint camel_pop3_stream_getd(CamelPOP3Stream *is, guchar **start, guint *len)
+gint camel_pop3_stream_getd (CamelPOP3Stream *is, guchar **start, guint *len)
 {
 	guchar *p, *e, *s;
 	gint state;
@@ -392,7 +393,7 @@ gint camel_pop3_stream_getd(CamelPOP3Stream *is, guchar **start, guint *len)
 		return 0;
 
 	if (is->mode == CAMEL_POP3_STREAM_LINE) {
-		g_warning("pop3_stream reading data in line mode\n");
+		g_warning ("pop3_stream reading data in line mode\n");
 		return 0;
 	}
 
@@ -402,7 +403,7 @@ gint camel_pop3_stream_getd(CamelPOP3Stream *is, guchar **start, guint *len)
 
 	while (e - p < 3) {
 		is->ptr = p;
-		if (stream_fill(is) == -1)
+		if (stream_fill (is) == -1)
 			return -1;
 		p = is->ptr;
 		e = is->end;
@@ -422,7 +423,7 @@ gint camel_pop3_stream_getd(CamelPOP3Stream *is, guchar **start, guint *len)
 					is->mode = CAMEL_POP3_STREAM_EOD;
 					is->state = 0;
 
-					dd(printf("POP3_STREAM_GETD(%s,%d): '%.*s'\n", "last", *len, (gint)*len, *start));
+					dd (printf ("POP3_STREAM_GETD (%s,%d): '%.*s'\n", "last", *len, (gint)*len, *start));
 
 					return 0;
 				}
@@ -437,7 +438,7 @@ gint camel_pop3_stream_getd(CamelPOP3Stream *is, guchar **start, guint *len)
 					*start = s;
 					is->state = 1;
 
-					dd(printf("POP3_STREAM_GETD(%s,%d): '%.*s'\n", "more", *len, (gint)*len, *start));
+					dd (printf ("POP3_STREAM_GETD (%s,%d): '%.*s'\n", "more", *len, (gint)*len, *start));
 
 					return 1;
 				}
@@ -462,7 +463,7 @@ gint camel_pop3_stream_getd(CamelPOP3Stream *is, guchar **start, guint *len)
 	*len = p-s;
 	*start = s;
 
-	dd(printf("POP3_STREAM_GETD(%s,%d): '%.*s'\n", "more", *len, (gint)*len, *start));
+	dd (printf ("POP3_STREAM_GETD (%s,%d): '%.*s'\n", "more", *len, (gint)*len, *start));
 
 	return 1;
 }
diff --git a/camel/providers/pop3/camel-pop3-stream.h b/camel/providers/pop3/camel-pop3-stream.h
index faddc9f..b5b287b 100644
--- a/camel/providers/pop3/camel-pop3-stream.h
+++ b/camel/providers/pop3/camel-pop3-stream.h
@@ -32,8 +32,8 @@
 
 G_BEGIN_DECLS
 
-typedef struct _CamelPOP3StreamClass CamelPOP3StreamClass;
 typedef struct _CamelPOP3Stream CamelPOP3Stream;
+typedef struct _CamelPOP3StreamClass CamelPOP3StreamClass;
 
 typedef enum {
 	CAMEL_POP3_STREAM_LINE,
diff --git a/camel/providers/sendmail/camel-sendmail-provider.c b/camel/providers/sendmail/camel-sendmail-provider.c
index 766546d..da0aa28 100644
--- a/camel/providers/sendmail/camel-sendmail-provider.c
+++ b/camel/providers/sendmail/camel-sendmail-provider.c
@@ -50,7 +50,7 @@ static CamelProvider sendmail_provider = {
 void
 camel_provider_module_init(void)
 {
-	sendmail_provider.object_types[CAMEL_PROVIDER_TRANSPORT] = camel_sendmail_transport_get_type();
+	sendmail_provider.object_types[CAMEL_PROVIDER_TRANSPORT] = camel_sendmail_transport_get_type ();
 
 	sendmail_provider.url_hash = camel_url_hash;
 	sendmail_provider.url_equal = camel_url_equal;
diff --git a/camel/providers/sendmail/camel-sendmail-transport.c b/camel/providers/sendmail/camel-sendmail-transport.c
index 17b8298..633ed66 100644
--- a/camel/providers/sendmail/camel-sendmail-transport.c
+++ b/camel/providers/sendmail/camel-sendmail-transport.c
@@ -45,16 +45,16 @@ static gboolean sendmail_send_to (CamelTransport *transport,
 				  CamelException *ex);
 
 static void
-camel_sendmail_transport_class_init (CamelSendmailTransportClass *camel_sendmail_transport_class)
+camel_sendmail_transport_class_init (CamelSendmailTransportClass *class)
 {
-	CamelTransportClass *camel_transport_class =
-		CAMEL_TRANSPORT_CLASS (camel_sendmail_transport_class);
-	CamelServiceClass *camel_service_class =
-		CAMEL_SERVICE_CLASS (camel_sendmail_transport_class);
-
-	/* virtual method overload */
-	camel_service_class->get_name = get_name;
-	camel_transport_class->send_to = sendmail_send_to;
+	CamelServiceClass *service_class;
+	CamelTransportClass *transport_class;
+
+	service_class = CAMEL_SERVICE_CLASS (class);
+	service_class->get_name = get_name;
+
+	transport_class = CAMEL_TRANSPORT_CLASS (class);
+	transport_class->send_to = sendmail_send_to;
 }
 
 CamelType
@@ -77,9 +77,11 @@ camel_sendmail_transport_get_type (void)
 }
 
 static gboolean
-sendmail_send_to (CamelTransport *transport, CamelMimeMessage *message,
-		  CamelAddress *from, CamelAddress *recipients,
-		  CamelException *ex)
+sendmail_send_to (CamelTransport *transport,
+                  CamelMimeMessage *message,
+                  CamelAddress *from,
+                  CamelAddress *recipients,
+                  CamelException *ex)
 {
 	struct _camel_header_raw *header, *savedbcc, *n, *tail;
 	const gchar *from_addr, *addr, **argv;
@@ -103,8 +105,9 @@ sendmail_send_to (CamelTransport *transport, CamelMimeMessage *message,
 
 	for (i = 0; i < len; i++) {
 		if (!camel_internet_address_get (CAMEL_INTERNET_ADDRESS (recipients), i, NULL, &addr)) {
-			camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM,
-					     _("Could not parse recipient list"));
+			camel_exception_set (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Could not parse recipient list"));
 			g_free (argv);
 			return FALSE;
 		}
@@ -134,10 +137,10 @@ sendmail_send_to (CamelTransport *transport, CamelMimeMessage *message,
 	}
 
 	if (pipe (fd) == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Could not create pipe to sendmail: "
-					"%s: mail not sent"),
-				      g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not create pipe to sendmail: %s: "
+			  "mail not sent"), g_strerror (errno));
 
 		/* restore the bcc headers */
 		header->next = savedbcc;
@@ -155,10 +158,10 @@ sendmail_send_to (CamelTransport *transport, CamelMimeMessage *message,
 	pid = fork ();
 	switch (pid) {
 	case -1:
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Could not fork sendmail: "
-					"%s: mail not sent"),
-				      g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not fork sendmail: %s: "
+			  "mail not sent"), g_strerror (errno));
 		close (fd[0]);
 		close (fd[1]);
 		sigprocmask (SIG_SETMASK, &omask, NULL);
@@ -197,9 +200,10 @@ sendmail_send_to (CamelTransport *transport, CamelMimeMessage *message,
 	if (camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (message), out) == -1
 	    || camel_stream_close (out) == -1) {
 		camel_object_unref (CAMEL_OBJECT (out));
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Could not send message: %s"),
-				      g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Could not send message: %s"),
+			g_strerror (errno));
 
 		/* Wait for sendmail to exit. */
 		while (waitpid (pid, &wstat, 0) == -1 && errno == EINTR)
@@ -225,22 +229,23 @@ sendmail_send_to (CamelTransport *transport, CamelMimeMessage *message,
 	header->next = savedbcc;
 
 	if (!WIFEXITED (wstat)) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("sendmail exited with signal %s: "
-					"mail not sent."),
-				      g_strsignal (WTERMSIG (wstat)));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("sendmail exited with signal %s: mail not sent."),
+			g_strsignal (WTERMSIG (wstat)));
 		return FALSE;
 	} else if (WEXITSTATUS (wstat) != 0) {
 		if (WEXITSTATUS (wstat) == 255) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      _("Could not execute %s: "
-						"mail not sent."),
-					      SENDMAIL_PATH);
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Could not execute %s: mail not sent."),
+				SENDMAIL_PATH);
 		} else {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      _("sendmail exited with status "
-						"%d: mail not sent."),
-					      WEXITSTATUS (wstat));
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("sendmail exited with status %d: "
+				  "mail not sent."),
+				WEXITSTATUS (wstat));
 		}
 		return FALSE;
 	}
diff --git a/camel/providers/sendmail/camel-sendmail-transport.h b/camel/providers/sendmail/camel-sendmail-transport.h
index af5c813..6272e19 100644
--- a/camel/providers/sendmail/camel-sendmail-transport.h
+++ b/camel/providers/sendmail/camel-sendmail-transport.h
@@ -35,17 +35,17 @@
 
 G_BEGIN_DECLS
 
-typedef struct {
-	CamelTransport parent;
+typedef struct _CamelSendmailTransport CamelSendmailTransport;
+typedef struct _CamelSendmailTransportClass CamelSendmailTransportClass;
 
-} CamelSendmailTransport;
+struct _CamelSendmailTransport {
+	CamelTransport parent;
+};
 
-typedef struct {
+struct _CamelSendmailTransportClass {
 	CamelTransportClass parent_class;
+};
 
-} CamelSendmailTransportClass;
-
-/* Standard Camel function */
 CamelType camel_sendmail_transport_get_type (void);
 
 G_END_DECLS
diff --git a/camel/providers/smtp/camel-smtp-transport.c b/camel/providers/smtp/camel-smtp-transport.c
index 8c9364e..66ffce8 100644
--- a/camel/providers/smtp/camel-smtp-transport.c
+++ b/camel/providers/smtp/camel-smtp-transport.c
@@ -59,9 +59,6 @@ static gboolean smtp_send_to (CamelTransport *transport, CamelMimeMessage *messa
 			      CamelAddress *from, CamelAddress *recipients, CamelException *ex);
 
 /* support prototypes */
-static void smtp_construct (CamelService *service, CamelSession *session,
-			    CamelProvider *provider, CamelURL *url,
-			    CamelException *ex);
 static gboolean smtp_connect (CamelService *service, CamelException *ex);
 static gboolean smtp_disconnect (CamelService *service, gboolean clean, CamelException *ex);
 static GHashTable *esmtp_get_authtypes (const guchar *buffer);
@@ -81,33 +78,29 @@ static void smtp_set_exception (CamelSmtpTransport *transport, gboolean disconne
 				const gchar *message, CamelException *ex);
 
 /* private data members */
-static CamelTransportClass *parent_class = NULL;
+static gpointer camel_smtp_transport_parent_class;
 
 static void
-camel_smtp_transport_class_init (CamelSmtpTransportClass *camel_smtp_transport_class)
+camel_smtp_transport_class_init (CamelSmtpTransportClass *class)
 {
-	CamelTransportClass *camel_transport_class =
-		CAMEL_TRANSPORT_CLASS (camel_smtp_transport_class);
-	CamelServiceClass *camel_service_class =
-		CAMEL_SERVICE_CLASS (camel_smtp_transport_class);
+	CamelTransportClass *transport_class;
+	CamelServiceClass *service_class;
 
-	parent_class = CAMEL_TRANSPORT_CLASS (camel_type_get_global_classfuncs (camel_transport_get_type ()));
+	camel_smtp_transport_parent_class = CAMEL_TRANSPORT_CLASS (camel_type_get_global_classfuncs (camel_transport_get_type ()));
 
-	/* virtual method overload */
-	camel_service_class->construct = smtp_construct;
-	camel_service_class->connect = smtp_connect;
-	camel_service_class->disconnect = smtp_disconnect;
-	camel_service_class->query_auth_types = query_auth_types;
-	camel_service_class->get_name = get_name;
+	service_class = CAMEL_SERVICE_CLASS (class);
+	service_class->connect = smtp_connect;
+	service_class->disconnect = smtp_disconnect;
+	service_class->query_auth_types = query_auth_types;
+	service_class->get_name = get_name;
 
-	camel_transport_class->send_to = smtp_send_to;
+	transport_class = CAMEL_TRANSPORT_CLASS (class);
+	transport_class->send_to = smtp_send_to;
 }
 
 static void
-camel_smtp_transport_init (gpointer object)
+camel_smtp_transport_init (CamelSmtpTransport *smtp)
 {
-	CamelSmtpTransport *smtp = CAMEL_SMTP_TRANSPORT (object);
-
 	smtp->flags = 0;
 	smtp->connected = FALSE;
 }
@@ -131,14 +124,6 @@ camel_smtp_transport_get_type (void)
 	return type;
 }
 
-static void
-smtp_construct (CamelService *service, CamelSession *session,
-		CamelProvider *provider, CamelURL *url,
-		CamelException *ex)
-{
-	CAMEL_SERVICE_CLASS (parent_class)->construct (service, session, provider, url, ex);
-}
-
 static const gchar *
 smtp_error_string (gint error)
 {
@@ -220,14 +205,17 @@ enum {
 #endif
 
 static gboolean
-connect_to_server (CamelService *service, struct addrinfo *ai, gint ssl_mode, CamelException *ex)
+connect_to_server (CamelService *service,
+                   struct addrinfo *ai,
+                   gint ssl_mode,
+                   CamelException *ex)
 {
 	CamelSmtpTransport *transport = CAMEL_SMTP_TRANSPORT (service);
 	CamelStream *tcp_stream;
 	gchar *respbuf = NULL;
 	gint ret;
 
-	if (!CAMEL_SERVICE_CLASS (parent_class)->connect (service, ex))
+	if (!CAMEL_SERVICE_CLASS (camel_smtp_transport_parent_class)->connect (service, ex))
 		return FALSE;
 
 	/* set some smtp transport defaults */
@@ -314,18 +302,20 @@ connect_to_server (CamelService *service, struct addrinfo *ai, gint ssl_mode, Ca
 
 #ifdef HAVE_SSL
 	if (!(transport->flags & CAMEL_SMTP_TRANSPORT_STARTTLS)) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Failed to connect to SMTP server %s in secure mode: %s"),
-				      service->url->host, _("STARTTLS not supported"));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Failed to connect to SMTP server %s in secure mode: %s"),
+			service->url->host, _("STARTTLS not supported"));
 
 		goto exception_cleanup;
 	}
 
 	d(fprintf (stderr, "sending : STARTTLS\r\n"));
 	if (camel_stream_write (tcp_stream, "STARTTLS\r\n", 10) == -1) {
-		camel_exception_setv (ex, errno == EINTR ? CAMEL_EXCEPTION_USER_CANCEL : CAMEL_EXCEPTION_SYSTEM,
-				      _("STARTTLS command failed: %s"),
-				      g_strerror (errno));
+		camel_exception_setv (
+			ex, errno == EINTR ? CAMEL_EXCEPTION_USER_CANCEL : CAMEL_EXCEPTION_SYSTEM,
+			 _("STARTTLS command failed: %s"),
+			g_strerror (errno));
 		goto exception_cleanup;
 	}
 
@@ -335,11 +325,10 @@ connect_to_server (CamelService *service, struct addrinfo *ai, gint ssl_mode, Ca
 		/* Check for "220 Ready for TLS" */
 		g_free (respbuf);
 		respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (transport->istream));
-
-		d(fprintf (stderr, "received: %s\n", respbuf ? respbuf : "(null)"));
-
-		if (!respbuf || strncmp (respbuf, "220", 3)) {
-			smtp_set_exception (transport, FALSE, respbuf, _("STARTTLS command failed"), ex);
+		if (!respbuf || strncmp (respbuf, "220", 3) != 0) {
+			smtp_set_exception (
+				transport, FALSE, respbuf,
+				_("STARTTLS command failed"), ex);
 			g_free (respbuf);
 			goto exception_cleanup;
 		}
@@ -347,15 +336,17 @@ connect_to_server (CamelService *service, struct addrinfo *ai, gint ssl_mode, Ca
 
 	/* Okay, now toggle SSL/TLS mode */
 	if (camel_tcp_stream_ssl_enable_ssl (CAMEL_TCP_STREAM_SSL (tcp_stream)) == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Failed to connect to SMTP server %s in secure mode: %s"),
-				      service->url->host, g_strerror (errno));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Failed to connect to SMTP server %s in secure mode: %s"),
+			service->url->host, g_strerror (errno));
 		goto exception_cleanup;
 	}
 #else
-	camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-			      _("Failed to connect to SMTP server %s in secure mode: %s"),
-			      service->url->host, _("SSL is not available in this build"));
+	camel_exception_setv (
+		ex, CAMEL_EXCEPTION_SYSTEM,
+		_("Failed to connect to SMTP server %s in secure mode: %s"),
+		service->url->host, _("SSL is not available in this build"));
 	goto exception_cleanup;
 #endif /* HAVE_SSL */
 
@@ -395,7 +386,8 @@ static struct {
 };
 
 static gboolean
-connect_to_server_wrapper (CamelService *service, CamelException *ex)
+connect_to_server_wrapper (CamelService *service,
+                           CamelException *ex)
 {
 	struct addrinfo hints, *ai;
 	const gchar *ssl_mode;
@@ -479,19 +471,21 @@ smtp_connect (CamelService *service, CamelException *ex)
 		gchar *errbuf = NULL;
 
 		if (!g_hash_table_lookup (transport->authtypes, service->url->authmech)) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
-					      _("SMTP server %s does not support requested "
-						"authentication type %s."),
-					      service->url->host, service->url->authmech);
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
+				_("SMTP server %s does not support "
+				  "requested authentication type %s."),
+				service->url->host, service->url->authmech);
 			camel_service_disconnect (service, TRUE, NULL);
 			return FALSE;
 		}
 
 		authtype = camel_sasl_authtype (service->url->authmech);
 		if (!authtype) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
-					      _("No support for authentication type %s"),
-					      service->url->authmech);
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
+				_("No support for authentication type %s"),
+				service->url->authmech);
 			camel_service_disconnect (service, TRUE, NULL);
 			return FALSE;
 		}
@@ -499,7 +493,8 @@ smtp_connect (CamelService *service, CamelException *ex)
 		if (!authtype->need_password) {
 			/* authentication mechanism doesn't need a password,
 			   so if it fails there's nothing we can do */
-			authenticated = smtp_auth (transport, authtype->authproto, ex);
+			authenticated = smtp_auth (
+				transport, authtype->authproto, ex);
 			if (!authenticated) {
 				camel_service_disconnect (service, TRUE, NULL);
 				return FALSE;
@@ -578,8 +573,11 @@ authtypes_free (gpointer key, gpointer value, gpointer data)
 }
 
 static gboolean
-smtp_disconnect (CamelService *service, gboolean clean, CamelException *ex)
+smtp_disconnect (CamelService *service,
+                 gboolean clean,
+                 CamelException *ex)
 {
+	CamelServiceClass *service_class;
 	CamelSmtpTransport *transport = CAMEL_SMTP_TRANSPORT (service);
 
 	/*if (!service->connected)
@@ -591,7 +589,9 @@ smtp_disconnect (CamelService *service, gboolean clean, CamelException *ex)
 		smtp_quit (transport, ex);
 	}
 
-	if (!CAMEL_SERVICE_CLASS (parent_class)->disconnect (service, clean, ex))
+	/* Chain up to parent's disconnect() method. */
+	service_class = CAMEL_SERVICE_CLASS (camel_smtp_transport_parent_class);
+	if (!service_class->disconnect (service, clean, ex))
 		return FALSE;
 
 	if (transport->authtypes) {
@@ -703,14 +703,16 @@ smtp_send_to (CamelTransport *transport, CamelMimeMessage *message,
 	gint i, len;
 
 	if (!smtp_transport->connected) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_NOT_CONNECTED,
-				      _("Cannot send message: service not connected."));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SERVICE_NOT_CONNECTED,
+			_("Cannot send message: service not connected."));
 		return FALSE;
 	}
 
 	if (!camel_internet_address_get (CAMEL_INTERNET_ADDRESS (from), 0, NULL, &addr)) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Cannot send message: sender address not valid."));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Cannot send message: sender address not valid."));
 		return FALSE;
 	}
 
@@ -728,8 +730,9 @@ smtp_send_to (CamelTransport *transport, CamelMimeMessage *message,
 
 	len = camel_address_length (recipients);
 	if (len == 0) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Cannot send message: no recipients defined."));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Cannot send message: no recipients defined."));
 		camel_operation_end (NULL);
 		return FALSE;
 	}
@@ -739,8 +742,10 @@ smtp_send_to (CamelTransport *transport, CamelMimeMessage *message,
 		gchar *enc;
 
 		if (!camel_internet_address_get (cia, i, NULL, &addr)) {
-			camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM,
-					     _("Cannot send message: one or more invalid recipients"));
+			camel_exception_set (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				_("Cannot send message: "
+				  "one or more invalid recipients"));
 			camel_operation_end (NULL);
 			return FALSE;
 		}
@@ -874,7 +879,11 @@ convert_to_local (GString *str)
 }
 
 static void
-smtp_set_exception (CamelSmtpTransport *transport, gboolean disconnect, const gchar *respbuf, const gchar *message, CamelException *ex)
+smtp_set_exception (CamelSmtpTransport *transport,
+                    gboolean disconnect,
+                    const gchar *respbuf,
+                    const gchar *message,
+                    CamelException *ex)
 {
 	const gchar *token, *rbuf = respbuf;
 	gchar *buffer = NULL;
@@ -903,7 +912,8 @@ smtp_set_exception (CamelSmtpTransport *transport, gboolean disconnect, const gc
 			g_string_append (string, token);
 			if (*(rbuf + 3) == '-') {
 				g_free (buffer);
-				buffer = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (transport->istream));
+				buffer = camel_stream_buffer_read_line (
+					CAMEL_STREAM_BUFFER (transport->istream));
 				g_string_append_c (string, '\n');
 			} else {
 				g_free (buffer);
@@ -923,8 +933,9 @@ smtp_set_exception (CamelSmtpTransport *transport, gboolean disconnect, const gc
 				goto fake_status_code;
 			}
 
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "%s: %s", message, string->str);
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				"%s: %s", message, string->str);
 
 			g_string_free (string, TRUE);
 		} else {
@@ -933,8 +944,9 @@ smtp_set_exception (CamelSmtpTransport *transport, gboolean disconnect, const gc
 			if (!buffer)
 				goto fake_status_code;
 
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "%s: %s", message, buffer);
+			camel_exception_setv (
+				ex, CAMEL_EXCEPTION_SYSTEM,
+				"%s: %s", message, buffer);
 
 			g_free (buffer);
 		}
@@ -1006,15 +1018,12 @@ smtp_helo (CamelSmtpTransport *transport, CamelException *ex)
 	do {
 		/* Check for "250" */
 		g_free (respbuf);
-		respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (transport->istream));
-
-		d(fprintf (stderr, "received: %s\n", respbuf ? respbuf : "(null)"));
-
+		respbuf = camel_stream_buffer_read_line (
+			CAMEL_STREAM_BUFFER (transport->istream));
 		if (!respbuf || strncmp (respbuf, "250", 3)) {
 			smtp_set_exception (transport, FALSE, respbuf, _("HELO command failed"), ex);
 			camel_operation_end (NULL);
 			g_free (respbuf);
-
 			return FALSE;
 		}
 
@@ -1068,7 +1077,9 @@ smtp_helo (CamelSmtpTransport *transport, CamelException *ex)
 }
 
 static gboolean
-smtp_auth (CamelSmtpTransport *transport, const gchar *mech, CamelException *ex)
+smtp_auth (CamelSmtpTransport *transport,
+           const gchar *mech,
+           CamelException *ex)
 {
 	CamelService *service;
 	gchar *cmdbuf, *respbuf = NULL, *challenge;
@@ -1082,8 +1093,9 @@ smtp_auth (CamelSmtpTransport *transport, const gchar *mech, CamelException *ex)
 	sasl = camel_sasl_new ("smtp", mech, service);
 	if (!sasl) {
 		camel_operation_end (NULL);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      _("Error creating SASL authentication object."));
+		camel_exception_setv (
+			ex, CAMEL_EXCEPTION_SYSTEM,
+			_("Error creating SASL authentication object."));
 		return FALSE;
 	}
 
@@ -1105,8 +1117,8 @@ smtp_auth (CamelSmtpTransport *transport, const gchar *mech, CamelException *ex)
 	}
 	g_free (cmdbuf);
 
-	respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (transport->istream));
-	d(fprintf (stderr, "received: %s\n", respbuf ? respbuf : "(null)"));
+	respbuf = camel_stream_buffer_read_line (
+		CAMEL_STREAM_BUFFER (transport->istream));
 
 	while (!camel_sasl_get_authenticated (sasl)) {
 		if (!respbuf) {
@@ -1117,7 +1129,9 @@ smtp_auth (CamelSmtpTransport *transport, const gchar *mech, CamelException *ex)
 
 		/* the server challenge/response should follow a 334 code */
 		if (strncmp (respbuf, "334", 3) != 0) {
-			smtp_set_exception (transport, FALSE, respbuf, _("AUTH command failed"), ex);
+			smtp_set_exception (
+				transport, FALSE, respbuf,
+				_("AUTH command failed"), ex);
 			goto lose;
 		}
 
@@ -1150,8 +1164,8 @@ smtp_auth (CamelSmtpTransport *transport, const gchar *mech, CamelException *ex)
 		g_free (cmdbuf);
 
 		/* get the server's response */
-		respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (transport->istream));
-		d(fprintf (stderr, "received: %s\n", respbuf ? respbuf : "(null)"));
+		respbuf = camel_stream_buffer_read_line (
+			CAMEL_STREAM_BUFFER (transport->istream));
 	}
 
 	if (respbuf == NULL)
@@ -1181,7 +1195,8 @@ smtp_auth (CamelSmtpTransport *transport, const gchar *mech, CamelException *ex)
 	/* Get the server out of "waiting for continuation data" mode. */
 	d(fprintf (stderr, "sending : *\n"));
 	camel_stream_write (transport->ostream, "*\r\n", 3);
-	respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (transport->istream));
+	respbuf = camel_stream_buffer_read_line (
+		CAMEL_STREAM_BUFFER (transport->istream));
 	d(fprintf (stderr, "received: %s\n", respbuf ? respbuf : "(null)"));
 
  lose:
@@ -1216,9 +1231,7 @@ smtp_mail (CamelSmtpTransport *transport, const gchar *sender, gboolean has_8bit
 		camel_exception_setv (ex, errno == EINTR ? CAMEL_EXCEPTION_USER_CANCEL : CAMEL_EXCEPTION_SYSTEM,
 				      _("MAIL FROM command failed: %s: mail not sent"),
 				      g_strerror (errno));
-
 		camel_service_disconnect ((CamelService *) transport, FALSE, NULL);
-
 		return FALSE;
 	}
 	g_free (cmdbuf);
@@ -1226,12 +1239,12 @@ smtp_mail (CamelSmtpTransport *transport, const gchar *sender, gboolean has_8bit
 	do {
 		/* Check for "250 Sender OK..." */
 		g_free (respbuf);
-		respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (transport->istream));
-
-		d(fprintf (stderr, "received: %s\n", respbuf ? respbuf : "(null)"));
-
+		respbuf = camel_stream_buffer_read_line (
+			CAMEL_STREAM_BUFFER (transport->istream));
 		if (!respbuf || strncmp (respbuf, "250", 3)) {
-			smtp_set_exception (transport, TRUE, respbuf, _("MAIL FROM command failed"), ex);
+			smtp_set_exception (
+				transport, TRUE, respbuf,
+				_("MAIL FROM command failed"), ex);
 			g_free (respbuf);
 			return FALSE;
 		}
@@ -1318,20 +1331,20 @@ smtp_data (CamelSmtpTransport *transport, CamelMimeMessage *message, CamelExcept
 				      g_strerror (errno));
 
 		camel_service_disconnect ((CamelService *) transport, FALSE, NULL);
-
 		return FALSE;
 	}
 	g_free (cmdbuf);
 
-	respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (transport->istream));
+	respbuf = camel_stream_buffer_read_line (
+		CAMEL_STREAM_BUFFER (transport->istream));
 
-	d(fprintf (stderr, "received: %s\n", respbuf ? respbuf : "(null)"));
-
-	if (!respbuf || strncmp (respbuf, "354", 3)) {
+	if (!respbuf || strncmp (respbuf, "354", 3) != 0) {
 		/* we should have gotten instructions on how to use the DATA command:
 		 * 354 Enter mail, end with "." on a line by itself
 		 */
-		smtp_set_exception (transport, TRUE, respbuf, _("DATA command failed"), ex);
+		smtp_set_exception (
+			transport, TRUE, respbuf,
+			_("DATA command failed"), ex);
 		g_free (respbuf);
 		return FALSE;
 	}
@@ -1360,23 +1373,29 @@ smtp_data (CamelSmtpTransport *transport, CamelMimeMessage *message, CamelExcept
 
 	/* find out how large the message is... */
 	null = CAMEL_STREAM_NULL (camel_stream_null_new ());
-	camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (message), CAMEL_STREAM (null));
+	camel_data_wrapper_write_to_stream (
+		CAMEL_DATA_WRAPPER (message), CAMEL_STREAM (null));
 
 	filtered_stream = camel_stream_filter_new (transport->ostream);
 
 	/* setup progress reporting for message sending... */
 	filter = camel_mime_filter_progress_new (NULL, null->written);
-	camel_stream_filter_add (CAMEL_STREAM_FILTER (filtered_stream), filter);
+	camel_stream_filter_add (
+		CAMEL_STREAM_FILTER (filtered_stream), filter);
 	camel_object_unref (filter);
 	camel_object_unref (null);
 
 	/* setup LF->CRLF conversion */
-	filter = camel_mime_filter_crlf_new (CAMEL_MIME_FILTER_CRLF_ENCODE, CAMEL_MIME_FILTER_CRLF_MODE_CRLF_DOTS);
-	camel_stream_filter_add (CAMEL_STREAM_FILTER (filtered_stream), filter);
+	filter = camel_mime_filter_crlf_new (
+		CAMEL_MIME_FILTER_CRLF_ENCODE,
+		CAMEL_MIME_FILTER_CRLF_MODE_CRLF_DOTS);
+	camel_stream_filter_add (
+		CAMEL_STREAM_FILTER (filtered_stream), filter);
 	camel_object_unref (filter);
 
 	/* write the message */
-	ret = camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (message), CAMEL_STREAM (filtered_stream));
+	ret = camel_data_wrapper_write_to_stream (
+		CAMEL_DATA_WRAPPER (message), filtered_stream);
 
 	/* restore the bcc headers */
 	header->next = savedbcc;
@@ -1389,11 +1408,10 @@ smtp_data (CamelSmtpTransport *transport, CamelMimeMessage *message, CamelExcept
 		camel_object_unref (filtered_stream);
 
 		camel_service_disconnect ((CamelService *) transport, FALSE, NULL);
-
 		return FALSE;
 	}
 
-	camel_stream_flush (CAMEL_STREAM (filtered_stream));
+	camel_stream_flush (filtered_stream);
 	camel_object_unref (filtered_stream);
 
 	/* terminate the message body */
@@ -1406,18 +1424,15 @@ smtp_data (CamelSmtpTransport *transport, CamelMimeMessage *message, CamelExcept
 				      g_strerror (errno));
 
 		camel_service_disconnect ((CamelService *) transport, FALSE, NULL);
-
 		return FALSE;
 	}
 
 	do {
 		/* Check for "250 Sender OK..." */
 		g_free (respbuf);
-		respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (transport->istream));
-
-		d(fprintf (stderr, "received: %s\n", respbuf ? respbuf : "(null)"));
-
-		if (!respbuf || strncmp (respbuf, "250", 3)) {
+		respbuf = camel_stream_buffer_read_line (
+			CAMEL_STREAM_BUFFER (transport->istream));
+		if (!respbuf || strncmp (respbuf, "250", 3) != 0) {
 			smtp_set_exception (transport, TRUE, respbuf, _("DATA command failed"), ex);
 			g_free (respbuf);
 			return FALSE;
@@ -1444,7 +1459,6 @@ smtp_rset (CamelSmtpTransport *transport, CamelException *ex)
 				      _("RSET command failed: %s"), g_strerror (errno));
 
 		camel_service_disconnect ((CamelService *) transport, FALSE, NULL);
-
 		return FALSE;
 	}
 	g_free (cmdbuf);
@@ -1452,12 +1466,12 @@ smtp_rset (CamelSmtpTransport *transport, CamelException *ex)
 	do {
 		/* Check for "250" */
 		g_free (respbuf);
-		respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (transport->istream));
-
-		d(fprintf (stderr, "received: %s\n", respbuf ? respbuf : "(null)"));
-
-		if (!respbuf || strncmp (respbuf, "250", 3)) {
-			smtp_set_exception (transport, TRUE, respbuf, _("RSET command failed"), ex);
+		respbuf = camel_stream_buffer_read_line (
+			CAMEL_STREAM_BUFFER (transport->istream));
+		if (!respbuf || strncmp (respbuf, "250", 3) != 0) {
+			smtp_set_exception (
+				transport, TRUE, respbuf,
+				_("RSET command failed"), ex);
 			g_free (respbuf);
 			return FALSE;
 		}
@@ -1493,8 +1507,10 @@ smtp_quit (CamelSmtpTransport *transport, CamelException *ex)
 
 		d(fprintf (stderr, "received: %s\n", respbuf ? respbuf : "(null)"));
 
-		if (!respbuf || strncmp (respbuf, "221", 3)) {
-			smtp_set_exception (transport, FALSE, respbuf, _("QUIT command failed"), ex);
+		if (!respbuf || strncmp (respbuf, "221", 3) != 0) {
+			smtp_set_exception (
+				transport, FALSE, respbuf,
+				_("QUIT command failed"), ex);
 			g_free (respbuf);
 			return FALSE;
 		}
diff --git a/camel/providers/smtp/camel-smtp-transport.h b/camel/providers/smtp/camel-smtp-transport.h
index 5dc19a0..57e61e0 100644
--- a/camel/providers/smtp/camel-smtp-transport.h
+++ b/camel/providers/smtp/camel-smtp-transport.h
@@ -45,7 +45,10 @@
 
 G_BEGIN_DECLS
 
-typedef struct {
+typedef struct _CamelSmtpTransport CamelSmtpTransport;
+typedef struct _CamelSmtpTransportClass CamelSmtpTransportClass;
+
+struct _CamelSmtpTransport {
 	CamelTransport parent;
 
 	CamelStream *istream, *ostream;
@@ -57,14 +60,12 @@ typedef struct {
 	socklen_t localaddrlen;
 
 	GHashTable *authtypes;
-} CamelSmtpTransport;
+};
 
-typedef struct {
+struct _CamelSmtpTransportClass {
 	CamelTransportClass parent_class;
+};
 
-} CamelSmtpTransportClass;
-
-/* Standard Camel function */
 CamelType camel_smtp_transport_get_type (void);
 
 G_END_DECLS
diff --git a/docs/reference/addressbook/libebook/tmpl/e-address-western.sgml b/docs/reference/addressbook/libebook/tmpl/e-address-western.sgml
index b4bd2bf..b86664a 100644
--- a/docs/reference/addressbook/libebook/tmpl/e-address-western.sgml
+++ b/docs/reference/addressbook/libebook/tmpl/e-address-western.sgml
@@ -17,6 +17,9 @@ A physical address in the format used in the Western hemisphere.
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT EAddressWestern ##### -->
 <para>
 
diff --git a/docs/reference/addressbook/libebook/tmpl/e-book-query.sgml b/docs/reference/addressbook/libebook/tmpl/e-book-query.sgml
index 6fa5ec1..92c9368 100644
--- a/docs/reference/addressbook/libebook/tmpl/e-book-query.sgml
+++ b/docs/reference/addressbook/libebook/tmpl/e-book-query.sgml
@@ -17,6 +17,9 @@ Handles queries of addressboook data.
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### TYPEDEF EBookQuery ##### -->
 <para>
 
diff --git a/docs/reference/addressbook/libebook/tmpl/e-book-types.sgml b/docs/reference/addressbook/libebook/tmpl/e-book-types.sgml
index a1ae343..d90103c 100644
--- a/docs/reference/addressbook/libebook/tmpl/e-book-types.sgml
+++ b/docs/reference/addressbook/libebook/tmpl/e-book-types.sgml
@@ -19,6 +19,9 @@ Evolution:BookListener interface.
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### MACRO E_BOOK_ERROR ##### -->
 <para>
 
@@ -31,6 +34,7 @@ Evolution:BookListener interface.
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/addressbook/libebook/tmpl/e-book-view.sgml b/docs/reference/addressbook/libebook/tmpl/e-book-view.sgml
index a5b68f5..f294083 100644
--- a/docs/reference/addressbook/libebook/tmpl/e-book-view.sgml
+++ b/docs/reference/addressbook/libebook/tmpl/e-book-view.sgml
@@ -19,6 +19,9 @@ addressbook itself.
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT EBookView ##### -->
 <para>
 #EBookView has no publicly available members.
diff --git a/docs/reference/addressbook/libebook/tmpl/e-book.sgml b/docs/reference/addressbook/libebook/tmpl/e-book.sgml
index 54fd161..57a2b77 100644
--- a/docs/reference/addressbook/libebook/tmpl/e-book.sgml
+++ b/docs/reference/addressbook/libebook/tmpl/e-book.sgml
@@ -18,6 +18,9 @@ Represents a complete addressbook. Event notifications and callbacks go to the
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT EBook ##### -->
 <para>
 #EBook has no publicly available members.
diff --git a/docs/reference/addressbook/libebook/tmpl/e-contact.sgml b/docs/reference/addressbook/libebook/tmpl/e-contact.sgml
index 73f7e17..5036399 100644
--- a/docs/reference/addressbook/libebook/tmpl/e-contact.sgml
+++ b/docs/reference/addressbook/libebook/tmpl/e-contact.sgml
@@ -17,6 +17,9 @@ A convenient way of accessing the contact information in EVCard objects.
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT EContact ##### -->
 <para>
 #EContact has no publicly available members. 
@@ -859,6 +862,7 @@ The URI of the contact's calendar.
 
 </para>
 
+ void: 
 @Returns: 
 
 
@@ -915,6 +919,7 @@ The URI of the contact's calendar.
 
 </para>
 
+ void: 
 @Returns: 
 
 
@@ -951,6 +956,7 @@ The URI of the contact's calendar.
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/addressbook/libebook/tmpl/e-destination.sgml b/docs/reference/addressbook/libebook/tmpl/e-destination.sgml
index 1b0a25f..7198eaf 100644
--- a/docs/reference/addressbook/libebook/tmpl/e-destination.sgml
+++ b/docs/reference/addressbook/libebook/tmpl/e-destination.sgml
@@ -17,6 +17,9 @@ EDestination
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT EDestination ##### -->
 <para>
 
@@ -252,6 +255,7 @@ EDestination
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/addressbook/libebook/tmpl/e-name-western.sgml b/docs/reference/addressbook/libebook/tmpl/e-name-western.sgml
index 0c6509f..66b0197 100644
--- a/docs/reference/addressbook/libebook/tmpl/e-name-western.sgml
+++ b/docs/reference/addressbook/libebook/tmpl/e-name-western.sgml
@@ -17,6 +17,9 @@ e-name-western
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT ENameWestern ##### -->
 <para>
 
diff --git a/docs/reference/addressbook/libebook/tmpl/e-vcard.sgml b/docs/reference/addressbook/libebook/tmpl/e-vcard.sgml
index 7124dd7..c69e18c 100644
--- a/docs/reference/addressbook/libebook/tmpl/e-vcard.sgml
+++ b/docs/reference/addressbook/libebook/tmpl/e-vcard.sgml
@@ -17,6 +17,9 @@ Does the low-level parsing work for contact information. This data is more conve
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT EVCard ##### -->
 <para>
 
@@ -48,6 +51,7 @@ Does the low-level parsing work for contact information. This data is more conve
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/address-data.sgml b/docs/reference/camel/tmpl/address-data.sgml
index b34ef75..da0aab2 100644
--- a/docs/reference/camel/tmpl/address-data.sgml
+++ b/docs/reference/camel/tmpl/address-data.sgml
@@ -17,3 +17,6 @@ address-data
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
diff --git a/docs/reference/camel/tmpl/addresses.sgml b/docs/reference/camel/tmpl/addresses.sgml
index 98f3342..62a0e66 100644
--- a/docs/reference/camel/tmpl/addresses.sgml
+++ b/docs/reference/camel/tmpl/addresses.sgml
@@ -17,6 +17,9 @@ addresses
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### FUNCTION test_address_compare ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-address.sgml b/docs/reference/camel/tmpl/camel-address.sgml
index be2f32a..343963e 100644
--- a/docs/reference/camel/tmpl/camel-address.sgml
+++ b/docs/reference/camel/tmpl/camel-address.sgml
@@ -17,6 +17,9 @@ CamelAddress
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelAddress ##### -->
 <para>
 
@@ -31,6 +34,7 @@ CamelAddress
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-arg.sgml b/docs/reference/camel/tmpl/camel-arg.sgml
index a1ad38c..9f413ef 100644
--- a/docs/reference/camel/tmpl/camel-arg.sgml
+++ b/docs/reference/camel/tmpl/camel-arg.sgml
@@ -17,6 +17,9 @@ camel-arg
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelArg ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-block-file.sgml b/docs/reference/camel/tmpl/camel-block-file.sgml
index 454f9d4..2c7ad17 100644
--- a/docs/reference/camel/tmpl/camel-block-file.sgml
+++ b/docs/reference/camel/tmpl/camel-block-file.sgml
@@ -17,6 +17,9 @@ CamelKeyFile
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### TYPEDEF camel_block_t ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-certdb.sgml b/docs/reference/camel/tmpl/camel-certdb.sgml
index 85522c8..9219fc7 100644
--- a/docs/reference/camel/tmpl/camel-certdb.sgml
+++ b/docs/reference/camel/tmpl/camel-certdb.sgml
@@ -17,6 +17,9 @@ CamelCertDB
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelCertDB ##### -->
 <para>
 
@@ -62,6 +65,7 @@ CamelCertDB
 
 </para>
 
+ void: 
 @Returns: 
 
 
@@ -78,6 +82,7 @@ CamelCertDB
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-charset-map.sgml b/docs/reference/camel/tmpl/camel-charset-map.sgml
index 6886b22..e3c857e 100644
--- a/docs/reference/camel/tmpl/camel-charset-map.sgml
+++ b/docs/reference/camel/tmpl/camel-charset-map.sgml
@@ -17,6 +17,9 @@ camel-charset-map
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelCharset ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-cipher-context.sgml b/docs/reference/camel/tmpl/camel-cipher-context.sgml
index 14db85e..44dcb8f 100644
--- a/docs/reference/camel/tmpl/camel-cipher-context.sgml
+++ b/docs/reference/camel/tmpl/camel-cipher-context.sgml
@@ -17,6 +17,9 @@ CamelCipherContext
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelCipherContext ##### -->
 <para>
 
@@ -206,6 +209,7 @@ CamelCipherContext
 
 </para>
 
+ void: 
 @Returns: 
 
 
@@ -291,8 +295,10 @@ CamelCipherContext
 @name: 
 @email: 
 @cert_data: 
- cert_data_free: 
- cert_data_clone: 
+ gpointer cert_data: 
+ gpointer cert_data:
+ gpointer cert_data: 
+ gpointer cert_data: 
 
 
 <!-- ##### FUNCTION camel_cipher_validity_envelope ##### -->
diff --git a/docs/reference/camel/tmpl/camel-data-cache.sgml b/docs/reference/camel/tmpl/camel-data-cache.sgml
index 5f14ce7..4f4c015 100644
--- a/docs/reference/camel/tmpl/camel-data-cache.sgml
+++ b/docs/reference/camel/tmpl/camel-data-cache.sgml
@@ -17,6 +17,9 @@ CamelDataCache
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelDataCache ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-data-wrapper.sgml b/docs/reference/camel/tmpl/camel-data-wrapper.sgml
index ffcde75..c81bb7f 100644
--- a/docs/reference/camel/tmpl/camel-data-wrapper.sgml
+++ b/docs/reference/camel/tmpl/camel-data-wrapper.sgml
@@ -17,6 +17,9 @@ CamelDataWrapper
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelDataWrapper ##### -->
 <para>
 
@@ -34,6 +37,7 @@ CamelDataWrapper
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-db.sgml b/docs/reference/camel/tmpl/camel-db.sgml
index 71e9f2a..259288c 100644
--- a/docs/reference/camel/tmpl/camel-db.sgml
+++ b/docs/reference/camel/tmpl/camel-db.sgml
@@ -17,6 +17,9 @@ CamelDB
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### MACRO CAMEL_DB_FILE ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-debug.sgml b/docs/reference/camel/tmpl/camel-debug.sgml
index dde66af..4a6eb06 100644
--- a/docs/reference/camel/tmpl/camel-debug.sgml
+++ b/docs/reference/camel/tmpl/camel-debug.sgml
@@ -17,6 +17,9 @@ camel-debug
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### MACRO CAMEL_DEBUG_IMAP ##### -->
 <para>
 
@@ -36,6 +39,7 @@ camel-debug
 
 </para>
 
+ void: 
 
 
 <!-- ##### FUNCTION camel_debug ##### -->
@@ -61,5 +65,6 @@ camel-debug
 
 </para>
 
+ void: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-disco-diary.sgml b/docs/reference/camel/tmpl/camel-disco-diary.sgml
index 9dbc6ae..17328ee 100644
--- a/docs/reference/camel/tmpl/camel-disco-diary.sgml
+++ b/docs/reference/camel/tmpl/camel-disco-diary.sgml
@@ -17,6 +17,9 @@ CamelDiscoDiary
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelDiscoDiary ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-disco-folder.sgml b/docs/reference/camel/tmpl/camel-disco-folder.sgml
index 88fb38f..504e7de 100644
--- a/docs/reference/camel/tmpl/camel-disco-folder.sgml
+++ b/docs/reference/camel/tmpl/camel-disco-folder.sgml
@@ -17,6 +17,9 @@ CamelDiscoFolder
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelDiscoFolder ##### -->
 <para>
 
@@ -33,6 +36,7 @@ CamelDiscoFolder
 @folder: 
 @uids: 
 @ex: 
+ Returns: 
 
 
 <!-- ##### FUNCTION camel_disco_folder_cache_message ##### -->
@@ -43,6 +47,7 @@ CamelDiscoFolder
 @disco_folder: 
 @uid: 
 @ex: 
+ Returns: 
 
 
 <!-- ##### FUNCTION camel_disco_folder_prepare_for_offline ##### -->
@@ -53,5 +58,6 @@ CamelDiscoFolder
 @disco_folder: 
 @expression: 
 @ex: 
+ Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-disco-store.sgml b/docs/reference/camel/tmpl/camel-disco-store.sgml
index 7bfafd2..7dc0157 100644
--- a/docs/reference/camel/tmpl/camel-disco-store.sgml
+++ b/docs/reference/camel/tmpl/camel-disco-store.sgml
@@ -17,6 +17,9 @@ CamelDiscoStore
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelDiscoStore ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-exception.sgml b/docs/reference/camel/tmpl/camel-exception.sgml
index c7b3685..f57a116 100644
--- a/docs/reference/camel/tmpl/camel-exception.sgml
+++ b/docs/reference/camel/tmpl/camel-exception.sgml
@@ -17,6 +17,9 @@ camel-exception
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### ENUM ExceptionId ##### -->
 <para>
 
@@ -43,6 +46,7 @@ camel-exception
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-file-utils.sgml b/docs/reference/camel/tmpl/camel-file-utils.sgml
index 9aef87c..8348df8 100644
--- a/docs/reference/camel/tmpl/camel-file-utils.sgml
+++ b/docs/reference/camel/tmpl/camel-file-utils.sgml
@@ -17,6 +17,9 @@ camel-file-utils
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### MACRO O_BINARY ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-filter-driver.sgml b/docs/reference/camel/tmpl/camel-filter-driver.sgml
index b46e6f2..b429b25 100644
--- a/docs/reference/camel/tmpl/camel-filter-driver.sgml
+++ b/docs/reference/camel/tmpl/camel-filter-driver.sgml
@@ -17,6 +17,9 @@ CamelFilterDriver
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelFilterDriver ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-filter-search.sgml b/docs/reference/camel/tmpl/camel-filter-search.sgml
index 6228efe..0cf0410 100644
--- a/docs/reference/camel/tmpl/camel-filter-search.sgml
+++ b/docs/reference/camel/tmpl/camel-filter-search.sgml
@@ -17,6 +17,9 @@ camel-filter-search
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### USER_FUNCTION CamelFilterSearchGetMessageFunc ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-folder-search.sgml b/docs/reference/camel/tmpl/camel-folder-search.sgml
index b3ea24a..dacfe08 100644
--- a/docs/reference/camel/tmpl/camel-folder-search.sgml
+++ b/docs/reference/camel/tmpl/camel-folder-search.sgml
@@ -17,6 +17,9 @@ CamelFolderSearch
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelFolderSearch ##### -->
 <para>
 
@@ -38,6 +41,7 @@ CamelFolderSearch
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-folder-summary.sgml b/docs/reference/camel/tmpl/camel-folder-summary.sgml
index 383e5f0..623666f 100644
--- a/docs/reference/camel/tmpl/camel-folder-summary.sgml
+++ b/docs/reference/camel/tmpl/camel-folder-summary.sgml
@@ -17,6 +17,9 @@ CamelFolderSummary
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelFolderSummary ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-folder-thread.sgml b/docs/reference/camel/tmpl/camel-folder-thread.sgml
index c682032..58c123c 100644
--- a/docs/reference/camel/tmpl/camel-folder-thread.sgml
+++ b/docs/reference/camel/tmpl/camel-folder-thread.sgml
@@ -17,6 +17,9 @@ camel-folder-thread
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelFolderThreadNode ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-folder.sgml b/docs/reference/camel/tmpl/camel-folder.sgml
index e315a40..4c42fc5 100644
--- a/docs/reference/camel/tmpl/camel-folder.sgml
+++ b/docs/reference/camel/tmpl/camel-folder.sgml
@@ -17,6 +17,9 @@ CamelFolder
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelFolder ##### -->
 <para>
 
@@ -121,6 +124,7 @@ CamelFolder
 
 @folder: 
 @ex: 
+ Returns: 
 
 
 <!-- ##### FUNCTION camel_folder_sync ##### -->
@@ -131,6 +135,7 @@ CamelFolder
 @folder: 
 @expunge: 
 @ex: 
+ Returns: 
 
 
 <!-- ##### FUNCTION camel_folder_set_lock_async ##### -->
@@ -158,6 +163,7 @@ CamelFolder
 
 @folder: 
 @ex: 
+ Returns: 
 
 
 <!-- ##### FUNCTION camel_folder_get_name ##### -->
@@ -263,6 +269,7 @@ CamelFolder
 @info: 
 @appended_uid: 
 @ex: 
+ Returns: 
 
 
 <!-- ##### FUNCTION camel_folder_has_summary_capability ##### -->
@@ -338,6 +345,7 @@ CamelFolder
 @folder: 
 @uid: 
 @ex: 
+ Returns: 
 
 
 <!-- ##### MACRO camel_folder_delete_message ##### -->
@@ -489,6 +497,7 @@ CamelFolder
 @transferred_uids: 
 @delete_originals: 
 @ex: 
+ Returns: 
 
 
 <!-- ##### FUNCTION camel_folder_delete ##### -->
@@ -613,6 +622,7 @@ CamelFolder
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-gpg-context.sgml b/docs/reference/camel/tmpl/camel-gpg-context.sgml
index 2282337..ade6aea 100644
--- a/docs/reference/camel/tmpl/camel-gpg-context.sgml
+++ b/docs/reference/camel/tmpl/camel-gpg-context.sgml
@@ -17,6 +17,9 @@ CamelGpgContext
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelGpgContext ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-groupwise-folder.sgml b/docs/reference/camel/tmpl/camel-groupwise-folder.sgml
index 2b966c0..f754afb 100644
--- a/docs/reference/camel/tmpl/camel-groupwise-folder.sgml
+++ b/docs/reference/camel/tmpl/camel-groupwise-folder.sgml
@@ -17,6 +17,9 @@ CamelGroupwiseFolder
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelGroupwiseFolder ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-groupwise-journal.sgml b/docs/reference/camel/tmpl/camel-groupwise-journal.sgml
index c84cd7e..8e0a5d6 100644
--- a/docs/reference/camel/tmpl/camel-groupwise-journal.sgml
+++ b/docs/reference/camel/tmpl/camel-groupwise-journal.sgml
@@ -17,6 +17,9 @@ CamelGroupwiseJournal
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelGroupwiseJournal ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-groupwise-store-summary.sgml b/docs/reference/camel/tmpl/camel-groupwise-store-summary.sgml
index c657634..c5bcfb1 100644
--- a/docs/reference/camel/tmpl/camel-groupwise-store-summary.sgml
+++ b/docs/reference/camel/tmpl/camel-groupwise-store-summary.sgml
@@ -17,6 +17,9 @@ CamelGroupwiseStoreSummary
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelGroupwiseStoreInfo ##### -->
 <para>
 
@@ -50,6 +53,7 @@ CamelGroupwiseStoreSummary
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-groupwise-store.sgml b/docs/reference/camel/tmpl/camel-groupwise-store.sgml
index cd02ccd..dd952b2 100644
--- a/docs/reference/camel/tmpl/camel-groupwise-store.sgml
+++ b/docs/reference/camel/tmpl/camel-groupwise-store.sgml
@@ -17,6 +17,9 @@ CamelGroupwiseStore
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### MACRO GW_PARAM_FILTER_INBOX ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-groupwise-summary.sgml b/docs/reference/camel/tmpl/camel-groupwise-summary.sgml
index 7c82f3c..cbaf784 100644
--- a/docs/reference/camel/tmpl/camel-groupwise-summary.sgml
+++ b/docs/reference/camel/tmpl/camel-groupwise-summary.sgml
@@ -17,6 +17,9 @@ CamelGroupwiseSummary
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelGroupwiseSummary ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-groupwise-transport.sgml b/docs/reference/camel/tmpl/camel-groupwise-transport.sgml
index 186b656..2d81067 100644
--- a/docs/reference/camel/tmpl/camel-groupwise-transport.sgml
+++ b/docs/reference/camel/tmpl/camel-groupwise-transport.sgml
@@ -17,6 +17,9 @@ CamelGroupwiseTransport
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelGroupwiseTransport ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-groupwise-utils.sgml b/docs/reference/camel/tmpl/camel-groupwise-utils.sgml
index 1ab7917..662f1c1 100644
--- a/docs/reference/camel/tmpl/camel-groupwise-utils.sgml
+++ b/docs/reference/camel/tmpl/camel-groupwise-utils.sgml
@@ -17,6 +17,9 @@ camel-groupwise-utils
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### MACRO X_SEND_OPTIONS ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-html-parser.sgml b/docs/reference/camel/tmpl/camel-html-parser.sgml
index 8cc957f..078c620 100644
--- a/docs/reference/camel/tmpl/camel-html-parser.sgml
+++ b/docs/reference/camel/tmpl/camel-html-parser.sgml
@@ -17,6 +17,9 @@ CamelHTMLParser
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelHTMLParser ##### -->
 <para>
 
@@ -50,6 +53,7 @@ CamelHTMLParser
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-http-stream.sgml b/docs/reference/camel/tmpl/camel-http-stream.sgml
index c5749a2..7f99b9a 100644
--- a/docs/reference/camel/tmpl/camel-http-stream.sgml
+++ b/docs/reference/camel/tmpl/camel-http-stream.sgml
@@ -17,6 +17,9 @@ CamelHttpStream
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelHttpStream ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-iconv.sgml b/docs/reference/camel/tmpl/camel-iconv.sgml
index 2c3cb46..732c40e 100644
--- a/docs/reference/camel/tmpl/camel-iconv.sgml
+++ b/docs/reference/camel/tmpl/camel-iconv.sgml
@@ -17,11 +17,15 @@ camel-iconv
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### FUNCTION camel_iconv_locale_charset ##### -->
 <para>
 
 </para>
 
+ void: 
 @Returns: 
 
 
@@ -30,6 +34,7 @@ camel-iconv
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-imap-command.sgml b/docs/reference/camel/tmpl/camel-imap-command.sgml
index 8438be1..278cf50 100644
--- a/docs/reference/camel/tmpl/camel-imap-command.sgml
+++ b/docs/reference/camel/tmpl/camel-imap-command.sgml
@@ -17,6 +17,9 @@ camel-imap-command
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### ENUM CamelImapResponseType ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-imap-folder.sgml b/docs/reference/camel/tmpl/camel-imap-folder.sgml
index 9d4d279..0704743 100644
--- a/docs/reference/camel/tmpl/camel-imap-folder.sgml
+++ b/docs/reference/camel/tmpl/camel-imap-folder.sgml
@@ -17,6 +17,9 @@ CamelImapFolder
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelImapFolder ##### -->
 <para>
 
@@ -52,6 +55,7 @@ CamelImapFolder
 @folder: 
 @response: 
 @ex: 
+ Returns: 
 
 
 <!-- ##### FUNCTION camel_imap_folder_changed ##### -->
@@ -63,6 +67,7 @@ CamelImapFolder
 @exists: 
 @expunged: 
 @ex: 
+ Returns: 
 
 
 <!-- ##### FUNCTION camel_imap_folder_fetch_data ##### -->
@@ -88,6 +93,7 @@ CamelImapFolder
 @info: 
 @appended_uid: 
 @ex: 
+ Returns: 
 
 
 <!-- ##### FUNCTION imap_transfer_resyncing ##### -->
@@ -101,6 +107,7 @@ CamelImapFolder
 @transferred_uids: 
 @delete_originals: 
 @ex: 
+ Returns: 
 
 
 <!-- ##### FUNCTION imap_expunge_uids_resyncing ##### -->
@@ -111,5 +118,6 @@ CamelImapFolder
 @folder: 
 @uids: 
 @ex: 
+ Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-imap-journal.sgml b/docs/reference/camel/tmpl/camel-imap-journal.sgml
index 73197f1..ea21d81 100644
--- a/docs/reference/camel/tmpl/camel-imap-journal.sgml
+++ b/docs/reference/camel/tmpl/camel-imap-journal.sgml
@@ -17,6 +17,9 @@ CamelImapJournal
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### ENUM CamelOfflineAction ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-imap-message-cache.sgml b/docs/reference/camel/tmpl/camel-imap-message-cache.sgml
index 191ea19..f088990 100644
--- a/docs/reference/camel/tmpl/camel-imap-message-cache.sgml
+++ b/docs/reference/camel/tmpl/camel-imap-message-cache.sgml
@@ -17,6 +17,9 @@ CamelImapMessageCache
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelImapMessageCache ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-imap-search.sgml b/docs/reference/camel/tmpl/camel-imap-search.sgml
index 9aff076..edef1e7 100644
--- a/docs/reference/camel/tmpl/camel-imap-search.sgml
+++ b/docs/reference/camel/tmpl/camel-imap-search.sgml
@@ -17,6 +17,9 @@ CamelImapSearch
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelImapSearch ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-imap-store-summary.sgml b/docs/reference/camel/tmpl/camel-imap-store-summary.sgml
index 0b6484f..9e8fbb2 100644
--- a/docs/reference/camel/tmpl/camel-imap-store-summary.sgml
+++ b/docs/reference/camel/tmpl/camel-imap-store-summary.sgml
@@ -17,6 +17,9 @@ CamelImapStoreSummary
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelImapStoreInfo ##### -->
 <para>
 
@@ -51,6 +54,7 @@ CamelImapStoreSummary
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-imap-store.sgml b/docs/reference/camel/tmpl/camel-imap-store.sgml
index 25a717a..1799895 100644
--- a/docs/reference/camel/tmpl/camel-imap-store.sgml
+++ b/docs/reference/camel/tmpl/camel-imap-store.sgml
@@ -17,6 +17,9 @@ CamelImapStore
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelImapMsg ##### -->
 <para>
 
@@ -60,8 +63,11 @@ CamelImapStore
 
 </para>
 
- receive: 
- free: 
+ CamelImapStore *store, struct _CamelImapMsg *m: 
+ CamelImapStore *store, struct _CamelImapMsg *m:
+
+ CamelImapStore *store, struct _CamelImapMsg *m: 
+ CamelImapStore *store, struct _CamelImapMsg *m: 
 @size: 
 @Returns: 
 
diff --git a/docs/reference/camel/tmpl/camel-imap-summary.sgml b/docs/reference/camel/tmpl/camel-imap-summary.sgml
index 3da4780..e4aeed0 100644
--- a/docs/reference/camel/tmpl/camel-imap-summary.sgml
+++ b/docs/reference/camel/tmpl/camel-imap-summary.sgml
@@ -17,6 +17,9 @@ CamelImapSummary
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### MACRO CAMEL_IMAP_SERVER_FLAGS ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-imap-utils.sgml b/docs/reference/camel/tmpl/camel-imap-utils.sgml
index d0d4053..2f0cb98 100644
--- a/docs/reference/camel/tmpl/camel-imap-utils.sgml
+++ b/docs/reference/camel/tmpl/camel-imap-utils.sgml
@@ -17,6 +17,9 @@ camel-imap-utils
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### FUNCTION imap_next_word ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-imap-wrapper.sgml b/docs/reference/camel/tmpl/camel-imap-wrapper.sgml
index b3cfc74..b926bac 100644
--- a/docs/reference/camel/tmpl/camel-imap-wrapper.sgml
+++ b/docs/reference/camel/tmpl/camel-imap-wrapper.sgml
@@ -17,6 +17,9 @@ CamelImapWrapper
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelImapWrapper ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-imap4-command.sgml b/docs/reference/camel/tmpl/camel-imap4-command.sgml
index 5646430..7bad830 100644
--- a/docs/reference/camel/tmpl/camel-imap4-command.sgml
+++ b/docs/reference/camel/tmpl/camel-imap4-command.sgml
@@ -17,3 +17,6 @@ camel-imap4-command
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
diff --git a/docs/reference/camel/tmpl/camel-imap4-engine.sgml b/docs/reference/camel/tmpl/camel-imap4-engine.sgml
index 5c23bd6..b7e489e 100644
--- a/docs/reference/camel/tmpl/camel-imap4-engine.sgml
+++ b/docs/reference/camel/tmpl/camel-imap4-engine.sgml
@@ -17,3 +17,6 @@ CamelIMAP4Engine
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
diff --git a/docs/reference/camel/tmpl/camel-imap4-folder.sgml b/docs/reference/camel/tmpl/camel-imap4-folder.sgml
index 719a948..2644821 100644
--- a/docs/reference/camel/tmpl/camel-imap4-folder.sgml
+++ b/docs/reference/camel/tmpl/camel-imap4-folder.sgml
@@ -17,3 +17,6 @@ CamelIMAP4Folder
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
diff --git a/docs/reference/camel/tmpl/camel-imap4-journal.sgml b/docs/reference/camel/tmpl/camel-imap4-journal.sgml
index 399bc04..32eed62 100644
--- a/docs/reference/camel/tmpl/camel-imap4-journal.sgml
+++ b/docs/reference/camel/tmpl/camel-imap4-journal.sgml
@@ -17,3 +17,6 @@ CamelIMAP4Journal
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
diff --git a/docs/reference/camel/tmpl/camel-imap4-search.sgml b/docs/reference/camel/tmpl/camel-imap4-search.sgml
index 43600f5..47b83ae 100644
--- a/docs/reference/camel/tmpl/camel-imap4-search.sgml
+++ b/docs/reference/camel/tmpl/camel-imap4-search.sgml
@@ -17,3 +17,6 @@ CamelIMAP4Search
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
diff --git a/docs/reference/camel/tmpl/camel-imap4-specials.sgml b/docs/reference/camel/tmpl/camel-imap4-specials.sgml
index 2f5837b..4b954bb 100644
--- a/docs/reference/camel/tmpl/camel-imap4-specials.sgml
+++ b/docs/reference/camel/tmpl/camel-imap4-specials.sgml
@@ -17,3 +17,6 @@ camel-imap4-specials
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
diff --git a/docs/reference/camel/tmpl/camel-imap4-store-summary.sgml b/docs/reference/camel/tmpl/camel-imap4-store-summary.sgml
index b890181..ecc59dc 100644
--- a/docs/reference/camel/tmpl/camel-imap4-store-summary.sgml
+++ b/docs/reference/camel/tmpl/camel-imap4-store-summary.sgml
@@ -17,3 +17,6 @@ CamelIMAP4StoreSummary
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
diff --git a/docs/reference/camel/tmpl/camel-imap4-store.sgml b/docs/reference/camel/tmpl/camel-imap4-store.sgml
index dc04e5e..2f8793d 100644
--- a/docs/reference/camel/tmpl/camel-imap4-store.sgml
+++ b/docs/reference/camel/tmpl/camel-imap4-store.sgml
@@ -17,3 +17,6 @@ CamelIMAP4Store
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
diff --git a/docs/reference/camel/tmpl/camel-imap4-stream.sgml b/docs/reference/camel/tmpl/camel-imap4-stream.sgml
index 0cf556b..d8268b7 100644
--- a/docs/reference/camel/tmpl/camel-imap4-stream.sgml
+++ b/docs/reference/camel/tmpl/camel-imap4-stream.sgml
@@ -17,3 +17,6 @@ CamelIMAP4Stream
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
diff --git a/docs/reference/camel/tmpl/camel-imap4-summary.sgml b/docs/reference/camel/tmpl/camel-imap4-summary.sgml
index 7141e0f..e1729ac 100644
--- a/docs/reference/camel/tmpl/camel-imap4-summary.sgml
+++ b/docs/reference/camel/tmpl/camel-imap4-summary.sgml
@@ -17,3 +17,6 @@ CamelIMAP4Summary
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
diff --git a/docs/reference/camel/tmpl/camel-imap4-utils.sgml b/docs/reference/camel/tmpl/camel-imap4-utils.sgml
index 6eb5d85..f60f34d 100644
--- a/docs/reference/camel/tmpl/camel-imap4-utils.sgml
+++ b/docs/reference/camel/tmpl/camel-imap4-utils.sgml
@@ -17,6 +17,9 @@ camel-imap4-utils
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT flags_diff_t ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-index.sgml b/docs/reference/camel/tmpl/camel-index.sgml
index c2b3646..1aa3816 100644
--- a/docs/reference/camel/tmpl/camel-index.sgml
+++ b/docs/reference/camel/tmpl/camel-index.sgml
@@ -17,6 +17,9 @@ CamelIndex
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelIndex ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-internet-address.sgml b/docs/reference/camel/tmpl/camel-internet-address.sgml
index b1d03e4..7aa023a 100644
--- a/docs/reference/camel/tmpl/camel-internet-address.sgml
+++ b/docs/reference/camel/tmpl/camel-internet-address.sgml
@@ -17,6 +17,9 @@ CamelInternetAddress
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelInternetAddress ##### -->
 <para>
 
@@ -30,6 +33,7 @@ CamelInternetAddress
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-junk-plugin.sgml b/docs/reference/camel/tmpl/camel-junk-plugin.sgml
index 31f310c..b7290c4 100644
--- a/docs/reference/camel/tmpl/camel-junk-plugin.sgml
+++ b/docs/reference/camel/tmpl/camel-junk-plugin.sgml
@@ -17,6 +17,9 @@ camel-junk-plugin
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### MACRO CAMEL_JUNK_PLUGIN ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-list-utils.sgml b/docs/reference/camel/tmpl/camel-list-utils.sgml
index 25a5ece..fd6261b 100644
--- a/docs/reference/camel/tmpl/camel-list-utils.sgml
+++ b/docs/reference/camel/tmpl/camel-list-utils.sgml
@@ -17,6 +17,9 @@ camel-list-utils
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelDList ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-local-folder.sgml b/docs/reference/camel/tmpl/camel-local-folder.sgml
index a0f2f11..4ca31f6 100644
--- a/docs/reference/camel/tmpl/camel-local-folder.sgml
+++ b/docs/reference/camel/tmpl/camel-local-folder.sgml
@@ -17,6 +17,9 @@ CamelLocalFolder
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelLocalFolder ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-local-store.sgml b/docs/reference/camel/tmpl/camel-local-store.sgml
index 0193411..2231899 100644
--- a/docs/reference/camel/tmpl/camel-local-store.sgml
+++ b/docs/reference/camel/tmpl/camel-local-store.sgml
@@ -17,6 +17,9 @@ CamelLocalStore
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelLocalStore ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-local-summary.sgml b/docs/reference/camel/tmpl/camel-local-summary.sgml
index 1e75c55..fc92bbe 100644
--- a/docs/reference/camel/tmpl/camel-local-summary.sgml
+++ b/docs/reference/camel/tmpl/camel-local-summary.sgml
@@ -17,6 +17,9 @@ CamelLocalSummary
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelLocalSummary ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-lock-client.sgml b/docs/reference/camel/tmpl/camel-lock-client.sgml
index a073844..fa7498f 100644
--- a/docs/reference/camel/tmpl/camel-lock-client.sgml
+++ b/docs/reference/camel/tmpl/camel-lock-client.sgml
@@ -17,6 +17,9 @@ camel-lock-client
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### FUNCTION camel_lock_helper_lock ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-lock-helper.sgml b/docs/reference/camel/tmpl/camel-lock-helper.sgml
index f4788d6..780cd31 100644
--- a/docs/reference/camel/tmpl/camel-lock-helper.sgml
+++ b/docs/reference/camel/tmpl/camel-lock-helper.sgml
@@ -17,6 +17,9 @@ camel-lock-helper
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelLockHelperMsg ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-lock.sgml b/docs/reference/camel/tmpl/camel-lock.sgml
index 3176915..f6b4943 100644
--- a/docs/reference/camel/tmpl/camel-lock.sgml
+++ b/docs/reference/camel/tmpl/camel-lock.sgml
@@ -17,6 +17,9 @@ camel-lock
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### MACRO CAMEL_LOCK_DOT_RETRY ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-maildir-folder.sgml b/docs/reference/camel/tmpl/camel-maildir-folder.sgml
index 95b400d..aa6634b 100644
--- a/docs/reference/camel/tmpl/camel-maildir-folder.sgml
+++ b/docs/reference/camel/tmpl/camel-maildir-folder.sgml
@@ -17,6 +17,9 @@ CamelMaildirFolder
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMaildirFolder ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-maildir-store.sgml b/docs/reference/camel/tmpl/camel-maildir-store.sgml
index d93f582..4777ed7 100644
--- a/docs/reference/camel/tmpl/camel-maildir-store.sgml
+++ b/docs/reference/camel/tmpl/camel-maildir-store.sgml
@@ -17,6 +17,9 @@ CamelMaildirStore
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMaildirStore ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-maildir-summary.sgml b/docs/reference/camel/tmpl/camel-maildir-summary.sgml
index b3ac418..2677a60 100644
--- a/docs/reference/camel/tmpl/camel-maildir-summary.sgml
+++ b/docs/reference/camel/tmpl/camel-maildir-summary.sgml
@@ -17,6 +17,9 @@ CamelMaildirSummary
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMaildirSummary ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-mbox-folder.sgml b/docs/reference/camel/tmpl/camel-mbox-folder.sgml
index 4db83e0..cc7056e 100644
--- a/docs/reference/camel/tmpl/camel-mbox-folder.sgml
+++ b/docs/reference/camel/tmpl/camel-mbox-folder.sgml
@@ -17,6 +17,9 @@ CamelMboxFolder
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMboxFolder ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-mbox-store.sgml b/docs/reference/camel/tmpl/camel-mbox-store.sgml
index 1c3ddc6..1c54c9c 100644
--- a/docs/reference/camel/tmpl/camel-mbox-store.sgml
+++ b/docs/reference/camel/tmpl/camel-mbox-store.sgml
@@ -17,6 +17,9 @@ CamelMboxStore
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMboxStore ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-mbox-summary.sgml b/docs/reference/camel/tmpl/camel-mbox-summary.sgml
index 42b2e59..0fc58d0 100644
--- a/docs/reference/camel/tmpl/camel-mbox-summary.sgml
+++ b/docs/reference/camel/tmpl/camel-mbox-summary.sgml
@@ -17,6 +17,9 @@ CamelMboxSummary
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### MACRO STATUS_PINE ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-medium.sgml b/docs/reference/camel/tmpl/camel-medium.sgml
index c6a1ad8..886e6bd 100644
--- a/docs/reference/camel/tmpl/camel-medium.sgml
+++ b/docs/reference/camel/tmpl/camel-medium.sgml
@@ -17,6 +17,9 @@ CamelMedium
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMedium ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-mempool.sgml b/docs/reference/camel/tmpl/camel-mempool.sgml
index 6855eaf..ebf71b9 100644
--- a/docs/reference/camel/tmpl/camel-mempool.sgml
+++ b/docs/reference/camel/tmpl/camel-mempool.sgml
@@ -17,6 +17,9 @@ camel-mempool
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMemPool ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-mh-folder.sgml b/docs/reference/camel/tmpl/camel-mh-folder.sgml
index 4c1daf4..1534cc0 100644
--- a/docs/reference/camel/tmpl/camel-mh-folder.sgml
+++ b/docs/reference/camel/tmpl/camel-mh-folder.sgml
@@ -17,6 +17,9 @@ CamelMhFolder
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMhFolder ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-mh-store.sgml b/docs/reference/camel/tmpl/camel-mh-store.sgml
index a32b257..6fb2e14 100644
--- a/docs/reference/camel/tmpl/camel-mh-store.sgml
+++ b/docs/reference/camel/tmpl/camel-mh-store.sgml
@@ -17,6 +17,9 @@ CamelMhStore
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMhStore ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-mh-summary.sgml b/docs/reference/camel/tmpl/camel-mh-summary.sgml
index 78be726..e5e8b2a 100644
--- a/docs/reference/camel/tmpl/camel-mh-summary.sgml
+++ b/docs/reference/camel/tmpl/camel-mh-summary.sgml
@@ -17,6 +17,9 @@ CamelMhSummary
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMhSummary ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-mime-filter-basic.sgml b/docs/reference/camel/tmpl/camel-mime-filter-basic.sgml
index 617d77f..8e82673 100644
--- a/docs/reference/camel/tmpl/camel-mime-filter-basic.sgml
+++ b/docs/reference/camel/tmpl/camel-mime-filter-basic.sgml
@@ -17,6 +17,9 @@ CamelMimeFilterBasic
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMimeFilterBasic ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-mime-filter-bestenc.sgml b/docs/reference/camel/tmpl/camel-mime-filter-bestenc.sgml
index a3a4974..9d122d7 100644
--- a/docs/reference/camel/tmpl/camel-mime-filter-bestenc.sgml
+++ b/docs/reference/camel/tmpl/camel-mime-filter-bestenc.sgml
@@ -17,6 +17,9 @@ CamelMimeFilterBestenc
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### ENUM CamelBestencRequired ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-mime-filter-canon.sgml b/docs/reference/camel/tmpl/camel-mime-filter-canon.sgml
index 23dff68..6ab3f99 100644
--- a/docs/reference/camel/tmpl/camel-mime-filter-canon.sgml
+++ b/docs/reference/camel/tmpl/camel-mime-filter-canon.sgml
@@ -17,6 +17,9 @@ CamelMimeFilterCanon
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMimeFilterCanon ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-mime-filter-charset.sgml b/docs/reference/camel/tmpl/camel-mime-filter-charset.sgml
index b7dd16e..c6b8395 100644
--- a/docs/reference/camel/tmpl/camel-mime-filter-charset.sgml
+++ b/docs/reference/camel/tmpl/camel-mime-filter-charset.sgml
@@ -17,6 +17,9 @@ CamelMimeFilterCharset
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMimeFilterCharset ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-mime-filter-crlf.sgml b/docs/reference/camel/tmpl/camel-mime-filter-crlf.sgml
index d946a00..eb5a3bb 100644
--- a/docs/reference/camel/tmpl/camel-mime-filter-crlf.sgml
+++ b/docs/reference/camel/tmpl/camel-mime-filter-crlf.sgml
@@ -17,6 +17,9 @@ CamelMimeFilterCRLF
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMimeFilterCRLF ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-mime-filter-enriched.sgml b/docs/reference/camel/tmpl/camel-mime-filter-enriched.sgml
index d26326b..e901f8c 100644
--- a/docs/reference/camel/tmpl/camel-mime-filter-enriched.sgml
+++ b/docs/reference/camel/tmpl/camel-mime-filter-enriched.sgml
@@ -17,6 +17,9 @@ CamelMimeFilterEnriched
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMimeFilterEnriched ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-mime-filter-from.sgml b/docs/reference/camel/tmpl/camel-mime-filter-from.sgml
index 8502442..a14ef6c 100644
--- a/docs/reference/camel/tmpl/camel-mime-filter-from.sgml
+++ b/docs/reference/camel/tmpl/camel-mime-filter-from.sgml
@@ -17,6 +17,9 @@ CamelMimeFilterFrom
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMimeFilterFrom ##### -->
 <para>
 
@@ -30,6 +33,7 @@ CamelMimeFilterFrom
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-mime-filter-gzip.sgml b/docs/reference/camel/tmpl/camel-mime-filter-gzip.sgml
index 98f6aac..7b47b86 100644
--- a/docs/reference/camel/tmpl/camel-mime-filter-gzip.sgml
+++ b/docs/reference/camel/tmpl/camel-mime-filter-gzip.sgml
@@ -17,6 +17,9 @@ CamelMimeFilterGZip
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMimeFilterGZip ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-mime-filter-html.sgml b/docs/reference/camel/tmpl/camel-mime-filter-html.sgml
index f4ce6d9..0ebb339 100644
--- a/docs/reference/camel/tmpl/camel-mime-filter-html.sgml
+++ b/docs/reference/camel/tmpl/camel-mime-filter-html.sgml
@@ -17,6 +17,9 @@ CamelMimeFilterHTML
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMimeFilterHTML ##### -->
 <para>
 
@@ -30,6 +33,7 @@ CamelMimeFilterHTML
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-mime-filter-index.sgml b/docs/reference/camel/tmpl/camel-mime-filter-index.sgml
index 85aa557..5a2564f 100644
--- a/docs/reference/camel/tmpl/camel-mime-filter-index.sgml
+++ b/docs/reference/camel/tmpl/camel-mime-filter-index.sgml
@@ -17,6 +17,9 @@ CamelMimeFilterIndex
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMimeFilterIndex ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-mime-filter-linewrap.sgml b/docs/reference/camel/tmpl/camel-mime-filter-linewrap.sgml
index d38d24d..9511be0 100644
--- a/docs/reference/camel/tmpl/camel-mime-filter-linewrap.sgml
+++ b/docs/reference/camel/tmpl/camel-mime-filter-linewrap.sgml
@@ -17,6 +17,9 @@ CamelMimeFilterLinewrap
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMimeFilterLinewrap ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-mime-filter-pgp.sgml b/docs/reference/camel/tmpl/camel-mime-filter-pgp.sgml
index 32fa671..71c722e 100644
--- a/docs/reference/camel/tmpl/camel-mime-filter-pgp.sgml
+++ b/docs/reference/camel/tmpl/camel-mime-filter-pgp.sgml
@@ -17,6 +17,9 @@ CamelMimeFilterPgp
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMimeFilterPgp ##### -->
 <para>
 
@@ -30,6 +33,7 @@ CamelMimeFilterPgp
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-mime-filter-progress.sgml b/docs/reference/camel/tmpl/camel-mime-filter-progress.sgml
index 4fd0fc7..45b18b3 100644
--- a/docs/reference/camel/tmpl/camel-mime-filter-progress.sgml
+++ b/docs/reference/camel/tmpl/camel-mime-filter-progress.sgml
@@ -17,6 +17,9 @@ CamelMimeFilterProgress
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMimeFilterProgress ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-mime-filter-save.sgml b/docs/reference/camel/tmpl/camel-mime-filter-save.sgml
index bd8e171..40812dd 100644
--- a/docs/reference/camel/tmpl/camel-mime-filter-save.sgml
+++ b/docs/reference/camel/tmpl/camel-mime-filter-save.sgml
@@ -17,6 +17,9 @@ CamelMimeFilterSave
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMimeFilterSave ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-mime-filter-tohtml.sgml b/docs/reference/camel/tmpl/camel-mime-filter-tohtml.sgml
index 7e34b92..c5a1253 100644
--- a/docs/reference/camel/tmpl/camel-mime-filter-tohtml.sgml
+++ b/docs/reference/camel/tmpl/camel-mime-filter-tohtml.sgml
@@ -17,6 +17,9 @@ CamelMimeFilterToHTML
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMimeFilterToHTML ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-mime-filter-windows.sgml b/docs/reference/camel/tmpl/camel-mime-filter-windows.sgml
index 273381e..6e95293 100644
--- a/docs/reference/camel/tmpl/camel-mime-filter-windows.sgml
+++ b/docs/reference/camel/tmpl/camel-mime-filter-windows.sgml
@@ -17,6 +17,9 @@ CamelMimeFilterWindows
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMimeFilterWindows ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-mime-filter-yenc.sgml b/docs/reference/camel/tmpl/camel-mime-filter-yenc.sgml
index 0b4590f..8ff9221 100644
--- a/docs/reference/camel/tmpl/camel-mime-filter-yenc.sgml
+++ b/docs/reference/camel/tmpl/camel-mime-filter-yenc.sgml
@@ -17,6 +17,9 @@ CamelMimeFilterYenc
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMimeFilterYenc ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-mime-filter.sgml b/docs/reference/camel/tmpl/camel-mime-filter.sgml
index 13572c9..a421599 100644
--- a/docs/reference/camel/tmpl/camel-mime-filter.sgml
+++ b/docs/reference/camel/tmpl/camel-mime-filter.sgml
@@ -17,6 +17,9 @@ CamelMimeFilter
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMimeFilter ##### -->
 <para>
 
@@ -38,6 +41,7 @@ CamelMimeFilter
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-mime-message.sgml b/docs/reference/camel/tmpl/camel-mime-message.sgml
index c8ed194..787d1b7 100644
--- a/docs/reference/camel/tmpl/camel-mime-message.sgml
+++ b/docs/reference/camel/tmpl/camel-mime-message.sgml
@@ -17,6 +17,9 @@ CamelMimeMessage
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMimeMessage ##### -->
 <para>
 
@@ -87,6 +90,7 @@ CamelMimeMessage
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-mime-parser.sgml b/docs/reference/camel/tmpl/camel-mime-parser.sgml
index 18a207c..00a95ec 100644
--- a/docs/reference/camel/tmpl/camel-mime-parser.sgml
+++ b/docs/reference/camel/tmpl/camel-mime-parser.sgml
@@ -17,6 +17,9 @@ CamelMimeParser
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMimeParser ##### -->
 <para>
 
@@ -52,6 +55,7 @@ CamelMimeParser
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-mime-part.sgml b/docs/reference/camel/tmpl/camel-mime-part.sgml
index e4992a9..9a88fd1 100644
--- a/docs/reference/camel/tmpl/camel-mime-part.sgml
+++ b/docs/reference/camel/tmpl/camel-mime-part.sgml
@@ -17,6 +17,9 @@ CamelMimePart
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMimePart ##### -->
 <para>
 
@@ -31,6 +34,7 @@ CamelMimePart
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-mime-utils.sgml b/docs/reference/camel/tmpl/camel-mime-utils.sgml
index d35e81a..288f9a3 100644
--- a/docs/reference/camel/tmpl/camel-mime-utils.sgml
+++ b/docs/reference/camel/tmpl/camel-mime-utils.sgml
@@ -17,6 +17,9 @@ camel-mime-utils
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### MACRO CAMEL_FOLD_SIZE ##### -->
 <para>
 
@@ -152,6 +155,7 @@ camel-mime-utils
 
 </para>
 
+ void: 
 @Returns: 
 
 
@@ -698,6 +702,7 @@ camel-mime-utils
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-movemail.sgml b/docs/reference/camel/tmpl/camel-movemail.sgml
index f47ffc0..0860f98 100644
--- a/docs/reference/camel/tmpl/camel-movemail.sgml
+++ b/docs/reference/camel/tmpl/camel-movemail.sgml
@@ -17,6 +17,9 @@ camel-movemail
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### FUNCTION camel_movemail ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-msgport.sgml b/docs/reference/camel/tmpl/camel-msgport.sgml
index 4ecb14c..96f0c56 100644
--- a/docs/reference/camel/tmpl/camel-msgport.sgml
+++ b/docs/reference/camel/tmpl/camel-msgport.sgml
@@ -17,6 +17,9 @@ CamelMsgPort
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMsg ##### -->
 <para>
 
@@ -37,6 +40,7 @@ CamelMsgPort
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-multipart-encrypted.sgml b/docs/reference/camel/tmpl/camel-multipart-encrypted.sgml
index edf031b..2c5674b 100644
--- a/docs/reference/camel/tmpl/camel-multipart-encrypted.sgml
+++ b/docs/reference/camel/tmpl/camel-multipart-encrypted.sgml
@@ -17,6 +17,9 @@ CamelMultipartEncrypted
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMultipartEncrypted ##### -->
 <para>
 
@@ -33,6 +36,7 @@ CamelMultipartEncrypted
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-multipart-signed.sgml b/docs/reference/camel/tmpl/camel-multipart-signed.sgml
index 0c90906..83596da 100644
--- a/docs/reference/camel/tmpl/camel-multipart-signed.sgml
+++ b/docs/reference/camel/tmpl/camel-multipart-signed.sgml
@@ -17,6 +17,9 @@ CamelMultipartSigned
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMultipartSigned ##### -->
 <para>
 
@@ -38,6 +41,7 @@ CamelMultipartSigned
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-multipart.sgml b/docs/reference/camel/tmpl/camel-multipart.sgml
index 19994a4..07ffc8a 100644
--- a/docs/reference/camel/tmpl/camel-multipart.sgml
+++ b/docs/reference/camel/tmpl/camel-multipart.sgml
@@ -17,6 +17,9 @@ CamelMultipart
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelMultipart ##### -->
 <para>
 
@@ -32,6 +35,7 @@ CamelMultipart
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-net-utils.sgml b/docs/reference/camel/tmpl/camel-net-utils.sgml
index 3f3da61..dd30648 100644
--- a/docs/reference/camel/tmpl/camel-net-utils.sgml
+++ b/docs/reference/camel/tmpl/camel-net-utils.sgml
@@ -17,6 +17,9 @@ camel-net-utils
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### MACRO AI_CANONNAME ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-nntp-address.sgml b/docs/reference/camel/tmpl/camel-nntp-address.sgml
index 7d49d8a..0f16870 100644
--- a/docs/reference/camel/tmpl/camel-nntp-address.sgml
+++ b/docs/reference/camel/tmpl/camel-nntp-address.sgml
@@ -17,6 +17,9 @@ CamelNNTPAddress
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelNNTPAddress ##### -->
 <para>
 
@@ -30,6 +33,7 @@ CamelNNTPAddress
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-nntp-auth.sgml b/docs/reference/camel/tmpl/camel-nntp-auth.sgml
index b18d7b0..66704de 100644
--- a/docs/reference/camel/tmpl/camel-nntp-auth.sgml
+++ b/docs/reference/camel/tmpl/camel-nntp-auth.sgml
@@ -17,6 +17,9 @@ camel-nntp-auth
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### FUNCTION camel_nntp_auth_authenticate ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-nntp-folder.sgml b/docs/reference/camel/tmpl/camel-nntp-folder.sgml
index 61fb2ed..1a606e0 100644
--- a/docs/reference/camel/tmpl/camel-nntp-folder.sgml
+++ b/docs/reference/camel/tmpl/camel-nntp-folder.sgml
@@ -17,6 +17,9 @@ CamelNNTPFolder
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelNNTPFolder ##### -->
 <para>
 
@@ -47,5 +50,6 @@ CamelNNTPFolder
 @folder: 
 @line: 
 @ex: 
+ Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-nntp-grouplist.sgml b/docs/reference/camel/tmpl/camel-nntp-grouplist.sgml
index cd46a81..66735a2 100644
--- a/docs/reference/camel/tmpl/camel-nntp-grouplist.sgml
+++ b/docs/reference/camel/tmpl/camel-nntp-grouplist.sgml
@@ -17,6 +17,9 @@ camel-nntp-grouplist
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### TYPEDEF _CamelNNTPGroupList ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-nntp-newsrc.sgml b/docs/reference/camel/tmpl/camel-nntp-newsrc.sgml
index 8cb14b2..e7fe4a0 100644
--- a/docs/reference/camel/tmpl/camel-nntp-newsrc.sgml
+++ b/docs/reference/camel/tmpl/camel-nntp-newsrc.sgml
@@ -17,6 +17,9 @@ camel-nntp-newsrc
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### TYPEDEF CamelNNTPNewsrc ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-nntp-resp-codes.sgml b/docs/reference/camel/tmpl/camel-nntp-resp-codes.sgml
index 9b6b71f..aa1a8b5 100644
--- a/docs/reference/camel/tmpl/camel-nntp-resp-codes.sgml
+++ b/docs/reference/camel/tmpl/camel-nntp-resp-codes.sgml
@@ -17,6 +17,9 @@ camel-nntp-resp-codes
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### MACRO CAMEL_NNTP_OK ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-nntp-store-summary.sgml b/docs/reference/camel/tmpl/camel-nntp-store-summary.sgml
index e16866a..919e953 100644
--- a/docs/reference/camel/tmpl/camel-nntp-store-summary.sgml
+++ b/docs/reference/camel/tmpl/camel-nntp-store-summary.sgml
@@ -17,6 +17,9 @@ CamelNNTPStoreSummary
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelNNTPStoreInfo ##### -->
 <para>
 
@@ -49,6 +52,7 @@ CamelNNTPStoreSummary
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-nntp-store.sgml b/docs/reference/camel/tmpl/camel-nntp-store.sgml
index 4eb41de..b7d51c5 100644
--- a/docs/reference/camel/tmpl/camel-nntp-store.sgml
+++ b/docs/reference/camel/tmpl/camel-nntp-store.sgml
@@ -17,6 +17,9 @@ CamelNNTPStore
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelNNTPStore ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-nntp-stream.sgml b/docs/reference/camel/tmpl/camel-nntp-stream.sgml
index 840db5b..9f98e9c 100644
--- a/docs/reference/camel/tmpl/camel-nntp-stream.sgml
+++ b/docs/reference/camel/tmpl/camel-nntp-stream.sgml
@@ -17,6 +17,9 @@ CamelNNTPStream
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelNNTPStream ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-nntp-summary.sgml b/docs/reference/camel/tmpl/camel-nntp-summary.sgml
index 53e1332..ed37bb3 100644
--- a/docs/reference/camel/tmpl/camel-nntp-summary.sgml
+++ b/docs/reference/camel/tmpl/camel-nntp-summary.sgml
@@ -17,6 +17,9 @@ CamelNNTPSummary
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelNNTPSummary ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-nntp-utils.sgml b/docs/reference/camel/tmpl/camel-nntp-utils.sgml
index dbac1c0..93a245a 100644
--- a/docs/reference/camel/tmpl/camel-nntp-utils.sgml
+++ b/docs/reference/camel/tmpl/camel-nntp-utils.sgml
@@ -17,6 +17,9 @@ camel-nntp-utils
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### FUNCTION camel_nntp_get_headers ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-object.sgml b/docs/reference/camel/tmpl/camel-object.sgml
index 8fa5e01..6e0ca83 100644
--- a/docs/reference/camel/tmpl/camel-object.sgml
+++ b/docs/reference/camel/tmpl/camel-object.sgml
@@ -17,6 +17,9 @@ CamelObject
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### MACRO CAMEL_OBJECT_TRACK_INSTANCES ##### -->
 <para>
 
@@ -173,6 +176,7 @@ CamelObject
 
 </para>
 
+ void: 
 
 
 <!-- ##### FUNCTION camel_type_register ##### -->
diff --git a/docs/reference/camel/tmpl/camel-offline-folder.sgml b/docs/reference/camel/tmpl/camel-offline-folder.sgml
index 25c604a..2847051 100644
--- a/docs/reference/camel/tmpl/camel-offline-folder.sgml
+++ b/docs/reference/camel/tmpl/camel-offline-folder.sgml
@@ -17,6 +17,9 @@ CamelOfflineFolder
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelOfflineFolder ##### -->
 <para>
 
@@ -33,5 +36,6 @@ CamelOfflineFolder
 @offline: 
 @expression: 
 @ex: 
+ Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-offline-journal.sgml b/docs/reference/camel/tmpl/camel-offline-journal.sgml
index 6ab8510..73fa6b4 100644
--- a/docs/reference/camel/tmpl/camel-offline-journal.sgml
+++ b/docs/reference/camel/tmpl/camel-offline-journal.sgml
@@ -17,6 +17,9 @@ CamelOfflineJournal
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelOfflineJournal ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-offline-store.sgml b/docs/reference/camel/tmpl/camel-offline-store.sgml
index 9e2c453..ab5ae7d 100644
--- a/docs/reference/camel/tmpl/camel-offline-store.sgml
+++ b/docs/reference/camel/tmpl/camel-offline-store.sgml
@@ -17,6 +17,9 @@ CamelOfflineStore
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelOfflineStore ##### -->
 <para>
 
@@ -33,6 +36,7 @@ CamelOfflineStore
 @store: 
 @state: 
 @ex: 
+ Returns: 
 
 
 <!-- ##### FUNCTION camel_offline_store_get_network_state ##### -->
@@ -52,5 +56,6 @@ CamelOfflineStore
 
 @store: 
 @ex: 
+ Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-operation.sgml b/docs/reference/camel/tmpl/camel-operation.sgml
index 748243c..642452b 100644
--- a/docs/reference/camel/tmpl/camel-operation.sgml
+++ b/docs/reference/camel/tmpl/camel-operation.sgml
@@ -17,6 +17,9 @@ camel-operation
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelOperation ##### -->
 <para>
 
@@ -141,6 +144,7 @@ camel-operation
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-partition-table.sgml b/docs/reference/camel/tmpl/camel-partition-table.sgml
index b9eaafc..8bcb7c4 100644
--- a/docs/reference/camel/tmpl/camel-partition-table.sgml
+++ b/docs/reference/camel/tmpl/camel-partition-table.sgml
@@ -17,6 +17,9 @@ CamelKeyTable
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### TYPEDEF camel_hash_t ##### -->
 <para>
 
@@ -111,6 +114,7 @@ CamelKeyTable
 
 @cpi: 
 @key: 
+ Returns: 
 
 
 <!-- ##### STRUCT CamelKeyBlock ##### -->
@@ -195,6 +199,7 @@ CamelKeyTable
 @ki: 
 @keyid: 
 @data: 
+ Returns: 
 
 
 <!-- ##### FUNCTION camel_key_table_set_flags ##### -->
@@ -206,6 +211,7 @@ CamelKeyTable
 @keyid: 
 @flags: 
 @set: 
+ Returns: 
 
 
 <!-- ##### FUNCTION camel_key_table_lookup ##### -->
diff --git a/docs/reference/camel/tmpl/camel-pop3-engine.sgml b/docs/reference/camel/tmpl/camel-pop3-engine.sgml
index f6e8a00..bd61902 100644
--- a/docs/reference/camel/tmpl/camel-pop3-engine.sgml
+++ b/docs/reference/camel/tmpl/camel-pop3-engine.sgml
@@ -17,6 +17,9 @@ CamelPOP3Engine
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelPOP3Engine ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-pop3-folder.sgml b/docs/reference/camel/tmpl/camel-pop3-folder.sgml
index 2ceb77d..cde1984 100644
--- a/docs/reference/camel/tmpl/camel-pop3-folder.sgml
+++ b/docs/reference/camel/tmpl/camel-pop3-folder.sgml
@@ -17,6 +17,9 @@ CamelPOP3Folder
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelPOP3Folder ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-pop3-store.sgml b/docs/reference/camel/tmpl/camel-pop3-store.sgml
index 89cf08b..8f133e5 100644
--- a/docs/reference/camel/tmpl/camel-pop3-store.sgml
+++ b/docs/reference/camel/tmpl/camel-pop3-store.sgml
@@ -17,6 +17,9 @@ CamelPOP3Store
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelPOP3Store ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-pop3-stream.sgml b/docs/reference/camel/tmpl/camel-pop3-stream.sgml
index 538caa4..783b765 100644
--- a/docs/reference/camel/tmpl/camel-pop3-stream.sgml
+++ b/docs/reference/camel/tmpl/camel-pop3-stream.sgml
@@ -17,6 +17,9 @@ CamelPOP3Stream
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelPOP3Stream ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-provider.sgml b/docs/reference/camel/tmpl/camel-provider.sgml
index 13d3cde..7cda506 100644
--- a/docs/reference/camel/tmpl/camel-provider.sgml
+++ b/docs/reference/camel/tmpl/camel-provider.sgml
@@ -17,6 +17,9 @@ camel-provider
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelProvider ##### -->
 <para>
 
@@ -438,6 +441,7 @@ camel-provider
 
 </para>
 
+ void: 
 
 
 <!-- ##### FUNCTION camel_provider_load ##### -->
@@ -447,6 +451,7 @@ camel-provider
 
 @path: 
 @ex: 
+ Returns: 
 
 
 <!-- ##### FUNCTION camel_provider_register ##### -->
@@ -481,6 +486,7 @@ camel-provider
 
 </para>
 
+ void: 
 
 
 <!-- ##### FUNCTION camel_provider_auto_detect ##### -->
diff --git a/docs/reference/camel/tmpl/camel-sasl-anonymous.sgml b/docs/reference/camel/tmpl/camel-sasl-anonymous.sgml
index 6b4afb8..859101f 100644
--- a/docs/reference/camel/tmpl/camel-sasl-anonymous.sgml
+++ b/docs/reference/camel/tmpl/camel-sasl-anonymous.sgml
@@ -17,6 +17,9 @@ CamelSaslAnonymous
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelSaslAnonymous ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-sasl-cram-md5.sgml b/docs/reference/camel/tmpl/camel-sasl-cram-md5.sgml
index cf30711..42d0108 100644
--- a/docs/reference/camel/tmpl/camel-sasl-cram-md5.sgml
+++ b/docs/reference/camel/tmpl/camel-sasl-cram-md5.sgml
@@ -17,6 +17,9 @@ CamelSaslCramMd5
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelSaslCramMd5 ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-sasl-digest-md5.sgml b/docs/reference/camel/tmpl/camel-sasl-digest-md5.sgml
index d50d8e8..fbd3e10 100644
--- a/docs/reference/camel/tmpl/camel-sasl-digest-md5.sgml
+++ b/docs/reference/camel/tmpl/camel-sasl-digest-md5.sgml
@@ -17,6 +17,9 @@ CamelSaslDigestMd5
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelSaslDigestMd5 ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-sasl-gssapi.sgml b/docs/reference/camel/tmpl/camel-sasl-gssapi.sgml
index a8cf46f..5463495 100644
--- a/docs/reference/camel/tmpl/camel-sasl-gssapi.sgml
+++ b/docs/reference/camel/tmpl/camel-sasl-gssapi.sgml
@@ -17,6 +17,9 @@ CamelSaslGssapi
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelSaslGssapi ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-sasl-login.sgml b/docs/reference/camel/tmpl/camel-sasl-login.sgml
index d6cf93f..bf282e4 100644
--- a/docs/reference/camel/tmpl/camel-sasl-login.sgml
+++ b/docs/reference/camel/tmpl/camel-sasl-login.sgml
@@ -17,6 +17,9 @@ CamelSaslLogin
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelSaslLogin ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-sasl-ntlm.sgml b/docs/reference/camel/tmpl/camel-sasl-ntlm.sgml
index 7077ad5..745cff0 100644
--- a/docs/reference/camel/tmpl/camel-sasl-ntlm.sgml
+++ b/docs/reference/camel/tmpl/camel-sasl-ntlm.sgml
@@ -17,6 +17,9 @@ CamelSaslNTLM
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelSaslNTLM ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-sasl-plain.sgml b/docs/reference/camel/tmpl/camel-sasl-plain.sgml
index 60a5422..f63a8e0 100644
--- a/docs/reference/camel/tmpl/camel-sasl-plain.sgml
+++ b/docs/reference/camel/tmpl/camel-sasl-plain.sgml
@@ -17,6 +17,9 @@ CamelSaslPlain
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelSaslPlain ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-sasl-popb4smtp.sgml b/docs/reference/camel/tmpl/camel-sasl-popb4smtp.sgml
index 50ccd14..393290a 100644
--- a/docs/reference/camel/tmpl/camel-sasl-popb4smtp.sgml
+++ b/docs/reference/camel/tmpl/camel-sasl-popb4smtp.sgml
@@ -17,6 +17,9 @@ CamelSaslPOPB4SMTP
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelSaslPOPB4SMTP ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-sasl.sgml b/docs/reference/camel/tmpl/camel-sasl.sgml
index 4a3dea4..1e260d2 100644
--- a/docs/reference/camel/tmpl/camel-sasl.sgml
+++ b/docs/reference/camel/tmpl/camel-sasl.sgml
@@ -17,6 +17,9 @@ CamelSasl
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelSasl ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-search-sql-sexp.sgml b/docs/reference/camel/tmpl/camel-search-sql-sexp.sgml
index 44022ad..1bd262d 100644
--- a/docs/reference/camel/tmpl/camel-search-sql-sexp.sgml
+++ b/docs/reference/camel/tmpl/camel-search-sql-sexp.sgml
@@ -17,6 +17,9 @@ camel-search-sql-sexp
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### FUNCTION camel_sexp_to_sql_sexp ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-search-sql.sgml b/docs/reference/camel/tmpl/camel-search-sql.sgml
index 24f8b63..5934381 100644
--- a/docs/reference/camel/tmpl/camel-search-sql.sgml
+++ b/docs/reference/camel/tmpl/camel-search-sql.sgml
@@ -17,6 +17,9 @@ camel-search-sql
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### FUNCTION camel_sexp_to_sql ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-seekable-stream.sgml b/docs/reference/camel/tmpl/camel-seekable-stream.sgml
index cc28a54..4bb13db 100644
--- a/docs/reference/camel/tmpl/camel-seekable-stream.sgml
+++ b/docs/reference/camel/tmpl/camel-seekable-stream.sgml
@@ -17,6 +17,9 @@ CamelSeekableStream
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelSeekableStream ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-seekable-substream.sgml b/docs/reference/camel/tmpl/camel-seekable-substream.sgml
index 0609561..026babd 100644
--- a/docs/reference/camel/tmpl/camel-seekable-substream.sgml
+++ b/docs/reference/camel/tmpl/camel-seekable-substream.sgml
@@ -17,6 +17,9 @@ CamelSeekableSubstream
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelSeekableSubstream ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-sendmail-transport.sgml b/docs/reference/camel/tmpl/camel-sendmail-transport.sgml
index 1fefb78..c8de9df 100644
--- a/docs/reference/camel/tmpl/camel-sendmail-transport.sgml
+++ b/docs/reference/camel/tmpl/camel-sendmail-transport.sgml
@@ -17,6 +17,9 @@ CamelSendmailTransport
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelSendmailTransport ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-service.sgml b/docs/reference/camel/tmpl/camel-service.sgml
index 0474be8..7deed24 100644
--- a/docs/reference/camel/tmpl/camel-service.sgml
+++ b/docs/reference/camel/tmpl/camel-service.sgml
@@ -17,6 +17,9 @@ CamelService
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelService ##### -->
 <para>
 
@@ -95,6 +98,7 @@ CamelService
 @provider: 
 @url: 
 @ex: 
+ Returns: 
 
 
 <!-- ##### FUNCTION camel_service_connect ##### -->
diff --git a/docs/reference/camel/tmpl/camel-session.sgml b/docs/reference/camel/tmpl/camel-session.sgml
index 1c3b7f6..398a968 100644
--- a/docs/reference/camel/tmpl/camel-session.sgml
+++ b/docs/reference/camel/tmpl/camel-session.sgml
@@ -17,6 +17,9 @@ CamelSession
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelSession ##### -->
 <para>
 
@@ -158,6 +161,7 @@ CamelSession
 @domain: 
 @item: 
 @ex: 
+ Returns: 
 
 
 <!-- ##### FUNCTION camel_session_alert_user ##### -->
diff --git a/docs/reference/camel/tmpl/camel-smime-context.sgml b/docs/reference/camel/tmpl/camel-smime-context.sgml
index 1a12ad3..62819a4 100644
--- a/docs/reference/camel/tmpl/camel-smime-context.sgml
+++ b/docs/reference/camel/tmpl/camel-smime-context.sgml
@@ -17,6 +17,9 @@ CamelSMIMEContext
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelSMIMEContext ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-smtp-transport.sgml b/docs/reference/camel/tmpl/camel-smtp-transport.sgml
index 925b323..907d079 100644
--- a/docs/reference/camel/tmpl/camel-smtp-transport.sgml
+++ b/docs/reference/camel/tmpl/camel-smtp-transport.sgml
@@ -17,6 +17,9 @@ CamelSmtpTransport
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelSmtpTransport ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-spool-folder.sgml b/docs/reference/camel/tmpl/camel-spool-folder.sgml
index 06fef6b..30d63d1 100644
--- a/docs/reference/camel/tmpl/camel-spool-folder.sgml
+++ b/docs/reference/camel/tmpl/camel-spool-folder.sgml
@@ -17,6 +17,9 @@ CamelSpoolFolder
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelSpoolFolder ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-spool-store.sgml b/docs/reference/camel/tmpl/camel-spool-store.sgml
index 34183a7..82b9f42 100644
--- a/docs/reference/camel/tmpl/camel-spool-store.sgml
+++ b/docs/reference/camel/tmpl/camel-spool-store.sgml
@@ -17,6 +17,9 @@ CamelSpoolStore
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelSpoolStore ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-spool-summary.sgml b/docs/reference/camel/tmpl/camel-spool-summary.sgml
index 013566d..b4c6b00 100644
--- a/docs/reference/camel/tmpl/camel-spool-summary.sgml
+++ b/docs/reference/camel/tmpl/camel-spool-summary.sgml
@@ -17,6 +17,9 @@ CamelSpoolSummary
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelSpoolSummary ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-store-summary.sgml b/docs/reference/camel/tmpl/camel-store-summary.sgml
index e98a3d2..88a67ed 100644
--- a/docs/reference/camel/tmpl/camel-store-summary.sgml
+++ b/docs/reference/camel/tmpl/camel-store-summary.sgml
@@ -17,6 +17,9 @@ CamelStoreSummary
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelStoreInfo ##### -->
 <para>
 
@@ -86,6 +89,7 @@ CamelStoreSummary
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-store.sgml b/docs/reference/camel/tmpl/camel-store.sgml
index 83c99a3..fd8e6d9 100644
--- a/docs/reference/camel/tmpl/camel-store.sgml
+++ b/docs/reference/camel/tmpl/camel-store.sgml
@@ -17,6 +17,9 @@ CamelStore
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelStore ##### -->
 <para>
 
@@ -375,6 +378,7 @@ CamelStore
 @store: 
 @folder_name: 
 @ex: 
+ Returns: 
 
 
 <!-- ##### FUNCTION camel_store_rename_folder ##### -->
@@ -386,6 +390,7 @@ CamelStore
 @old_namein: 
 @new_name: 
 @ex: 
+ Returns: 
 
 
 <!-- ##### FUNCTION camel_store_sync ##### -->
@@ -396,6 +401,7 @@ CamelStore
 @store: 
 @expunge: 
 @ex: 
+ Returns: 
 
 
 <!-- ##### FUNCTION camel_store_get_folder_info ##### -->
@@ -442,6 +448,7 @@ CamelStore
 
 </para>
 
+ void: 
 @Returns: 
 
 
@@ -501,6 +508,7 @@ CamelStore
 @store: 
 @folder_name: 
 @ex: 
+ Returns: 
 
 
 <!-- ##### FUNCTION camel_store_unsubscribe_folder ##### -->
@@ -511,6 +519,7 @@ CamelStore
 @store: 
 @folder_name: 
 @ex: 
+ Returns: 
 
 
 <!-- ##### FUNCTION camel_store_noop ##### -->
@@ -520,6 +529,7 @@ CamelStore
 
 @store: 
 @ex: 
+ Returns: 
 
 
 <!-- ##### FUNCTION camel_store_folder_uri_equal ##### -->
diff --git a/docs/reference/camel/tmpl/camel-stream-buffer.sgml b/docs/reference/camel/tmpl/camel-stream-buffer.sgml
index 9d4395c..eeb1159 100644
--- a/docs/reference/camel/tmpl/camel-stream-buffer.sgml
+++ b/docs/reference/camel/tmpl/camel-stream-buffer.sgml
@@ -17,6 +17,9 @@ CamelStreamBuffer
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelStreamBuffer ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-stream-filter.sgml b/docs/reference/camel/tmpl/camel-stream-filter.sgml
index c2ef473..0411de8 100644
--- a/docs/reference/camel/tmpl/camel-stream-filter.sgml
+++ b/docs/reference/camel/tmpl/camel-stream-filter.sgml
@@ -17,6 +17,9 @@ CamelStreamFilter
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelStreamFilter ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-stream-fs.sgml b/docs/reference/camel/tmpl/camel-stream-fs.sgml
index 9d1ac55..a699445 100644
--- a/docs/reference/camel/tmpl/camel-stream-fs.sgml
+++ b/docs/reference/camel/tmpl/camel-stream-fs.sgml
@@ -17,6 +17,9 @@ CamelStreamFs
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelStreamFs ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-stream-mem.sgml b/docs/reference/camel/tmpl/camel-stream-mem.sgml
index 2255f8f..951b0f9 100644
--- a/docs/reference/camel/tmpl/camel-stream-mem.sgml
+++ b/docs/reference/camel/tmpl/camel-stream-mem.sgml
@@ -17,6 +17,9 @@ CamelStreamMem
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelStreamMem ##### -->
 <para>
 
@@ -30,6 +33,7 @@ CamelStreamMem
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-stream-null.sgml b/docs/reference/camel/tmpl/camel-stream-null.sgml
index 2c5a847..57db726 100644
--- a/docs/reference/camel/tmpl/camel-stream-null.sgml
+++ b/docs/reference/camel/tmpl/camel-stream-null.sgml
@@ -17,6 +17,9 @@ CamelStreamNull
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelStreamNull ##### -->
 <para>
 
@@ -30,6 +33,7 @@ CamelStreamNull
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-stream-process.sgml b/docs/reference/camel/tmpl/camel-stream-process.sgml
index 351c1d2..66ac3ad 100644
--- a/docs/reference/camel/tmpl/camel-stream-process.sgml
+++ b/docs/reference/camel/tmpl/camel-stream-process.sgml
@@ -17,6 +17,9 @@ CamelStreamProcess
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelStreamProcess ##### -->
 <para>
 
@@ -31,6 +34,7 @@ CamelStreamProcess
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-stream-vfs.sgml b/docs/reference/camel/tmpl/camel-stream-vfs.sgml
index 2af3894..300c52a 100644
--- a/docs/reference/camel/tmpl/camel-stream-vfs.sgml
+++ b/docs/reference/camel/tmpl/camel-stream-vfs.sgml
@@ -17,6 +17,9 @@ CamelStreamVFS
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelStreamVFS ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-stream.sgml b/docs/reference/camel/tmpl/camel-stream.sgml
index bbcd73a..35c4b34 100644
--- a/docs/reference/camel/tmpl/camel-stream.sgml
+++ b/docs/reference/camel/tmpl/camel-stream.sgml
@@ -17,6 +17,9 @@ CamelStream
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelStream ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-string-utils.sgml b/docs/reference/camel/tmpl/camel-string-utils.sgml
index 7c5b315..956f5f0 100644
--- a/docs/reference/camel/tmpl/camel-string-utils.sgml
+++ b/docs/reference/camel/tmpl/camel-string-utils.sgml
@@ -17,6 +17,9 @@ camel-string-utils
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### FUNCTION camel_strcase_equal ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-tcp-stream-raw.sgml b/docs/reference/camel/tmpl/camel-tcp-stream-raw.sgml
index cf53240..e232451 100644
--- a/docs/reference/camel/tmpl/camel-tcp-stream-raw.sgml
+++ b/docs/reference/camel/tmpl/camel-tcp-stream-raw.sgml
@@ -17,6 +17,9 @@ CamelTcpStreamRaw
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelTcpStreamRaw ##### -->
 <para>
 
@@ -31,6 +34,7 @@ CamelTcpStreamRaw
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-tcp-stream-ssl.sgml b/docs/reference/camel/tmpl/camel-tcp-stream-ssl.sgml
index 15e5ceb..3c0583f 100644
--- a/docs/reference/camel/tmpl/camel-tcp-stream-ssl.sgml
+++ b/docs/reference/camel/tmpl/camel-tcp-stream-ssl.sgml
@@ -17,6 +17,9 @@ CamelTcpStreamSSL
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelTcpStreamSSL ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-tcp-stream.sgml b/docs/reference/camel/tmpl/camel-tcp-stream.sgml
index 5e1cfa0..092dc7a 100644
--- a/docs/reference/camel/tmpl/camel-tcp-stream.sgml
+++ b/docs/reference/camel/tmpl/camel-tcp-stream.sgml
@@ -17,6 +17,9 @@ CamelTcpStream
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelTcpStream ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-test-provider.sgml b/docs/reference/camel/tmpl/camel-test-provider.sgml
index 1d973cc..77d47b7 100644
--- a/docs/reference/camel/tmpl/camel-test-provider.sgml
+++ b/docs/reference/camel/tmpl/camel-test-provider.sgml
@@ -17,6 +17,9 @@ camel-test-provider
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### FUNCTION camel_test_provider_init ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-test.sgml b/docs/reference/camel/tmpl/camel-test.sgml
index 9352f3c..13b8460 100644
--- a/docs/reference/camel/tmpl/camel-test.sgml
+++ b/docs/reference/camel/tmpl/camel-test.sgml
@@ -17,6 +17,9 @@ camel-test
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### FUNCTION camel_test_failv ##### -->
 <para>
 
@@ -106,6 +109,7 @@ camel-test
 
 </para>
 
+ void: 
 
 
 <!-- ##### FUNCTION camel_test_push ##### -->
@@ -122,6 +126,7 @@ camel-test
 
 </para>
 
+ void: 
 
 
 <!-- ##### FUNCTION camel_test_fail ##### -->
@@ -147,6 +152,7 @@ camel-test
 
 </para>
 
+ void: 
 
 
 <!-- ##### FUNCTION string_equal ##### -->
diff --git a/docs/reference/camel/tmpl/camel-text-index.sgml b/docs/reference/camel/tmpl/camel-text-index.sgml
index faa0037..52fa04d 100644
--- a/docs/reference/camel/tmpl/camel-text-index.sgml
+++ b/docs/reference/camel/tmpl/camel-text-index.sgml
@@ -17,6 +17,9 @@ CamelTextIndex
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### USER_FUNCTION CamelTextIndexFunc ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-transport.sgml b/docs/reference/camel/tmpl/camel-transport.sgml
index e589313..bb1b27e 100644
--- a/docs/reference/camel/tmpl/camel-transport.sgml
+++ b/docs/reference/camel/tmpl/camel-transport.sgml
@@ -17,6 +17,9 @@ CamelTransport
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelTransport ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-trie.sgml b/docs/reference/camel/tmpl/camel-trie.sgml
index bea11ec..1478d90 100644
--- a/docs/reference/camel/tmpl/camel-trie.sgml
+++ b/docs/reference/camel/tmpl/camel-trie.sgml
@@ -17,6 +17,9 @@ camel-trie
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelTrie ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-uid-cache.sgml b/docs/reference/camel/tmpl/camel-uid-cache.sgml
index ba92762..9efb35f 100644
--- a/docs/reference/camel/tmpl/camel-uid-cache.sgml
+++ b/docs/reference/camel/tmpl/camel-uid-cache.sgml
@@ -17,6 +17,9 @@ camel-uid-cache
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelUIDCache ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-url-scanner.sgml b/docs/reference/camel/tmpl/camel-url-scanner.sgml
index 3a1d7b9..d1520c3 100644
--- a/docs/reference/camel/tmpl/camel-url-scanner.sgml
+++ b/docs/reference/camel/tmpl/camel-url-scanner.sgml
@@ -17,6 +17,9 @@ camel-url-scanner
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT urlmatch_t ##### -->
 <para>
 
@@ -132,6 +135,7 @@ camel-url-scanner
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-url.sgml b/docs/reference/camel/tmpl/camel-url.sgml
index 042b0e2..4a367b6 100644
--- a/docs/reference/camel/tmpl/camel-url.sgml
+++ b/docs/reference/camel/tmpl/camel-url.sgml
@@ -17,6 +17,9 @@ camel-url
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelURL ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-utf8.sgml b/docs/reference/camel/tmpl/camel-utf8.sgml
index d034f2c..9d98f86 100644
--- a/docs/reference/camel/tmpl/camel-utf8.sgml
+++ b/docs/reference/camel/tmpl/camel-utf8.sgml
@@ -17,6 +17,9 @@ camel-utf8
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### FUNCTION camel_utf8_putc ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-vee-folder.sgml b/docs/reference/camel/tmpl/camel-vee-folder.sgml
index 8675cb2..925e257 100644
--- a/docs/reference/camel/tmpl/camel-vee-folder.sgml
+++ b/docs/reference/camel/tmpl/camel-vee-folder.sgml
@@ -17,6 +17,9 @@ CamelVeeFolder
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelVeeFolder ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-vee-store.sgml b/docs/reference/camel/tmpl/camel-vee-store.sgml
index 723b730..5863249 100644
--- a/docs/reference/camel/tmpl/camel-vee-store.sgml
+++ b/docs/reference/camel/tmpl/camel-vee-store.sgml
@@ -17,6 +17,9 @@ CamelVeeStore
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelVeeStore ##### -->
 <para>
 
@@ -45,6 +48,7 @@ CamelVeeStore
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-vee-summary.sgml b/docs/reference/camel/tmpl/camel-vee-summary.sgml
index 969d25f..958a7b7 100644
--- a/docs/reference/camel/tmpl/camel-vee-summary.sgml
+++ b/docs/reference/camel/tmpl/camel-vee-summary.sgml
@@ -17,6 +17,9 @@ CamelVeeSummary
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelVeeSummary ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel-vtrash-folder.sgml b/docs/reference/camel/tmpl/camel-vtrash-folder.sgml
index b08bedd..e509f3f 100644
--- a/docs/reference/camel/tmpl/camel-vtrash-folder.sgml
+++ b/docs/reference/camel/tmpl/camel-vtrash-folder.sgml
@@ -17,6 +17,9 @@ CamelVTrashFolder
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### MACRO CAMEL_VTRASH_NAME ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/camel.sgml b/docs/reference/camel/tmpl/camel.sgml
index 12c4e85..53c2139 100644
--- a/docs/reference/camel/tmpl/camel.sgml
+++ b/docs/reference/camel/tmpl/camel.sgml
@@ -17,6 +17,9 @@ camel
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### FUNCTION camel_init ##### -->
 <para>
 
@@ -32,5 +35,6 @@ camel
 
 </para>
 
+ void: 
 
 
diff --git a/docs/reference/camel/tmpl/folders.sgml b/docs/reference/camel/tmpl/folders.sgml
index a92b817..3e85382 100644
--- a/docs/reference/camel/tmpl/folders.sgml
+++ b/docs/reference/camel/tmpl/folders.sgml
@@ -17,6 +17,9 @@ folders
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### FUNCTION test_folder_counts ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/messages.sgml b/docs/reference/camel/tmpl/messages.sgml
index 5701d9f..19beaec 100644
--- a/docs/reference/camel/tmpl/messages.sgml
+++ b/docs/reference/camel/tmpl/messages.sgml
@@ -17,6 +17,9 @@ messages
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### MACRO SET_CONTENT_WAYS ##### -->
 <para>
 
@@ -29,6 +32,7 @@ messages
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/camel/tmpl/session.sgml b/docs/reference/camel/tmpl/session.sgml
index d0b01b6..ad168d0 100644
--- a/docs/reference/camel/tmpl/session.sgml
+++ b/docs/reference/camel/tmpl/session.sgml
@@ -17,6 +17,9 @@ CamelTestSession
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT CamelTestSession ##### -->
 <para>
 
diff --git a/docs/reference/camel/tmpl/streams.sgml b/docs/reference/camel/tmpl/streams.sgml
index 25d4279..5c3add9 100644
--- a/docs/reference/camel/tmpl/streams.sgml
+++ b/docs/reference/camel/tmpl/streams.sgml
@@ -17,6 +17,9 @@ streams
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### FUNCTION test_stream_seekable_writepart ##### -->
 <para>
 
diff --git a/docs/reference/libedataserver/tmpl/e-account-list.sgml b/docs/reference/libedataserver/tmpl/e-account-list.sgml
index 647c8d6..2d9d2aa 100644
--- a/docs/reference/libedataserver/tmpl/e-account-list.sgml
+++ b/docs/reference/libedataserver/tmpl/e-account-list.sgml
@@ -17,6 +17,9 @@ EAccountList
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT EAccountList ##### -->
 <para>
 
diff --git a/docs/reference/libedataserver/tmpl/e-account.sgml b/docs/reference/libedataserver/tmpl/e-account.sgml
index bd5748c..ccc354b 100644
--- a/docs/reference/libedataserver/tmpl/e-account.sgml
+++ b/docs/reference/libedataserver/tmpl/e-account.sgml
@@ -17,6 +17,9 @@ EAccount
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### ENUM e_account_item_t ##### -->
 <para>
 
@@ -113,6 +116,7 @@ EAccount
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/libedataserver/tmpl/e-categories.sgml b/docs/reference/libedataserver/tmpl/e-categories.sgml
index a2aa2b2..e259c54 100644
--- a/docs/reference/libedataserver/tmpl/e-categories.sgml
+++ b/docs/reference/libedataserver/tmpl/e-categories.sgml
@@ -17,11 +17,15 @@ e-categories
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### FUNCTION e_categories_get_list ##### -->
 <para>
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/libedataserver/tmpl/e-flag.sgml b/docs/reference/libedataserver/tmpl/e-flag.sgml
index 197a64a..78492bb 100644
--- a/docs/reference/libedataserver/tmpl/e-flag.sgml
+++ b/docs/reference/libedataserver/tmpl/e-flag.sgml
@@ -18,6 +18,9 @@ thread-safe flag that can be blocked on.
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT EFlag ##### -->
 <para>
 The <structname>EFlag</structname> struct is an opaque data structure
@@ -31,6 +34,7 @@ the following functions.
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/libedataserver/tmpl/e-iterator.sgml b/docs/reference/libedataserver/tmpl/e-iterator.sgml
index 658ed56..4e8cdc0 100644
--- a/docs/reference/libedataserver/tmpl/e-iterator.sgml
+++ b/docs/reference/libedataserver/tmpl/e-iterator.sgml
@@ -17,6 +17,9 @@ EIterator
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT EIterator ##### -->
 <para>
 
diff --git a/docs/reference/libedataserver/tmpl/e-list-iterator.sgml b/docs/reference/libedataserver/tmpl/e-list-iterator.sgml
index bcda685..a581510 100644
--- a/docs/reference/libedataserver/tmpl/e-list-iterator.sgml
+++ b/docs/reference/libedataserver/tmpl/e-list-iterator.sgml
@@ -17,6 +17,9 @@ EListIterator
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT EListIterator ##### -->
 <para>
 
diff --git a/docs/reference/libedataserver/tmpl/e-list.sgml b/docs/reference/libedataserver/tmpl/e-list.sgml
index 0904df5..642ae6b 100644
--- a/docs/reference/libedataserver/tmpl/e-list.sgml
+++ b/docs/reference/libedataserver/tmpl/e-list.sgml
@@ -17,6 +17,9 @@ EList
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT EList ##### -->
 <para>
 
diff --git a/docs/reference/libedataserver/tmpl/e-memory.sgml b/docs/reference/libedataserver/tmpl/e-memory.sgml
index f1cc98f..4ea1a85 100644
--- a/docs/reference/libedataserver/tmpl/e-memory.sgml
+++ b/docs/reference/libedataserver/tmpl/e-memory.sgml
@@ -17,6 +17,9 @@ e-memory
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT EMemChunk ##### -->
 <para>
 
diff --git a/docs/reference/libedataserver/tmpl/e-proxy.sgml b/docs/reference/libedataserver/tmpl/e-proxy.sgml
index de05de0..a6f5a5e 100644
--- a/docs/reference/libedataserver/tmpl/e-proxy.sgml
+++ b/docs/reference/libedataserver/tmpl/e-proxy.sgml
@@ -17,6 +17,9 @@ EProxy
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT EProxy ##### -->
 <para>
 
@@ -30,6 +33,7 @@ EProxy
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/libedataserver/tmpl/e-sexp.sgml b/docs/reference/libedataserver/tmpl/e-sexp.sgml
index db09bc9..afa3272 100644
--- a/docs/reference/libedataserver/tmpl/e-sexp.sgml
+++ b/docs/reference/libedataserver/tmpl/e-sexp.sgml
@@ -17,6 +17,9 @@ ESExp
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT ESExp ##### -->
 <para>
 
@@ -61,6 +64,7 @@ ESExp
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/libedataserver/tmpl/e-source-group.sgml b/docs/reference/libedataserver/tmpl/e-source-group.sgml
index ae8d5f5..2ef4eda 100644
--- a/docs/reference/libedataserver/tmpl/e-source-group.sgml
+++ b/docs/reference/libedataserver/tmpl/e-source-group.sgml
@@ -17,6 +17,9 @@ ESourceGroup
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT ESourceGroup ##### -->
 <para>
 
diff --git a/docs/reference/libedataserver/tmpl/e-source-list.sgml b/docs/reference/libedataserver/tmpl/e-source-list.sgml
index cab7974..4c7ca11 100644
--- a/docs/reference/libedataserver/tmpl/e-source-list.sgml
+++ b/docs/reference/libedataserver/tmpl/e-source-list.sgml
@@ -17,6 +17,9 @@ ESourceList
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT ESourceList ##### -->
 <para>
 
@@ -51,6 +54,7 @@ ESourceList
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/libedataserver/tmpl/e-source.sgml b/docs/reference/libedataserver/tmpl/e-source.sgml
index d6942ca..ec60c8f 100644
--- a/docs/reference/libedataserver/tmpl/e-source.sgml
+++ b/docs/reference/libedataserver/tmpl/e-source.sgml
@@ -17,6 +17,9 @@ ESource
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT ESource ##### -->
 <para>
 
diff --git a/docs/reference/libedataserver/tmpl/e-time-utils.sgml b/docs/reference/libedataserver/tmpl/e-time-utils.sgml
index 42931e7..ef534e9 100644
--- a/docs/reference/libedataserver/tmpl/e-time-utils.sgml
+++ b/docs/reference/libedataserver/tmpl/e-time-utils.sgml
@@ -17,6 +17,9 @@ Utility functions for time structure manipulation.
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### ENUM ETimeParseStatus ##### -->
 <para>
 
@@ -127,6 +130,7 @@ Utility functions for time structure manipulation.
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/libedataserver/tmpl/e-uid.sgml b/docs/reference/libedataserver/tmpl/e-uid.sgml
index bf8128a..d409455 100644
--- a/docs/reference/libedataserver/tmpl/e-uid.sgml
+++ b/docs/reference/libedataserver/tmpl/e-uid.sgml
@@ -17,11 +17,15 @@ Generate unique UIDs.
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### FUNCTION e_uid_new ##### -->
 <para>
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/libedataserver/tmpl/e-url.sgml b/docs/reference/libedataserver/tmpl/e-url.sgml
index b3e44e8..3d7037a 100644
--- a/docs/reference/libedataserver/tmpl/e-url.sgml
+++ b/docs/reference/libedataserver/tmpl/e-url.sgml
@@ -17,6 +17,9 @@ A URI data structure and associated functions.
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### FUNCTION e_url_shroud ##### -->
 <para>
 
diff --git a/docs/reference/libedataserver/tmpl/e-util.sgml b/docs/reference/libedataserver/tmpl/e-util.sgml
index e0dea78..471d5dd 100644
--- a/docs/reference/libedataserver/tmpl/e-util.sgml
+++ b/docs/reference/libedataserver/tmpl/e-util.sgml
@@ -17,6 +17,9 @@ Miscellaneous utility functions for evolution-data-server.
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT tm ##### -->
 <para>
 
@@ -82,15 +85,6 @@ Miscellaneous utility functions for evolution-data-server.
 @Returns: 
 
 
-<!-- ##### FUNCTION e_util_pthread_id ##### -->
-<para>
-
-</para>
-
- t: 
- Returns: 
-
-
 <!-- ##### FUNCTION e_filename_make_safe ##### -->
 <para>
 
@@ -128,6 +122,7 @@ Miscellaneous utility functions for evolution-data-server.
 
 </para>
 
+ void: 
 @Returns: 
 
 
@@ -136,6 +131,7 @@ Miscellaneous utility functions for evolution-data-server.
 
 </para>
 
+ void: 
 @Returns: 
 
 
@@ -144,6 +140,7 @@ Miscellaneous utility functions for evolution-data-server.
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/libedataserver/tmpl/e-xml-hash-utils.sgml b/docs/reference/libedataserver/tmpl/e-xml-hash-utils.sgml
index ddc9adc..3a2b4f5 100644
--- a/docs/reference/libedataserver/tmpl/e-xml-hash-utils.sgml
+++ b/docs/reference/libedataserver/tmpl/e-xml-hash-utils.sgml
@@ -17,6 +17,9 @@ Functions for manipulating xml as a hash table.
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### ENUM EXmlHashType ##### -->
 <para>
 
diff --git a/docs/reference/libedataserver/tmpl/e-xml-utils.sgml b/docs/reference/libedataserver/tmpl/e-xml-utils.sgml
index d04e9ff..5f6eb5c 100644
--- a/docs/reference/libedataserver/tmpl/e-xml-utils.sgml
+++ b/docs/reference/libedataserver/tmpl/e-xml-utils.sgml
@@ -17,6 +17,9 @@ e-xml-utils
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### FUNCTION e_xml_parse_file ##### -->
 <para>
 
diff --git a/docs/reference/libedataserver/tmpl/eds-version.sgml b/docs/reference/libedataserver/tmpl/eds-version.sgml
index 9a173af..696eeaf 100644
--- a/docs/reference/libedataserver/tmpl/eds-version.sgml
+++ b/docs/reference/libedataserver/tmpl/eds-version.sgml
@@ -17,6 +17,9 @@ Version Information
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### VARIABLE eds_major_version ##### -->
 <para>
 
diff --git a/docs/reference/libedataserverui/tmpl/e-book-auth-util.sgml b/docs/reference/libedataserverui/tmpl/e-book-auth-util.sgml
index b977097..ccb30de 100644
--- a/docs/reference/libedataserverui/tmpl/e-book-auth-util.sgml
+++ b/docs/reference/libedataserverui/tmpl/e-book-auth-util.sgml
@@ -17,6 +17,9 @@ e-book-auth-util
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### FUNCTION e_load_book_source ##### -->
 <para>
 
diff --git a/docs/reference/libedataserverui/tmpl/e-categories-dialog.sgml b/docs/reference/libedataserverui/tmpl/e-categories-dialog.sgml
index ac5090f..a84e3f9 100644
--- a/docs/reference/libedataserverui/tmpl/e-categories-dialog.sgml
+++ b/docs/reference/libedataserverui/tmpl/e-categories-dialog.sgml
@@ -17,6 +17,9 @@ ECategoriesDialog
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT ECategoriesDialog ##### -->
 <para>
 
diff --git a/docs/reference/libedataserverui/tmpl/e-category-completion.sgml b/docs/reference/libedataserverui/tmpl/e-category-completion.sgml
index 3663665..9b2c990 100644
--- a/docs/reference/libedataserverui/tmpl/e-category-completion.sgml
+++ b/docs/reference/libedataserverui/tmpl/e-category-completion.sgml
@@ -17,6 +17,9 @@ ECategoryCompletion
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT ECategoryCompletion ##### -->
 <para>
 
@@ -30,6 +33,7 @@ ECategoryCompletion
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/libedataserverui/tmpl/e-cell-renderer-color.sgml b/docs/reference/libedataserverui/tmpl/e-cell-renderer-color.sgml
index f69a543..66eabbf 100644
--- a/docs/reference/libedataserverui/tmpl/e-cell-renderer-color.sgml
+++ b/docs/reference/libedataserverui/tmpl/e-cell-renderer-color.sgml
@@ -17,6 +17,9 @@ ECellRendererColor
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT ECellRendererColor ##### -->
 <para>
 
@@ -30,6 +33,7 @@ ECellRendererColor
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/libedataserverui/tmpl/e-contact-store.sgml b/docs/reference/libedataserverui/tmpl/e-contact-store.sgml
index dd2094b..c173533 100644
--- a/docs/reference/libedataserverui/tmpl/e-contact-store.sgml
+++ b/docs/reference/libedataserverui/tmpl/e-contact-store.sgml
@@ -17,6 +17,9 @@ EContactStore
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT EContactStore ##### -->
 <para>
 
@@ -28,6 +31,7 @@ EContactStore
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/libedataserverui/tmpl/e-data-server-ui-marshal.sgml b/docs/reference/libedataserverui/tmpl/e-data-server-ui-marshal.sgml
index 47024c3..c623912 100644
--- a/docs/reference/libedataserverui/tmpl/e-data-server-ui-marshal.sgml
+++ b/docs/reference/libedataserverui/tmpl/e-data-server-ui-marshal.sgml
@@ -17,6 +17,9 @@ e-data-server-ui-marshal
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### FUNCTION e_data_server_ui_marshal_BOOLEAN__BOXED_OBJECT_FLAGS_UINT ##### -->
 <para>
 
diff --git a/docs/reference/libedataserverui/tmpl/e-destination-store.sgml b/docs/reference/libedataserverui/tmpl/e-destination-store.sgml
index 9a33d97..b861d72 100644
--- a/docs/reference/libedataserverui/tmpl/e-destination-store.sgml
+++ b/docs/reference/libedataserverui/tmpl/e-destination-store.sgml
@@ -17,6 +17,9 @@ EDestinationStore
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT EDestinationStore ##### -->
 <para>
 
@@ -38,6 +41,7 @@ EDestinationStore
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/libedataserverui/tmpl/e-name-selector-dialog.sgml b/docs/reference/libedataserverui/tmpl/e-name-selector-dialog.sgml
index 4390d91..109b75b 100644
--- a/docs/reference/libedataserverui/tmpl/e-name-selector-dialog.sgml
+++ b/docs/reference/libedataserverui/tmpl/e-name-selector-dialog.sgml
@@ -17,6 +17,9 @@ ENameSelectorDialog
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT ENameSelectorDialog ##### -->
 <para>
 
@@ -28,6 +31,7 @@ ENameSelectorDialog
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/libedataserverui/tmpl/e-name-selector-entry.sgml b/docs/reference/libedataserverui/tmpl/e-name-selector-entry.sgml
index a5ba22a..9344218 100644
--- a/docs/reference/libedataserverui/tmpl/e-name-selector-entry.sgml
+++ b/docs/reference/libedataserverui/tmpl/e-name-selector-entry.sgml
@@ -17,6 +17,9 @@ ENameSelectorEntry
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### MACRO MINIMUM_QUERY_LENGTH ##### -->
 <para>
 
@@ -57,6 +60,7 @@ ENameSelectorEntry
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/libedataserverui/tmpl/e-name-selector-list.sgml b/docs/reference/libedataserverui/tmpl/e-name-selector-list.sgml
index d367b75..8716700 100644
--- a/docs/reference/libedataserverui/tmpl/e-name-selector-list.sgml
+++ b/docs/reference/libedataserverui/tmpl/e-name-selector-list.sgml
@@ -17,6 +17,9 @@ ENameSelectorList
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT ENameSelectorList ##### -->
 <para>
 
@@ -28,6 +31,7 @@ ENameSelectorList
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/libedataserverui/tmpl/e-name-selector-model.sgml b/docs/reference/libedataserverui/tmpl/e-name-selector-model.sgml
index 30ed88c..a72bd55 100644
--- a/docs/reference/libedataserverui/tmpl/e-name-selector-model.sgml
+++ b/docs/reference/libedataserverui/tmpl/e-name-selector-model.sgml
@@ -17,6 +17,9 @@ ENameSelectorModel
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT ENameSelectorModel ##### -->
 <para>
 
@@ -44,6 +47,7 @@ ENameSelectorModel
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/libedataserverui/tmpl/e-name-selector.sgml b/docs/reference/libedataserverui/tmpl/e-name-selector.sgml
index 28acc02..6d7d89f 100644
--- a/docs/reference/libedataserverui/tmpl/e-name-selector.sgml
+++ b/docs/reference/libedataserverui/tmpl/e-name-selector.sgml
@@ -17,6 +17,9 @@ ENameSelector
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT ENameSelector ##### -->
 <para>
 
@@ -28,6 +31,7 @@ ENameSelector
 
 </para>
 
+ void: 
 @Returns: 
 
 
diff --git a/docs/reference/libedataserverui/tmpl/e-passwords.sgml b/docs/reference/libedataserverui/tmpl/e-passwords.sgml
index caac2ce..1e94e02 100644
--- a/docs/reference/libedataserverui/tmpl/e-passwords.sgml
+++ b/docs/reference/libedataserverui/tmpl/e-passwords.sgml
@@ -17,11 +17,15 @@ e-passwords
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### FUNCTION e_passwords_init ##### -->
 <para>
 
 </para>
 
+ void: 
 
 
 <!-- ##### FUNCTION e_passwords_shutdown ##### -->
@@ -29,6 +33,7 @@ e-passwords
 
 </para>
 
+ void: 
 
 
 <!-- ##### FUNCTION e_passwords_cancel ##### -->
@@ -36,6 +41,7 @@ e-passwords
 
 </para>
 
+ void: 
 
 
 <!-- ##### FUNCTION e_passwords_set_online ##### -->
@@ -88,6 +94,7 @@ e-passwords
 
 </para>
 
+ void: 
 
 
 <!-- ##### FUNCTION e_passwords_clear_passwords ##### -->
diff --git a/docs/reference/libedataserverui/tmpl/e-source-combo-box.sgml b/docs/reference/libedataserverui/tmpl/e-source-combo-box.sgml
index c2f4025..64de025 100644
--- a/docs/reference/libedataserverui/tmpl/e-source-combo-box.sgml
+++ b/docs/reference/libedataserverui/tmpl/e-source-combo-box.sgml
@@ -17,6 +17,9 @@ ESourceComboBox
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT ESourceComboBox ##### -->
 <para>
 
diff --git a/docs/reference/libedataserverui/tmpl/e-source-selector-dialog.sgml b/docs/reference/libedataserverui/tmpl/e-source-selector-dialog.sgml
index 72ff384..f83b041 100644
--- a/docs/reference/libedataserverui/tmpl/e-source-selector-dialog.sgml
+++ b/docs/reference/libedataserverui/tmpl/e-source-selector-dialog.sgml
@@ -17,6 +17,9 @@ ESourceSelectorDialog
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT ESourceSelectorDialog ##### -->
 <para>
 
diff --git a/docs/reference/libedataserverui/tmpl/e-source-selector.sgml b/docs/reference/libedataserverui/tmpl/e-source-selector.sgml
index 442f3c7..53a8a4d 100644
--- a/docs/reference/libedataserverui/tmpl/e-source-selector.sgml
+++ b/docs/reference/libedataserverui/tmpl/e-source-selector.sgml
@@ -17,6 +17,9 @@ ESourceSelector
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT ESourceSelector ##### -->
 <para>
 
diff --git a/docs/reference/libedataserverui/tmpl/e-tree-model-generator.sgml b/docs/reference/libedataserverui/tmpl/e-tree-model-generator.sgml
index bcbb47d..6d1b70a 100644
--- a/docs/reference/libedataserverui/tmpl/e-tree-model-generator.sgml
+++ b/docs/reference/libedataserverui/tmpl/e-tree-model-generator.sgml
@@ -17,6 +17,9 @@ ETreeModelGenerator
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### USER_FUNCTION ETreeModelGeneratorGenerateFunc ##### -->
 <para>
 



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