[evolution] Remove EMailExtension.



commit 54455ca1ad6cae527544fed12d0de4ae95341082
Author: Matthew Barnes <mbarnes redhat com>
Date:   Thu Dec 6 16:40:13 2012 -0500

    Remove EMailExtension.
    
    EMailExtension is now too trivial to keep as a standalone interface.
    Add a 'mime_types' string array to the EMailFormatterExtension and
    EMailFormatterParser interface structs.
    
    Alter e_mail_extension_registry_add_extension() to take a 'mime_types'
    string array and the GType of an extension to instantiate, rather than
    the extension instance directly.
    
    e_mail_extension_registry_remove_extension() is no longer needed.

 em-format/Makefile.am                              |    2 -
 em-format/e-mail-extension-registry.c              |   85 ++++--------------
 em-format/e-mail-extension-registry.h              |   33 ++++----
 em-format/e-mail-extension.c                       |   41 ---------
 em-format/e-mail-extension.h                       |   61 -------------
 em-format/e-mail-format-extensions.c               |   42 ++++++++--
 em-format/e-mail-formatter-attachment-bar.c        |   11 +--
 em-format/e-mail-formatter-attachment.c            |   11 +--
 em-format/e-mail-formatter-error.c                 |   11 +--
 em-format/e-mail-formatter-extension.c             |    2 +-
 em-format/e-mail-formatter-extension.h             |    8 ++-
 em-format/e-mail-formatter-headers.c               |   11 +--
 em-format/e-mail-formatter-image.c                 |   11 +--
 em-format/e-mail-formatter-message-rfc822.c        |   11 +--
 em-format/e-mail-formatter-print-headers.c         |   12 +---
 em-format/e-mail-formatter-quote-attachment.c      |   11 +--
 em-format/e-mail-formatter-quote-headers.c         |   12 +---
 em-format/e-mail-formatter-quote-message-rfc822.c  |   11 +--
 em-format/e-mail-formatter-quote-text-enriched.c   |   12 +---
 em-format/e-mail-formatter-quote-text-html.c       |   12 +---
 em-format/e-mail-formatter-quote-text-plain.c      |   12 +---
 em-format/e-mail-formatter-secure-button.c         |   11 +--
 em-format/e-mail-formatter-source.c                |   11 +--
 em-format/e-mail-formatter-text-enriched.c         |   12 +---
 em-format/e-mail-formatter-text-html.c             |   11 +--
 em-format/e-mail-formatter-text-plain.c            |   11 +--
 em-format/e-mail-parser-application-mbox.c         |   11 +--
 em-format/e-mail-parser-application-smime.c        |   11 +--
 em-format/e-mail-parser-attachment-bar.c           |   11 +--
 em-format/e-mail-parser-extension.c                |    2 +-
 em-format/e-mail-parser-extension.h                |    8 ++-
 em-format/e-mail-parser-headers.c                  |   11 +--
 em-format/e-mail-parser-image.c                    |   11 +--
 em-format/e-mail-parser-inlinepgp-encrypted.c      |   11 +--
 em-format/e-mail-parser-inlinepgp-signed.c         |   11 +--
 em-format/e-mail-parser-message-deliverystatus.c   |   11 +--
 em-format/e-mail-parser-message-external.c         |   11 +--
 em-format/e-mail-parser-message-rfc822.c           |   11 +--
 em-format/e-mail-parser-message.c                  |   11 +--
 em-format/e-mail-parser-multipart-alternative.c    |   11 +--
 em-format/e-mail-parser-multipart-appledouble.c    |   11 +--
 em-format/e-mail-parser-multipart-digest.c         |   11 +--
 em-format/e-mail-parser-multipart-encrypted.c      |   11 +--
 em-format/e-mail-parser-multipart-mixed.c          |   11 +--
 em-format/e-mail-parser-multipart-related.c        |   11 +--
 em-format/e-mail-parser-multipart-signed.c         |   11 +--
 em-format/e-mail-parser-secure-button.c            |   11 +--
 em-format/e-mail-parser-source.c                   |   11 +--
 em-format/e-mail-parser-text-enriched.c            |   11 +--
 em-format/e-mail-parser-text-html.c                |   11 +--
 em-format/e-mail-parser-text-plain.c               |   11 +--
 .../audio-inline/e-mail-formatter-audio-inline.c   |   85 ++++++++++--------
 modules/audio-inline/e-mail-parser-audio-inline.c  |   73 +++++++++-------
 modules/itip-formatter/e-mail-formatter-itip.c     |   84 +++++++++----------
 modules/itip-formatter/e-mail-parser-itip.c        |   72 ++++++++--------
 modules/prefer-plain/e-mail-parser-prefer-plain.c  |   91 ++++++++++++--------
 .../e-mail-formatter-text-highlight.c              |   84 ++++++++++--------
 .../text-highlight/e-mail-parser-text-highlight.c  |   70 +++++++++-------
 .../e-mail-parser-tnef-attachment.c                |   67 +++++++++------
 .../vcard-inline/e-mail-formatter-vcard-inline.c   |   79 ++++++++++--------
 modules/vcard-inline/e-mail-parser-vcard-inline.c  |   73 +++++++++-------
 61 files changed, 556 insertions(+), 963 deletions(-)
---
diff --git a/em-format/Makefile.am b/em-format/Makefile.am
index cafe098..6e45b0f 100644
--- a/em-format/Makefile.am
+++ b/em-format/Makefile.am
@@ -4,7 +4,6 @@ privsolib_LTLIBRARIES = libemformat.la
 
 emformatinclude_HEADERS =				\
 	e-mail-extension-registry.h			\
-	e-mail-extension.h				\
 	e-mail-formatter-extension.h			\
 	e-mail-formatter.h				\
 	e-mail-formatter-print.h			\
@@ -40,7 +39,6 @@ endif
 libemformat_la_SOURCES =				\
 	$(emformatinclude_HEADERS)			\
 	e-mail-extension-registry.c			\
-	e-mail-extension.c				\
 	e-mail-inline-filter.c				\
 	e-mail-format-extensions.c			\
 	e-mail-format-extensions.h			\
diff --git a/em-format/e-mail-extension-registry.c b/em-format/e-mail-extension-registry.c
index 41a3d6f..cc6da4b 100644
--- a/em-format/e-mail-extension-registry.c
+++ b/em-format/e-mail-extension-registry.c
@@ -19,7 +19,6 @@
 #include <glib-object.h>
 
 #include "e-mail-extension-registry.h"
-#include "e-mail-extension.h"
 #include "e-mail-format-extensions.h"
 #include <libebackend/libebackend.h>
 #include <camel/camel.h>
@@ -96,95 +95,47 @@ e_mail_extension_registry_init (EMailExtensionRegistry *reg)
 
 /**
  * e_mail_extension_registry_add_extension:
- * @reg: An #EMailExtensionRegistry
- * @extension: An #EMailExtension
+ * @reg: an #EMailExtensionRegistry
+ * @mime_types: a %NULL-terminated array of MIME types
+ * @extension_type: the #GType of the extension being added
  *
- * Registrys the @extension as a handler for all mime-types that it is able
- * to handle.
+ * Creates an instance of @extension_type and registers the instance for
+ * all provided MIME types.
  */
 void
 e_mail_extension_registry_add_extension (EMailExtensionRegistry *reg,
-                                         EMailExtension *extension)
+                                         const gchar **mime_types,
+                                         GType extension_type)
 {
-	EMailExtensionInterface *interface;
+	GObject *extension;
 	gint ii;
 
 	g_return_if_fail (E_IS_MAIL_EXTENSION_REGISTRY (reg));
-	g_return_if_fail (E_IS_MAIL_EXTENSION (extension));
-
-	/* One reference per extension is enough */
-	g_object_ref (extension);
+	g_return_if_fail (mime_types != NULL);
+	g_return_if_fail (extension_type != G_TYPE_INVALID);
 
-	interface = E_MAIL_EXTENSION_GET_INTERFACE (extension);
-	if (interface->mime_types == NULL) {
-		g_critical (
-			"%s does not define any MIME types",
-			G_OBJECT_TYPE_NAME (extension));
-		return;
-	}
+	extension = g_object_new (extension_type, NULL);
 
-	for (ii = 0; interface->mime_types[ii] != NULL; ii++) {
+	for (ii = 0; mime_types[ii] != NULL; ii++) {
 		GQueue *queue;
 
 		queue = g_hash_table_lookup (
-			reg->priv->table, interface->mime_types[ii]);
+			reg->priv->table, mime_types[ii]);
 		if (queue == NULL) {
 			queue = g_queue_new ();
-			g_queue_push_head (queue, extension);
 			g_hash_table_insert (
 				reg->priv->table,
-				(gpointer) interface->mime_types[ii],
+				(gpointer) mime_types[ii],
 				queue);
-		} else {
-			g_queue_push_head (queue, extension);
 		}
 
-		if (camel_debug ("emformat:registry")) {
-			printf (
-				"Added extension '%s' for type '%s'\n",
-				G_OBJECT_TYPE_NAME (extension),
-				interface->mime_types[ii]);
-		}
-	}
-}
-
-/**
- * e_mail_extension_registry_remove_extension:
- * @reg: An #EMailExtensionRegistry
- * @extension: An #EMailExtension
- *
- * Removes @extension from the registry.
- */
-void
-e_mail_extension_registry_remove_extension (EMailExtensionRegistry *reg,
-                                            EMailExtension *extension)
-{
-	EMailExtensionInterface *interface;
-	gint ii;
-
-	g_return_if_fail (E_IS_MAIL_EXTENSION_REGISTRY (reg));
-	g_return_if_fail (E_IS_MAIL_EXTENSION (extension));
-
-	interface = E_MAIL_EXTENSION_GET_INTERFACE (extension);
-	if (interface->mime_types == NULL)
-		return;
-
-	for (ii = 0; interface->mime_types[ii] != NULL; ii++) {
-		GQueue *queue;
-
-		queue = g_hash_table_lookup (
-			reg->priv->table,
-			interface->mime_types[ii]);
-		if (queue == NULL)
-			continue;
-
-		g_queue_remove (queue, extension);
+		g_queue_push_head (queue, g_object_ref (extension));
 
 		if (camel_debug ("emformat:registry")) {
 			printf (
-				"Removed extension '%s' from type '%s'\n",
-				G_OBJECT_TYPE_NAME (extension),
-				interface->mime_types[ii]);
+				"Added extension '%s' for type '%s'\n",
+				g_type_name (extension_type),
+				mime_types[ii]);
 		}
 	}
 
diff --git a/em-format/e-mail-extension-registry.h b/em-format/e-mail-extension-registry.h
index a6ddb44..4d17b75 100644
--- a/em-format/e-mail-extension-registry.h
+++ b/em-format/e-mail-extension-registry.h
@@ -19,7 +19,7 @@
 #ifndef E_MAIL_EXTENSION_REGISTRY_H_
 #define E_MAIL_EXTENSION_REGISTRY_H_
 
-#include <em-format/e-mail-extension.h>
+#include <glib-object.h>
 
 /* Standard GObject macros */
 #define E_TYPE_MAIL_EXTENSION_REGISTRY \
@@ -55,21 +55,18 @@ struct _EMailExtensionRegistry {
 	EMailExtensionRegistryPrivate *priv;
 };
 
-GType		e_mail_extension_registry_get_type	(void);
-
-void		e_mail_extension_registry_add_extension	(EMailExtensionRegistry *reg,
-							 EMailExtension *extension);
-
-void		e_mail_extension_registry_remove_extension
-							(EMailExtensionRegistry *reg,
-							 EMailExtension *extension);
-
+GType		e_mail_extension_registry_get_type
+						(void) G_GNUC_CONST;
+void		e_mail_extension_registry_add_extension
+						(EMailExtensionRegistry *reg,
+						 const gchar **mime_types,
+						 GType extension_type);
 GQueue *	e_mail_extension_registry_get_for_mime_type
-							(EMailExtensionRegistry *reg,
-							 const gchar *mime_type);
-
-GQueue *	e_mail_extension_registry_get_fallback	(EMailExtensionRegistry *reg,
-							 const gchar *mime_type);
+						(EMailExtensionRegistry *reg,
+						 const gchar *mime_type);
+GQueue *	e_mail_extension_registry_get_fallback
+						(EMailExtensionRegistry *reg,
+						 const gchar *mime_type);
 
 G_END_DECLS
 
@@ -109,7 +106,8 @@ struct _EMailParserExtensionRegistry {
 	EMailParserExtensionRegistryPrivate *priv;
 };
 
-GType		e_mail_parser_extension_registry_get_type	(void);
+GType		e_mail_parser_extension_registry_get_type
+						(void) G_GNUC_CONST;
 
 G_END_DECLS
 
@@ -149,7 +147,8 @@ struct _EMailFormatterExtensionRegistry {
 	EMailFormatterExtensionRegistryPrivate *priv;
 };
 
-GType		e_mail_formatter_extension_registry_get_type	(void);
+GType		e_mail_formatter_extension_registry_get_type
+						(void) G_GNUC_CONST;
 
 G_END_DECLS
 
diff --git a/em-format/e-mail-format-extensions.c b/em-format/e-mail-format-extensions.c
index fa7d5d8..01162bc 100644
--- a/em-format/e-mail-format-extensions.c
+++ b/em-format/e-mail-format-extensions.c
@@ -86,16 +86,44 @@ static void
 load (EMailExtensionRegistry *ereg,
       TypeFunc *func_array)
 {
-	gint i = 0;
+	gint ii;
 
-	for (i = 0; func_array[i] != NULL; i++) {
-		GType type;
-		EMailExtension *extension;
+	for (ii = 0; func_array[ii] != NULL; ii++) {
+		GType extension_type;
+		GType interface_type;
+		gpointer extension_class;
+		const gchar **mime_types = NULL;
 
-		type = func_array[i]();
-		extension = g_object_new (type, NULL);
+		extension_type = func_array[ii]();
+		extension_class = g_type_class_ref (extension_type);
 
-		e_mail_extension_registry_add_extension (ereg, extension);
+		interface_type = E_TYPE_MAIL_FORMATTER_EXTENSION;
+		if (g_type_is_a (extension_type, interface_type)) {
+			EMailFormatterExtensionInterface *interface;
+
+			interface = g_type_interface_peek (
+				extension_class, interface_type);
+			mime_types = interface->mime_types;
+		}
+
+		interface_type = E_TYPE_MAIL_PARSER_EXTENSION;
+		if (g_type_is_a (extension_type, interface_type)) {
+			EMailParserExtensionInterface *interface;
+
+			interface = g_type_interface_peek (
+				extension_class, interface_type);
+			mime_types = interface->mime_types;
+		}
+
+		if (mime_types != NULL)
+			e_mail_extension_registry_add_extension (
+				ereg, mime_types, extension_type);
+		else
+			g_critical (
+				"%s does not define any MIME types",
+				g_type_name (extension_type));
+
+		g_type_class_unref (extension_class);
 	}
 }
 
diff --git a/em-format/e-mail-formatter-attachment-bar.c b/em-format/e-mail-formatter-attachment-bar.c
index 33b1367..160c8af 100644
--- a/em-format/e-mail-formatter-attachment-bar.c
+++ b/em-format/e-mail-formatter-attachment-bar.c
@@ -37,7 +37,6 @@ typedef struct _EMailFormatterAttachmentBarClass {
 } EMailFormatterAttachmentBarClass;
 
 static void e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
-static void e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailFormatterAttachmentBar,
@@ -45,9 +44,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_formatter_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_FORMATTER_EXTENSION,
 		e_mail_formatter_formatter_extension_interface_init));
 
@@ -133,6 +129,7 @@ e_mail_formatter_attachment_bar_class_init (EMailFormatterAttachmentBarClass *cl
 static void
 e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
 {
+	iface->mime_types = formatter_mime_types;
 	iface->format = emfe_attachment_bar_format;
 	iface->get_widget = emfe_attachment_bar_get_widget;
 	iface->get_display_name = emfe_attachment_bar_get_display_name;
@@ -140,12 +137,6 @@ e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInte
 }
 
 static void
-e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
-	iface->mime_types = formatter_mime_types;
-}
-
-static void
 e_mail_formatter_attachment_bar_init (EMailFormatterAttachmentBar *extension)
 {
 
diff --git a/em-format/e-mail-formatter-attachment.c b/em-format/e-mail-formatter-attachment.c
index d583801..f637766 100644
--- a/em-format/e-mail-formatter-attachment.c
+++ b/em-format/e-mail-formatter-attachment.c
@@ -49,7 +49,6 @@ typedef struct _EMailFormatterAttachmentClass {
 } EMailFormatterAttachmentClass;
 
 static void e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
-static void e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailFormatterAttachment,
@@ -57,9 +56,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_formatter_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_FORMATTER_EXTENSION,
 		e_mail_formatter_formatter_extension_interface_init)
 )
@@ -398,6 +394,7 @@ e_mail_formatter_attachment_class_init (EMailFormatterAttachmentClass *class)
 static void
 e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
 {
+	iface->mime_types = formatter_mime_types;
 	iface->format = emfe_attachment_format;
 	iface->get_widget = emfe_attachment_get_widget;
 	iface->get_display_name = emfe_attachment_get_display_name;
@@ -405,12 +402,6 @@ e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInte
 }
 
 static void
-e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
-	iface->mime_types = formatter_mime_types;
-}
-
-static void
 e_mail_formatter_attachment_init (EMailFormatterAttachment *formatter)
 {
 
diff --git a/em-format/e-mail-formatter-error.c b/em-format/e-mail-formatter-error.c
index 0c183a0..8c86156 100644
--- a/em-format/e-mail-formatter-error.c
+++ b/em-format/e-mail-formatter-error.c
@@ -38,7 +38,6 @@ typedef struct _EMailFormatterErrorClass {
 } EMailFormatterErrorClass;
 
 static void e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
-static void e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailFormatterError,
@@ -46,9 +45,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_formatter_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_FORMATTER_EXTENSION,
 		e_mail_formatter_formatter_extension_interface_init));
 
@@ -139,18 +135,13 @@ e_mail_formatter_error_class_init (EMailFormatterErrorClass *class)
 static void
 e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
 {
+	iface->mime_types = formatter_mime_types;
 	iface->format = emfe_error_format;
 	iface->get_display_name = emfe_error_get_display_name;
 	iface->get_description = emfe_error_get_description;
 }
 
 static void
-e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
-	iface->mime_types = formatter_mime_types;
-}
-
-static void
 e_mail_formatter_error_init (EMailFormatterError *formatter)
 {
 
diff --git a/em-format/e-mail-formatter-extension.c b/em-format/e-mail-formatter-extension.c
index 381855b..3e10aa1 100644
--- a/em-format/e-mail-formatter-extension.c
+++ b/em-format/e-mail-formatter-extension.c
@@ -21,7 +21,7 @@
 G_DEFINE_INTERFACE (
 	EMailFormatterExtension,
 	e_mail_formatter_extension,
-	E_TYPE_MAIL_EXTENSION)
+	G_TYPE_OBJECT)
 
 /**
  * EMailFormatterExtension:
diff --git a/em-format/e-mail-formatter-extension.h b/em-format/e-mail-formatter-extension.h
index e2c4ee6..9a3f392 100644
--- a/em-format/e-mail-formatter-extension.h
+++ b/em-format/e-mail-formatter-extension.h
@@ -19,7 +19,6 @@
 #ifndef E_MAIL_FORMATTER_EXTENSION_H
 #define E_MAIL_FORMATTER_EXTENSION_H
 
-#include <em-format/e-mail-extension.h>
 #include <em-format/e-mail-part.h>
 #include <em-format/e-mail-formatter.h>
 #include <camel/camel.h>
@@ -53,7 +52,12 @@ typedef struct _EMailFormatterExtension EMailFormatterExtension;
 typedef struct _EMailFormatterExtensionInterface EMailFormatterExtensionInterface;
 
 struct _EMailFormatterExtensionInterface {
-	EMailExtensionInterface	parent_interface;
+	GTypeInterface parent_interface;
+
+	/* This is a NULL-terminated array of supported MIME types.
+	 * The MIME types can be exact (e.g. "text/plain") or use a
+	 * wildcard (e.g. "text/ *"). */
+	const gchar **mime_types;
 
 	gboolean	(*format)	(EMailFormatterExtension *extension,
 					 EMailFormatter *formatter,
diff --git a/em-format/e-mail-formatter-headers.c b/em-format/e-mail-formatter-headers.c
index 5b62d56..855f6a6 100644
--- a/em-format/e-mail-formatter-headers.c
+++ b/em-format/e-mail-formatter-headers.c
@@ -51,7 +51,6 @@ static const gchar *formatter_mime_types[] = {
 };
 
 static void e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
-static void e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailFormatterHeaders,
@@ -59,9 +58,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_formatter_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_FORMATTER_EXTENSION,
 		e_mail_formatter_formatter_extension_interface_init))
 
@@ -594,18 +590,13 @@ e_mail_formatter_headers_class_init (EMailFormatterHeadersClass *class)
 static void
 e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
 {
+	iface->mime_types = formatter_mime_types;
 	iface->format = emfe_headers_format;
 	iface->get_display_name = emfe_headers_get_display_name;
 	iface->get_description = emfe_headers_get_description;
 }
 
 static void
-e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
-	iface->mime_types = formatter_mime_types;
-}
-
-static void
 e_mail_formatter_headers_init (EMailFormatterHeaders *formatter)
 {
 
diff --git a/em-format/e-mail-formatter-image.c b/em-format/e-mail-formatter-image.c
index 24ee2ef..cd4d2e1 100644
--- a/em-format/e-mail-formatter-image.c
+++ b/em-format/e-mail-formatter-image.c
@@ -63,7 +63,6 @@ typedef struct _EMailFormatterImageClass {
 } EMailFormatterImageClass;
 
 static void e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
-static void e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailFormatterImage,
@@ -71,9 +70,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_formatter_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_FORMATTER_EXTENSION,
 		e_mail_formatter_formatter_extension_interface_init));
 
@@ -174,18 +170,13 @@ e_mail_formatter_image_class_init (EMailFormatterImageClass *class)
 static void
 e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
 {
+	iface->mime_types = formatter_mime_types;
 	iface->format = emfe_image_format;
 	iface->get_display_name = emfe_image_get_display_name;
 	iface->get_description = emfe_image_get_description;
 }
 
 static void
-e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
-	iface->mime_types = formatter_mime_types;
-}
-
-static void
 e_mail_formatter_image_init (EMailFormatterImage *formatter)
 {
 
diff --git a/em-format/e-mail-formatter-message-rfc822.c b/em-format/e-mail-formatter-message-rfc822.c
index f2d7d1c..dea737d 100644
--- a/em-format/e-mail-formatter-message-rfc822.c
+++ b/em-format/e-mail-formatter-message-rfc822.c
@@ -50,7 +50,6 @@ typedef struct _EMailFormatterMessageRFC822Class {
 } EMailFormatterMessageRFC822Class;
 
 static void e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
-static void e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailFormatterMessageRFC822,
@@ -58,9 +57,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_formatter_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_FORMATTER_EXTENSION,
 		e_mail_formatter_formatter_extension_interface_init));
 
@@ -265,18 +261,13 @@ e_mail_formatter_message_rfc822_class_init (EMailFormatterMessageRFC822Class *cl
 static void
 e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
 {
+	iface->mime_types = formatter_mime_types;
 	iface->format = emfe_message_rfc822_format;
 	iface->get_display_name = emfe_message_rfc822_get_display_name;
 	iface->get_description = emfe_message_rfc822_get_description;
 }
 
 static void
-e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
-	iface->mime_types = formatter_mime_types;
-}
-
-static void
 e_mail_formatter_message_rfc822_init (EMailFormatterMessageRFC822 *formatter)
 {
 
diff --git a/em-format/e-mail-formatter-print-headers.c b/em-format/e-mail-formatter-print-headers.c
index 2397f92..1821268 100644
--- a/em-format/e-mail-formatter-print-headers.c
+++ b/em-format/e-mail-formatter-print-headers.c
@@ -50,8 +50,6 @@ static const gchar *formatter_mime_types[] = {
 
 static void e_mail_formatter_print_formatter_extension_interface_init
 					(EMailFormatterExtensionInterface *iface);
-static void e_mail_formatter_print_mail_extension_interface_init
-					(EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailFormatterPrintHeaders,
@@ -59,9 +57,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_formatter_print_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_FORMATTER_EXTENSION,
 		e_mail_formatter_print_formatter_extension_interface_init))
 
@@ -243,18 +238,13 @@ e_mail_formatter_print_headers_class_init (EMailFormatterPrintHeadersClass *clas
 static void
 e_mail_formatter_print_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
 {
+	iface->mime_types = formatter_mime_types;
 	iface->format = emfpe_headers_format;
 	iface->get_display_name = emfpe_headers_get_display_name;
 	iface->get_description = emfpe_headers_get_description;
 }
 
 static void
-e_mail_formatter_print_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
-	iface->mime_types = formatter_mime_types;
-}
-
-static void
 e_mail_formatter_print_headers_init (EMailFormatterPrintHeaders *formatter)
 {
 
diff --git a/em-format/e-mail-formatter-quote-attachment.c b/em-format/e-mail-formatter-quote-attachment.c
index 8dff36a..0dcf5f0 100644
--- a/em-format/e-mail-formatter-quote-attachment.c
+++ b/em-format/e-mail-formatter-quote-attachment.c
@@ -42,7 +42,6 @@ typedef struct _EMailFormatterQuoteAttachmentClass {
 } EMailFormatterQuoteAttachmentClass;
 
 static void e_mail_formatter_quote_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
-static void e_mail_formatter_quote_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailFormatterQuoteAttachment,
@@ -50,9 +49,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_formatter_quote_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_FORMATTER_EXTENSION,
 		e_mail_formatter_quote_formatter_extension_interface_init)
 )
@@ -143,18 +139,13 @@ e_mail_formatter_quote_attachment_class_init (EMailFormatterQuoteAttachmentClass
 static void
 e_mail_formatter_quote_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
 {
+	iface->mime_types = formatter_mime_types;
 	iface->format = emfqe_attachment_format;
 	iface->get_display_name = emfqe_attachment_get_display_name;
 	iface->get_description = emfqe_attachment_get_description;
 }
 
 static void
-e_mail_formatter_quote_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
-	iface->mime_types = formatter_mime_types;
-}
-
-static void
 e_mail_formatter_quote_attachment_init (EMailFormatterQuoteAttachment *formatter)
 {
 
diff --git a/em-format/e-mail-formatter-quote-headers.c b/em-format/e-mail-formatter-quote-headers.c
index 368245c..3f059dc 100644
--- a/em-format/e-mail-formatter-quote-headers.c
+++ b/em-format/e-mail-formatter-quote-headers.c
@@ -45,8 +45,6 @@ typedef struct _EMailFormatterQuoteHeadersClass {
 
 static void e_mail_formatter_quote_formatter_extension_interface_init
 					(EMailFormatterExtensionInterface *iface);
-static void e_mail_formatter_quote_mail_extension_interface_init
-					(EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailFormatterQuoteHeaders,
@@ -54,9 +52,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_formatter_quote_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_FORMATTER_EXTENSION,
 		e_mail_formatter_quote_formatter_extension_interface_init))
 
@@ -269,18 +264,13 @@ e_mail_formatter_quote_headers_class_init (EMailFormatterQuoteHeadersClass *clas
 static void
 e_mail_formatter_quote_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
 {
+	iface->mime_types = formatter_mime_types;
 	iface->format = emqfe_headers_format;
 	iface->get_display_name = emqfe_headers_get_display_name;
 	iface->get_description = emqfe_headers_get_description;
 }
 
 static void
-e_mail_formatter_quote_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
-	iface->mime_types = formatter_mime_types;
-}
-
-static void
 e_mail_formatter_quote_headers_init (EMailFormatterQuoteHeaders *formatter)
 {
 
diff --git a/em-format/e-mail-formatter-quote-message-rfc822.c b/em-format/e-mail-formatter-quote-message-rfc822.c
index d1b5ae5..19f77c0 100644
--- a/em-format/e-mail-formatter-quote-message-rfc822.c
+++ b/em-format/e-mail-formatter-quote-message-rfc822.c
@@ -44,7 +44,6 @@ typedef struct _EMailFormatterQuoteMessageRFC822Class {
 } EMailFormatterQuoteMessageRFC822Class;
 
 static void e_mail_formatter_quote_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
-static void e_mail_formatter_quote_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailFormatterQuoteMessageRFC822,
@@ -52,9 +51,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_formatter_quote_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_FORMATTER_EXTENSION,
 		e_mail_formatter_quote_formatter_extension_interface_init));
 
@@ -171,18 +167,13 @@ e_mail_formatter_quote_message_rfc822_class_init (EMailFormatterQuoteMessageRFC8
 static void
 e_mail_formatter_quote_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
 {
+	iface->mime_types = formatter_mime_types;
 	iface->format = emfqe_message_rfc822_format;
 	iface->get_display_name = emfqe_message_rfc822_get_display_name;
 	iface->get_description = emfqe_message_rfc822_get_description;
 }
 
 static void
-e_mail_formatter_quote_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
-	iface->mime_types = formatter_mime_types;
-}
-
-static void
 e_mail_formatter_quote_message_rfc822_init (EMailFormatterQuoteMessageRFC822 *formatter)
 {
 
diff --git a/em-format/e-mail-formatter-quote-text-enriched.c b/em-format/e-mail-formatter-quote-text-enriched.c
index 68d19ab..ba991db 100644
--- a/em-format/e-mail-formatter-quote-text-enriched.c
+++ b/em-format/e-mail-formatter-quote-text-enriched.c
@@ -40,8 +40,6 @@ typedef struct _EMailFormatterQuoteTextEnrichedClass {
 
 static void e_mail_formatter_quote_formatter_extension_interace_init
 					(EMailFormatterExtensionInterface *iface);
-static void e_mail_formatter_quote_mail_extension_interface_init
-					(EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailFormatterQuoteTextEnriched,
@@ -49,9 +47,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_formatter_quote_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_FORMATTER_EXTENSION,
 		e_mail_formatter_quote_formatter_extension_interace_init));
 
@@ -118,18 +113,13 @@ e_mail_formatter_quote_text_enriched_class_init (EMailFormatterQuoteTextEnriched
 static void
 e_mail_formatter_quote_formatter_extension_interace_init (EMailFormatterExtensionInterface *iface)
 {
+	iface->mime_types = formatter_mime_types;
 	iface->format = emqfe_text_enriched_format;
 	iface->get_display_name = emqfe_text_enriched_get_display_name;
 	iface->get_description = emqfe_text_enriched_get_description;
 }
 
 static void
-e_mail_formatter_quote_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
-	iface->mime_types = formatter_mime_types;
-}
-
-static void
 e_mail_formatter_quote_text_enriched_init (EMailFormatterQuoteTextEnriched *formatter)
 {
 
diff --git a/em-format/e-mail-formatter-quote-text-html.c b/em-format/e-mail-formatter-quote-text-html.c
index d592150..bbc8190 100644
--- a/em-format/e-mail-formatter-quote-text-html.c
+++ b/em-format/e-mail-formatter-quote-text-html.c
@@ -43,8 +43,6 @@ typedef struct _EMailFormatterQuoteTextHTMLClass {
 
 static void e_mail_formatter_quote_formatter_extension_interface_init
 					(EMailFormatterExtensionInterface *iface);
-static void e_mail_formatter_quote_mail_extension_interface_init
-					(EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailFormatterQuoteTextHTML,
@@ -52,9 +50,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_formatter_quote_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_FORMATTER_EXTENSION,
 		e_mail_formatter_quote_formatter_extension_interface_init));
 
@@ -121,18 +116,13 @@ e_mail_formatter_quote_text_html_class_init (EMailFormatterQuoteTextHTMLClass *c
 static void
 e_mail_formatter_quote_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
 {
+	iface->mime_types = formatter_mime_types;
 	iface->format = emqfe_text_html_format;
 	iface->get_display_name = emqfe_text_html_get_display_name;
 	iface->get_description = emqfe_text_html_get_description;
 }
 
 static void
-e_mail_formatter_quote_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
-	iface->mime_types = formatter_mime_types;
-}
-
-static void
 e_mail_formatter_quote_text_html_init (EMailFormatterQuoteTextHTML *formatter)
 {
 
diff --git a/em-format/e-mail-formatter-quote-text-plain.c b/em-format/e-mail-formatter-quote-text-plain.c
index 584c6d1..7deb9eb 100644
--- a/em-format/e-mail-formatter-quote-text-plain.c
+++ b/em-format/e-mail-formatter-quote-text-plain.c
@@ -41,8 +41,6 @@ typedef struct _EMailFormatterQuoteTextPlainClass {
 
 static void e_mail_formatter_quote_formatter_extension_interface_init
 					(EMailFormatterExtensionInterface *iface);
-static void e_mail_formatter_quote_mail_extension_interface_init
-					(EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailFormatterQuoteTextPlain,
@@ -50,9 +48,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_formatter_quote_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_FORMATTER_EXTENSION,
 		e_mail_formatter_quote_formatter_extension_interface_init));
 
@@ -140,18 +135,13 @@ e_mail_formatter_quote_text_plain_class_init (EMailFormatterQuoteTextPlainClass
 static void
 e_mail_formatter_quote_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
 {
+	iface->mime_types = formatter_mime_types;
 	iface->format = emqfe_text_plain_format;
 	iface->get_display_name = emqfe_text_plain_get_display_name;
 	iface->get_description = emqfe_text_plain_get_description;
 }
 
 static void
-e_mail_formatter_quote_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
-	iface->mime_types = formatter_mime_types;
-}
-
-static void
 e_mail_formatter_quote_text_plain_init (EMailFormatterQuoteTextPlain *formatter)
 {
 
diff --git a/em-format/e-mail-formatter-secure-button.c b/em-format/e-mail-formatter-secure-button.c
index 6c41467..b31c6fb 100644
--- a/em-format/e-mail-formatter-secure-button.c
+++ b/em-format/e-mail-formatter-secure-button.c
@@ -43,7 +43,6 @@ typedef struct _EMailFormatterSecureButtonClass {
 } EMailFormatterSecureButtonClass;
 
 static void e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
-static void e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailFormatterSecureButton,
@@ -51,9 +50,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_formatter_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_FORMATTER_EXTENSION,
 		e_mail_formatter_formatter_extension_interface_init));
 
@@ -494,6 +490,7 @@ e_mail_formatter_secure_button_class_init (EMailFormatterSecureButtonClass *clas
 static void
 e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
 {
+	iface->mime_types = formatter_mime_types;
 	iface->format = emfe_secure_button_format;
 	iface->get_widget = emfe_secure_button_get_widget;
 	iface->get_display_name = emfe_secure_button_get_display_name;
@@ -501,12 +498,6 @@ e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInte
 }
 
 static void
-e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
-	iface->mime_types = formatter_mime_types;
-}
-
-static void
 e_mail_formatter_secure_button_init (EMailFormatterSecureButton *extension)
 {
 
diff --git a/em-format/e-mail-formatter-source.c b/em-format/e-mail-formatter-source.c
index becf1a8..ce9fc36 100644
--- a/em-format/e-mail-formatter-source.c
+++ b/em-format/e-mail-formatter-source.c
@@ -39,7 +39,6 @@ typedef struct _EMailFormatterSourceClass {
 } EMailFormatterSourceClass;
 
 static void e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
-static void e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailFormatterSource,
@@ -47,9 +46,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_formatter_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_FORMATTER_EXTENSION,
 		e_mail_formatter_formatter_extension_interface_init)
 )
@@ -157,18 +153,13 @@ e_mail_formatter_source_class_init (EMailFormatterSourceClass *class)
 static void
 e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
 {
+	iface->mime_types = formatter_mime_types;
 	iface->format = emfe_source_format;
 	iface->get_display_name = emfe_source_get_display_name;
 	iface->get_description = emfe_source_get_description;
 }
 
 static void
-e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
-	iface->mime_types = formatter_mime_types;
-}
-
-static void
 e_mail_formatter_source_init (EMailFormatterSource *formatter)
 {
 
diff --git a/em-format/e-mail-formatter-text-enriched.c b/em-format/e-mail-formatter-text-enriched.c
index ca24c35..7a358bd 100644
--- a/em-format/e-mail-formatter-text-enriched.c
+++ b/em-format/e-mail-formatter-text-enriched.c
@@ -45,7 +45,6 @@ typedef struct _EMailFormatterTextEnrichedClass {
 } EMailFormatterTextEnrichedClass;
 
 static void e_mail_formatter_formatter_extension_interace_init (EMailFormatterExtensionInterface *iface);
-static void e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailFormatterTextEnriched,
@@ -53,9 +52,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_formatter_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_FORMATTER_EXTENSION,
 		e_mail_formatter_formatter_extension_interace_init));
 
@@ -132,19 +128,13 @@ e_mail_formatter_text_enriched_class_init (EMailFormatterTextEnrichedClass *clas
 static void
 e_mail_formatter_formatter_extension_interace_init (EMailFormatterExtensionInterface *iface)
 {
+	iface->mime_types = formatter_mime_types;
 	iface->format = emfe_text_enriched_format;
 	iface->get_display_name = emfe_text_enriched_get_display_name;
 	iface->get_description = emfe_text_enriched_get_description;
 }
 
 static void
-e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
-	iface->mime_types = formatter_mime_types;
-}
-
-static void
 e_mail_formatter_text_enriched_init (EMailFormatterTextEnriched *formatter)
 {
-
 }
diff --git a/em-format/e-mail-formatter-text-html.c b/em-format/e-mail-formatter-text-html.c
index 838de92..08c4012 100644
--- a/em-format/e-mail-formatter-text-html.c
+++ b/em-format/e-mail-formatter-text-html.c
@@ -48,7 +48,6 @@ typedef struct _EMailFormatterTextHTMLClass {
 } EMailFormatterTextHTMLClass;
 
 static void e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
-static void e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailFormatterTextHTML,
@@ -56,9 +55,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_formatter_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_FORMATTER_EXTENSION,
 		e_mail_formatter_formatter_extension_interface_init));
 
@@ -371,18 +367,13 @@ e_mail_formatter_text_html_class_init (EMailFormatterTextHTMLClass *class)
 static void
 e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
 {
+	iface->mime_types = formatter_mime_types;
 	iface->format = emfe_text_html_format;
 	iface->get_display_name = emfe_text_html_get_display_name;
 	iface->get_description = emfe_text_html_get_description;
 }
 
 static void
-e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
-	iface->mime_types = formatter_mime_types;
-}
-
-static void
 e_mail_formatter_text_html_init (EMailFormatterTextHTML *formatter)
 {
 
diff --git a/em-format/e-mail-formatter-text-plain.c b/em-format/e-mail-formatter-text-plain.c
index 4fc0118..ce62001 100644
--- a/em-format/e-mail-formatter-text-plain.c
+++ b/em-format/e-mail-formatter-text-plain.c
@@ -48,7 +48,6 @@ typedef struct _EMailFormatterTextPlainClass {
 } EMailFormatterTextPlainClass;
 
 static void e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
-static void e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailFormatterTextPlain,
@@ -56,9 +55,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_formatter_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_FORMATTER_EXTENSION,
 		e_mail_formatter_formatter_extension_interface_init));
 
@@ -206,18 +202,13 @@ e_mail_formatter_text_plain_class_init (EMailFormatterTextPlainClass *class)
 static void
 e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
 {
+	iface->mime_types = formatter_mime_types;
 	iface->format = emfe_text_plain_format;
 	iface->get_display_name = emfe_text_plain_get_display_name;
 	iface->get_description = emfe_text_plain_get_description;
 }
 
 static void
-e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
-	iface->mime_types = formatter_mime_types;
-}
-
-static void
 e_mail_formatter_text_plain_init (EMailFormatterTextPlain *formatter)
 {
 
diff --git a/em-format/e-mail-parser-application-mbox.c b/em-format/e-mail-parser-application-mbox.c
index d7b41b0..2821e98 100644
--- a/em-format/e-mail-parser-application-mbox.c
+++ b/em-format/e-mail-parser-application-mbox.c
@@ -43,7 +43,6 @@ typedef struct _EMailParserApplicationMBoxClass {
 } EMailParserApplicationMBoxClass;
 
 static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-static void e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailParserApplicationMBox,
@@ -51,9 +50,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_parser_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_PARSER_EXTENSION,
 		e_mail_parser_parser_extension_interface_init));
 
@@ -190,17 +186,12 @@ e_mail_parser_application_mbox_class_init (EMailParserApplicationMBoxClass *clas
 static void
 e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *interface)
 {
+	interface->mime_types = parser_mime_types;
 	interface->parse = empe_app_mbox_parse;
 	interface->get_flags = empe_app_mbox_get_flags;
 }
 
 static void
-e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *interface)
-{
-	interface->mime_types = parser_mime_types;
-}
-
-static void
 e_mail_parser_application_mbox_init (EMailParserApplicationMBox *self)
 {
 }
diff --git a/em-format/e-mail-parser-application-smime.c b/em-format/e-mail-parser-application-smime.c
index ba47fdf..e5eab1b 100644
--- a/em-format/e-mail-parser-application-smime.c
+++ b/em-format/e-mail-parser-application-smime.c
@@ -43,7 +43,6 @@ typedef struct _EMailParserAppplicationSMIMEClass {
 } EMailParserApplicationSMIMEClass;
 
 static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-static void e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailParserApplicationSMIME,
@@ -51,9 +50,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_parser_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_PARSER_EXTENSION,
 		e_mail_parser_parser_extension_interface_init));
 
@@ -179,17 +175,12 @@ e_mail_parser_application_smime_class_init (EMailParserApplicationSMIMEClass *cl
 static void
 e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *interface)
 {
+	interface->mime_types = parser_mime_types;
 	interface->parse = empe_app_smime_parse;
 	interface->get_flags = empe_app_smime_get_flags;
 }
 
 static void
-e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *interface)
-{
-	interface->mime_types = parser_mime_types;
-}
-
-static void
 e_mail_parser_application_smime_init (EMailParserApplicationSMIME *parser)
 {
 
diff --git a/em-format/e-mail-parser-attachment-bar.c b/em-format/e-mail-parser-attachment-bar.c
index a2b8ddd..77a796c 100644
--- a/em-format/e-mail-parser-attachment-bar.c
+++ b/em-format/e-mail-parser-attachment-bar.c
@@ -51,7 +51,6 @@ typedef struct _EMailParserAttachmentBarClass {
 } EMailParserAttachmentBarClass;
 
 static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-static void e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailParserAttachmentBar,
@@ -59,9 +58,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_parser_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_PARSER_EXTENSION,
 		e_mail_parser_parser_extension_interface_init))
 
@@ -103,13 +99,8 @@ e_mail_parser_attachment_bar_class_init (EMailParserAttachmentBarClass *class)
 static void
 e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
 {
-	iface->parse = empe_attachment_bar_parse;
-}
-
-static void
-e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
 	iface->mime_types = parser_mime_types;
+	iface->parse = empe_attachment_bar_parse;
 }
 
 static void
diff --git a/em-format/e-mail-parser-extension.c b/em-format/e-mail-parser-extension.c
index df8fc54..5497d3a 100644
--- a/em-format/e-mail-parser-extension.c
+++ b/em-format/e-mail-parser-extension.c
@@ -23,7 +23,7 @@
 G_DEFINE_INTERFACE (
 	EMailParserExtension,
 	e_mail_parser_extension,
-	E_TYPE_MAIL_EXTENSION)
+	G_TYPE_OBJECT)
 
 static guint32
 mail_parser_extension_get_flags (EMailParserExtension *extension)
diff --git a/em-format/e-mail-parser-extension.h b/em-format/e-mail-parser-extension.h
index e5acece..06128cf 100644
--- a/em-format/e-mail-parser-extension.h
+++ b/em-format/e-mail-parser-extension.h
@@ -19,7 +19,6 @@
 #ifndef E_MAIL_PARSER_EXTENSION_H
 #define E_MAIL_PARSER_EXTENSION_H
 
-#include <em-format/e-mail-extension.h>
 #include <em-format/e-mail-parser.h>
 #include <camel/camel.h>
 
@@ -66,7 +65,12 @@ typedef enum {
 } EMailParserExtensionFlags;
 
 struct _EMailParserExtensionInterface {
-	EMailExtensionInterface	parent_interface;
+	GTypeInterface parent_interface;
+
+	/* This is a NULL-terminated array of supported MIME types.
+	 * The MIME types can be exact (e.g. "text/plain") or use a
+	 * wildcard (e.g. "text/ *"). */
+	const gchar **mime_types;
 
 	gboolean	(*parse)	(EMailParserExtension *extension,
 					 EMailParser *parser,
diff --git a/em-format/e-mail-parser-headers.c b/em-format/e-mail-parser-headers.c
index 366cedd..e31f293 100644
--- a/em-format/e-mail-parser-headers.c
+++ b/em-format/e-mail-parser-headers.c
@@ -42,7 +42,6 @@ typedef struct _EMailParserHeadersClass {
 } EMailParserHeadersClass;
 
 static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-static void e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailParserHeaders,
@@ -50,9 +49,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_parser_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_PARSER_EXTENSION,
 		e_mail_parser_parser_extension_interface_init));
 
@@ -123,13 +119,8 @@ e_mail_parser_headers_class_init (EMailParserHeadersClass *class)
 static void
 e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
 {
-	iface->parse = empe_headers_parse;
-}
-
-static void
-e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
 	iface->mime_types = parser_mime_types;
+	iface->parse = empe_headers_parse;
 }
 
 static void
diff --git a/em-format/e-mail-parser-image.c b/em-format/e-mail-parser-image.c
index d2ca8d6..18bc8ff 100644
--- a/em-format/e-mail-parser-image.c
+++ b/em-format/e-mail-parser-image.c
@@ -39,7 +39,6 @@ typedef struct _EMailParserImageClass {
 } EMailParserImageClass;
 
 static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-static void e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailParserImage,
@@ -47,9 +46,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_parser_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_PARSER_EXTENSION,
 		e_mail_parser_parser_extension_interface_init));
 
@@ -127,13 +123,8 @@ e_mail_parser_image_class_init (EMailParserImageClass *class)
 static void
 e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
 {
-	iface->parse = empe_image_parse;
-}
-
-static void
-e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
 	iface->mime_types = parser_mime_types;
+	iface->parse = empe_image_parse;
 }
 
 static void
diff --git a/em-format/e-mail-parser-inlinepgp-encrypted.c b/em-format/e-mail-parser-inlinepgp-encrypted.c
index 6a8ff8e..081ba15 100644
--- a/em-format/e-mail-parser-inlinepgp-encrypted.c
+++ b/em-format/e-mail-parser-inlinepgp-encrypted.c
@@ -41,7 +41,6 @@ typedef struct _EMailParserInlinePGPEncryptedClass {
 } EMailParserInlinePGPEncryptedClass;
 
 static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-static void e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailParserInlinePGPEncrypted,
@@ -49,9 +48,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_parser_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_PARSER_EXTENSION,
 		e_mail_parser_parser_extension_interface_init));
 
@@ -183,13 +179,8 @@ e_mail_parser_inline_pgp_encrypted_class_init (EMailParserInlinePGPEncryptedClas
 static void
 e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
 {
-	iface->parse = empe_inlinepgp_encrypted_parse;
-}
-
-static void
-e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
 	iface->mime_types = parser_mime_types;
+	iface->parse = empe_inlinepgp_encrypted_parse;
 }
 
 static void
diff --git a/em-format/e-mail-parser-inlinepgp-signed.c b/em-format/e-mail-parser-inlinepgp-signed.c
index dc8f4aa..c7a79b8 100644
--- a/em-format/e-mail-parser-inlinepgp-signed.c
+++ b/em-format/e-mail-parser-inlinepgp-signed.c
@@ -41,7 +41,6 @@ typedef struct _EMailParserInlinePGPSignedClass {
 } EMailParserInlinePGPSignedClass;
 
 static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-static void e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailParserInlinePGPSigned,
@@ -49,9 +48,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_parser_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_PARSER_EXTENSION,
 		e_mail_parser_parser_extension_interface_init));
 
@@ -207,13 +203,8 @@ e_mail_parser_inline_pgp_signed_class_init (EMailParserInlinePGPSignedClass *cla
 static void
 e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
 {
-	iface->parse = empe_inlinepgp_signed_parse;
-}
-
-static void
-e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
 	iface->mime_types = parser_mime_types;
+	iface->parse = empe_inlinepgp_signed_parse;
 }
 
 static void
diff --git a/em-format/e-mail-parser-message-deliverystatus.c b/em-format/e-mail-parser-message-deliverystatus.c
index 6bec6e6..b7df31e 100644
--- a/em-format/e-mail-parser-message-deliverystatus.c
+++ b/em-format/e-mail-parser-message-deliverystatus.c
@@ -41,7 +41,6 @@ typedef struct _EMailParserMessageDeliveryStatusClass {
 } EMailParserMessageDeliveryStatusClass;
 
 static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-static void e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailParserMessageDeliveryStatus,
@@ -49,9 +48,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_parser_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_PARSER_EXTENSION,
 		e_mail_parser_parser_extension_interface_init));
 
@@ -100,13 +96,8 @@ e_mail_parser_message_delivery_status_class_init (EMailParserMessageDeliveryStat
 static void
 e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
 {
-	iface->parse = empe_msg_deliverystatus_parse;
-}
-
-static void
-e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
 	iface->mime_types = parser_mime_types;
+	iface->parse = empe_msg_deliverystatus_parse;
 }
 
 static void
diff --git a/em-format/e-mail-parser-message-external.c b/em-format/e-mail-parser-message-external.c
index 79bbfd7..c05ad0e 100644
--- a/em-format/e-mail-parser-message-external.c
+++ b/em-format/e-mail-parser-message-external.c
@@ -41,7 +41,6 @@ typedef struct _EMailParserMessageExternalClass {
 } EMailParserMessageExternalClass;
 
 static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-static void e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailParserMessageExternal,
@@ -49,9 +48,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_parser_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_PARSER_EXTENSION,
 		e_mail_parser_parser_extension_interface_init));
 
@@ -190,13 +186,8 @@ e_mail_parser_message_external_class_init (EMailParserMessageExternalClass *clas
 static void
 e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
 {
-	iface->parse = empe_msg_external_parse;
-}
-
-static void
-e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
 	iface->mime_types = parser_mime_types;
+	iface->parse = empe_msg_external_parse;
 }
 
 static void
diff --git a/em-format/e-mail-parser-message-rfc822.c b/em-format/e-mail-parser-message-rfc822.c
index 8ddf480..ad50f59 100644
--- a/em-format/e-mail-parser-message-rfc822.c
+++ b/em-format/e-mail-parser-message-rfc822.c
@@ -44,7 +44,6 @@ typedef struct _EMailParserMessageRFC822Class {
 } EMailParserMessageRFC822Class;
 
 static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-static void e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailParserMessageRFC822,
@@ -52,9 +51,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_parser_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_PARSER_EXTENSION,
 		e_mail_parser_parser_extension_interface_init));
 
@@ -153,17 +149,12 @@ e_mail_parser_message_rfc822_class_init (EMailParserMessageRFC822Class *class)
 static void
 e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
 {
+	iface->mime_types = parser_mime_types;
 	iface->parse = empe_msg_rfc822_parse;
 	iface->get_flags = empe_msg_rfc822_get_flags;
 }
 
 static void
-e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
-	iface->mime_types = parser_mime_types;
-}
-
-static void
 e_mail_parser_message_rfc822_init (EMailParserMessageRFC822 *parser)
 {
 
diff --git a/em-format/e-mail-parser-message.c b/em-format/e-mail-parser-message.c
index dcb9d99..a481839 100644
--- a/em-format/e-mail-parser-message.c
+++ b/em-format/e-mail-parser-message.c
@@ -43,7 +43,6 @@ typedef struct _EMailParserMessageClass {
 } EMailParserMessageClass;
 
 static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-static void e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailParserMessage,
@@ -51,9 +50,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_parser_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_PARSER_EXTENSION,
 		e_mail_parser_parser_extension_interface_init));
 
@@ -120,13 +116,8 @@ e_mail_parser_message_class_init (EMailParserMessageClass *class)
 static void
 e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
 {
-	iface->parse = empe_message_parse;
-}
-
-static void
-e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
 	iface->mime_types = parser_mime_types;
+	iface->parse = empe_message_parse;
 }
 
 static void
diff --git a/em-format/e-mail-parser-multipart-alternative.c b/em-format/e-mail-parser-multipart-alternative.c
index ca7fbdd..cc06f41 100644
--- a/em-format/e-mail-parser-multipart-alternative.c
+++ b/em-format/e-mail-parser-multipart-alternative.c
@@ -40,7 +40,6 @@ typedef struct _EMailParserMultipartAlternativeClass {
 } EMailParserMultipartAlternativeClass;
 
 static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-static void e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailParserMultipartAlternative,
@@ -48,9 +47,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_parser_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_PARSER_EXTENSION,
 		e_mail_parser_parser_extension_interface_init));
 
@@ -169,13 +165,8 @@ e_mail_parser_multipart_alternative_class_init (EMailParserMultipartAlternativeC
 static void
 e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
 {
-	iface->parse = empe_mp_alternative_parse;
-}
-
-static void
-e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
 	iface->mime_types = parser_mime_types;
+	iface->parse = empe_mp_alternative_parse;
 }
 
 static void
diff --git a/em-format/e-mail-parser-multipart-appledouble.c b/em-format/e-mail-parser-multipart-appledouble.c
index 08ea90f..3f47280 100644
--- a/em-format/e-mail-parser-multipart-appledouble.c
+++ b/em-format/e-mail-parser-multipart-appledouble.c
@@ -36,7 +36,6 @@ typedef struct _EMailParserMultipartAppleDoubleClass {
 } EMailParserMultipartAppleDoubleClass;
 
 static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-static void e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailParserMultipartAppleDouble,
@@ -44,9 +43,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_parser_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_PARSER_EXTENSION,
 		e_mail_parser_parser_extension_interface_init));
 
@@ -107,13 +103,8 @@ e_mail_parser_multipart_apple_double_class_init (EMailParserMultipartAppleDouble
 static void
 e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
 {
-	iface->parse = empe_mp_appledouble_parse;
-}
-
-static void
-e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
 	iface->mime_types = parser_mime_types;
+	iface->parse = empe_mp_appledouble_parse;
 }
 
 static void
diff --git a/em-format/e-mail-parser-multipart-digest.c b/em-format/e-mail-parser-multipart-digest.c
index ed6a6da..7ca643d 100644
--- a/em-format/e-mail-parser-multipart-digest.c
+++ b/em-format/e-mail-parser-multipart-digest.c
@@ -39,7 +39,6 @@ typedef struct _EMailParserMultipartDigestClass {
 } EMailParserMultipartDigestClass;
 
 static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-static void e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailParserMultipartDigest,
@@ -47,9 +46,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_parser_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_PARSER_EXTENSION,
 		e_mail_parser_parser_extension_interface_init));
 
@@ -146,17 +142,12 @@ e_mail_parser_multipart_digest_class_init (EMailParserMultipartDigestClass *clas
 static void
 e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
 {
+	iface->mime_types = parser_mime_types;
 	iface->parse = empe_mp_digest_parse;
 	iface->get_flags = empe_mp_digest_get_flags;
 }
 
 static void
-e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
-	iface->mime_types = parser_mime_types;
-}
-
-static void
 e_mail_parser_multipart_digest_init (EMailParserMultipartDigest *parser)
 {
 
diff --git a/em-format/e-mail-parser-multipart-encrypted.c b/em-format/e-mail-parser-multipart-encrypted.c
index bae8de5..05b192b 100644
--- a/em-format/e-mail-parser-multipart-encrypted.c
+++ b/em-format/e-mail-parser-multipart-encrypted.c
@@ -39,7 +39,6 @@ typedef struct _EMailParserMultipartEncryptedClass {
 } EMailParserMultipartEncryptedClass;
 
 static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-static void e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailParserMultipartEncrypted,
@@ -47,9 +46,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_parser_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_PARSER_EXTENSION,
 		e_mail_parser_parser_extension_interface_init))
 
@@ -193,13 +189,8 @@ e_mail_parser_multipart_encrypted_class_init (EMailParserMultipartEncryptedClass
 static void
 e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
 {
-	iface->parse = empe_mp_encrypted_parse;
-}
-
-static void
-e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
 	iface->mime_types = parser_mime_types;
+	iface->parse = empe_mp_encrypted_parse;
 }
 
 static void
diff --git a/em-format/e-mail-parser-multipart-mixed.c b/em-format/e-mail-parser-multipart-mixed.c
index 77feb71..9127a51 100644
--- a/em-format/e-mail-parser-multipart-mixed.c
+++ b/em-format/e-mail-parser-multipart-mixed.c
@@ -40,7 +40,6 @@ typedef struct _EMailParserMultipartMixedClass {
 } EMailParserMultipartMixedClass;
 
 static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-static void e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailParserMultipartMixed,
@@ -48,9 +47,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_parser_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_PARSER_EXTENSION,
 		e_mail_parser_parser_extension_interface_init));
 
@@ -144,17 +140,12 @@ e_mail_parser_multipart_mixed_class_init (EMailParserMultipartMixedClass *class)
 static void
 e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
 {
+	iface->mime_types = parser_mime_types;
 	iface->parse = empe_mp_mixed_parse;
 	iface->get_flags = empe_mp_mixed_get_flags;
 }
 
 static void
-e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
-	iface->mime_types = parser_mime_types;
-}
-
-static void
 e_mail_parser_multipart_mixed_init (EMailParserMultipartMixed *parser)
 {
 }
diff --git a/em-format/e-mail-parser-multipart-related.c b/em-format/e-mail-parser-multipart-related.c
index f9e893f..1fca096 100644
--- a/em-format/e-mail-parser-multipart-related.c
+++ b/em-format/e-mail-parser-multipart-related.c
@@ -40,7 +40,6 @@ typedef struct _EMailParserMultipartRelatedClass {
 } EMailParserMultipartRelatedClass;
 
 static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-static void e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailParserMultipartRelated,
@@ -48,9 +47,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_parser_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_PARSER_EXTENSION,
 		e_mail_parser_parser_extension_interface_init));
 
@@ -138,13 +134,8 @@ e_mail_parser_multipart_related_class_init (EMailParserMultipartRelatedClass *cl
 static void
 e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
 {
-	iface->parse = empe_mp_related_parse;
-}
-
-static void
-e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
 	iface->mime_types = parser_mime_types;
+	iface->parse = empe_mp_related_parse;
 }
 
 static void
diff --git a/em-format/e-mail-parser-multipart-signed.c b/em-format/e-mail-parser-multipart-signed.c
index 45b29ff..a57053f 100644
--- a/em-format/e-mail-parser-multipart-signed.c
+++ b/em-format/e-mail-parser-multipart-signed.c
@@ -39,7 +39,6 @@ typedef struct _EMailParserMultipartSignedClass {
 } EMailParserMultipartSignedClass;
 
 static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-static void e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailParserMultipartSigned,
@@ -47,9 +46,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_parser_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_PARSER_EXTENSION,
 		e_mail_parser_parser_extension_interface_init));
 
@@ -227,13 +223,8 @@ e_mail_parser_multipart_signed_class_init (EMailParserMultipartSignedClass *clas
 static void
 e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
 {
-	iface->parse = empe_mp_signed_parse;
-}
-
-static void
-e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
 	iface->mime_types = parser_mime_types;
+	iface->parse = empe_mp_signed_parse;
 }
 
 static void
diff --git a/em-format/e-mail-parser-secure-button.c b/em-format/e-mail-parser-secure-button.c
index 4f49dd9..ca38021 100644
--- a/em-format/e-mail-parser-secure-button.c
+++ b/em-format/e-mail-parser-secure-button.c
@@ -38,7 +38,6 @@ typedef struct _EMailParserSecureButtonClass {
 } EMailParserSecureButtonClass;
 
 static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-static void e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailParserSecureButton,
@@ -46,9 +45,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_parser_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_PARSER_EXTENSION,
 		e_mail_parser_parser_extension_interface_init))
 
@@ -87,13 +83,8 @@ e_mail_parser_secure_button_class_init (EMailParserSecureButtonClass *class)
 static void
 e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
 {
-	iface->parse = empe_secure_button_parse;
-}
-
-static void
-e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
 	iface->mime_types = parser_mime_types;
+	iface->parse = empe_secure_button_parse;
 }
 
 static void
diff --git a/em-format/e-mail-parser-source.c b/em-format/e-mail-parser-source.c
index ce22b08..1aef5fc 100644
--- a/em-format/e-mail-parser-source.c
+++ b/em-format/e-mail-parser-source.c
@@ -38,7 +38,6 @@ typedef struct _EMailParserSourceClass {
 } EMailParserSourceClass;
 
 static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-static void e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailParserSource,
@@ -46,9 +45,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_parser_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_PARSER_EXTENSION,
 		e_mail_parser_parser_extension_interface_init));
 
@@ -88,13 +84,8 @@ e_mail_parser_source_class_init (EMailParserSourceClass *class)
 static void
 e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
 {
-	iface->parse = empe_source_parse;
-}
-
-static void
-e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
 	iface->mime_types = parser_mime_types;
+	iface->parse = empe_source_parse;
 }
 
 static void
diff --git a/em-format/e-mail-parser-text-enriched.c b/em-format/e-mail-parser-text-enriched.c
index 503176f..b666704 100644
--- a/em-format/e-mail-parser-text-enriched.c
+++ b/em-format/e-mail-parser-text-enriched.c
@@ -39,7 +39,6 @@ typedef struct _EMailParserTextEnrichedClass {
 } EMailParserTextEnrichedClass;
 
 static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-static void e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailParserTextEnriched,
@@ -47,9 +46,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_parser_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_PARSER_EXTENSION,
 		e_mail_parser_parser_extension_interface_init));
 
@@ -108,13 +104,8 @@ e_mail_parser_text_enriched_class_init (EMailParserTextEnrichedClass *class)
 static void
 e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
 {
-	iface->parse = empe_text_enriched_parse;
-}
-
-static void
-e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
 	iface->mime_types = parser_mime_types;
+	iface->parse = empe_text_enriched_parse;
 }
 
 static void
diff --git a/em-format/e-mail-parser-text-html.c b/em-format/e-mail-parser-text-html.c
index 98f359e..5edce60 100644
--- a/em-format/e-mail-parser-text-html.c
+++ b/em-format/e-mail-parser-text-html.c
@@ -41,7 +41,6 @@ typedef struct _EMailParserTextHTMLClass {
 } EMailParserTextHTMLClass;
 
 static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-static void e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailParserTextHTML,
@@ -49,9 +48,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_parser_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_PARSER_EXTENSION,
 		e_mail_parser_parser_extension_interface_init));
 
@@ -119,13 +115,8 @@ e_mail_parser_text_html_class_init (EMailParserTextHTMLClass *class)
 static void
 e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
 {
-	iface->parse = empe_text_html_parse;
-}
-
-static void
-e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
 	iface->mime_types = parser_mime_types;
+	iface->parse = empe_text_html_parse;
 }
 
 static void
diff --git a/em-format/e-mail-parser-text-plain.c b/em-format/e-mail-parser-text-plain.c
index 0ed85c2..3d79901 100644
--- a/em-format/e-mail-parser-text-plain.c
+++ b/em-format/e-mail-parser-text-plain.c
@@ -41,7 +41,6 @@ typedef struct _EMailParserTextPlainClass {
 } EMailParserTextPlainClass;
 
 static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-static void e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_TYPE_EXTENDED (
 	EMailParserTextPlain,
@@ -49,9 +48,6 @@ G_DEFINE_TYPE_EXTENDED (
 	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_parser_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE (
 		E_TYPE_MAIL_PARSER_EXTENSION,
 		e_mail_parser_parser_extension_interface_init));
 
@@ -246,13 +242,8 @@ e_mail_parser_text_plain_class_init (EMailParserTextPlainClass *class)
 static void
 e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
 {
-	iface->parse = empe_text_plain_parse;
-}
-
-static void
-e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
 	iface->mime_types = parser_mime_types;
+	iface->parse = empe_text_plain_parse;
 }
 
 static void
diff --git a/modules/audio-inline/e-mail-formatter-audio-inline.c b/modules/audio-inline/e-mail-formatter-audio-inline.c
index 51d2500..461a3ab 100644
--- a/modules/audio-inline/e-mail-formatter-audio-inline.c
+++ b/modules/audio-inline/e-mail-formatter-audio-inline.c
@@ -38,30 +38,30 @@
 
 #define d(x)
 
-typedef struct _EMailFormatterAudioInline {
-	EExtension parent;
-} EMailFormatterAudioInline;
+typedef GObject EMailFormatterAudioInline;
+typedef GObjectClass EMailFormatterAudioInlineClass;
 
-typedef struct _EMailFormatterAudioInlineClass {
-	EExtensionClass parent_class;
-} EMailFormatterAudioInlineClass;
+typedef EExtension EMailFormatterAudioInlineLoader;
+typedef EExtensionClass EMailFormatterAudioInlineLoaderClass;
 
 GType e_mail_formatter_audio_inline_get_type (void);
+GType e_mail_formatter_audio_inline_loader_get_type (void);
 static void e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
-static void e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_DYNAMIC_TYPE_EXTENDED (
 	EMailFormatterAudioInline,
 	e_mail_formatter_audio_inline,
-	E_TYPE_EXTENSION,
+	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE_DYNAMIC (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_formatter_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE_DYNAMIC (
 		E_TYPE_MAIL_FORMATTER_EXTENSION,
 		e_mail_formatter_formatter_extension_interface_init));
 
+G_DEFINE_DYNAMIC_TYPE (
+	EMailFormatterAudioInlineLoader,
+	e_mail_formatter_audio_inline_loader,
+	E_TYPE_EXTENSION)
+
 static const gchar *formatter_mime_types[] = {
 	"application/vnd.evolution.widget.audio-inline",
 	"audio/ac3",
@@ -329,33 +329,14 @@ emfe_audio_inline_get_description (EMailFormatterExtension *extension)
 }
 
 static void
-e_mail_formatter_audio_inline_constructed (GObject *object)
-{
-	EExtensible *extensible;
-	EMailExtensionRegistry *reg;
-
-	extensible = e_extension_get_extensible (E_EXTENSION (object));
-	reg = E_MAIL_EXTENSION_REGISTRY (extensible);
-
-	e_mail_extension_registry_add_extension (reg, E_MAIL_EXTENSION (object));
-}
-
-static void
 e_mail_formatter_audio_inline_class_init (EMailFormatterAudioInlineClass *class)
 {
-	GObjectClass *object_class;
-	EExtensionClass *extension_class;
-
-	object_class = G_OBJECT_CLASS (class);
-	object_class->constructed = e_mail_formatter_audio_inline_constructed;
-
-	extension_class = E_EXTENSION_CLASS (class);
-	extension_class->extensible_type = E_TYPE_MAIL_FORMATTER_EXTENSION_REGISTRY;
 }
 
 static void
 e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
 {
+	iface->mime_types = formatter_mime_types;
 	iface->format = emfe_audio_inline_format;
 	iface->get_widget = emfe_audio_inline_get_widget;
 	iface->get_display_name = emfe_audio_inline_get_display_name;
@@ -363,25 +344,53 @@ e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInte
 }
 
 static void
-e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface)
+e_mail_formatter_audio_inline_init (EMailFormatterAudioInline *formatter)
 {
-	iface->mime_types = formatter_mime_types;
 }
 
 static void
-e_mail_formatter_audio_inline_init (EMailFormatterAudioInline *formatter)
+e_mail_formatter_audio_inline_class_finalize (EMailFormatterAudioInlineClass *class)
 {
+}
 
+static void
+mail_formatter_audio_inline_loader_constructed (GObject *object)
+{
+	EExtensible *extensible;
+
+	extensible = e_extension_get_extensible (E_EXTENSION (object));
+
+	e_mail_extension_registry_add_extension (
+		E_MAIL_EXTENSION_REGISTRY (extensible),
+		formatter_mime_types,
+		e_mail_formatter_audio_inline_get_type ());
 }
 
-void
-e_mail_formatter_audio_inline_type_register (GTypeModule *type_module)
+static void
+e_mail_formatter_audio_inline_loader_class_init (EExtensionClass *class)
 {
-	e_mail_formatter_audio_inline_register_type (type_module);
+	GObjectClass *object_class;
+
+	object_class = G_OBJECT_CLASS (class);
+	object_class->constructed = mail_formatter_audio_inline_loader_constructed;
+
+	class->extensible_type = E_TYPE_MAIL_FORMATTER_EXTENSION_REGISTRY;
 }
 
 static void
-e_mail_formatter_audio_inline_class_finalize (EMailFormatterAudioInlineClass *class)
+e_mail_formatter_audio_inline_loader_class_finalize (EExtensionClass *class)
 {
+}
 
+static void
+e_mail_formatter_audio_inline_loader_init (EExtension *extension)
+{
 }
+
+void
+e_mail_formatter_audio_inline_type_register (GTypeModule *type_module)
+{
+	e_mail_formatter_audio_inline_register_type (type_module);
+	e_mail_formatter_audio_inline_loader_register_type (type_module);
+}
+
diff --git a/modules/audio-inline/e-mail-parser-audio-inline.c b/modules/audio-inline/e-mail-parser-audio-inline.c
index 5fa4611..7fc025e 100644
--- a/modules/audio-inline/e-mail-parser-audio-inline.c
+++ b/modules/audio-inline/e-mail-parser-audio-inline.c
@@ -38,30 +38,30 @@
 
 #define d(x)
 
-typedef struct _EMailParserInlineAudio {
-	EExtension parent;
-} EMailParserAudioInline;
+typedef GObject EMailParserAudioInline;
+typedef GObjectClass EMailParserAudioInlineClass;
 
-typedef struct _EMailParserAudioInlineClass {
-	EExtensionClass parent_class;
-} EMailParserAudioInlineClass;
+typedef EExtension EMailParserAudioInlineLoader;
+typedef EExtensionClass EMailParserAudioInlineLoaderClass;
 
 GType e_mail_parser_audio_inline_get_type (void);
-static void e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface);
+GType e_mail_parser_audio_inline_loader_get_type (void);
 static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
 
 G_DEFINE_DYNAMIC_TYPE_EXTENDED (
 	EMailParserAudioInline,
 	e_mail_parser_audio_inline,
-	E_TYPE_EXTENSION,
+	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE_DYNAMIC (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_parser_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE_DYNAMIC (
 		E_TYPE_MAIL_PARSER_EXTENSION,
 		e_mail_parser_parser_extension_interface_init));
 
+G_DEFINE_DYNAMIC_TYPE (
+	EMailParserAudioInlineLoader,
+	e_mail_parser_audio_inline_loader,
+	E_TYPE_EXTENSION)
+
 static const gchar *parser_mime_types[] = {
 	"audio/ac3",
 	"audio/x-ac3",
@@ -156,57 +156,68 @@ empe_audio_inline_get_flags (EMailParserExtension *extension)
 	return E_MAIL_PARSER_EXTENSION_INLINE_DISPOSITION;
 }
 
-void
-e_mail_parser_audio_inline_type_register (GTypeModule *type_module)
+static void
+e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
 {
-	e_mail_parser_audio_inline_register_type (type_module);
+	iface->mime_types = parser_mime_types;
+	iface->parse = empe_audio_inline_parse;
+	iface->get_flags = empe_audio_inline_get_flags;
 }
 
 static void
-e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface)
+e_mail_parser_audio_inline_class_init (EMailParserAudioInlineClass *class)
 {
-	iface->mime_types = parser_mime_types;
 }
 
 static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
+e_mail_parser_audio_inline_class_finalize (EMailParserAudioInlineClass *class)
 {
-	iface->parse = empe_audio_inline_parse;
-	iface->get_flags = empe_audio_inline_get_flags;
+
 }
 
 static void
-e_mail_parser_audio_inline_constructed (GObject *object)
+e_mail_parser_audio_inline_init (EMailParserAudioInline *self)
+{
+}
+
+static void
+mail_parser_audio_inline_loader_constructed (GObject *object)
 {
 	EExtensible *extensible;
-	EMailExtensionRegistry *reg;
 
 	extensible = e_extension_get_extensible (E_EXTENSION (object));
-	reg = E_MAIL_EXTENSION_REGISTRY (extensible);
 
-	e_mail_extension_registry_add_extension (reg, E_MAIL_EXTENSION (object));
+	e_mail_extension_registry_add_extension (
+		E_MAIL_EXTENSION_REGISTRY (extensible),
+		parser_mime_types,
+		e_mail_parser_audio_inline_get_type ());
 }
 
 static void
-e_mail_parser_audio_inline_class_init (EMailParserAudioInlineClass *class)
+e_mail_parser_audio_inline_loader_class_init (EExtensionClass *class)
 {
 	GObjectClass *object_class;
-	EExtensionClass *extension_class;
 
 	object_class = G_OBJECT_CLASS (class);
-	object_class->constructed = e_mail_parser_audio_inline_constructed;
+	object_class->constructed = mail_parser_audio_inline_loader_constructed;
 
-	extension_class = E_EXTENSION_CLASS (class);
-	extension_class->extensible_type = E_TYPE_MAIL_PARSER_EXTENSION_REGISTRY;
+	class->extensible_type = E_TYPE_MAIL_PARSER_EXTENSION_REGISTRY;
 }
 
 static void
-e_mail_parser_audio_inline_class_finalize (EMailParserAudioInlineClass *class)
+e_mail_parser_audio_inline_loader_class_finalize (EExtensionClass *class)
 {
-
 }
 
 static void
-e_mail_parser_audio_inline_init (EMailParserAudioInline *self)
+e_mail_parser_audio_inline_loader_init (EExtension *extension)
+{
+}
+
+void
+e_mail_parser_audio_inline_type_register (GTypeModule *type_module)
 {
+	e_mail_parser_audio_inline_register_type (type_module);
+	e_mail_parser_audio_inline_loader_register_type (type_module);
 }
+
diff --git a/modules/itip-formatter/e-mail-formatter-itip.c b/modules/itip-formatter/e-mail-formatter-itip.c
index 9e2afc4..2aab012 100644
--- a/modules/itip-formatter/e-mail-formatter-itip.c
+++ b/modules/itip-formatter/e-mail-formatter-itip.c
@@ -34,30 +34,30 @@
 
 #define d(x)
 
-typedef struct _EMailFormatterItip {
-	EExtension parent;
-} EMailFormatterItip;
+typedef GObject EMailFormatterItip;
+typedef GObjectClass EMailFormatterItipClass;
 
-typedef struct _EMailFormatterItipClass {
-	EExtensionClass parent_class;
-} EMailFormatterItipClass;
+typedef EExtension EMailFormatterItipLoader;
+typedef EExtensionClass EMailFormatterItipLoaderClass;
 
 GType e_mail_formatter_itip_get_type (void);
+GType e_mail_formatter_itip_loader_get_type (void);
 static void e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
-static void e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_DYNAMIC_TYPE_EXTENDED (
 	EMailFormatterItip,
 	e_mail_formatter_itip,
-	E_TYPE_EXTENSION,
+	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE_DYNAMIC (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_formatter_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE_DYNAMIC (
 		E_TYPE_MAIL_FORMATTER_EXTENSION,
 		e_mail_formatter_formatter_extension_interface_init));
 
+G_DEFINE_DYNAMIC_TYPE (
+	EMailFormatterItipLoader,
+	e_mail_formatter_itip_loader,
+	E_TYPE_EXTENSION)
+
 static const gchar *formatter_mime_types[] = {
 	"text/calendar",
 	"application/ics",
@@ -154,59 +154,60 @@ emfe_itip_get_description (EMailFormatterExtension *extension)
 }
 
 static void
-e_mail_formatter_itip_constructed (GObject *object)
+e_mail_formatter_itip_class_init (EMailFormatterItipClass *class)
 {
-	EExtensible *extensible;
-	EMailExtensionRegistry *reg;
+}
 
-	extensible = e_extension_get_extensible (E_EXTENSION (object));
-	reg = E_MAIL_EXTENSION_REGISTRY (extensible);
+static void
+e_mail_formatter_itip_class_finalize (EMailFormatterItipClass *class)
+{
+}
 
-	e_mail_extension_registry_add_extension (reg, E_MAIL_EXTENSION (object));
+static void
+e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
+{
+	iface->mime_types = formatter_mime_types;
+	iface->format = emfe_itip_format;
+	iface->get_display_name = emfe_itip_get_display_name;
+	iface->get_description = emfe_itip_get_description;
 }
 
 static void
-e_mail_formatter_itip_finalize (GObject *object)
+e_mail_formatter_itip_init (EMailFormatterItip *formatter)
+{
+}
+
+static void
+mail_formatter_itip_loader_constructed (GObject *object)
 {
 	EExtensible *extensible;
-	EMailExtensionRegistry *reg;
 
 	extensible = e_extension_get_extensible (E_EXTENSION (object));
-	reg = E_MAIL_EXTENSION_REGISTRY (extensible);
 
-	e_mail_extension_registry_remove_extension (reg, E_MAIL_EXTENSION (object));
+	e_mail_extension_registry_add_extension (
+		E_MAIL_EXTENSION_REGISTRY (extensible),
+		formatter_mime_types,
+		e_mail_formatter_itip_get_type ());
 }
 
 static void
-e_mail_formatter_itip_class_init (EMailFormatterItipClass *class)
+e_mail_formatter_itip_loader_class_init (EExtensionClass *class)
 {
 	GObjectClass *object_class;
-	EExtensionClass *extension_class;
 
 	object_class = G_OBJECT_CLASS (class);
-	object_class->constructed = e_mail_formatter_itip_constructed;
-	object_class->finalize = e_mail_formatter_itip_finalize;
+	object_class->constructed = mail_formatter_itip_loader_constructed;
 
-	extension_class = E_EXTENSION_CLASS (class);
-	extension_class->extensible_type = E_TYPE_MAIL_FORMATTER_EXTENSION_REGISTRY;
+	class->extensible_type = E_TYPE_MAIL_FORMATTER_EXTENSION_REGISTRY;
 }
 
 static void
-e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
+e_mail_formatter_itip_loader_class_finalize (EExtensionClass *class)
 {
-	iface->format = emfe_itip_format;
-	iface->get_display_name = emfe_itip_get_display_name;
-	iface->get_description = emfe_itip_get_description;
 }
 
 static void
-e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
-	iface->mime_types = formatter_mime_types;
-}
-
-static void
-e_mail_formatter_itip_init (EMailFormatterItip *formatter)
+e_mail_formatter_itip_loader_init (EExtension *extension)
 {
 }
 
@@ -214,10 +215,5 @@ void
 e_mail_formatter_itip_type_register (GTypeModule *type_module)
 {
 	e_mail_formatter_itip_register_type (type_module);
-}
-
-static void
-e_mail_formatter_itip_class_finalize (EMailFormatterItipClass *class)
-{
-
+	e_mail_formatter_itip_loader_register_type (type_module);
 }
diff --git a/modules/itip-formatter/e-mail-parser-itip.c b/modules/itip-formatter/e-mail-parser-itip.c
index f8fb4f6..2894b52 100644
--- a/modules/itip-formatter/e-mail-parser-itip.c
+++ b/modules/itip-formatter/e-mail-parser-itip.c
@@ -44,30 +44,30 @@
 
 #define d(x)
 
-typedef struct _EMailParserItip {
-	EExtension parent;
-} EMailParserItip;
+typedef GObject EMailParserItip;
+typedef GObjectClass EMailParserItipClass;
 
-typedef struct _EMailParserItipClass {
-	EExtensionClass parent_class;
-} EMailParserItipClass;
+typedef EExtension EMailParserItipLoader;
+typedef EExtensionClass EMailParserItipLoaderClass;
 
 GType e_mail_parser_itip_get_type (void);
-static void e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface);
+GType e_mail_parser_itip_loader_get_type (void);
 static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
 
 G_DEFINE_DYNAMIC_TYPE_EXTENDED (
 	EMailParserItip,
 	e_mail_parser_itip,
-	E_TYPE_EXTENSION,
+	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE_DYNAMIC (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_parser_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE_DYNAMIC (
 		E_TYPE_MAIL_PARSER_EXTENSION,
 		e_mail_parser_parser_extension_interface_init));
 
+G_DEFINE_DYNAMIC_TYPE (
+	EMailParserItipLoader,
+	e_mail_parser_itip_loader,
+	E_TYPE_EXTENSION)
+
 static const gchar *parser_mime_types[] = {
 	"text/calendar",
 	"application/ics",
@@ -259,70 +259,68 @@ empe_itip_get_flags (EMailParserExtension *extension)
 	return E_MAIL_PARSER_EXTENSION_INLINE_DISPOSITION;
 }
 
-void
-e_mail_parser_itip_type_register (GTypeModule *type_module)
+static void
+e_mail_parser_itip_class_init (EMailParserItipClass *class)
 {
-	e_mail_parser_itip_register_type (type_module);
 }
 
 static void
-e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface)
+e_mail_parser_itip_class_finalize (EMailParserItipClass *class)
 {
-	iface->mime_types = parser_mime_types;
+
 }
 
 static void
 e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
 {
+	iface->mime_types = parser_mime_types;
 	iface->parse = empe_itip_parse;
 	iface->get_flags = empe_itip_get_flags;
 }
 
 static void
-e_mail_parser_itip_constructed (GObject *object)
+e_mail_parser_itip_init (EMailParserItip *self)
 {
-	EExtensible *extensible;
-	EMailExtensionRegistry *reg;
-
-	extensible = e_extension_get_extensible (E_EXTENSION (object));
-	reg = E_MAIL_EXTENSION_REGISTRY (extensible);
-
-	e_mail_extension_registry_add_extension (reg, E_MAIL_EXTENSION (object));
 }
 
 static void
-e_mail_parser_itip_finalize (GObject *object)
+mail_parser_itip_loader_constructed (GObject *object)
 {
 	EExtensible *extensible;
-	EMailExtensionRegistry *reg;
 
 	extensible = e_extension_get_extensible (E_EXTENSION (object));
-	reg = E_MAIL_EXTENSION_REGISTRY (extensible);
 
-	e_mail_extension_registry_remove_extension (reg, E_MAIL_EXTENSION (object));
+	e_mail_extension_registry_add_extension (
+		E_MAIL_EXTENSION_REGISTRY (extensible),
+		parser_mime_types,
+		e_mail_parser_itip_get_type ());
 }
 
 static void
-e_mail_parser_itip_class_init (EMailParserItipClass *class)
+e_mail_parser_itip_loader_class_init (EExtensionClass *class)
 {
 	GObjectClass *object_class;
-	EExtensionClass *extension_class;
 
 	object_class = G_OBJECT_CLASS (class);
-	object_class->constructed = e_mail_parser_itip_constructed;
-	object_class->finalize = e_mail_parser_itip_finalize;
+	object_class->constructed = mail_parser_itip_loader_constructed;
 
-	extension_class = E_EXTENSION_CLASS (class);
-	extension_class->extensible_type = E_TYPE_MAIL_PARSER_EXTENSION_REGISTRY;
+	class->extensible_type = E_TYPE_MAIL_PARSER_EXTENSION_REGISTRY;
 }
 
 static void
-e_mail_parser_itip_class_finalize (EMailParserItipClass *class)
+e_mail_parser_itip_loader_class_finalize (EExtensionClass *class)
 {
-
 }
 
 static void
-e_mail_parser_itip_init (EMailParserItip *self)
+e_mail_parser_itip_loader_init (EExtension *extension)
 {
 }
+
+void
+e_mail_parser_itip_type_register (GTypeModule *type_module)
+{
+	e_mail_parser_itip_register_type (type_module);
+	e_mail_parser_itip_loader_register_type (type_module);
+}
+
diff --git a/modules/prefer-plain/e-mail-parser-prefer-plain.c b/modules/prefer-plain/e-mail-parser-prefer-plain.c
index aad1ea6..eea1d28 100644
--- a/modules/prefer-plain/e-mail-parser-prefer-plain.c
+++ b/modules/prefer-plain/e-mail-parser-prefer-plain.c
@@ -35,8 +35,11 @@
 typedef struct _EMailParserPreferPlain EMailParserPreferPlain;
 typedef struct _EMailParserPreferPlainClass EMailParserPreferPlainClass;
 
+typedef EExtension EMailParserPreferPlainLoader;
+typedef EExtensionClass EMailParserPreferPlainLoaderClass;
+
 struct _EMailParserPreferPlain {
-	EExtension parent;
+	GObject parent;
 
 	GSettings *settings;
 	gint mode;
@@ -44,11 +47,11 @@ struct _EMailParserPreferPlain {
 };
 
 struct _EMailParserPreferPlainClass {
-	EExtensionClass parent_class;
+	GObjectClass parent_class;
 };
 
 GType e_mail_parser_prefer_plain_get_type (void);
-static void e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface);
+GType e_mail_parser_prefer_plain_loader_get_type (void);
 static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
 
 enum {
@@ -60,15 +63,17 @@ enum {
 G_DEFINE_DYNAMIC_TYPE_EXTENDED (
 	EMailParserPreferPlain,
 	e_mail_parser_prefer_plain,
-	E_TYPE_EXTENSION,
+	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE_DYNAMIC (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_parser_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE_DYNAMIC (
 		E_TYPE_MAIL_PARSER_EXTENSION,
 		e_mail_parser_parser_extension_interface_init));
 
+G_DEFINE_DYNAMIC_TYPE (
+	EMailParserPreferPlainLoader,
+	e_mail_parser_prefer_plain_loader,
+	E_TYPE_EXTENSION)
+
 static const gchar *parser_mime_types[] = {
 	"multipart/alternative",
 	"text/html",
@@ -326,37 +331,14 @@ empe_prefer_plain_parse (EMailParserExtension *extension,
 	return TRUE;
 }
 
-void
-e_mail_parser_prefer_plain_type_register (GTypeModule *type_module)
-{
-	e_mail_parser_prefer_plain_register_type (type_module);
-}
-
-static void
-e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface)
-{
-	iface->mime_types = parser_mime_types;
-}
-
 static void
 e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
 {
+	iface->mime_types = parser_mime_types;
 	iface->parse = empe_prefer_plain_parse;
 }
 
 static void
-e_mail_parser_prefer_plain_constructed (GObject *object)
-{
-	EExtensible *extensible;
-	EMailExtensionRegistry *reg;
-
-	extensible = e_extension_get_extensible (E_EXTENSION (object));
-	reg = E_MAIL_EXTENSION_REGISTRY (extensible);
-
-	e_mail_extension_registry_add_extension (reg, E_MAIL_EXTENSION (object));
-}
-
-static void
 e_mail_parser_prefer_plain_get_property (GObject *object,
                                          guint property_id,
                                          GValue *value,
@@ -418,17 +400,12 @@ static void
 e_mail_parser_prefer_plain_class_init (EMailParserPreferPlainClass *class)
 {
 	GObjectClass *object_class;
-	EExtensionClass *extension_class;
 
 	object_class = G_OBJECT_CLASS (class);
-	object_class->constructed = e_mail_parser_prefer_plain_constructed;
 	object_class->get_property = e_mail_parser_prefer_plain_get_property;
 	object_class->set_property = e_mail_parser_prefer_plain_set_property;
 	object_class->dispose = e_mail_parser_prefer_plain_dispose;
 
-	extension_class = E_EXTENSION_CLASS (class);
-	extension_class->extensible_type = E_TYPE_MAIL_PARSER_EXTENSION_REGISTRY;
-
 	g_object_class_install_property (
 		object_class,
 		PROP_MODE,
@@ -520,3 +497,45 @@ e_mail_parser_prefer_plain_init (EMailParserPreferPlain *parser)
 
 	parser->show_suppressed = g_settings_get_boolean (parser->settings, "show-suppressed");
 }
+
+static void
+mail_parser_prefer_plain_loader_constructed (GObject *object)
+{
+	EExtensible *extensible;
+
+	extensible = e_extension_get_extensible (E_EXTENSION (object));
+
+	e_mail_extension_registry_add_extension (
+		E_MAIL_EXTENSION_REGISTRY (extensible),
+		parser_mime_types,
+		e_mail_parser_prefer_plain_get_type ());
+}
+
+static void
+e_mail_parser_prefer_plain_loader_class_init (EExtensionClass *class)
+{
+	GObjectClass *object_class;
+
+	object_class = G_OBJECT_CLASS (class);
+	object_class->constructed = mail_parser_prefer_plain_loader_constructed;
+
+	class->extensible_type = E_TYPE_MAIL_PARSER_EXTENSION_REGISTRY;
+}
+
+static void
+e_mail_parser_prefer_plain_loader_class_finalize (EExtensionClass *class)
+{
+}
+
+static void
+e_mail_parser_prefer_plain_loader_init (EExtension *extension)
+{
+}
+
+void
+e_mail_parser_prefer_plain_type_register (GTypeModule *type_module)
+{
+	e_mail_parser_prefer_plain_register_type (type_module);
+	e_mail_parser_prefer_plain_loader_register_type (type_module);
+}
+
diff --git a/modules/text-highlight/e-mail-formatter-text-highlight.c b/modules/text-highlight/e-mail-formatter-text-highlight.c
index 1400c94..4655d31 100644
--- a/modules/text-highlight/e-mail-formatter-text-highlight.c
+++ b/modules/text-highlight/e-mail-formatter-text-highlight.c
@@ -38,33 +38,30 @@
 #include <X11/Xlib.h>
 #include <camel/camel.h>
 
-typedef struct _EMailFormatterTextHighlight EMailFormatterTextHighlight;
-typedef struct _EMailFormatterTextHighlightClass EMailFormatterTextHighlightClass;
+typedef GObject EMailFormatterTextHighlight;
+typedef GObjectClass EMailFormatterTextHighlightClass;
 
-struct _EMailFormatterTextHighlight {
-	EExtension parent;
-};
-
-struct _EMailFormatterTextHighlightClass {
-	EExtensionClass parent_class;
-};
+typedef EExtension EMailFormatterTextHighlightLoader;
+typedef EExtensionClass EMailFormatterTextHighlightLoaderClass;
 
 GType e_mail_formatter_text_highlight_get_type (void);
+GType e_mail_formatter_text_highlight_loader_get_type (void);
 static void e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
-static void e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_DYNAMIC_TYPE_EXTENDED (
 	EMailFormatterTextHighlight,
 	e_mail_formatter_text_highlight,
-	E_TYPE_EXTENSION,
+	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE_DYNAMIC (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_formatter_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE_DYNAMIC (
 		E_TYPE_MAIL_FORMATTER_EXTENSION,
 		e_mail_formatter_formatter_extension_interface_init));
 
+G_DEFINE_DYNAMIC_TYPE (
+	EMailFormatterTextHighlightLoader,
+	e_mail_formatter_text_highlight_loader,
+	E_TYPE_EXTENSION)
+
 static gchar *
 get_default_font (void)
 {
@@ -377,15 +374,22 @@ emfe_text_highlight_get_description (EMailFormatterExtension *extension)
 }
 
 static void
-emfe_text_highlight_constructed (GObject *object)
+e_mail_formatter_text_highlight_class_init (EMailFormatterTextHighlightClass *class)
 {
-	EExtensible *extensible;
-	EMailExtensionRegistry *reg;
+}
 
-	extensible = e_extension_get_extensible (E_EXTENSION (object));
-	reg = E_MAIL_EXTENSION_REGISTRY (extensible);
+static void
+e_mail_formatter_text_highlight_class_finalize (EMailFormatterTextHighlightClass *class)
+{
+}
 
-	e_mail_extension_registry_add_extension (reg, E_MAIL_EXTENSION (object));
+static void
+e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
+{
+	iface->mime_types = get_mime_types ();
+	iface->format = emfe_text_highlight_format;
+	iface->get_display_name = emfe_text_highlight_get_display_name;
+	iface->get_description = emfe_text_highlight_get_description;
 }
 
 static void
@@ -394,39 +398,43 @@ e_mail_formatter_text_highlight_init (EMailFormatterTextHighlight *object)
 }
 
 static void
-e_mail_formatter_text_highlight_class_init (EMailFormatterTextHighlightClass *class)
+mail_formatter_text_highlight_loader_constructed (GObject *object)
 {
-	GObjectClass *object_class;
-	EExtensionClass *extension_class;
+	EExtensible *extensible;
 
-	object_class = G_OBJECT_CLASS (class);
-	object_class->constructed = emfe_text_highlight_constructed;
+	extensible = e_extension_get_extensible (E_EXTENSION (object));
 
-	extension_class = E_EXTENSION_CLASS (class);
-	extension_class->extensible_type = E_TYPE_MAIL_FORMATTER_EXTENSION_REGISTRY;
+	e_mail_extension_registry_add_extension (
+		E_MAIL_EXTENSION_REGISTRY (extensible),
+		get_mime_types (),
+		e_mail_formatter_text_highlight_get_type ());
 }
 
 static void
-e_mail_formatter_text_highlight_class_finalize (EMailFormatterTextHighlightClass *class)
+e_mail_formatter_text_highlight_loader_class_init (EExtensionClass *class)
 {
+	GObjectClass *object_class;
+
+	object_class = G_OBJECT_CLASS (class);
+	object_class->constructed = mail_formatter_text_highlight_loader_constructed;
+
+	class->extensible_type = E_TYPE_MAIL_FORMATTER_EXTENSION_REGISTRY;
 }
 
-void
-e_mail_formatter_text_highlight_type_register (GTypeModule *type_module)
+static void
+e_mail_formatter_text_highlight_loader_class_finalize (EExtensionClass *class)
 {
-	e_mail_formatter_text_highlight_register_type (type_module);
 }
 
 static void
-e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
+e_mail_formatter_text_highlight_loader_init (EExtension *extension)
 {
-	iface->format = emfe_text_highlight_format;
-	iface->get_display_name = emfe_text_highlight_get_display_name;
-	iface->get_description = emfe_text_highlight_get_description;
 }
 
-static void
-e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface)
+void
+e_mail_formatter_text_highlight_type_register (GTypeModule *type_module)
 {
-	iface->mime_types = get_mime_types ();
+	e_mail_formatter_text_highlight_register_type (type_module);
+	e_mail_formatter_text_highlight_loader_register_type (type_module);
 }
+
diff --git a/modules/text-highlight/e-mail-parser-text-highlight.c b/modules/text-highlight/e-mail-parser-text-highlight.c
index a8c17fd..cf8ff5f 100644
--- a/modules/text-highlight/e-mail-parser-text-highlight.c
+++ b/modules/text-highlight/e-mail-parser-text-highlight.c
@@ -34,30 +34,30 @@
 
 #define d(x)
 
-typedef struct _EMailParserTextHighlight {
-	EExtension parent;
-} EMailParserTextHighlight;
+typedef GObject EMailParserTextHighlight;
+typedef GObjectClass EMailParserTextHighlightClass;
 
-typedef struct _EMailParserTextHighlightClass {
-	EExtensionClass parent_class;
-} EMailParserTextHighlightClass;
+typedef EExtension EMailParserTextHighlightLoader;
+typedef EExtensionClass EMailParserTextHighlightLoaderClass;
 
 GType e_mail_parser_text_highlight_get_type (void);
-static void e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface);
+GType e_mail_parser_text_highlight_loader_get_type (void);
 static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
 
 G_DEFINE_DYNAMIC_TYPE_EXTENDED (
 	EMailParserTextHighlight,
 	e_mail_parser_text_highlight,
-	E_TYPE_EXTENSION,
+	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE_DYNAMIC (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_parser_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE_DYNAMIC (
 		E_TYPE_MAIL_PARSER_EXTENSION,
 		e_mail_parser_parser_extension_interface_init));
 
+G_DEFINE_DYNAMIC_TYPE (
+	EMailParserTextHighlightLoader,
+	e_mail_parser_text_highlight_loader,
+	E_TYPE_EXTENSION)
+
 static gboolean
 empe_text_highlight_parse (EMailParserExtension *extension,
                            EMailParser *parser,
@@ -98,56 +98,66 @@ empe_text_highlight_parse (EMailParserExtension *extension,
 	return TRUE;
 }
 
-void
-e_mail_parser_text_highlight_type_register (GTypeModule *type_module)
+static void
+e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
 {
-	e_mail_parser_text_highlight_register_type (type_module);
+	iface->mime_types = get_mime_types ();
+	iface->parse = empe_text_highlight_parse;
 }
 
 static void
-e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface)
+e_mail_parser_text_highlight_class_init (EMailParserTextHighlightClass *class)
+{
+}
+
+void
+e_mail_parser_text_highlight_class_finalize (EMailParserTextHighlightClass *class)
 {
-	iface->mime_types = get_mime_types ();
 }
 
 static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
+e_mail_parser_text_highlight_init (EMailParserTextHighlight *parser)
 {
-	iface->parse = empe_text_highlight_parse;
 }
 
 static void
-e_mail_parser_text_highlight_constructed (GObject *object)
+mail_parser_text_highlight_loader_constructed (GObject *object)
 {
 	EExtensible *extensible;
-	EMailExtensionRegistry *reg;
 
 	extensible = e_extension_get_extensible (E_EXTENSION (object));
-	reg = E_MAIL_EXTENSION_REGISTRY (extensible);
 
-	e_mail_extension_registry_add_extension (reg, E_MAIL_EXTENSION (object));
+	e_mail_extension_registry_add_extension (
+		E_MAIL_EXTENSION_REGISTRY (extensible),
+		get_mime_types (),
+		e_mail_parser_text_highlight_get_type ());
 }
 
 static void
-e_mail_parser_text_highlight_class_init (EMailParserTextHighlightClass *class)
+e_mail_parser_text_highlight_loader_class_init (EExtensionClass *class)
 {
 	GObjectClass *object_class;
-	EExtensionClass *extension_class;
 
 	object_class = G_OBJECT_CLASS (class);
-	object_class->constructed = e_mail_parser_text_highlight_constructed;
+	object_class->constructed = mail_parser_text_highlight_loader_constructed;
 
-	extension_class = E_EXTENSION_CLASS (class);
-	extension_class->extensible_type = E_TYPE_MAIL_PARSER_EXTENSION_REGISTRY;
+	class->extensible_type = E_TYPE_MAIL_PARSER_EXTENSION_REGISTRY;
 }
 
-void
-e_mail_parser_text_highlight_class_finalize (EMailParserTextHighlightClass *class)
+static void
+e_mail_parser_text_highlight_loader_class_finalize (EExtensionClass *class)
 {
 }
 
 static void
-e_mail_parser_text_highlight_init (EMailParserTextHighlight *parser)
+e_mail_parser_text_highlight_loader_init (EExtension *extension)
 {
+}
 
+void
+e_mail_parser_text_highlight_type_register (GTypeModule *type_module)
+{
+	e_mail_parser_text_highlight_register_type (type_module);
+	e_mail_parser_text_highlight_loader_register_type (type_module);
 }
+
diff --git a/modules/tnef-attachment/e-mail-parser-tnef-attachment.c b/modules/tnef-attachment/e-mail-parser-tnef-attachment.c
index dda02e2..27d8c70 100644
--- a/modules/tnef-attachment/e-mail-parser-tnef-attachment.c
+++ b/modules/tnef-attachment/e-mail-parser-tnef-attachment.c
@@ -50,7 +50,7 @@
 #define d(x)
 
 typedef struct _EMailParserTnefAttachment {
-	EExtension parent;
+	GObject parent;
 
 	GSettings *settings;
 	gint mode;
@@ -58,25 +58,30 @@ typedef struct _EMailParserTnefAttachment {
 } EMailParserTnefAttachment;
 
 typedef struct _EMailParserTnefAttachmentClass {
-	EExtensionClass parent_class;
+	GObjectClass parent_class;
 } EMailParserTnefAttachmentClass;
 
+typedef EExtension EMailParserTnefAttachmentLoader;
+typedef EExtensionClass EMailParserTnefAttachmentLoaderClass;
+
 GType e_mail_parser_tnef_attachment_get_type (void);
-static void e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface);
+GType e_mail_parser_tnef_attachment_loader_get_type (void);
 static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
 
 G_DEFINE_DYNAMIC_TYPE_EXTENDED (
 	EMailParserTnefAttachment,
 	e_mail_parser_tnef_attachment,
-	E_TYPE_EXTENSION,
+	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE_DYNAMIC (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_parser_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE_DYNAMIC (
 		E_TYPE_MAIL_PARSER_EXTENSION,
 		e_mail_parser_parser_extension_interface_init));
 
+G_DEFINE_DYNAMIC_TYPE (
+	EMailParserTnefAttachmentLoader,
+	e_mail_parser_tnef_attachment_loader,
+	E_TYPE_EXTENSION)
+
 static const gchar *parser_mime_types[] = {
 	"application/vnd.ms-tnef",
 	"application/ms-tnefl",
@@ -261,60 +266,70 @@ empe_tnef_attachment_parse (EMailParserExtension *extension,
 	return TRUE;
 }
 
-void
-e_mail_parser_tnef_attachment_type_register (GTypeModule *type_module)
+static void
+e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
 {
-	e_mail_parser_tnef_attachment_register_type (type_module);
+	iface->mime_types = parser_mime_types;
+	iface->parse = empe_tnef_attachment_parse;
 }
 
 static void
-e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface)
+e_mail_parser_tnef_attachment_class_init (EMailParserTnefAttachmentClass *class)
+{
+}
+
+void
+e_mail_parser_tnef_attachment_class_finalize (EMailParserTnefAttachmentClass *class)
 {
-	iface->mime_types = parser_mime_types;
 }
 
 static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
+e_mail_parser_tnef_attachment_init (EMailParserTnefAttachment *parser)
 {
-	iface->parse = empe_tnef_attachment_parse;
 }
 
 static void
-e_mail_parser_tnef_attachment_constructed (GObject *object)
+mail_parser_tnef_attachment_loader_constructed (GObject *object)
 {
 	EExtensible *extensible;
-	EMailExtensionRegistry *reg;
 
 	extensible = e_extension_get_extensible (E_EXTENSION (object));
-	reg = E_MAIL_EXTENSION_REGISTRY (extensible);
 
-	e_mail_extension_registry_add_extension (reg, E_MAIL_EXTENSION (object));
+	e_mail_extension_registry_add_extension (
+		E_MAIL_EXTENSION_REGISTRY (extensible),
+		parser_mime_types,
+		e_mail_parser_tnef_attachment_get_type ());
 }
 
 static void
-e_mail_parser_tnef_attachment_class_init (EMailParserTnefAttachmentClass *class)
+e_mail_parser_tnef_attachment_loader_class_init (EExtensionClass *class)
 {
 	GObjectClass *object_class;
-	EExtensionClass *extension_class;
 
 	object_class = G_OBJECT_CLASS (class);
-	object_class->constructed = e_mail_parser_tnef_attachment_constructed;
+	object_class->constructed = mail_parser_tnef_attachment_loader_constructed;
 
-	extension_class = E_EXTENSION_CLASS (class);
-	extension_class->extensible_type = E_TYPE_MAIL_PARSER_EXTENSION_REGISTRY;
+	class->extensible_type = E_TYPE_MAIL_PARSER_EXTENSION_REGISTRY;
 }
 
-void
-e_mail_parser_tnef_attachment_class_finalize (EMailParserTnefAttachmentClass *class)
+static void
+e_mail_parser_tnef_attachment_loader_class_finalize (EExtensionClass *class)
 {
 }
 
 static void
-e_mail_parser_tnef_attachment_init (EMailParserTnefAttachment *parser)
+e_mail_parser_tnef_attachment_loader_init (EExtension *extension)
 {
 }
 
 void
+e_mail_parser_tnef_attachment_type_register (GTypeModule *type_module)
+{
+	e_mail_parser_tnef_attachment_register_type (type_module);
+	e_mail_parser_tnef_attachment_loader_register_type (type_module);
+}
+
+void
 processTnef (TNEFStruct *tnef,
              const gchar *tmpdir)
 {
diff --git a/modules/vcard-inline/e-mail-formatter-vcard-inline.c b/modules/vcard-inline/e-mail-formatter-vcard-inline.c
index 7d2abfc..8c88729 100644
--- a/modules/vcard-inline/e-mail-formatter-vcard-inline.c
+++ b/modules/vcard-inline/e-mail-formatter-vcard-inline.c
@@ -36,30 +36,30 @@
 
 #define d(x)
 
-typedef struct _EMailFormatterVCardInline {
-	EExtension parent;
-} EMailFormatterVCardInline;
+typedef GObject EMailFormatterVCardInline;
+typedef GObjectClass EMailFormatterVCardInlineClass;
 
-typedef struct _EMailFormatterVCardInlineClass {
-	EExtensionClass parent_class;
-} EMailFormatterVCardInlineClass;
+typedef EExtension EMailFormatterVCardInlineLoader;
+typedef EExtensionClass EMailFormatterVCardInlineLoaderClass;
 
 GType e_mail_formatter_vcard_inline_get_type (void);
+GType e_mail_formatter_vcard_inline_loader_get_type (void);
 static void e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
-static void e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface);
 
 G_DEFINE_DYNAMIC_TYPE_EXTENDED (
 	EMailFormatterVCardInline,
 	e_mail_formatter_vcard_inline,
-	E_TYPE_EXTENSION,
+	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE_DYNAMIC (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_formatter_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE_DYNAMIC (
 		E_TYPE_MAIL_FORMATTER_EXTENSION,
 		e_mail_formatter_formatter_extension_interface_init));
 
+G_DEFINE_DYNAMIC_TYPE (
+	EMailFormatterVCardInlineLoader,
+	e_mail_formatter_vcard_inline_loader,
+	E_TYPE_EXTENSION)
+
 static const gchar *formatter_mime_types[] = {
 	"text/vcard",
 	"text/x-vcard",
@@ -212,58 +212,67 @@ emfe_vcard_inline_get_description (EMailFormatterExtension *extension)
 }
 
 static void
-e_mail_formatter_vcard_inline_constructed (GObject *object)
+e_mail_formatter_vcard_inline_class_init (EMailFormatterVCardInlineClass *class)
 {
-	EExtensible *extensible;
-	EMailExtensionRegistry *reg;
-
-	extensible = e_extension_get_extensible (E_EXTENSION (object));
-	reg = E_MAIL_EXTENSION_REGISTRY (extensible);
-
-	e_mail_extension_registry_add_extension (reg, E_MAIL_EXTENSION (object));
 }
 
 static void
-e_mail_formatter_vcard_inline_class_init (EMailFormatterVCardInlineClass *class)
+e_mail_formatter_vcard_inline_class_finalize (EMailFormatterVCardInlineClass *class)
 {
-	GObjectClass *object_class;
-	EExtensionClass *extension_class;
-
-	object_class = G_OBJECT_CLASS (class);
-	object_class->constructed = e_mail_formatter_vcard_inline_constructed;
-
-	extension_class = E_EXTENSION_CLASS (class);
-	extension_class->extensible_type = E_TYPE_MAIL_FORMATTER_EXTENSION_REGISTRY;
 }
 
 static void
 e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
 {
+	iface->mime_types = formatter_mime_types;
 	iface->format = emfe_vcard_inline_format;
 	iface->get_display_name = emfe_vcard_inline_get_display_name;
 	iface->get_description = emfe_vcard_inline_get_description;
 }
 
 static void
-e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface)
+e_mail_formatter_vcard_inline_init (EMailFormatterVCardInline *formatter)
 {
-	iface->mime_types = formatter_mime_types;
 }
 
 static void
-e_mail_formatter_vcard_inline_init (EMailFormatterVCardInline *formatter)
+mail_formatter_vcard_inline_loader_constructed (GObject *object)
 {
+	EExtensible *extensible;
+
+	extensible = e_extension_get_extensible (E_EXTENSION (object));
 
+	e_mail_extension_registry_add_extension (
+		E_MAIL_EXTENSION_REGISTRY (extensible),
+		formatter_mime_types,
+		e_mail_formatter_vcard_inline_get_type ());
 }
 
-void
-e_mail_formatter_vcard_inline_type_register (GTypeModule *type_module)
+static void
+e_mail_formatter_vcard_inline_loader_class_init (EExtensionClass *class)
 {
-	e_mail_formatter_vcard_inline_register_type (type_module);
+	GObjectClass *object_class;
+
+	object_class = G_OBJECT_CLASS (class);
+	object_class->constructed = mail_formatter_vcard_inline_loader_constructed;
+
+	class->extensible_type = E_TYPE_MAIL_FORMATTER_EXTENSION_REGISTRY;
 }
 
 static void
-e_mail_formatter_vcard_inline_class_finalize (EMailFormatterVCardInlineClass *class)
+e_mail_formatter_vcard_inline_loader_class_finalize (EExtensionClass *class)
 {
+}
 
+static void
+e_mail_formatter_vcard_inline_loader_init (EExtension *extension)
+{
 }
+
+void
+e_mail_formatter_vcard_inline_type_register (GTypeModule *type_module)
+{
+	e_mail_formatter_vcard_inline_register_type (type_module);
+	e_mail_formatter_vcard_inline_loader_register_type (type_module);
+}
+
diff --git a/modules/vcard-inline/e-mail-parser-vcard-inline.c b/modules/vcard-inline/e-mail-parser-vcard-inline.c
index 0f00142..c3998c7 100644
--- a/modules/vcard-inline/e-mail-parser-vcard-inline.c
+++ b/modules/vcard-inline/e-mail-parser-vcard-inline.c
@@ -48,30 +48,30 @@
 
 #define d(x)
 
-typedef struct _EMailParserVCardInline {
-	EExtension parent;
-} EMailParserVCardInline;
+typedef GObject EMailParserVCardInline;
+typedef GObjectClass EMailParserVCardInlineClass;
 
-typedef struct _EMailParserVCardInlineClass {
-	EExtensionClass parent_class;
-} EMailParserVCardInlineClass;
+typedef EExtension EMailParserVCardInlineLoader;
+typedef EExtensionClass EMailParserVCardInlineLoaderClass;
 
 GType e_mail_parser_vcard_inline_get_type (void);
-static void e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface);
+GType e_mail_parser_vcard_inline_loader_get_type (void);
 static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
 
 G_DEFINE_DYNAMIC_TYPE_EXTENDED (
 	EMailParserVCardInline,
 	e_mail_parser_vcard_inline,
-	E_TYPE_EXTENSION,
+	G_TYPE_OBJECT,
 	0,
 	G_IMPLEMENT_INTERFACE_DYNAMIC (
-		E_TYPE_MAIL_EXTENSION,
-		e_mail_parser_mail_extension_interface_init)
-	G_IMPLEMENT_INTERFACE_DYNAMIC (
 		E_TYPE_MAIL_PARSER_EXTENSION,
 		e_mail_parser_parser_extension_interface_init));
 
+G_DEFINE_DYNAMIC_TYPE (
+	EMailParserVCardInlineLoader,
+	e_mail_parser_vcard_inline_loader,
+	E_TYPE_EXTENSION)
+
 static const gchar *parser_mime_types[] = {
 	"text/vcard",
 	"text/x-vcard",
@@ -380,57 +380,68 @@ empe_vcard_inline_get_flags (EMailParserExtension *extension)
 	return E_MAIL_PARSER_EXTENSION_INLINE_DISPOSITION;
 }
 
-void
-e_mail_parser_vcard_inline_type_register (GTypeModule *type_module)
+static void
+e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
 {
-	e_mail_parser_vcard_inline_register_type (type_module);
+	iface->mime_types = parser_mime_types;
+	iface->parse = empe_vcard_inline_parse;
+	iface->get_flags = empe_vcard_inline_get_flags;
 }
 
 static void
-e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface)
+e_mail_parser_vcard_inline_class_init (EMailParserVCardInlineClass *class)
 {
-	iface->mime_types = parser_mime_types;
 }
 
 static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
+e_mail_parser_vcard_inline_class_finalize (EMailParserVCardInlineClass *class)
 {
-	iface->parse = empe_vcard_inline_parse;
-	iface->get_flags = empe_vcard_inline_get_flags;
+
 }
 
 static void
-e_mail_parser_vcard_inline_constructed (GObject *object)
+e_mail_parser_vcard_inline_init (EMailParserVCardInline *self)
+{
+}
+
+static void
+mail_parser_vcard_inline_loader_constructed (GObject *object)
 {
 	EExtensible *extensible;
-	EMailExtensionRegistry *reg;
 
 	extensible = e_extension_get_extensible (E_EXTENSION (object));
-	reg = E_MAIL_EXTENSION_REGISTRY (extensible);
 
-	e_mail_extension_registry_add_extension (reg, E_MAIL_EXTENSION (object));
+	e_mail_extension_registry_add_extension (
+		E_MAIL_EXTENSION_REGISTRY (extensible),
+		parser_mime_types,
+		e_mail_parser_vcard_inline_get_type ());
 }
 
 static void
-e_mail_parser_vcard_inline_class_init (EMailParserVCardInlineClass *class)
+e_mail_parser_vcard_inline_loader_class_init (EExtensionClass *class)
 {
 	GObjectClass *object_class;
-	EExtensionClass *extension_class;
 
 	object_class = G_OBJECT_CLASS (class);
-	object_class->constructed = e_mail_parser_vcard_inline_constructed;
+	object_class->constructed = mail_parser_vcard_inline_loader_constructed;
 
-	extension_class = E_EXTENSION_CLASS (class);
-	extension_class->extensible_type = E_TYPE_MAIL_PARSER_EXTENSION_REGISTRY;
+	class->extensible_type = E_TYPE_MAIL_PARSER_EXTENSION_REGISTRY;
 }
 
 static void
-e_mail_parser_vcard_inline_class_finalize (EMailParserVCardInlineClass *class)
+e_mail_parser_vcard_inline_loader_class_finalize (EExtensionClass *class)
 {
-
 }
 
 static void
-e_mail_parser_vcard_inline_init (EMailParserVCardInline *self)
+e_mail_parser_vcard_inline_loader_init (EExtension *extension)
+{
+}
+
+void
+e_mail_parser_vcard_inline_type_register (GTypeModule *type_module)
 {
+	e_mail_parser_vcard_inline_register_type (type_module);
+	e_mail_parser_vcard_inline_loader_register_type (type_module);
 }
+



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