diff --git a/ChangeLog.API b/ChangeLog.API
--- a/ChangeLog.API
+++ b/ChangeLog.API
@@ -353,6 +353,7 @@
 		* purple_certificate_get_fingerprint_sha256
 		* Purple Cipher API (PurpleCipherContext and friends).
 		  Use GLib's GHmac or GChecksum instead.
+		* PURPLE_CMD_FUNC
 		* purple_connection_error_reason
 		* purple_connection_new
 		* purple_connection_new_unregister
diff --git a/doc/reference/libpurple/libpurple-docs.xml b/doc/reference/libpurple/libpurple-docs.xml
--- a/doc/reference/libpurple/libpurple-docs.xml
+++ b/doc/reference/libpurple/libpurple-docs.xml
@@ -60,8 +60,6 @@
       <xi:include href="xml/plugins.xml" />
       <xi:include href="xml/prefs.xml" />
       <xi:include href="xml/pluginpref.xml" />
-      <xi:include href="xml/protocol.xml" />
-      <xi:include href="xml/protocols.xml" />
       <xi:include href="xml/proxy.xml" />
       <xi:include href="xml/purple-gio.xml" />
       <xi:include href="xml/purpleaccountoption.xml" />
@@ -74,25 +72,13 @@
       <xi:include href="xml/purpleconversation.xml" />
       <xi:include href="xml/purpleconversationmanager.xml" />
       <xi:include href="xml/purpleconversationuiops.xml" />
-      <xi:include href="xml/purplecredentialmanager.xml" />
-      <xi:include href="xml/purplecredentialprovider.xml" />
       <xi:include href="xml/purpledebugui.xml" />
       <xi:include href="xml/purpleimconversation.xml" />
       <xi:include href="xml/purplekeyvaluepair.xml" />
       <xi:include href="xml/purplemarkup.xml" />
-      <xi:include href="xml/purplenoopcredentialprovider.xml" />
       <xi:include href="xml/purpleoptions.xml" />
       <xi:include href="xml/purpleplugininfo.xml" />
       <xi:include href="xml/purplepresence.xml" />
-      <xi:include href="xml/purpleprotocolattention.xml" />
-      <xi:include href="xml/purpleprotocolchat.xml" />
-      <xi:include href="xml/purpleprotocolclient.xml" />
-      <xi:include href="xml/purpleprotocolfactory.xml" />
-      <xi:include href="xml/purpleprotocolim.xml" />
-      <xi:include href="xml/purpleprotocolmanager.xml" />
-      <xi:include href="xml/purpleprotocolmedia.xml" />
-      <xi:include href="xml/purpleprotocolprivacy.xml" />
-      <xi:include href="xml/purpleprotocolserver.xml" />
       <xi:include href="xml/purplewhiteboard.xml" />
       <xi:include href="xml/purplewhiteboardops.xml" />
       <xi:include href="xml/purplewhiteboarduiops.xml" />
@@ -117,6 +103,30 @@
       <xi:include href="xml/util.xml" />
   </part>
 
+  <part id="Credentials">
+    <title>Credentials</title>
+
+    <xi:include href="xml/purplecredentialmanager.xml" />
+    <xi:include href="xml/purplecredentialprovider.xml" />
+    <xi:include href="xml/purplenoopcredentialprovider.xml" />
+  </part>
+
+  <part id="Protocols">
+    <title>Protocols</title>
+
+    <xi:include href="xml/protocol.xml" />
+    <xi:include href="xml/protocols.xml" />
+    <xi:include href="xml/purpleprotocolattention.xml" />
+    <xi:include href="xml/purpleprotocolchat.xml" />
+    <xi:include href="xml/purpleprotocolclient.xml" />
+    <xi:include href="xml/purpleprotocolfactory.xml" />
+    <xi:include href="xml/purpleprotocolim.xml" />
+    <xi:include href="xml/purpleprotocolmanager.xml" />
+    <xi:include href="xml/purpleprotocolmedia.xml" />
+    <xi:include href="xml/purpleprotocolprivacy.xml" />
+    <xi:include href="xml/purpleprotocolserver.xml" />
+  </part>
+
   <part id="Submodules">
     <title>Submodules</title>
     <chapter id="messages">
@@ -172,7 +182,6 @@
       <xi:include href="signals_log.xml" />
       <xi:include href="signals_notify.xml" />
       <xi:include href="signals_plugin.xml" />
-      <xi:include href="signals_protocol.xml" />
       <xi:include href="signals_savedstatus.xml" />
       <xi:include href="signals_jabber.xml" />
   </part>
diff --git a/doc/reference/libpurple/meson.build b/doc/reference/libpurple/meson.build
--- a/doc/reference/libpurple/meson.build
+++ b/doc/reference/libpurple/meson.build
@@ -53,7 +53,6 @@
     'signals_log.xml',
     'signals_notify.xml',
     'signals_plugin.xml',
-    'signals_protocol.xml',
     'signals_savedstatus.xml',
     'signals_xfer.xml',
     'tut_c_plugins.xml',
diff --git a/doc/reference/libpurple/signals_protocol.xml b/doc/reference/libpurple/signals_protocol.xml
deleted file mode 100644
--- a/doc/reference/libpurple/signals_protocol.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version='1.0' encoding="ISO-8859-1"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 
-               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
-]>
-<chapter id="chapter-signals-protocol">
-<title>Protocol signals</title>
-
-<refsect1 id="protocols.signals" role="signal_proto">
-<title role="signal_proto.title">List of signals</title>
-<synopsis>
-  &quot;<link linkend="protocols-protocol-added">protocol-added</link>&quot;
-  &quot;<link linkend="protocols-protocol-removed">protocol-removed</link>&quot;
-</synopsis>
-</refsect1>
-
-<refsect1 id="protocols.signal-details" role="signals">
-<title role="signals.title">Signal details</title>
-
-<refsect2 id="protocols-protocol-added" role="signal">
- <title>The <literal>&quot;protocol-added&quot;</literal> signal</title>
-<programlisting>
-void                user_function                      (PurpleProtocol *protocol,
-                                                        gpointer user_data)
-</programlisting>
-  <para>
-Emitted when a protocol is added.
-  </para>
-  <variablelist role="params">
-  <varlistentry>
-    <term><parameter>protocol</parameter>&#160;:</term>
-    <listitem><simpara>The protocol that was added.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>user_data</parameter>&#160;:</term>
-    <listitem><simpara>user data set when the signal handler was connected.</simpara></listitem>
-  </varlistentry>
-  </variablelist>
-</refsect2>
-
-<refsect2 id="protocols-protocol-removed" role="signal">
- <title>The <literal>&quot;protocol-removed&quot;</literal> signal</title>
-<programlisting>
-void                user_function                      (PurpleProtocol *protocol,
-                                                        gpointer user_data)
-</programlisting>
-  <para>
-Emitted when a protocol is removed.
-  </para>
-  <variablelist role="params">
-  <varlistentry>
-    <term><parameter>protocol</parameter>&#160;:</term>
-    <listitem><simpara>The protocol that was removed.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>user_data</parameter>&#160;:</term>
-    <listitem><simpara>user data set when the signal handler was connected.</simpara></listitem>
-  </varlistentry>
-  </variablelist>
-</refsect2>
-
-</refsect1>
-
-</chapter>
diff --git a/libpurple/buddy.h b/libpurple/buddy.h
--- a/libpurple/buddy.h
+++ b/libpurple/buddy.h
@@ -53,11 +53,23 @@
 #include "purplepresence.h"
 #include "status.h"
 
+/**
+ * PURPLE_BUDDY_IS_ONLINE:
+ * @b: The #PurpleBuddy instance.
+ *
+ * Checks whether @b is online or not.
+ */
 #define PURPLE_BUDDY_IS_ONLINE(b) \
 	(PURPLE_IS_BUDDY(b) \
 	&& purple_account_is_connected(purple_buddy_get_account(PURPLE_BUDDY(b))) \
 	&& purple_presence_is_online(purple_buddy_get_presence(PURPLE_BUDDY(b))))
 
+/**
+ * PURPLE_BLIST_NODE_NAME:
+ * @n: The #PurpleBlistNode instance.
+ *
+ * Gets the name of @n.
+ */
 #define PURPLE_BLIST_NODE_NAME(n) \
 	(PURPLE_IS_CHAT(n) ? purple_chat_get_name(PURPLE_CHAT(n)) : \
 	PURPLE_IS_BUDDY(n) ? purple_buddy_get_name(PURPLE_BUDDY(n)) : NULL)
diff --git a/libpurple/cmds.h b/libpurple/cmds.h
--- a/libpurple/cmds.h
+++ b/libpurple/cmds.h
@@ -80,8 +80,6 @@
 	PURPLE_CMD_RET_CONTINUE
 } PurpleCmdRet;
 
-#define PURPLE_CMD_FUNC(func) ((PurpleCmdFunc)func)
-
 /**
  * PurpleCmdFunc:
  * @conversation: The #PurpleConversation where the command is being run.
diff --git a/libpurple/protocol.h b/libpurple/protocol.h
--- a/libpurple/protocol.h
+++ b/libpurple/protocol.h
@@ -39,7 +39,25 @@
  * #PurpleProtocol is the base type for all protocols in libpurple.
  */
 
+/**
+ * PURPLE_TYPE_PROTOCOL:
+ *
+ * The standard _TYPE_ macro for #PurpleProtocol.
+ *
+ * Since: 3.0.0
+ */
 #define PURPLE_TYPE_PROTOCOL (purple_protocol_get_type())
+
+/**
+ * purple_protocol_get_type:
+ *
+ * Gets the #GType for #PurpleProtocol.
+ *
+ * Returns: The #GType of #PurpleProtocol.
+ *
+ * Since: 3.0.0
+ */
+
 G_DECLARE_DERIVABLE_TYPE(PurpleProtocol, purple_protocol, PURPLE, PROTOCOL,
                          GObject)
 
diff --git a/libpurple/protocols.h b/libpurple/protocols.h
--- a/libpurple/protocols.h
+++ b/libpurple/protocols.h
@@ -30,7 +30,6 @@
  * @section_id: libpurple-protocols
  * @short_description: <filename>protocols.h</filename>
  * @title: Protocols Subsystem API
- * @see_also: <link linkend="chapter-signals-protocol">Protocol signals</link>
  */
 
 /**************************************************************************/
diff --git a/libpurple/purpleattachment.h b/libpurple/purpleattachment.h
--- a/libpurple/purpleattachment.h
+++ b/libpurple/purpleattachment.h
@@ -39,6 +39,14 @@
 
 G_BEGIN_DECLS
 
+/**
+ * PURPLE_TYPE_ATTACHMENT:
+ *
+ * The standard _TYPE_ macro for #PurpleAttachment.
+ *
+ * Since: 3.0.0
+ */
+
 #define PURPLE_TYPE_ATTACHMENT purple_attachment_get_type()
 
 /**
@@ -57,7 +65,6 @@
  *
  * Called when iterating #PurpleAttachment's.
  *
- *
  * Since: 3.0.0
  */
 typedef void (*PurpleAttachmentForeachFunc)(PurpleAttachment *attachment, gpointer data);
diff --git a/libpurple/purpleconversation.h b/libpurple/purpleconversation.h
--- a/libpurple/purpleconversation.h
+++ b/libpurple/purpleconversation.h
@@ -43,6 +43,13 @@
 
 #include <purplemessage.h>
 
+/**
+ * PURPLE_TYPE_CONVERSATION:
+ *
+ * The standard _TYPE_ macro for PurpleConversation.
+ *
+ * Since: 3.0.0
+ */
 #define PURPLE_TYPE_CONVERSATION (purple_conversation_get_type())
 G_DECLARE_DERIVABLE_TYPE(PurpleConversation, purple_conversation, PURPLE,
                          CONVERSATION, GObject)
diff --git a/libpurple/purpleconversationmanager.h b/libpurple/purpleconversationmanager.h
--- a/libpurple/purpleconversationmanager.h
+++ b/libpurple/purpleconversationmanager.h
@@ -30,7 +30,8 @@
 /**
  * SECTION:purpleconversationmanager
  * @section_id: libpurple-purpleconversationmanager
- * @title: Management of conversations
+ * @title: Conversation Management
+ * @short_description: Management of conversations.
  *
  * #PurpleConversationManager keeps track of all #PurpleConversation's inside of
  * libpurple and allows searching of them.
@@ -39,7 +40,32 @@
 
 G_BEGIN_DECLS
 
+/**
+ * PURPLE_TYPE_CONVERSATION_MANAGER:
+ *
+ * The standard _TYPE_ macro for PurpleConversationManager.
+ *
+ * Since: 3.0.0
+ */
 #define PURPLE_TYPE_CONVERSATION_MANAGER (purple_conversation_manager_get_type())
+
+/**
+ * purple_conversation_manager_get_type:
+ *
+ * Gets the #GType of #PurpleConversationManager.
+ *
+ * Returns: The #GType of #PurpleConversationManager.
+ *
+ * Since: 3.0.0
+ */
+
+/**
+ * PurpleConversationManager:
+ *
+ * An opaque structure that represents the conversation manager.
+ *
+ * Since: 3.0.0
+ */
 G_DECLARE_FINAL_TYPE(PurpleConversationManager, purple_conversation_manager,
                      PURPLE, CONVERSATION_MANAGER, GObject)
 
diff --git a/libpurple/purplecredentialmanager.h b/libpurple/purplecredentialmanager.h
--- a/libpurple/purplecredentialmanager.h
+++ b/libpurple/purplecredentialmanager.h
@@ -35,6 +35,7 @@
  * SECTION:purplecredentialmanager
  * @section_id: libpurple-purplecredentialmanager
  * @title: Purple Credential Manager
+ * @short_description: Management of credential providers.
  *
  * Purple Credential Manager is the main API access to different credential
  * providers. Providers register themselves with the manager and then the user
diff --git a/libpurple/purplecredentialprovider.h b/libpurple/purplecredentialprovider.h
--- a/libpurple/purplecredentialprovider.h
+++ b/libpurple/purplecredentialprovider.h
@@ -32,7 +32,13 @@
 /**
  * SECTION:purplecredentialprovider
  * @section_id: libpurple-purplecredentialprovider
- * @title: Credential Provider Object
+ * @title: Credential Provider Objectu
+ * @short_description: Abstraction of credential providers.
+ *
+ * #PurpleCredentialProvider is an abstract base class for implementing support
+ * for a specific password or keyring manager. At the time of this writing,
+ * libpurple ships with plugins for libsecret, KWallet, and the Windows
+ * Credentials store by subclassing #PurpleCredentialProvider.
  */
 
 G_BEGIN_DECLS
@@ -56,7 +62,25 @@
  * Since: 3.0.0
  */
 
+/**
+ * PURPLE_TYPE_CREDENTIAL_PROVIDER:
+ *
+ * The standard _TYPE_ macro for PurpleCredentialProvider.
+ *
+ * Since: 3.0.0
+ */
+
 #define PURPLE_TYPE_CREDENTIAL_PROVIDER (purple_credential_provider_get_type())
+
+/**
+ * purple_credential_provider_get_type:
+ *
+ * Gets the #GType of #PurpleCredentialProvider.
+ *
+ * Returns: The #GType of #PurpleCredentialProvider.
+ *
+ * Since: 3.0.0
+ */
 G_DECLARE_DERIVABLE_TYPE(PurpleCredentialProvider, purple_credential_provider,
                          PURPLE, CREDENTIAL_PROVIDER, GObject)
 
diff --git a/libpurple/purplemessage.h b/libpurple/purplemessage.h
--- a/libpurple/purplemessage.h
+++ b/libpurple/purplemessage.h
@@ -73,6 +73,7 @@
  * @PURPLE_MESSAGE_REMOTE_SEND: Message sent from another location, not an echo
  *                              of a local one.
  *                              Since: 2.12.0
+ * @PURPLE_MESSAGE_FORWARDED: The message has been forward to the recipient.
  *
  * Flags applicable to a message. Most will have send, recv or system.
  */
diff --git a/libpurple/purplenoopcredentialprovider.h b/libpurple/purplenoopcredentialprovider.h
--- a/libpurple/purplenoopcredentialprovider.h
+++ b/libpurple/purplenoopcredentialprovider.h
@@ -32,6 +32,7 @@
  * SECTION:purplenoopcredentialprovider
  * @section_id: libpurple-purplenoopcredentialprovider
  * @title: No Operation Credential Provider Object
+ * @short_description: A #PurpleCredentialProvider that does nothing.
  *
  * This is the "None" credential provider that always returns failures so that
  * the user is forced to enter a password.
@@ -49,7 +50,24 @@
  * Since: 3.0.0
  */
 
+/**
+ * PURPLE_TYPE_NOOP_CREDENTIAL_PROVIDER:
+ *
+ * The standard _TYPE_ macro for #PurpleNoopCredentialProvider.
+ *
+ * Since: 3.0.0
+ */
 #define PURPLE_TYPE_NOOP_CREDENTIAL_PROVIDER (purple_noop_credential_provider_get_type())
+
+/**
+ * purple_noop_credential_provider_get_type:
+ *
+ * Gets the #GType of #PurpleNoopCredentialProvider.
+ *
+ * Returns: The #GType of #PurpleNoopCredentialProvider.
+ *
+ * Since: 3.0.0
+ */
 G_DECLARE_FINAL_TYPE(PurpleNoopCredentialProvider,
                      purple_noop_credential_provider,
                      PURPLE, NOOP_CREDENTIAL_PROVIDER, PurpleCredentialProvider)
diff --git a/libpurple/purpleplugininfo.h b/libpurple/purpleplugininfo.h
--- a/libpurple/purpleplugininfo.h
+++ b/libpurple/purpleplugininfo.h
@@ -27,9 +27,13 @@
  * SECTION:purpleplugininfo
  * @section_id: libpurple-purpleplugininfo
  * @title: PurplePluginInfo Object
+ * @short_description: A object representing information about purple plugins.
  * @see_also: <link linkend="chapter-signals-plugin">Plugin signals</link>,
  *     <link linkend="chapter-plugin-ids">Plugin IDs</link>,
  *     <link linkend="chapter-plugin-i18n">Third Party Plugin Translation</link>
+ *
+ * #PurplePluginInfo is a #GPluginPluginInfo subclass that adds additional
+ * libpurple specific properties.
  */
 
 #include <glib.h>
@@ -43,19 +47,32 @@
  * PURPLE_TYPE_PLUGIN_INFO:
  *
  * The standard _get_type macro for #PurplePluginInfo.
+ *
+ * Since: 3.0.0
  */
 #define PURPLE_TYPE_PLUGIN_INFO (purple_plugin_info_get_type())
 
 /**
  * purple_plugin_info_get_type:
  *
+ * The standard _get_type function for #PurplePluginInfo.
+ *
  * Returns: The #GType for the #PurplePluginInfo object.
+ *
+ * Since: 3.0.0
  */
-G_DECLARE_DERIVABLE_TYPE(PurplePluginInfo, purple_plugin_info, PURPLE, PLUGIN_INFO,
-                         GPluginPluginInfo)
+G_DECLARE_DERIVABLE_TYPE(PurplePluginInfo, purple_plugin_info, PURPLE,
+                         PLUGIN_INFO, GPluginPluginInfo)
 
 #include "plugins.h"
 
+/**
+ * PurplePluginInfoClass:
+ *
+ * An opaque type representing the class of a #PurplePluginInfo.
+ *
+ * Since: 3.0.0
+ */
 struct _PurplePluginInfoClass {
 	/*< private >*/
 	GPluginPluginInfoClass parent;
@@ -104,17 +121,24 @@
 typedef gpointer (*PurplePluginPrefRequestCb)(PurplePlugin *plugin);
 
 /**
+ * PURPLE_TYPE_PLUGIN_INFO_FLAGS:
+ *
+ * The standard type macro for #PurplePluginInfoFlags.
+ */
+
+/**
  * PurplePluginInfoFlags:
  * @PURPLE_PLUGIN_INFO_FLAGS_INTERNAL:  Plugin is not shown in UI lists
  * @PURPLE_PLUGIN_INFO_FLAGS_AUTO_LOAD: Auto-load the plugin
  *
  * Flags that can be used to treat plugins differently.
+ *
+ * Since: 3.0.0
  */
 typedef enum /*< flags >*/
 {
 	PURPLE_PLUGIN_INFO_FLAGS_INTERNAL  = 1 << 1,
 	PURPLE_PLUGIN_INFO_FLAGS_AUTO_LOAD = 1 << 2,
-
 } PurplePluginInfoFlags;
 
 /**
@@ -127,6 +151,11 @@
 
 /**
  * PURPLE_PLUGIN_ABI_VERSION:
+ * @major: The major version of libpurple to target.
+ * @minor: The minor version of libpurple to target.
+ *
+ * Packs @major and @minor into an integer to be used as an abi version for
+ * gplugin.
  *
  * Note: The lower six nibbles represent the ABI version for libpurple, the
  *       rest are required by GPlugin.
@@ -138,6 +167,9 @@
 
 /**
  * PURPLE_PLUGIN_ABI_MAJOR_VERSION:
+ * @abi: The abi version.
+ *
+ * Extracts the purple major version from @abi.
  *
  * Returns: The major version from an ABI version
  */
@@ -146,6 +178,9 @@
 
 /**
  * PURPLE_PLUGIN_ABI_MINOR_VERSION:
+ * @abi: The abi version.
+ *
+ * Extracts the purple minor version from @abi.
  *
  * Returns: The minor version from an ABI version
  */
diff --git a/libpurple/purpleprotocolattention.h b/libpurple/purpleprotocolattention.h
--- a/libpurple/purpleprotocolattention.h
+++ b/libpurple/purpleprotocolattention.h
@@ -34,6 +34,10 @@
  * SECTION:purpleprotocolattention
  * @section_id: libpurple-purpleprotocolattention
  * @title: Protocol Attention Interface
+ * @short_description: Protocol interface for attention.
+ *
+ * @PurpleProtocolAttention is an interface that PurpleProtocols can implement
+ * to support getting a contact's attention.
  */
 
 #include "account.h"
@@ -45,13 +49,28 @@
  * PURPLE_TYPE_PROTOCOL_ATTENTION:
  *
  * The standard _get_type macro for #PurpleProtocolAttention.
+ *
+ * Since: 3.0.0
  */
 #define PURPLE_TYPE_PROTOCOL_ATTENTION (purple_protocol_attention_get_type())
 
 /**
  * purple_protocol_attention_get_type:
  *
+ * Gets the #GType for #PurpleProtocolAttentionInterface.
+ *
  * Returns: The #GType for the protocol attention interface.
+ *
+ * Since: 3.0.0
+ */
+
+/**
+ * PurpleProtocolAttention:
+ *
+ * An opaque data structure used to represent an object that implements the
+ * #PurpleProtocolAttention interface.
+ *
+ * Since: 3.0.0
  */
 G_DECLARE_INTERFACE(PurpleProtocolAttention, purple_protocol_attention, PURPLE,
                     PROTOCOL_ATTENTION, GObject)
@@ -67,6 +86,8 @@
  *
  * This interface provides attention API for sending and receiving
  * zaps/nudges/buzzes etc.
+ *
+ * Since: 3.0.0
  */
 struct _PurpleProtocolAttentionInterface {
 	/*< private >*/
diff --git a/libpurple/purpleprotocolchat.h b/libpurple/purpleprotocolchat.h
--- a/libpurple/purpleprotocolchat.h
+++ b/libpurple/purpleprotocolchat.h
@@ -43,21 +43,39 @@
 #include <libpurple/connection.h>
 #include <libpurple/purplemessage.h>
 
+/**
+ * PURPLE_TYPE_PROTOCOL_CHAT:
+ *
+ * The standard _TYPE_ macro for #PurpleProtocolChat.
+ *
+ * Since: 3.0.0
+ */
 #define PURPLE_TYPE_PROTOCOL_CHAT (purple_protocol_chat_get_type())
+
+/**
+ * purple_protocol_chat_get_type:
+ *
+ * Gets the #GType for #PurpleProtocolChat.
+ *
+ * Returns: The #GType for #PurpleProtocolChat.
+ *
+ * Since: 3.0.0
+ */
+
+/**
+ * PurpleProtocolChat:
+ *
+ * An opaque representation of an object that implements
+ * #PurpleProtocolChatInterface.
+ *
+ * Since: 3.0.0
+ */
 G_DECLARE_INTERFACE(PurpleProtocolChat, purple_protocol_chat, PURPLE, PROTOCOL_CHAT,
                     GObject)
 
 G_BEGIN_DECLS
 
 /**
- * PURPLE_TYPE_PROTOCOL_CHAT:
- *
- * The standard _get_type method for #PurpleProtocolChat.
- *
- * Since: 3.0.0
- */
-
-/**
  * PurpleProtocolChatInterface:
  * @info: Returns a list of #PurpleProtocolChatEntry structs, which represent
  *        information required by the protocol to join a chat. libpurple will
diff --git a/libpurple/purpleprotocolim.h b/libpurple/purpleprotocolim.h
--- a/libpurple/purpleprotocolim.h
+++ b/libpurple/purpleprotocolim.h
@@ -30,8 +30,8 @@
 /**
  * SECTION:purpleprotocolim
  * @section_id: libpurple-purpleprotocolim
+ * @title: ProtocolIM Interface
  * @short_description: Protocol Instant Message Interface
- * @title: ProtocolIM Interface
  *
  * #PurpleProtocolIM describes the API that protocols need to implement for
  * handling one on one conversations.
@@ -42,17 +42,35 @@
 
 #include <libpurple/connection.h>
 
-#define PURPLE_TYPE_PROTOCOL_IM (purple_protocol_im_get_type())
-G_DECLARE_INTERFACE(PurpleProtocolIM, purple_protocol_im, PURPLE, PROTOCOL_IM,
-                    GObject)
-
 /**
  * PURPLE_TYPE_PROTOCOL_IM:
  *
- * The standard _get_type method for #PurpleProtocolIM.
+ * The standard _TYPE_ macro for #PurpleProtocolIM.
  *
  * Since: 3.0.0
  */
+#define PURPLE_TYPE_PROTOCOL_IM (purple_protocol_im_get_type())
+
+/**
+ * purple_protocol_im_get_type:
+ *
+ * Gets the #GType for #PurpleProtocolIM.
+ *
+ * Returns: The #GType for #PurpleProtocolIM.
+ *
+ * Since: 3.0.0
+ */
+
+/**
+ * PurpleProtocolIM:
+ *
+ * An opaque data structure that represents and object that implements
+ * #PurpleProtocolIMInterface.
+ *
+ * Since: 3.0.0
+ */
+G_DECLARE_INTERFACE(PurpleProtocolIM, purple_protocol_im, PURPLE, PROTOCOL_IM,
+                    GObject)
 
 /**
  * PurpleProtocolIMInterface:
@@ -106,7 +124,7 @@
                              PurpleMessage *msg);
 
 /**
- * purple_protocol_im_send_type:
+ * purple_protocol_im_send_typing:
  * @im: The #PurpleProtocolIM instance.
  * @connection: The #PurpleConversation to use.
  * @name: The name of the user to send a typing notification to.
diff --git a/libpurple/purpleprotocolmanager.h b/libpurple/purpleprotocolmanager.h
--- a/libpurple/purpleprotocolmanager.h
+++ b/libpurple/purpleprotocolmanager.h
@@ -34,6 +34,7 @@
  * SECTION:purpleprotocolmanager
  * @section_id: libpurple-purpleprotocolmanager
  * @title: Purple Protocol Manager
+ * @short_description: Collection manager for protocols.
  *
  * #PurpleProtocolManager keeps track of all protocols and emits signals when
  * protocols are registered and unregistered.
diff --git a/libpurple/purpleprotocolmanager.c b/libpurple/purpleprotocolmanager.c
--- a/libpurple/purpleprotocolmanager.c
+++ b/libpurple/purpleprotocolmanager.c
@@ -70,7 +70,7 @@
 	obj_class->finalize = purple_protocol_manager_finalize;
 
 	/**
-	 * PurpleProtocolManager::protocol-registered:
+	 * PurpleProtocolManager::registered:
 	 * @manager: The #PurpleProtocolManager instance.
 	 * @protocol: The #PurpleProtocol that was registered.
 	 *
@@ -91,7 +91,7 @@
 		PURPLE_TYPE_PROTOCOL);
 
 	/**
-	 * PurpleProtocolManager::protocol-unregistered:
+	 * PurpleProtocolManager::unregistered:
 	 * @manager: The #PurpleProtocolManager instance.
 	 * @protocol: The #PurpleProtocol that was unregistered.
 	 *
