diff --git a/libpurple/purpleprotocolattention.h b/libpurple/purpleprotocolattention.h
--- a/libpurple/purpleprotocolattention.h
+++ b/libpurple/purpleprotocolattention.h
@@ -40,8 +40,9 @@
  * to support getting a contact's attention.
  */
 
-#include "account.h"
-#include "connection.h"
+#include <libpurple/account.h>
+#include <libpurple/connection.h>
+#include <libpurple/protocol.h>
 
 G_BEGIN_DECLS
 
@@ -73,7 +74,7 @@
  * Since: 3.0.0
  */
 G_DECLARE_INTERFACE(PurpleProtocolAttention, purple_protocol_attention, PURPLE,
-                    PROTOCOL_ATTENTION, GObject)
+                    PROTOCOL_ATTENTION, PurpleProtocol)
 
 /**
  * PurpleProtocolAttentionInterface:
# HG changeset patch
# Node ID 9cc5a5ae7cf5
# Parent  f1bdc43bf086
diff --git a/libpurple/purpleprotocolattention.c b/libpurple/purpleprotocolattention.c
--- a/libpurple/purpleprotocolattention.c
+++ b/libpurple/purpleprotocolattention.c
@@ -23,7 +23,7 @@
 #include "purpleprotocolattention.h"
 
 G_DEFINE_INTERFACE(PurpleProtocolAttention, purple_protocol_attention,
-                   G_TYPE_INVALID)
+                   PURPLE_TYPE_PROTOCOL)
 
 /******************************************************************************
  * GInterface Implementation
diff --git a/libpurple/purpleprotocolchat.h b/libpurple/purpleprotocolchat.h
--- a/libpurple/purpleprotocolchat.h
+++ b/libpurple/purpleprotocolchat.h
@@ -42,6 +42,7 @@
 
 #include <libpurple/connection.h>
 #include <libpurple/purplemessage.h>
+#include <libpurple/protocol.h>
 
 /**
  * PURPLE_TYPE_PROTOCOL_CHAT:
@@ -70,8 +71,8 @@
  *
  * Since: 3.0.0
  */
-G_DECLARE_INTERFACE(PurpleProtocolChat, purple_protocol_chat, PURPLE, PROTOCOL_CHAT,
-                    GObject)
+G_DECLARE_INTERFACE(PurpleProtocolChat, purple_protocol_chat, PURPLE,
+                    PROTOCOL_CHAT, PurpleProtocol)
 
 G_BEGIN_DECLS
 
diff --git a/libpurple/purpleprotocolchat.c b/libpurple/purpleprotocolchat.c
--- a/libpurple/purpleprotocolchat.c
+++ b/libpurple/purpleprotocolchat.c
@@ -25,7 +25,8 @@
 /******************************************************************************
  * GObject Implementation
  *****************************************************************************/
-G_DEFINE_INTERFACE(PurpleProtocolChat, purple_protocol_chat, G_TYPE_INVALID)
+G_DEFINE_INTERFACE(PurpleProtocolChat, purple_protocol_chat,
+                   PURPLE_TYPE_PROTOCOL)
 
 static void
 purple_protocol_chat_default_init(PurpleProtocolChatInterface *iface) {
diff --git a/libpurple/purpleprotocolclient.h b/libpurple/purpleprotocolclient.h
--- a/libpurple/purpleprotocolclient.h
+++ b/libpurple/purpleprotocolclient.h
@@ -42,10 +42,11 @@
 
 #include <libpurple/account.h>
 #include <libpurple/connection.h>
+#include <libpurple/protocol.h>
 
 #define PURPLE_TYPE_PROTOCOL_CLIENT (purple_protocol_client_get_type())
 G_DECLARE_INTERFACE(PurpleProtocolClient, purple_protocol_client, PURPLE,
-                    PROTOCOL_CLIENT, GObject)
+                    PROTOCOL_CLIENT, PurpleProtocol)
 
 /**
  * PURPLE_TYPE_PROTOCOL_CLIENT:
diff --git a/libpurple/purpleprotocolclient.c b/libpurple/purpleprotocolclient.c
--- a/libpurple/purpleprotocolclient.c
+++ b/libpurple/purpleprotocolclient.c
@@ -25,7 +25,8 @@
 /******************************************************************************
  * GObject Implementation
  *****************************************************************************/
-G_DEFINE_INTERFACE(PurpleProtocolClient, purple_protocol_client, G_TYPE_INVALID)
+G_DEFINE_INTERFACE(PurpleProtocolClient, purple_protocol_client,
+                   PURPLE_TYPE_PROTOCOL)
 
 static void
 purple_protocol_client_default_init(PurpleProtocolClientInterface *iface) {
diff --git a/libpurple/purpleprotocolfactory.h b/libpurple/purpleprotocolfactory.h
--- a/libpurple/purpleprotocolfactory.h
+++ b/libpurple/purpleprotocolfactory.h
@@ -53,7 +53,7 @@
  */
 #define PURPLE_TYPE_PROTOCOL_FACTORY (purple_protocol_factory_iface_get_type())
 G_DECLARE_INTERFACE(PurpleProtocolFactory, purple_protocol_factory, PURPLE,
-                    PROTOCOL_FACTORY, GObject)
+                    PROTOCOL_FACTORY, PurpleProtocol)
 
 /**
  * PurpleProtocolFactory:
diff --git a/libpurple/purpleprotocolfactory.c b/libpurple/purpleprotocolfactory.c
--- a/libpurple/purpleprotocolfactory.c
+++ b/libpurple/purpleprotocolfactory.c
@@ -22,7 +22,8 @@
 
 #include "purpleprotocolfactory.h"
 
-G_DEFINE_INTERFACE(PurpleProtocolFactory, purple_protocol_factory, G_TYPE_INVALID);
+G_DEFINE_INTERFACE(PurpleProtocolFactory, purple_protocol_factory,
+                   PURPLE_TYPE_PROTOCOL);
 
 /******************************************************************************
  * GInterface Implementation
diff --git a/libpurple/purpleprotocolim.h b/libpurple/purpleprotocolim.h
--- a/libpurple/purpleprotocolim.h
+++ b/libpurple/purpleprotocolim.h
@@ -41,6 +41,7 @@
 #include <glib-object.h>
 
 #include <libpurple/connection.h>
+#include <libpurple/protocol.h>
 
 /**
  * PURPLE_TYPE_PROTOCOL_IM:
@@ -70,7 +71,7 @@
  * Since: 3.0.0
  */
 G_DECLARE_INTERFACE(PurpleProtocolIM, purple_protocol_im, PURPLE, PROTOCOL_IM,
-                    GObject)
+                    PurpleProtocol)
 
 /**
  * PurpleProtocolIMInterface:
diff --git a/libpurple/purpleprotocolim.c b/libpurple/purpleprotocolim.c
--- a/libpurple/purpleprotocolim.c
+++ b/libpurple/purpleprotocolim.c
@@ -24,7 +24,7 @@
 /******************************************************************************
  * GObject Implementation
  *****************************************************************************/
-G_DEFINE_INTERFACE(PurpleProtocolIM, purple_protocol_im, G_TYPE_INVALID)
+G_DEFINE_INTERFACE(PurpleProtocolIM, purple_protocol_im, PURPLE_TYPE_PROTOCOL)
 
 static void
 purple_protocol_im_default_init(PurpleProtocolIMInterface *iface) {
diff --git a/libpurple/purpleprotocolmedia.h b/libpurple/purpleprotocolmedia.h
--- a/libpurple/purpleprotocolmedia.h
+++ b/libpurple/purpleprotocolmedia.h
@@ -42,10 +42,11 @@
 
 #include <libpurple/account.h>
 #include <libpurple/media.h>
+#include <libpurple/protocol.h>
 
 #define PURPLE_TYPE_PROTOCOL_MEDIA (purple_protocol_media_get_type())
 G_DECLARE_INTERFACE(PurpleProtocolMedia, purple_protocol_media, PURPLE,
-                    PROTOCOL_MEDIA, GObject)
+                    PROTOCOL_MEDIA, PurpleProtocol)
 
 G_BEGIN_DECLS
 
diff --git a/libpurple/purpleprotocolmedia.c b/libpurple/purpleprotocolmedia.c
--- a/libpurple/purpleprotocolmedia.c
+++ b/libpurple/purpleprotocolmedia.c
@@ -24,7 +24,8 @@
 /******************************************************************************
  * GObject Implementation
  *****************************************************************************/
-G_DEFINE_INTERFACE(PurpleProtocolMedia, purple_protocol_media, G_TYPE_INVALID)
+G_DEFINE_INTERFACE(PurpleProtocolMedia, purple_protocol_media,
+                   PURPLE_TYPE_PROTOCOL)
 
 static void
 purple_protocol_media_default_init(PurpleProtocolMediaInterface *iface) {
diff --git a/libpurple/purpleprotocolprivacy.h b/libpurple/purpleprotocolprivacy.h
--- a/libpurple/purpleprotocolprivacy.h
+++ b/libpurple/purpleprotocolprivacy.h
@@ -40,6 +40,7 @@
 #include <glib-object.h>
 
 #include <libpurple/connection.h>
+#include <libpurple/protocol.h>
 
 /**
  * PURPLE_TYPE_PROTOCOL_PRIVACY:
@@ -48,7 +49,7 @@
  */
 #define PURPLE_TYPE_PROTOCOL_PRIVACY (purple_protocol_privacy_get_type())
 G_DECLARE_INTERFACE(PurpleProtocolPrivacy, purple_protocol_privacy, PURPLE,
-                    PROTOCOL_PRIVACY, GObject)
+                    PROTOCOL_PRIVACY, PurpleProtocol)
 
 /**
  * PurpleProtocolPrivacyInterface:
diff --git a/libpurple/purpleprotocolprivacy.c b/libpurple/purpleprotocolprivacy.c
--- a/libpurple/purpleprotocolprivacy.c
+++ b/libpurple/purpleprotocolprivacy.c
@@ -25,7 +25,7 @@
  * GObject Implementation
  *****************************************************************************/
 G_DEFINE_INTERFACE(PurpleProtocolPrivacy, purple_protocol_privacy,
-                   G_TYPE_INVALID)
+                   PURPLE_TYPE_PROTOCOL)
 
 static void
 purple_protocol_privacy_default_init(PurpleProtocolPrivacyInterface *iface) {
diff --git a/libpurple/purpleprotocolserver.h b/libpurple/purpleprotocolserver.h
--- a/libpurple/purpleprotocolserver.h
+++ b/libpurple/purpleprotocolserver.h
@@ -44,11 +44,12 @@
 #include <libpurple/buddy.h>
 #include <libpurple/connection.h>
 #include <libpurple/group.h>
+#include <libpurple/protocol.h>
 #include <libpurple/purplemessage.h>
 
 #define PURPLE_TYPE_PROTOCOL_SERVER (purple_protocol_server_get_type())
 G_DECLARE_INTERFACE(PurpleProtocolServer, purple_protocol_server, PURPLE,
-                    PROTOCOL_SERVER, GObject)
+                    PROTOCOL_SERVER, PurpleProtocol)
 
 G_BEGIN_DECLS
 
diff --git a/libpurple/purpleprotocolserver.c b/libpurple/purpleprotocolserver.c
--- a/libpurple/purpleprotocolserver.c
+++ b/libpurple/purpleprotocolserver.c
@@ -25,7 +25,8 @@
 /******************************************************************************
  * GObject Implementation
  *****************************************************************************/
-G_DEFINE_INTERFACE(PurpleProtocolServer, purple_protocol_server, G_TYPE_INVALID)
+G_DEFINE_INTERFACE(PurpleProtocolServer, purple_protocol_server,
+                   PURPLE_TYPE_PROTOCOL)
 
 static void
 purple_protocol_server_default_init(PurpleProtocolServerInterface *iface) {
diff --git a/libpurple/xfer.h b/libpurple/xfer.h
--- a/libpurple/xfer.h
+++ b/libpurple/xfer.h
@@ -51,8 +51,9 @@
 #include <glib.h>
 #include <stdio.h>
 
-#include "account.h"
-#include "connection.h"
+#include <libpurple/account.h>
+#include <libpurple/connection.h>
+#include <libpurple/protocol.h>
 
 /**
  * PurpleXferType:
@@ -834,7 +835,7 @@
  * Returns: The #GType for the protocol xfer interface.
  */
 G_DECLARE_INTERFACE(PurpleProtocolXfer, purple_protocol_xfer, PURPLE,
-                    PROTOCOL_XFER, GObject)
+                    PROTOCOL_XFER, PurpleProtocol)
 
 /**
  * PurpleProtocolXferInterface:
diff --git a/libpurple/xfer.c b/libpurple/xfer.c
--- a/libpurple/xfer.c
+++ b/libpurple/xfer.c
@@ -2519,7 +2519,8 @@
 /**************************************************************************
  * PurpleXferProtocolInterface
  **************************************************************************/
-G_DEFINE_INTERFACE(PurpleProtocolXfer, purple_protocol_xfer, G_TYPE_INVALID);
+G_DEFINE_INTERFACE(PurpleProtocolXfer, purple_protocol_xfer,
+                   PURPLE_TYPE_PROTOCOL)
 
 static void
 purple_protocol_xfer_default_init(PurpleProtocolXferInterface *face) {
