# HG changeset patch
# Node ID 7464bd94115a
# Parent  41b4d8fdde2e
diff --git a/ChangeLog.API b/ChangeLog.API
--- a/ChangeLog.API
+++ b/ChangeLog.API
@@ -249,7 +249,19 @@
 		* account-setting-info, account-set-info signals
 		* account-status-changing signal.
 		* buddy-status-changed signal.
+		* chat-invite-blocked signal.
+		* chat-invited signal.
+		* chat-invited-user signal.
+		* chat-inviting-user signal.
+		* chat-join-failed signal.
+		* chat-joined signal.
+		* chat-left signal.
 		* chat-topic-changed signal.
+		* chat-user-flags signal.
+		* chat-user-joined signal.
+		* chat-user-joining signal.
+		* chat-user-left signal.
+		* chat-user-leaving signal.
 		* file-recv-accept, file-recv-cancel, file-recv-complete,
 		  file-recv-start, file-send-accept, file-send-cancel,
 		  file-send-complete, file-send-start signals. Use
@@ -880,6 +892,10 @@
 		* purple_xfers_set_ui_ops
 		* purple_xfers_uninit
 		* quitting signal
+		* received-chat-msg signal
+		* receiving-chat-msg signal
+		* sending-chat-msg signal
+		* sent-chat-msg signal
 		* serv_got_attention
 		* serv_send_attention
 		* struct _PurpleAttentionType
@@ -901,6 +917,8 @@
 		* struct PurpleAccountUserSplit
 		* struct PurpleNotifySearchColumn
 		* wpurple_g_access
+		* writing-chat-msg signal
+		* wrote-chat-msg signal
 		* xmlnode_set_attrib_with_namespace
 		* xmlnode_set_attrib_with_prefix
 
diff --git a/doc/reference/libpurple/signals_conversation.md b/doc/reference/libpurple/signals_conversation.md
--- a/doc/reference/libpurple/signals_conversation.md
+++ b/doc/reference/libpurple/signals_conversation.md
@@ -12,30 +12,11 @@
 * [receiving-im-msg](#receiving-im-msg)
 * [received-im-msg](#received-im-msg)
 * [blocked-im-msg](#blocked-im-msg)
-* [writing-chat-msg](#writing-chat-msg)
-* [wrote-chat-msg](#wrote-chat-msg)
-* [sending-chat-msg](#sending-chat-msg)
-* [sent-chat-msg](#sent-chat-msg)
-* [receiving-chat-msg](#receiving-chat-msg)
-* [received-chat-msg](#received-chat-msg)
 * [conversation-created](#conversation-created)
 * [conversation-updated](#conversation-updated)
 * [deleting-conversation](#deleting-conversation)
 * [buddy-typing](#buddy-typing)
 * [buddy-typing-stopped](#buddy-typing-stopped)
-* [chat-user-joining](#chat-user-joining)
-* [chat-user-joined](#chat-user-joined)
-* [chat-user-flags](#chat-user-flags)
-* [chat-user-leaving](#chat-user-leaving)
-* [chat-user-left](#chat-user-left)
-* [chat-inviting-user](#chat-inviting-user)
-* [chat-invited-user](#chat-invited-user)
-* [chat-invited](#chat-invited)
-* [chat-invite-blocked](#chat-invite-blocked)
-* [chat-joined](#chat-joined)
-* [chat-join-failed](#chat-join-failed)
-* [chat-left](#chat-left)
-* [chat-topic-changed](#chat-topic-changed)
 * [cleared-message-history](#cleared-message-history)
 * [conversation-extended-menu](#conversation-extended-menu)
 
@@ -284,215 +265,6 @@
 
 ----
 
-#### writing-chat-msg
-
-```c
-gboolean user_function(PurpleAccount *account,
-                       const gchar *who,
-                       gchar **message,
-                       PurpleChatConversation *chat,
-                       PurpleMessageFlags flags,
-                       gpointer user_data);
-```
-
-Emitted before a message is written in a chat conversation. If the message is changed, then the changed message is displayed and logged instead of the original message.
-
-> Make sure to free `*message` before you replace it!
-
-**Parameters:**
-
-**account**
-: The account.
-
-**who**
-: The name of the user.
-
-**message**
-: A pointer to the message.
-
-**chat**
-: The chat conversation.
-
-**flags**
-: Flags for this message.
-
-**user_data**
-: user data set when the signal handler was connected.
-
-**Returns:**
-
-`TRUE` if the message should be canceled, or `FALSE` otherwise.
-
-----
-
-#### wrote-chat-msg
-
-```c
-void user_function(PurpleAccount *account,
-                   const gchar *who,
-                   gchar *message,
-                   PurpleChatConversation *chat,
-                   PurpleMessageFlags flags,
-                   gpointer user_data);
-```
-
-Emitted after a message is written and possibly displayed in a chat.
-
-**Parameters:**
-
-**account**
-: The account.
-
-**who**
-: The name of the user.
-
-**message**
-: The message.
-
-**chat**
-: The chat conversation.
-
-**flags**
-: Flags for this message.
-
-**user_data**
-: user data set when the signal handler was connected.
-
-----
-
-#### sending-chat-msg
-
-```c
-void user_function(PurpleAccount *account,
-                   gchar **message,
-                   gint id,
-                   gpointer user_data);
-```
-
-Emitted before sending a message to a chat. `message` is a pointer to the
-message string, so the plugin can replace the message before being sent.
-
-> Make sure to free `*message` before you replace it!
-
-**Parameters:**
-
-**account**
-: The account the message is being sent on.
-
-**message**
-: A pointer to the message that will be sent.
-
-**id**
-: The ID of the chat.
-
-**user_data**
-: user data set when the signal handler was connected.
-
-----
-
-#### sent-chat-msg
-
-```c
-void user_function(PurpleAccount *account,
-                   const gchar *message,
-                   gint id,
-                   gpointer user_data)
-```
-
-Emitted after sending a message to a chat.
-
-**Parameters:**
-
-**account**
-: The account the message was sent on.
-
-**message**
-: The message that was sent.
-
-**id**
-: The ID of the chat.
-
-**user_data**
-: user data set when the signal handler was connected.
-
-----
-
-#### receiving-chat-msg
-
-```c
-gboolean user_function(PurpleAccount *account,
-                       gchar **sender,
-                       gchar **message,
-                       PurpleChatConversation *chat,
-                       gint *flags,
-                       gpointer user_data);
-```
-
-Emitted when a chat message is received. The callback can replace the name of the sender, the message, or the flags by modifying the pointer to the strings. This can also be used to cancel displaying a message by returning `TRUE`.
-
-> Make sure to free `*sender` and `*message` before you replace them!
-
-**Parameters:**
-
-**account**
-: The account the message was received on.
-
-**sender**
-: A pointer to the username of the sender.
-
-**message**
-: A pointer to the message that was sent.
-
-**chat**
-: The chat conversation.
-
-**flags**
-: A pointer to the chat message flags.
-
-**user_data**
-: user data set when the signal handler was connected.
-
-**Returns:**
-
-`TRUE` if the message should be canceled, or `FALSE` otherwise.
-
-----
-
-#### received-chat-msg
-
-```c
-void user_function(PurpleAccount *account,
-                   gchar *sender,
-                   gchar *message,
-                   PurpleChatConversation *chat,
-                   PurpleMessageFlags flags,
-                   gpointer user_data)
-```
-
-Emitted after a chat message is received.
-
-**Parameters:**
-
-**account**
-: The account the message was received on.
-
-**sender**
-: The username of the sender.
-
-**message**
-: The message that was sent.
-
-**chat**
-: The chat conversation.
-
-**flags**
-: The chat message flags.
-
-**user_data**
-: user data set when the signal handler was connected.
-
-----
-
 #### conversation-created
 
 ```c
@@ -598,370 +370,6 @@
 
 ----
 
-#### chat-user-joining
-
-```c
-gboolean user_function(PurpleChatConversation *chat,
-                       const gchar *name,
-                       PurpleChatUserFlags flags,
-                       gpointer user_data);
-```
-
-Emitted when a buddy is joining a chat, before the list of users in the chat updates to include the new user.
-
-**Parameters:**
-
-**chat**
-: The chat conversation.
-
-**name**
-: The name of the user that is joining the conversation.
-
-**flags**
-: The flags of the user that is joining the conversation.
-
-**user_data**
-: user data set when the signal handler was connected.
-
-**Returns:**
-
-`TRUE` if the join should be hidden, or `FALSE` otherwise.
-
-----
-
-#### chat-user-joined
-
-```c
-void user_function(PurpleChatConversation *chat,
-                   const gchar *name,
-                   PurpleChatUserFlags flags,
-                   gboolean new_arrival,
-                   gpointer user_data);
-```
-
-Emitted when a buddy joined a chat, after the users list is updated.
-
-**Parameters:**
-
-**chat**
-: The chat conversation.
-
-**name**
-: The name of the user that has joined the conversation.
-
-**flags**
-: The flags of the user that has joined the conversation.
-
-**new_arrival**
-: If the buddy is a new arrival.
-
-**user_data**
-: user data set when the signal handler was connected.
-
-----
-
-#### chat-join-failed
-
-```c
-void user_function(PurpleConnection *gc,
-                   GHashTable *components,
-                   gpointer user_data);
-```
-
-Emitted when an account fails to join a chat room.
-
-**Parameters:**
-
-**gc**
-: The PurpleConnection of the account which failed to join the chat.
-
-**data**
-: The components passed to purple_serv_join_chat() originally. The hash function should be g_str_hash() and the equal function should be g_str_equal().
-
-**user_data**
-: user data set when the signal handler was connected.
-
-----
-
-#### chat-user-flags
-
-```c
-void user_function(PurpleChatUser *chatuser,
-                   PurpleChatUserFlags oldflags,
-                   PurpleChatUserFlags newflags,
-                   gpointer user_data);
-```
-
-Emitted when a user in a chat changes flags.
-
-**Parameters:**
-
-**chatuser**
-: The chat user whose flags changed.
-
-**oldflags**
-: The old flags.
-
-**newflags**
-: The new flags.
-
-**user_data**
-: user data set when the signal handler was connected.
-
-----
-
-#### chat-user-leaving
-
-```c
-gboolean user_function(PurpleChatConversation *chat,
-                       const gchar *name,
-                       const gchar *reason,
-                       gpointer user_data);
-```
-
-Emitted when a user is leaving a chat, before the user list is updated. This
-may include an optional reason why the user is leaving.
-
-**Parameters:**
-
-**chat**
-: The chat conversation.
-
-**name**
-: The name of the user that is leaving the chat.
-
-**reason**
-: The optional reason why the user is leaving.
-
-**user_data**
-: user data set when the signal handler was connected.
-
-**Returns:**
-
-`TRUE` if the leave should be hidden, or `FALSE` otherwise.
-
-----
-
-#### chat-user-left
-
-
-```c
-void user_function(PurpleChatConversation *chat,
-                   const gchar *name,
-                   const gchar *reason,
-                   gpointer user_data);
-```
-
-Emitted when a user leaves a chat, after the user list is updated. This may include an optional reason why the user is leaving.
-
-**Parameters:**
-
-**chat**
-: The chat conversation.
-
-**name**
-: The name of the user that left the chat.
-
-**reason**
-: The optional reason why the user left the chat.
-
-**user_data**
-: user data set when the signal handler was connected.
-
-----
-
-#### chat-inviting-user
-
-
-```c
-void user_function(PurpleChatConversation *chat,
-                   const gchar *name,
-                   gchar **invite_message,
-                   gpointer user_data);
-```
-
-Emitted when a user is being invited to the chat. The callback can replace the invite message to the invitee by modifying the pointer to the invite message.
-
-> Make sure to free `*invite_message` before you replace it!
-
-**Parameters:**
-
-**chat**
-: The chat conversation.
-
-**name**
-: The name of the user being invited.
-
-**invite_message**
-: A pointer to the reason why a user is being invited.
-
-**user_data**
-: user data set when the signal handler was connected.
-
-----
-
-#### chat-invited-user
-
-```c
-void user_function(PurpleChatConversation *conv,
-                   const gchar *name,
-                   const gchar *invite_message,
-                   gpointer user_data);
-```
-
-Emitted when a user invited another user to a chat.
-
-**Parameters:**
-
-**chat**
-: The chat conversation.
-
-**name**
-: The name of the user that was invited.
-
-**invite_message**
-: The message to be sent to the user when invited.
-
-**user_data**
-: user data set when the signal handler was connected.
-
-----
-
-#### chat-invited
-
-```c
-gint user_function(PurpleAccount *account,
-                   const gchar *inviter,
-                   const gchar *chat,
-                   const gchar *invite_message,
-                   GHashTable *components,
-                   gpointer user_data);
-```
-
-Emitted when an account was invited to a chat.
-
-**Parameters:**
-
-**account**
-: The account being invited.
-
-**inviter**
-: The username of the person inviting the account.
-
-**chat**
-: The name of the chat you're being invited to.
-
-**invite_message**
-: The optional invite message.
-
-**components**
-: The components necessary if you want to call  purple_serv_join_chat().
-
-**user_data**
-: user data set when the signal handler was connected.
-
-**Returns:**
-
-Less than zero if the invitation should be rejected, greater than zero if the
-invitation should be accepted. If zero is returned, the default behavior will
-be maintained: the user will be prompted.
-
-----
-
-#### chat-invite-blocked
-
-```c
-void user_function(PurpleAccount *account,
-                   const gchar *inviter,
-                   const gchar *name,
-                   const gchar *message,
-                   GHashTable *data);
-```
-
-Emitted when an invitation to join a chat is blocked.
-
-**Parameters:**
-
-**account**
-: The account the invitation was sent to.
-
-**inviter**
-: The name of the person sending the invitation.
-
-**name**
-: The name of the chat invited to.
-
-**message**
-: The invitation message sent.
-
-**data**
-: Hashtable containing data about the invited chat.
-
-----
-
-#### chat-joined
-
-```c
-void user_function(PurpleChatConversation *chat, gpointer user_data);
-```
-
-Emitted when an account joins a chat room.
-
-**Parameters:**
-
-**chat**
-: The conversation that joined the chat room.
-
-**user_data**
-: user data set when the signal handler was connected.
-
-----
-
-#### chat-left
-
-```c
-void user_function(PurpleChatConversation *chat, gpointer user_data);
-```
-
-Emitted when an account leaves a chat room.
-
-**Parameters:**
-
-**chat**
-: The conversation that left the chat room.
-
-**user_data**
-: user data set when the signal handler was connected.
-
-----
-
-#### chat-topic-changed
-
-```c
-void user_function(PurpleChatConversation *chat,
-                   const gchar *who,
-                   const gchar *topic,
-                   gpointer user_data);
-```
-
-Emitted when the topic is changed in a chat.
-
-**Parameters:**
-
-**chat**
-: The chat conversation whose topic changed.
-
-**who**
-: The name of the person that changed the topic.
-
-**topic**
-: The new topic.
-
-**user_data**
-: user data set when the signal handler was connected.
-
-----
-
 #### conversation-extended-menu
 
 ```c
diff --git a/libpurple/buddyicon.c b/libpurple/buddyicon.c
--- a/libpurple/buddyicon.c
+++ b/libpurple/buddyicon.c
@@ -24,9 +24,9 @@
 #include "debug.h"
 #include "image.h"
 #include "purpleaccountmanager.h"
-#include "purplechatconversation.h"
 #include "purpleconversation.h"
 #include "purpleconversationmanager.h"
+#include "purpleimconversation.h"
 #include "purplepath.h"
 #include "purpleprivate.h"
 #include "purpleprotocolserver.h"
@@ -938,15 +938,6 @@
 			 * icon changes? */
 			purple_blist_update_node(purple_blist_get_default(), child);
 		}
-	} else if (PURPLE_IS_CHAT(node)) {
-		PurpleAccount *account = purple_chat_get_account(PURPLE_CHAT(node));
-		PurpleConversation *chat = NULL;
-		const gchar *name = purple_chat_get_name(PURPLE_CHAT(node));
-
-		chat = purple_conversation_manager_find_chat(manager, account, name);
-		if(PURPLE_IS_CHAT_CONVERSATION(chat)) {
-			purple_conversation_update(chat, PURPLE_CONVERSATION_UPDATE_ICON);
-		}
 	}
 
 	purple_blist_update_node(purple_blist_get_default(), node);
diff --git a/libpurple/cmds.c b/libpurple/cmds.c
--- a/libpurple/cmds.c
+++ b/libpurple/cmds.c
@@ -22,7 +22,6 @@
 
 #include "cmds.h"
 #include "purpleaccount.h"
-#include "purplechatconversation.h"
 #include "purpleimconversation.h"
 #include "purplemarkup.h"
 
@@ -200,8 +199,7 @@
 static gboolean
 is_right_type(PurpleCmd *cmd, PurpleConversation *conv)
 {
-	return (PURPLE_IS_IM_CONVERSATION(conv) && (cmd->flags & PURPLE_CMD_FLAG_IM))
-	    || (PURPLE_IS_CHAT_CONVERSATION(conv) && (cmd->flags & PURPLE_CMD_FLAG_CHAT));
+	return (PURPLE_IS_IM_CONVERSATION(conv) && (cmd->flags & PURPLE_CMD_FLAG_IM));
 }
 
 static gboolean
diff --git a/libpurple/conversations.c b/libpurple/conversations.c
--- a/libpurple/conversations.c
+++ b/libpurple/conversations.c
@@ -24,7 +24,6 @@
 
 #include "prefs.h"
 #include "purpleprivate.h"
-#include "purplechatconversation.h"
 #include "purpleimconversation.h"
 #include "purpleconversationmanager.h"
 
@@ -94,35 +93,6 @@
 						 G_TYPE_NONE, 5, PURPLE_TYPE_ACCOUNT, G_TYPE_STRING,
 						 G_TYPE_STRING, G_TYPE_UINT, G_TYPE_UINT);
 
-	purple_signal_register(handle, "writing-chat-msg",
-		purple_marshal_BOOLEAN__POINTER_POINTER, G_TYPE_BOOLEAN, 2,
-		PURPLE_TYPE_IM_CONVERSATION, PURPLE_TYPE_MESSAGE);
-
-	purple_signal_register(handle, "wrote-chat-msg",
-		purple_marshal_VOID__POINTER_POINTER, G_TYPE_NONE, 2,
-		PURPLE_TYPE_IM_CONVERSATION, PURPLE_TYPE_MESSAGE);
-
-	purple_signal_register(handle, "sending-chat-msg",
-		purple_marshal_VOID__POINTER_POINTER_UINT, G_TYPE_NONE,
-		3, PURPLE_TYPE_ACCOUNT, PURPLE_TYPE_MESSAGE, G_TYPE_UINT);
-
-	purple_signal_register(handle, "sent-chat-msg",
-		purple_marshal_VOID__POINTER_POINTER_UINT, G_TYPE_NONE,
-		3, PURPLE_TYPE_ACCOUNT, PURPLE_TYPE_MESSAGE, G_TYPE_UINT);
-
-	purple_signal_register(handle, "receiving-chat-msg",
-						 purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_POINTER,
-						 G_TYPE_BOOLEAN, 5, PURPLE_TYPE_ACCOUNT,
-						 G_TYPE_POINTER, /* pointer to a string */
-						 G_TYPE_POINTER, /* pointer to a string */
-						 PURPLE_TYPE_CHAT_CONVERSATION,
-						 G_TYPE_POINTER); /* pointer to an unsigned int */
-
-	purple_signal_register(handle, "received-chat-msg",
-						 purple_marshal_VOID__POINTER_POINTER_POINTER_POINTER_UINT,
-						 G_TYPE_NONE, 5, PURPLE_TYPE_ACCOUNT, G_TYPE_STRING,
-						 G_TYPE_STRING, PURPLE_TYPE_CHAT_CONVERSATION, G_TYPE_UINT);
-
 	purple_signal_register(handle, "conversation-created",
 						 purple_marshal_VOID__POINTER, G_TYPE_NONE, 1,
 						 PURPLE_TYPE_CONVERSATION);
@@ -147,64 +117,6 @@
 						 purple_marshal_VOID__POINTER_POINTER, G_TYPE_NONE, 2,
 						 PURPLE_TYPE_ACCOUNT, G_TYPE_STRING);
 
-	purple_signal_register(handle, "chat-user-joining",
-						 purple_marshal_BOOLEAN__POINTER_POINTER_UINT,
-						 G_TYPE_BOOLEAN, 3, PURPLE_TYPE_CHAT_CONVERSATION,
-						 G_TYPE_STRING, G_TYPE_UINT);
-
-	purple_signal_register(handle, "chat-user-joined",
-						 purple_marshal_VOID__POINTER_POINTER_UINT_UINT,
-						 G_TYPE_NONE, 4, PURPLE_TYPE_CHAT_CONVERSATION,
-						 G_TYPE_STRING, G_TYPE_UINT, G_TYPE_BOOLEAN);
-
-	purple_signal_register(handle, "chat-user-flags",
-						 purple_marshal_VOID__POINTER_UINT_UINT, G_TYPE_NONE, 3,
-						 PURPLE_TYPE_CHAT_USER, G_TYPE_UINT, G_TYPE_UINT);
-
-	purple_signal_register(handle, "chat-user-leaving",
-						 purple_marshal_BOOLEAN__POINTER_POINTER_POINTER,
-						 G_TYPE_BOOLEAN, 3, PURPLE_TYPE_CHAT_CONVERSATION,
-						 G_TYPE_STRING, G_TYPE_STRING);
-
-	purple_signal_register(handle, "chat-user-left",
-						 purple_marshal_VOID__POINTER_POINTER_POINTER,
-						 G_TYPE_NONE, 3, PURPLE_TYPE_CHAT_CONVERSATION,
-						 G_TYPE_STRING, G_TYPE_STRING);
-
-	purple_signal_register(handle, "chat-inviting-user",
-						 purple_marshal_VOID__POINTER_POINTER_POINTER,
-						 G_TYPE_NONE, 3, PURPLE_TYPE_CHAT_CONVERSATION, 
-						 G_TYPE_STRING,
-						 G_TYPE_POINTER); /* pointer to a string */
-
-	purple_signal_register(handle, "chat-invited-user",
-						 purple_marshal_VOID__POINTER_POINTER_POINTER,
-						 G_TYPE_NONE, 3, PURPLE_TYPE_CHAT_CONVERSATION,
-						 G_TYPE_STRING, G_TYPE_STRING);
-
-	purple_signal_register(handle, "chat-invited",
-						 purple_marshal_INT__POINTER_POINTER_POINTER_POINTER_POINTER,
-						 G_TYPE_INT, 5, PURPLE_TYPE_ACCOUNT, G_TYPE_STRING,
-						 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);
-
-	purple_signal_register(handle, "chat-invite-blocked",
-						 purple_marshal_VOID__POINTER_POINTER_POINTER_POINTER_POINTER,
-						 G_TYPE_NONE, 5, PURPLE_TYPE_ACCOUNT, G_TYPE_STRING,
-						 G_TYPE_STRING, G_TYPE_STRING,
-						 G_TYPE_POINTER); /* (GHashTable *) */
-
-	purple_signal_register(handle, "chat-joined",
-						 purple_marshal_VOID__POINTER, G_TYPE_NONE, 1,
-						 PURPLE_TYPE_CHAT_CONVERSATION);
-
-	purple_signal_register(handle, "chat-join-failed",
-						   purple_marshal_VOID__POINTER_POINTER, G_TYPE_NONE, 2,
-						   PURPLE_TYPE_CONNECTION, G_TYPE_POINTER);
-
-	purple_signal_register(handle, "chat-left",
-						 purple_marshal_VOID__POINTER, G_TYPE_NONE, 1,
-						 PURPLE_TYPE_CHAT_CONVERSATION);
-
 	purple_signal_register(handle, "cleared-message-history",
 	                       purple_marshal_VOID__POINTER, G_TYPE_NONE, 1,
 	                       PURPLE_TYPE_CONVERSATION);
diff --git a/libpurple/meson.build b/libpurple/meson.build
--- a/libpurple/meson.build
+++ b/libpurple/meson.build
@@ -37,8 +37,6 @@
 	'purpleauthorizationrequestnotification.c',
 	'purpleavatar.c',
 	'purplechanneljoindetails.c',
-	'purplechatconversation.c',
-	'purplechatuser.c',
 	'purpleconnectionerrorinfo.c',
 	'purplecontact.c',
 	'purplecontactinfo.c',
@@ -152,8 +150,6 @@
 	'purpleauthorizationrequestnotification.h',
 	'purpleavatar.h',
 	'purplechanneljoindetails.h',
-	'purplechatconversation.h',
-	'purplechatuser.h',
 	'purpleconnectionerrorinfo.h',
 	'purplecontact.h',
 	'purplecontactinfo.h',
@@ -292,7 +288,6 @@
 	'notify.h',
 	'plugins.h',
 	'purpleaccount.h',
-	'purplechatuser.h',
 	'purpleconnectionerrorinfo.h',
 	'purplecontactinfo.h',
 	'purpleconversation.h',
diff --git a/libpurple/plugins/joinpart/meson.build b/libpurple/plugins/joinpart/meson.build
--- a/libpurple/plugins/joinpart/meson.build
+++ b/libpurple/plugins/joinpart/meson.build
@@ -3,7 +3,9 @@
     gnu_symbol_visibility : 'hidden',
     dependencies : [libpurple_dep],
     name_prefix : '',
-    install : true, install_dir : PURPLE_PLUGINDIR)
+    install : true,
+    install_dir : PURPLE_PLUGINDIR,
+    build_by_default : false)
 
 settings_schemas = [
   'im.pidgin.Purple.plugin.JoinPart.gschema.xml',
diff --git a/libpurple/purplechatconversation.h b/libpurple/purplechatconversation.h
deleted file mode 100644
--- a/libpurple/purplechatconversation.h
+++ /dev/null
@@ -1,375 +0,0 @@
-/*
- * Purple - Internet Messaging Library
- * Copyright (C) Pidgin Developers <devel@pidgin.im>
- *
- * Purple is the legal property of its developers, whose names are too numerous
- * to list here. Please refer to the COPYRIGHT file distributed with this
- * source distribution.
- *
- * This library is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this library; if not, see <https://www.gnu.org/licenses/>.
- */
-
-#if !defined(PURPLE_GLOBAL_HEADER_INSIDE) && !defined(PURPLE_COMPILATION)
-# error "only <purple.h> may be included directly"
-#endif
-
-#ifndef PURPLE_CHAT_CONVERSATION_H
-#define PURPLE_CHAT_CONVERSATION_H
-
-#define PURPLE_TYPE_CHAT_CONVERSATION            (purple_chat_conversation_get_type())
-#define PURPLE_CHAT_CONVERSATION(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_CHAT_CONVERSATION, PurpleChatConversation))
-#define PURPLE_CHAT_CONVERSATION_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_CHAT_CONVERSATION, PurpleChatConversationClass))
-#define PURPLE_IS_CHAT_CONVERSATION(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_CHAT_CONVERSATION))
-#define PURPLE_IS_CHAT_CONVERSATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_CHAT_CONVERSATION))
-#define PURPLE_CHAT_CONVERSATION_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_CHAT_CONVERSATION, PurpleChatConversationClass))
-
-typedef struct _PurpleChatConversation           PurpleChatConversation;
-typedef struct _PurpleChatConversationClass      PurpleChatConversationClass;
-
-#include "purplechatuser.h"
-#include "purpleconversation.h"
-#include "purpleimconversation.h"
-#include "purpleversion.h"
-
-G_BEGIN_DECLS
-
-/**
- * PurpleChatConversation:
- *
- * Structure representing a chat conversation instance.
- */
-struct _PurpleChatConversation {
-	PurpleConversation parent_object;
-};
-
-/**
- * PurpleChatConversationClass:
- *
- * Base class for all #PurpleChatConversation's
- */
-struct _PurpleChatConversationClass {
-	PurpleConversationClass parent_class;
-
-	/*< private >*/
-	gpointer reserved[4];
-};
-
-/**
- * purple_chat_conversation_get_type:
- *
- * Returns: The #GType for the ChatConversation object.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-GType purple_chat_conversation_get_type(void);
-
-/**
- * purple_chat_conversation_new:
- * @account: The account opening the conversation window on the purple user's
- *           end.
- * @name: The name of the conversation.
- *
- * Creates a new chat conversation.
- *
- * Returns: The new conversation.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-PurpleConversation *purple_chat_conversation_new(PurpleAccount *account, const gchar *name);
-
-/**
- * purple_chat_conversation_get_users:
- * @chat: The chat.
- *
- * Returns a list of users in the chat room.  The members of the list
- * are PurpleChatUser objects.
- *
- * Returns: (element-type PurpleChatUser) (transfer container):
- *          The list of users. Use g_list_free() when done
- *          using the list.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-GList *purple_chat_conversation_get_users(PurpleChatConversation *chat);
-
-/**
- * purple_chat_conversation_get_users_count:
- * @chat: The chat.
- *
- * Returns count of users in the chat room.
- *
- * Returns: The count of users in the chat room.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-guint purple_chat_conversation_get_users_count(PurpleChatConversation *chat);
-
-/**
- * purple_chat_conversation_set_topic:
- * @chat: The chat.
- * @who: The user that set the topic.
- * @topic: The topic.
- *
- * Sets the chat room's topic.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-void purple_chat_conversation_set_topic(PurpleChatConversation *chat, const gchar *who, const gchar *topic);
-
-/**
- * purple_chat_conversation_get_topic:
- * @chat: The chat.
- *
- * Returns the chat room's topic.
- *
- * Returns: The chat's topic.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-const gchar *purple_chat_conversation_get_topic(PurpleChatConversation *chat);
-
-/**
- * purple_chat_conversation_get_topic_who:
- * @chat: The chat.
- *
- * Returns who set the chat room's topic.
- *
- * Returns: Who set the topic.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-const gchar *purple_chat_conversation_get_topic_who(PurpleChatConversation *chat);
-
-/**
- * purple_chat_conversation_set_id:
- * @chat: The chat.
- * @id: The ID.
- *
- * Sets the chat room's ID.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-void purple_chat_conversation_set_id(PurpleChatConversation *chat, gint id);
-
-/**
- * purple_chat_conversation_get_id:
- * @chat: The chat.
- *
- * Gets the chat room's ID.
- *
- * Returns: The ID.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-gint purple_chat_conversation_get_id(PurpleChatConversation *chat);
-
-/**
- * purple_chat_conversation_add_user:
- * @chat: The chat.
- * @user: The user to add.
- * @extra_msg: An extra message to display with the join message.
- * @flags: The users flags
- * @new_arrival: Decides whether or not to show a join notice.
- *
- * Adds a user to a chat.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-void purple_chat_conversation_add_user(PurpleChatConversation *chat, const gchar *user, const gchar *extra_msg, PurpleChatUserFlags flags, gboolean new_arrival);
-
-/**
- * purple_chat_conversation_add_users:
- * @chat: The chat.
- * @users: (element-type utf8): The list of users to add.
- * @extra_msgs: (element-type utf8) (nullable): An extra message to display
- *              with the join message for each user.  This list may be shorter
- *              than @users, in which case, the users after the end of
- *              extra_msgs will not have an extra message.  By extension, this
- *              means that extra_msgs can simply be %NULL and none of the users
- *              will have an extra message.
- * @flags: (element-type PurpleChatUserFlags): The list of flags for each user.
- *         This list data should be an int converted to pointer using
- *         GINT_TO_POINTER(flag)
- * @new_arrivals: Decides whether or not to show join notices.
- *
- * Adds a list of users to a chat.
- *
- * The data is copied from @users, @extra_msgs, and @flags, so it is up to
- * the caller to free this list after calling this function.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-void purple_chat_conversation_add_users(PurpleChatConversation *chat, GList *users, GList *extra_msgs, GList *flags, gboolean new_arrivals);
-
-/**
- * purple_chat_conversation_rename_user:
- * @chat: The chat.
- * @old_user: The old username.
- * @new_user: The new username.
- *
- * Renames a user in a chat.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-void purple_chat_conversation_rename_user(PurpleChatConversation *chat, const gchar *old_user, const gchar *new_user);
-
-/**
- * purple_chat_conversation_remove_user:
- * @chat: The chat.
- * @user: The user that is being removed.
- * @reason: The optional reason given for the removal. Can be %NULL.
- *
- * Removes a user from a chat, optionally with a reason.
- *
- * It is up to the developer to free this list after calling this function.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-void purple_chat_conversation_remove_user(PurpleChatConversation *chat, const gchar *user, const gchar *reason);
-
-/**
- * purple_chat_conversation_remove_users:
- * @chat: The chat.
- * @users: (element-type utf8): The users that are being removed.
- * @reason: The optional reason given for the removal. Can be %NULL.
- *
- * Removes a list of users from a chat, optionally with a single reason.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-void purple_chat_conversation_remove_users(PurpleChatConversation *chat, GList *users, const gchar *reason);
-
-/**
- * purple_chat_conversation_has_user:
- * @chat: The chat.
- * @user: The user to look for.
- *
- * Checks if a user is in a chat
- *
- * Returns: %TRUE if the user is in the chat, %FALSE if not
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-gboolean purple_chat_conversation_has_user(PurpleChatConversation *chat, const gchar *user);
-
-/**
- * purple_chat_conversation_clear_users:
- * @chat: The chat.
- *
- * Clears all users from a chat.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-void purple_chat_conversation_clear_users(PurpleChatConversation *chat);
-
-/**
- * purple_chat_conversation_set_nick:
- * @chat: The chat.
- * @nick: The nick.
- *
- * Sets your nickname (used for highlighting) for a chat.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-void purple_chat_conversation_set_nick(PurpleChatConversation *chat, const gchar *nick);
-
-/**
- * purple_chat_conversation_get_nick:
- * @chat: The chat.
- *
- * Gets your nickname (used for highlighting) for a chat.
- *
- * Returns: The nick.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-const gchar *purple_chat_conversation_get_nick(PurpleChatConversation *chat);
-
-/**
- * purple_chat_conversation_leave:
- * @chat: The chat.
- *
- * Lets the core know we left a chat, without destroying it.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-void purple_chat_conversation_leave(PurpleChatConversation *chat);
-
-/**
- * purple_chat_conversation_find_user:
- * @chat: The chat.
- * @name: The name of the chat user to find.
- *
- * Find a chat user in a chat
- *
- * Returns: (transfer none): The #PurpleChatUser with the name referred by
- *          @name.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-PurpleChatUser *purple_chat_conversation_find_user(PurpleChatConversation *chat, const gchar *name);
-
-/**
- * purple_chat_conversation_invite_user:
- * @chat: The chat.
- * @user: The user to invite to the chat.
- * @message: The message to send with the invitation.
- * @confirm: Prompt before sending the invitation. The user is always prompted
- *           if either @user or @message is %NULL.
- *
- * Invite a user to a chat.
- * The user will be prompted to enter the user's name or a message if one is
- * not given.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-void purple_chat_conversation_invite_user(PurpleChatConversation *chat, const gchar *user, const gchar *message, gboolean confirm);
-
-/**
- * purple_chat_conversation_has_left:
- * @chat: The chat.
- *
- * Gets whether we're no longer in this chat, and just left the window open.
- *
- * Returns: %TRUE if we left the chat already, %FALSE if we're still there.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-gboolean purple_chat_conversation_has_left(PurpleChatConversation *chat);
-
-G_END_DECLS
-
-#endif /* PURPLE_CHAT_CONVERSATION_H */
diff --git a/libpurple/purplechatconversation.c b/libpurple/purplechatconversation.c
deleted file mode 100644
--- a/libpurple/purplechatconversation.c
+++ /dev/null
@@ -1,920 +0,0 @@
-/*
- * Purple - Internet Messaging Library
- * Copyright (C) Pidgin Developers <devel@pidgin.im>
- *
- * Purple is the legal property of its developers, whose names are too numerous
- * to list here. Please refer to the COPYRIGHT file distributed with this
- * source distribution.
- *
- * This library is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this library; if not, see <https://www.gnu.org/licenses/>.
- */
-
-#include <glib/gi18n-lib.h>
-
-#include "conversations.h"
-#include "debug.h"
-#include "prefs.h"
-#include "purplecontactmanager.h"
-#include "purpleconversationmanager.h"
-#include "purplechatconversation.h"
-#include "purpleenums.h"
-#include "purpleprivate.h"
-#include "request.h"
-#include "request/purplerequestfieldstring.h"
-#include "server.h"
-
-typedef struct {
-	int    id;          /* The chat ID.                              */
-	gboolean left;      /* We left the chat and kept the window open */
-	GHashTable *users;  /* Hash table of the users in the room.      */
-} PurpleChatConversationPrivate;
-
-enum {
-	PROP_0,
-	PROP_CHAT_ID,
-	PROP_LEFT,
-	N_PROPERTIES,
-};
-static GParamSpec *properties[N_PROPERTIES] = {NULL, };
-
-enum {
-	SIG_USER_JOINED,
-	SIG_USER_LEFT,
-	N_SIGNALS,
-};
-static guint signals[N_SIGNALS] = {0, };
-
-G_DEFINE_TYPE_WITH_PRIVATE(PurpleChatConversation, purple_chat_conversation,
-                           PURPLE_TYPE_CONVERSATION);
-
-#define BUF_LONG 4096
-
-/**************************************************************************
- * Helpers
- **************************************************************************/
-static guint
-purple_conversation_user_hash(gconstpointer data) {
-	gchar *collated;
-	guint hash;
-
-	collated = g_utf8_collate_key((const gchar *)data, -1);
-	hash = g_str_hash(collated);
-	g_free(collated);
-
-	return hash;
-}
-
-static gboolean
-purple_conversation_user_equal(gconstpointer a, gconstpointer b) {
-	return !g_utf8_collate(a, b);
-}
-
-static void
-purple_chat_conversation_clear_users_helper(gpointer data, gpointer user_data)
-{
-	PurpleChatConversation *chat = PURPLE_CHAT_CONVERSATION(user_data);
-	const gchar *name = (const gchar *)data;
-	gpointer handle = purple_conversations_get_handle();
-
-	purple_signal_emit(handle, "chat-user-leaving", chat, name, NULL);
-	purple_signal_emit(handle, "chat-user-left", chat, name, NULL);
-}
-
-/******************************************************************************
- * PurpleConversation Implementation
- *****************************************************************************/
-static void
-chat_conversation_write_message(PurpleConversation *conv, PurpleMessage *msg) {
-	PurpleMessageFlags flags;
-
-	g_return_if_fail(msg != NULL);
-
-	flags = purple_message_get_flags(msg);
-	if(flags & PURPLE_MESSAGE_RECV) {
-		const char *nickname = NULL;
-
-		nickname = purple_conversation_get_user_nickname(conv);
-		if(purple_utf8_has_word(purple_message_get_contents(msg), nickname)) {
-			flags |= PURPLE_MESSAGE_NICK;
-			purple_message_set_flags(msg, flags);
-		}
-	}
-
-	_purple_conversation_write_common(conv, msg);
-}
-
-/******************************************************************************
- * GObject Implementation
- *****************************************************************************/
-static void
-purple_chat_conversation_set_property(GObject *obj, guint param_id,
-                                      const GValue *value, GParamSpec *pspec)
-{
-	PurpleChatConversation *chat = PURPLE_CHAT_CONVERSATION(obj);
-
-	switch(param_id) {
-		case PROP_CHAT_ID:
-			purple_chat_conversation_set_id(chat, g_value_get_int(value));
-			break;
-		case PROP_LEFT:
-			if(g_value_get_boolean(value)) {
-				purple_chat_conversation_leave(chat);
-			}
-			break;
-		default:
-			G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
-			break;
-	}
-}
-
-static void
-purple_chat_conversation_get_property(GObject *obj, guint param_id,
-                                      GValue *value, GParamSpec *pspec)
-{
-	PurpleChatConversation *chat = PURPLE_CHAT_CONVERSATION(obj);
-
-	switch(param_id) {
-		case PROP_CHAT_ID:
-			g_value_set_int(value, purple_chat_conversation_get_id(chat));
-			break;
-		case PROP_LEFT:
-			g_value_set_boolean(value, purple_chat_conversation_has_left(chat));
-			break;
-		default:
-			G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
-			break;
-	}
-}
-
-static void
-purple_chat_conversation_init(PurpleChatConversation *chat) {
-	PurpleChatConversationPrivate *priv = NULL;
-
-	priv = purple_chat_conversation_get_instance_private(chat);
-
-	priv->users = g_hash_table_new_full(purple_conversation_user_hash,
-	                                    purple_conversation_user_equal,
-	                                    g_free, g_object_unref);
-}
-
-static void
-purple_chat_conversation_constructed(GObject *obj) {
-	PurpleChatConversation *chat = PURPLE_CHAT_CONVERSATION(obj);
-	PurpleAccount *account = NULL;
-	PurpleConnection *connection = NULL;
-	const gchar *display_name = NULL;
-
-	G_OBJECT_CLASS(purple_chat_conversation_parent_class)->constructed(obj);
-
-	g_object_get(obj, "account", &account, NULL);
-
-	connection = purple_account_get_connection(account);
-	display_name = purple_connection_get_display_name(connection);
-	if(display_name != NULL) {
-		purple_chat_conversation_set_nick(chat, display_name);
-	} else {
-		PurpleContactInfo *info = PURPLE_CONTACT_INFO(account);
-		const gchar *username = purple_contact_info_get_username(info);
-
-		purple_chat_conversation_set_nick(chat, username);
-	}
-
-	g_object_unref(account);
-}
-
-static void
-purple_chat_conversation_dispose(GObject *obj) {
-	PurpleChatConversation *chat = PURPLE_CHAT_CONVERSATION(obj);
-	PurpleChatConversationPrivate *priv = NULL;
-
-	priv = purple_chat_conversation_get_instance_private(chat);
-
-	g_hash_table_remove_all(priv->users);
-
-	G_OBJECT_CLASS(purple_chat_conversation_parent_class)->dispose(obj);
-}
-
-static void
-purple_chat_conversation_finalize(GObject *obj) {
-	PurpleChatConversation *chat = PURPLE_CHAT_CONVERSATION(obj);
-	PurpleConversation *conv = PURPLE_CONVERSATION(chat);
-	PurpleConnection *gc = purple_conversation_get_connection(conv);
-	PurpleChatConversationPrivate *priv = NULL;
-
-	priv = purple_chat_conversation_get_instance_private(chat);
-
-	if(PURPLE_IS_CONNECTION(gc)) {
-		/* Still connected */
-		gint chat_id = purple_chat_conversation_get_id(chat);
-
-		/*
-		 * Close the window when the user tells us to, and let the protocol
-		 * deal with the internals on its own time. Don't do this if the
-		 * protocol already knows it left the chat.
-		 */
-		if(!purple_chat_conversation_has_left(chat)) {
-			purple_serv_chat_leave(gc, chat_id);
-		}
-	}
-
-	g_clear_pointer(&priv->users, g_hash_table_destroy);
-
-	G_OBJECT_CLASS(purple_chat_conversation_parent_class)->finalize(obj);
-}
-
-static void
-purple_chat_conversation_class_init(PurpleChatConversationClass *klass) {
-	GObjectClass *obj_class = G_OBJECT_CLASS(klass);
-	PurpleConversationClass *conv_class = PURPLE_CONVERSATION_CLASS(klass);
-
-	obj_class->constructed = purple_chat_conversation_constructed;
-	obj_class->dispose = purple_chat_conversation_dispose;
-	obj_class->finalize = purple_chat_conversation_finalize;
-	obj_class->get_property = purple_chat_conversation_get_property;
-	obj_class->set_property = purple_chat_conversation_set_property;
-
-	conv_class->write_message = chat_conversation_write_message;
-
-	/**
-	 * PurpleChatConversation:chat-id:
-	 *
-	 * The identifier of the chat.
-	 */
-	properties[PROP_CHAT_ID] = g_param_spec_int(
-		"chat-id", "chat id",
-		"The identifier of the chat.",
-		G_MININT, G_MAXINT, 0,
-		G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
-	/**
-	 * PurpleChatConversation:left:
-	 *
-	 * Whether the user has left the chat or not.
-	 */
-	properties[PROP_LEFT] = g_param_spec_boolean(
-		"left", "left",
-		"Whether the user has left the chat.",
-		FALSE,
-		G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
-	g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
-
-	/* Signals */
-
-	/**
-	 * PurpleChatConversation::user-joined:
-	 * @chat: The chat instance.
-	 * @username: The user that joined the conversation.
-	 * @flags: The [flags@ChatUserFlags] for user.
-	 * @new_arrival: %TRUE if the user is new to the conversation.
-	 *
-	 * Emitted after a @username has joined the conversation.
-	 *
-	 * Since: 3.0
-	 */
-	signals[SIG_USER_JOINED] = g_signal_new_class_handler(
-		"user-joined",
-		G_OBJECT_CLASS_TYPE(klass),
-		G_SIGNAL_RUN_LAST,
-		NULL,
-		NULL,
-		NULL,
-		NULL,
-		G_TYPE_NONE,
-		3,
-		G_TYPE_STRING,
-		PURPLE_TYPE_CHAT_USER_FLAGS,
-		G_TYPE_BOOLEAN);
-
-	/**
-	 * PurpleChatConversation::user-left:
-	 * @chat: The chat instance.
-	 * @username: The user that left the conversation
-	 * @reason: The optional reason why the user left the chat.
-	 *
-	 * Emitted after a @username has left the conversation.
-	 *
-	 * Since: 3.0
-	 */
-	signals[SIG_USER_LEFT] = g_signal_new_class_handler(
-		"user-left",
-		G_OBJECT_CLASS_TYPE(klass),
-		G_SIGNAL_RUN_LAST,
-		NULL,
-		NULL,
-		NULL,
-		NULL,
-		G_TYPE_NONE,
-		2,
-		G_TYPE_STRING,
-		G_TYPE_STRING);
-}
-
-/******************************************************************************
- * Public API
- *****************************************************************************/
-PurpleConversation *
-purple_chat_conversation_new(PurpleAccount *account, const gchar *name) {
-	PurpleConversation *chat = NULL;
-	PurpleConversationManager *manager = NULL;
-	PurpleConnection *connection = NULL;
-
-	g_return_val_if_fail(PURPLE_IS_ACCOUNT(account), NULL);
-	g_return_val_if_fail(name != NULL, NULL);
-
-	/* Check if this conversation already exists. */
-	manager = purple_conversation_manager_get_default();
-	chat = purple_conversation_manager_find_chat(manager, account, name);
-	if(PURPLE_IS_CHAT_CONVERSATION(chat)) {
-		if(!purple_chat_conversation_has_left(PURPLE_CHAT_CONVERSATION(chat))) {
-			purple_debug_warning("chat-conversation", "A chat named %s "
-			                     "already exists.", name);
-			return NULL;
-		}
-	}
-
-	connection = purple_account_get_connection(account);
-	if(!PURPLE_IS_CONNECTION(connection)) {
-		PurpleContactInfo *info = PURPLE_CONTACT_INFO(account);
-		purple_debug_warning("chat-conversation", "Refusing to create chat "
-		                     "for disconnected account %s",
-		                     purple_contact_info_get_username(info));
-		return NULL;
-	}
-
-	return g_object_new(
-		PURPLE_TYPE_CHAT_CONVERSATION,
-		"account", account,
-		"name", name,
-		"title", name,
-		NULL);
-}
-
-GList *
-purple_chat_conversation_get_users(PurpleChatConversation *chat) {
-	PurpleChatConversationPrivate *priv = NULL;
-
-	g_return_val_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat), NULL);
-
-	priv = purple_chat_conversation_get_instance_private(chat);
-
-	return g_hash_table_get_values(priv->users);
-}
-
-guint
-purple_chat_conversation_get_users_count(PurpleChatConversation *chat) {
-	PurpleChatConversationPrivate *priv = NULL;
-
-	g_return_val_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat), 0);
-
-	priv = purple_chat_conversation_get_instance_private(chat);
-
-	return g_hash_table_size(priv->users);
-}
-
-void
-purple_chat_conversation_set_topic(PurpleChatConversation *chat,
-                                   const gchar *who, const gchar *topic)
-{
-	PurpleAccount *account = NULL;
-	PurpleContactManager *manager = NULL;
-	PurpleContact *contact = NULL;
-
-	g_return_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat));
-
-	account = purple_conversation_get_account(PURPLE_CONVERSATION(chat));
-	manager = purple_contact_manager_get_default();
-	contact = purple_contact_manager_find_with_username(manager, account, who);
-
-	purple_conversation_set_topic(PURPLE_CONVERSATION(chat), topic);
-	if(PURPLE_IS_CONTACT_INFO(contact)) {
-		purple_conversation_set_topic_author(PURPLE_CONVERSATION(chat),
-		                                     PURPLE_CONTACT_INFO(contact));
-	}
-	g_clear_object(&contact);
-}
-
-const char *
-purple_chat_conversation_get_topic(PurpleChatConversation *chat) {
-	g_return_val_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat), NULL);
-
-	return purple_conversation_get_topic(PURPLE_CONVERSATION(chat));
-}
-
-const char *
-purple_chat_conversation_get_topic_who(PurpleChatConversation *chat) {
-	PurpleContactInfo *info = NULL;
-
-	g_return_val_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat), NULL);
-
-	info = purple_conversation_get_topic_author(PURPLE_CONVERSATION(chat));
-
-	return purple_contact_info_get_username(info);
-}
-
-void
-purple_chat_conversation_set_id(PurpleChatConversation *chat, gint id) {
-	PurpleChatConversationPrivate *priv = NULL;
-
-	g_return_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat));
-
-	priv = purple_chat_conversation_get_instance_private(chat);
-	priv->id = id;
-
-	g_object_notify_by_pspec(G_OBJECT(chat), properties[PROP_CHAT_ID]);
-}
-
-gint
-purple_chat_conversation_get_id(PurpleChatConversation *chat) {
-	PurpleChatConversationPrivate *priv = NULL;
-
-	g_return_val_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat), -1);
-
-	priv = purple_chat_conversation_get_instance_private(chat);
-
-	return priv->id;
-}
-
-void
-purple_chat_conversation_add_user(PurpleChatConversation *chat,
-                                  const gchar *user, const gchar *extra_msg,
-                                  PurpleChatUserFlags flags,
-                                  gboolean new_arrival)
-{
-	GList *users = g_list_append(NULL, (gchar *)user);
-	GList *extra_msgs = g_list_append(NULL, (gchar *)extra_msg);
-	GList *flags2 = g_list_append(NULL, GINT_TO_POINTER(flags));
-
-	purple_chat_conversation_add_users(chat, users, extra_msgs, flags2,
-	                                   new_arrival);
-
-	g_list_free(users);
-	g_list_free(extra_msgs);
-	g_list_free(flags2);
-}
-
-void
-purple_chat_conversation_add_users(PurpleChatConversation *chat, GList *users,
-                                   GList *extra_msgs, GList *flags,
-                                   gboolean new_arrivals)
-{
-	PurpleConversation *conv;
-	PurpleChatUser *chatuser;
-	PurpleChatConversationPrivate *priv;
-	PurpleAccount *account;
-	PurpleConnection *gc;
-	PurpleProtocol *protocol;
-	GList *cbuddies = NULL;
-	gpointer handle;
-
-	g_return_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat));
-	g_return_if_fail(users != NULL);
-
-	priv = purple_chat_conversation_get_instance_private(chat);
-	conv = PURPLE_CONVERSATION(chat);
-
-	account = purple_conversation_get_account(conv);
-	gc = purple_conversation_get_connection(conv);
-	g_return_if_fail(PURPLE_IS_CONNECTION(gc));
-
-	protocol = purple_connection_get_protocol(gc);
-	g_return_if_fail(PURPLE_IS_PROTOCOL(protocol));
-
-	handle = purple_conversations_get_handle();
-
-	while(users != NULL && flags != NULL) {
-		const gchar *user = (const gchar *)users->data;
-		const gchar *alias = user;
-		gboolean quiet;
-		PurpleChatUserFlags flag = GPOINTER_TO_INT(flags->data);
-		const gchar *extra_msg = (extra_msgs ? extra_msgs->data : NULL);
-
-		if(!(purple_protocol_get_options(protocol) & OPT_PROTO_UNIQUE_CHATNAME)) {
-			const char *nickname = NULL;
-
-			nickname = purple_conversation_get_user_nickname(conv);
-			if(purple_strequal(nickname, purple_normalize(account, user))) {
-				PurpleContactInfo *info = PURPLE_CONTACT_INFO(account);
-				const gchar *alias2 = purple_contact_info_get_alias(info);
-				if(alias2 != NULL) {
-					alias = alias2;
-				} else {
-					const gchar *display_name = purple_connection_get_display_name(gc);
-					if(display_name != NULL) {
-						alias = display_name;
-					}
-				}
-			} else {
-				PurpleBuddy *buddy;
-				if((buddy = purple_blist_find_buddy(purple_connection_get_account(gc), user)) != NULL) {
-					alias = purple_buddy_get_contact_alias(buddy);
-				}
-			}
-		}
-
-		quiet = GPOINTER_TO_INT(purple_signal_emit_return_1(handle,
-		                        "chat-user-joining", chat, user, flag));
-
-		chatuser = purple_chat_user_new(chat, user, alias, flag);
-
-		g_hash_table_replace(priv->users,
-			g_strdup(purple_chat_user_get_name(chatuser)),
-			chatuser);
-
-		cbuddies = g_list_prepend(cbuddies, chatuser);
-
-		if(!quiet && new_arrivals) {
-			gchar *alias_esc = g_markup_escape_text(alias, -1);
-			gchar *tmp;
-
-			if(extra_msg == NULL) {
-				tmp = g_strdup_printf(_("%s entered the room."), alias_esc);
-			} else {
-				gchar *extra_msg_esc = g_markup_escape_text(extra_msg, -1);
-				tmp = g_strdup_printf(_("%s [<I>%s</I>] entered the room."),
-				                      alias_esc, extra_msg_esc);
-				g_free(extra_msg_esc);
-			}
-			g_free(alias_esc);
-
-			purple_conversation_write_system_message(conv, tmp,
-			                                         PURPLE_MESSAGE_NO_LINKIFY);
-			g_free(tmp);
-		}
-
-		purple_signal_emit(handle, "chat-user-joined", chat, user, flag,
-		                   new_arrivals);
-
-		g_signal_emit(chat, signals[SIG_USER_JOINED], 0, user, flag,
-		              new_arrivals);
-
-		users = users->next;
-		flags = flags->next;
-		if(extra_msgs != NULL) {
-			extra_msgs = extra_msgs->next;
-		}
-	}
-
-	cbuddies = g_list_sort(cbuddies, (GCompareFunc)purple_chat_user_compare);
-
-	g_list_free(cbuddies);
-}
-
-void
-purple_chat_conversation_rename_user(PurpleChatConversation *chat,
-                                     const gchar *old_user,
-                                     const gchar *new_user)
-{
-	PurpleConversation *conv;
-	PurpleAccount *account;
-	PurpleConnection *gc;
-	PurpleProtocol *protocol;
-	PurpleChatUser *cb;
-	PurpleChatUserFlags flags;
-	PurpleChatConversationPrivate *priv;
-	const gchar *new_alias = new_user;
-	const char *nickname = NULL;
-	gchar tmp[BUF_LONG];
-	gboolean is_me = FALSE;
-
-	g_return_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat));
-	g_return_if_fail(old_user != NULL);
-	g_return_if_fail(new_user != NULL);
-
-	priv = purple_chat_conversation_get_instance_private(chat);
-	conv = PURPLE_CONVERSATION(chat);
-	account = purple_conversation_get_account(conv);
-
-	gc = purple_conversation_get_connection(conv);
-	g_return_if_fail(PURPLE_IS_CONNECTION(gc));
-	protocol = purple_connection_get_protocol(gc);
-	g_return_if_fail(PURPLE_IS_PROTOCOL(protocol));
-
-	nickname = purple_conversation_get_user_nickname(conv);
-	if(purple_strequal(nickname, purple_normalize(account, old_user))) {
-		const gchar *alias;
-
-		/* Note this for later. */
-		is_me = TRUE;
-
-		if(!(purple_protocol_get_options(protocol) & OPT_PROTO_UNIQUE_CHATNAME)) {
-			alias = purple_contact_info_get_alias(PURPLE_CONTACT_INFO(account));
-			if(alias != NULL) {
-				new_alias = alias;
-			} else {
-				const gchar *display_name = purple_connection_get_display_name(gc);
-				if(display_name != NULL) {
-					new_alias = display_name;
-				}
-			}
-		}
-	} else if(!(purple_protocol_get_options(protocol) & OPT_PROTO_UNIQUE_CHATNAME)) {
-		PurpleBuddy *buddy;
-		if((buddy = purple_blist_find_buddy(purple_connection_get_account(gc), new_user)) != NULL) {
-			new_alias = purple_buddy_get_contact_alias(buddy);
-		}
-	}
-
-	flags = purple_chat_user_get_flags(purple_chat_conversation_find_user(chat, old_user));
-	cb = purple_chat_user_new(chat, new_user, new_alias, flags);
-
-	g_hash_table_replace(priv->users,
-		g_strdup(purple_chat_user_get_name(cb)), cb);
-
-	cb = purple_chat_conversation_find_user(chat, old_user);
-	if(cb) {
-		g_hash_table_remove(priv->users, purple_chat_user_get_name(cb));
-	}
-
-	if(is_me) {
-		purple_chat_conversation_set_nick(chat, new_user);
-	}
-
-	if(purple_prefs_get_bool("/purple/conversations/chat/show_nick_change")) {
-		if(is_me) {
-			gchar *escaped = g_markup_escape_text(new_user, -1);
-			g_snprintf(tmp, sizeof(tmp), _("You are now known as %s"),
-			           escaped);
-			g_free(escaped);
-		} else {
-			const gchar *old_alias = old_user;
-			const gchar *new_alias = new_user;
-			gchar *escaped;
-			gchar *escaped2;
-
-			if(!(purple_protocol_get_options(protocol) & OPT_PROTO_UNIQUE_CHATNAME)) {
-				PurpleBuddy *buddy;
-
-				if((buddy = purple_blist_find_buddy(account, old_user)) != NULL) {
-					old_alias = purple_buddy_get_contact_alias(buddy);
-				}
-
-				if((buddy = purple_blist_find_buddy(account, new_user)) != NULL) {
-					new_alias = purple_buddy_get_contact_alias(buddy);
-				}
-			}
-
-			escaped = g_markup_escape_text(old_alias, -1);
-			escaped2 = g_markup_escape_text(new_alias, -1);
-			g_snprintf(tmp, sizeof(tmp), _("%s is now known as %s"), escaped,
-			           escaped2);
-			g_free(escaped);
-			g_free(escaped2);
-		}
-
-		purple_conversation_write_system_message(conv, tmp,
-		                                         PURPLE_MESSAGE_NO_LINKIFY);
-	}
-}
-
-void
-purple_chat_conversation_remove_user(PurpleChatConversation *chat,
-                                     const gchar *user, const gchar *reason)
-{
-	GList *users = g_list_append(NULL, (gchar *)user);
-
-	purple_chat_conversation_remove_users(chat, users, reason);
-
-	g_list_free(users);
-}
-
-void
-purple_chat_conversation_remove_users(PurpleChatConversation *chat,
-                                      GList *users, const gchar *reason)
-{
-	PurpleConversation *conv;
-	PurpleConnection *gc;
-	PurpleProtocol *protocol;
-	PurpleChatUser *cb;
-	PurpleChatConversationPrivate *priv;
-	GList *l;
-	gboolean quiet;
-	gpointer handle;
-
-	g_return_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat));
-	g_return_if_fail(users != NULL);
-
-	priv = purple_chat_conversation_get_instance_private(chat);
-	conv = PURPLE_CONVERSATION(chat);
-
-	gc = purple_conversation_get_connection(conv);
-	g_return_if_fail(PURPLE_IS_CONNECTION(gc));
-
-	protocol = purple_connection_get_protocol(gc);
-	g_return_if_fail(PURPLE_IS_PROTOCOL(protocol));
-
-	handle = purple_conversations_get_handle();
-
-	for(l = users; l != NULL; l = l->next) {
-		const gchar *user = (const gchar *)l->data;
-		quiet = GPOINTER_TO_INT(purple_signal_emit_return_1(handle,
-		                        "chat-user-leaving", chat, user, reason));
-
-		cb = purple_chat_conversation_find_user(chat, user);
-
-		if(cb) {
-			g_hash_table_remove(priv->users, purple_chat_user_get_name(cb));
-		}
-
-		/* NOTE: Don't remove them from ignored in case they re-enter. */
-		if(!quiet) {
-			const gchar *alias = user;
-			gchar *alias_esc;
-			gchar *tmp;
-
-			if(!(purple_protocol_get_options(protocol) & OPT_PROTO_UNIQUE_CHATNAME)) {
-				PurpleBuddy *buddy;
-
-				if((buddy = purple_blist_find_buddy(purple_connection_get_account(gc), user)) != NULL) {
-					alias = purple_buddy_get_contact_alias(buddy);
-				}
-			}
-
-			alias_esc = g_markup_escape_text(alias, -1);
-
-			if(reason == NULL || !*reason) {
-				tmp = g_strdup_printf(_("%s left the room."), alias_esc);
-			} else {
-				char *reason_esc = g_markup_escape_text(reason, -1);
-				tmp = g_strdup_printf(_("%s left the room (%s)."),
-				                      alias_esc, reason_esc);
-				g_free(reason_esc);
-			}
-			g_free(alias_esc);
-
-			purple_conversation_write_system_message(conv, tmp,
-			                                         PURPLE_MESSAGE_NO_LINKIFY);
-			g_free(tmp);
-		}
-
-		purple_signal_emit(handle, "chat-user-left", conv, user, reason);
-
-		g_signal_emit(chat, signals[SIG_USER_LEFT], 0, user, reason);
-	}
-}
-
-void
-purple_chat_conversation_clear_users(PurpleChatConversation *chat) {
-	PurpleChatConversationPrivate *priv = NULL;
-	GList *names = NULL;
-
-	g_return_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat));
-
-	priv = purple_chat_conversation_get_instance_private(chat);
-	names = g_hash_table_get_keys(priv->users);
-
-	g_list_foreach(names, purple_chat_conversation_clear_users_helper, chat);
-
-	g_list_free(names);
-	g_hash_table_remove_all(priv->users);
-}
-
-void
-purple_chat_conversation_set_nick(PurpleChatConversation *chat,
-                                  const gchar *nick)
-{
-	PurpleAccount *account = NULL;
-
-	g_return_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat));
-
-	account = purple_conversation_get_account(PURPLE_CONVERSATION(chat));
-
-	purple_conversation_set_user_nickname(PURPLE_CONVERSATION(chat),
-	                                      purple_normalize(account, nick));
-}
-
-const gchar *
-purple_chat_conversation_get_nick(PurpleChatConversation *chat) {
-	g_return_val_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat), NULL);
-
-	return purple_conversation_get_user_nickname(PURPLE_CONVERSATION(chat));
-}
-
-static void
-invite_user_to_chat(gpointer data, PurpleRequestPage *page) {
-	PurpleChatConversation *chat;
-	PurpleChatConversationPrivate *priv;
-	PurpleConnection *pc;
-	const gchar *user, *message;
-
-	chat = PURPLE_CHAT_CONVERSATION(data);
-	priv = purple_chat_conversation_get_instance_private(chat);
-
-	user = purple_request_page_get_string(page, "screenname");
-	message = purple_request_page_get_string(page, "message");
-
-	pc = purple_conversation_get_connection(PURPLE_CONVERSATION(chat));
-	purple_serv_chat_invite(pc, priv->id, message, user);
-}
-
-void
-purple_chat_conversation_invite_user(PurpleChatConversation *chat,
-                                     const gchar *user, const gchar *message,
-                                     gboolean confirm)
-{
-	PurpleAccount *account;
-	PurpleRequestPage *page;
-	PurpleRequestGroup *group;
-	PurpleRequestField *field;
-
-	g_return_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat));
-
-	if(user == NULL || *user == '\0' || message == NULL || *message == '\0') {
-		confirm = TRUE;
-	}
-
-	account = purple_conversation_get_account(PURPLE_CONVERSATION(chat));
-
-	if(!confirm) {
-		purple_serv_chat_invite(purple_account_get_connection(account),
-		                        purple_chat_conversation_get_id(chat), message,
-		                        user);
-		return;
-	}
-
-	page = purple_request_page_new();
-	group = purple_request_group_new(_("Invite to chat"));
-	purple_request_page_add_group(page, group);
-
-	field = purple_request_field_string_new("screenname", _("Buddy"), user,
-	                                        FALSE);
-	purple_request_group_add_field(group, field);
-	purple_request_field_set_required(field, TRUE);
-	purple_request_field_set_type_hint(field, "screenname");
-
-	field = purple_request_field_string_new("message", _("Message"), message,
-	                                        FALSE);
-	purple_request_group_add_field(group, field);
-
-	purple_request_fields(chat, _("Invite to chat"), NULL,
-	                      _("Please enter the name of the user you wish to "
-	                        "invite, along with an optional invite message."),
-	                      page,
-	                      _("Invite"), G_CALLBACK(invite_user_to_chat),
-	                      _("Cancel"), NULL,
-	                      purple_request_cpar_from_conversation(PURPLE_CONVERSATION(chat)),
-	                      chat);
-}
-
-gboolean
-purple_chat_conversation_has_user(PurpleChatConversation *chat,
-                                  const gchar *user)
-{
-	g_return_val_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat), FALSE);
-	g_return_val_if_fail(user != NULL, FALSE);
-
-	return (purple_chat_conversation_find_user(chat, user) != NULL);
-}
-
-void
-purple_chat_conversation_leave(PurpleChatConversation *chat) {
-	PurpleChatConversationPrivate *priv = NULL;
-
-	g_return_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat));
-
-	priv = purple_chat_conversation_get_instance_private(chat);
-	priv->left = TRUE;
-
-	if(!g_object_get_data(G_OBJECT(chat), "is-finalizing")) {
-		g_object_notify_by_pspec(G_OBJECT(chat), properties[PROP_LEFT]);
-	}
-
-	purple_conversation_update(PURPLE_CONVERSATION(chat),
-	                           PURPLE_CONVERSATION_UPDATE_CHATLEFT);
-}
-
-gboolean
-purple_chat_conversation_has_left(PurpleChatConversation *chat) {
-	PurpleChatConversationPrivate *priv = NULL;
-
-	g_return_val_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat), TRUE);
-
-	priv = purple_chat_conversation_get_instance_private(chat);
-
-	return priv->left;
-}
-
-PurpleChatUser *
-purple_chat_conversation_find_user(PurpleChatConversation *chat,
-                                   const gchar *name)
-{
-	PurpleChatConversationPrivate *priv = NULL;
-
-	g_return_val_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat), NULL);
-	g_return_val_if_fail(name != NULL, NULL);
-
-	priv = purple_chat_conversation_get_instance_private(chat);
-
-	return g_hash_table_lookup(priv->users, name);
-}
diff --git a/libpurple/purplechatuser.h b/libpurple/purplechatuser.h
deleted file mode 100644
--- a/libpurple/purplechatuser.h
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * Purple - Internet Messaging Library
- * Copyright (C) Pidgin Developers <devel@pidgin.im>
- *
- * Purple is the legal property of its developers, whose names are too numerous
- * to list here. Please refer to the COPYRIGHT file distributed with this
- * source distribution.
- *
- * This library is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this library; if not, see <https://www.gnu.org/licenses/>.
- */
-
-#if !defined(PURPLE_GLOBAL_HEADER_INSIDE) && !defined(PURPLE_COMPILATION)
-# error "only <purple.h> may be included directly"
-#endif
-
-#ifndef PURPLE_CHAT_USER_H
-#define PURPLE_CHAT_USER_H
-
-#include <glib.h>
-#include <glib-object.h>
-
-#include "purpleversion.h"
-
-/**
- * PurpleChatUser:
- *
- * Structure representing a chat user instance.
- *
- * Since: 3.0
- */
-
-/**
- * PurpleChatUserFlags:
- * @PURPLE_CHAT_USER_NONE:    No flags
- * @PURPLE_CHAT_USER_VOICE:   Voiced user or "Participant"
- * @PURPLE_CHAT_USER_HALFOP:  Half-op
- * @PURPLE_CHAT_USER_OP:      Channel Op or Moderator
- * @PURPLE_CHAT_USER_FOUNDER: Channel Founder
- * @PURPLE_CHAT_USER_TYPING:  Currently typing
- * @PURPLE_CHAT_USER_AWAY:    Currently away.
- *
- * Flags applicable to users in Chats.
- *
- * Since: 3.0
- */
-typedef enum /*< flags >*/
-{
-	PURPLE_CHAT_USER_NONE     = 0x0000,
-	PURPLE_CHAT_USER_VOICE    = 0x0001,
-	PURPLE_CHAT_USER_HALFOP   = 0x0002,
-	PURPLE_CHAT_USER_OP       = 0x0004,
-	PURPLE_CHAT_USER_FOUNDER  = 0x0008,
-	PURPLE_CHAT_USER_TYPING   = 0x0010,
-	PURPLE_CHAT_USER_AWAY     = 0x0020
-} PurpleChatUserFlags;
-
-#define PURPLE_TYPE_CHAT_USER purple_chat_user_get_type()
-
-PURPLE_AVAILABLE_IN_3_0
-G_DECLARE_FINAL_TYPE(PurpleChatUser, purple_chat_user, PURPLE, CHAT_USER,
-                     GObject)
-
-#include "purplechatconversation.h"
-
-G_BEGIN_DECLS
-
-/**
- * purple_chat_user_new:
- * @chat: The chat that the buddy belongs to.
- * @name: The name.
- * @alias: The alias.
- * @flags: The flags.
- *
- * Creates a new chat user
- *
- * Returns: The new chat user
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-PurpleChatUser *purple_chat_user_new(PurpleChatConversation *chat,
-                                     const gchar *name,
-                                     const gchar *alias,
-                                     PurpleChatUserFlags flags);
-
-/**
- * purple_chat_user_set_chat:
- * @chat_user: The chat user
- * @chat: The chat conversation that @chat_user belongs to.
- *
- * Set the chat conversation associated with this chat user.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-void purple_chat_user_set_chat(PurpleChatUser *chat_user,
-                               PurpleChatConversation *chat);
-
-/**
- * purple_chat_user_get_chat:
- * @chat_user: The chat user.
- *
- * Get the chat conversation associated with this chat user.
- *
- * Returns: (transfer full): The chat conversation that the buddy belongs to.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-PurpleChatConversation *purple_chat_user_get_chat(PurpleChatUser *chat_user);
-
-/**
- * purple_chat_user_get_alias:
- * @chat_user: The chat user.
- *
- * Get the alias of a chat user.
- *
- * Returns: The alias of the chat user.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-const gchar *purple_chat_user_get_alias(PurpleChatUser *chat_user);
-
-/**
- * purple_chat_user_get_name:
- * @chat_user: The chat user.
- *
- * Get the name of a chat user.
- *
- * Returns: The name of the chat user.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-const gchar *purple_chat_user_get_name(PurpleChatUser *chat_user);
-
-/**
- * purple_chat_user_set_flags:
- * @chat_user: The chat user.
- * @flags: The new flags.
- *
- * Set the flags of a chat user.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-void purple_chat_user_set_flags(PurpleChatUser *chat_user,
-                                PurpleChatUserFlags flags);
-
-/**
- * purple_chat_user_get_flags:
- * @chat_user: The chat user.
- *
- * Get the flags of a chat user.
- *
- * Returns: The flags of the chat user.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-PurpleChatUserFlags purple_chat_user_get_flags(PurpleChatUser *chat_user);
-
-/**
- * purple_chat_user_is_buddy:
- * @chat_user: The chat user.
- *
- * Indicates if this chat user is on the buddy list.
- *
- * Returns: %TRUE if the chat user is on the buddy list.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-gboolean purple_chat_user_is_buddy(PurpleChatUser *chat_user);
-
-/**
- * purple_chat_user_compare:
- * @a: The first #PurpleChatUser.
- * @b: The second #PurpleChatUser.
- *
- * Compares #PurpleChatUser's @a and @b and returns -1 if @a should be sorted
- * first, 0 if sorted equally, and 1 if @a should be sorted after @b.
- *
- * Returns: The sorting order of @a and @b.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-gint purple_chat_user_compare(PurpleChatUser *a, PurpleChatUser *b);
-
-G_END_DECLS
-
-#endif /* PURPLE_CHAT_USER_H */
diff --git a/libpurple/purplechatuser.c b/libpurple/purplechatuser.c
deleted file mode 100644
--- a/libpurple/purplechatuser.c
+++ /dev/null
@@ -1,364 +0,0 @@
-/*
- * Purple - Internet Messaging Library
- * Copyright (C) Pidgin Developers <devel@pidgin.im>
- *
- * Purple is the legal property of its developers, whose names are too numerous
- * to list here. Please refer to the COPYRIGHT file distributed with this
- * source distribution.
- *
- * This library is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this library; if not, see <https://www.gnu.org/licenses/>.
- */
-
-#include "purplechatuser.h"
-
-#include "conversations.h"
-#include "purpleenums.h"
-
-struct _PurpleChatUser {
-	GObject parent;
-
-	PurpleChatConversation *chat;  /* The chat                              */
-	gchar *name;                   /* The chat participant's name in the
-	                                  chat.                                 */
-	gchar *alias;                  /* The chat participant's alias, if known;
-	                                  NULL otherwise.                       */
-	gboolean buddy;                /* TRUE if this chat participant is on
-	                                  the buddy list; FALSE otherwise.      */
-	PurpleChatUserFlags flags;     /* A bitwise OR of flags for this
-	                                  participant, such as whether they
-	                                  are a channel operator.               */
-
-	gboolean constructed;
-};
-
-enum {
-	PROP_0,
-	PROP_CHAT,
-	PROP_NAME,
-	PROP_ALIAS,
-	PROP_FLAGS,
-	N_PROPERTIES,
-};
-static GParamSpec *properties[N_PROPERTIES] = {NULL, };
-
-/**************************************************************************
- * Private Setters
- **************************************************************************/
-static void
-purple_chat_user_set_name(PurpleChatUser *chat_user, const gchar *name) {
-	g_return_if_fail(PURPLE_IS_CHAT_USER(chat_user));
-
-	g_free(chat_user->name);
-	chat_user->name = g_strdup(name);
-
-	g_object_notify_by_pspec(G_OBJECT(chat_user), properties[PROP_NAME]);
-}
-
-static void
-purple_chat_user_set_alias(PurpleChatUser *chat_user, const gchar *alias) {
-	g_return_if_fail(PURPLE_IS_CHAT_USER(chat_user));
-
-	g_free(chat_user->alias);
-	chat_user->alias = g_strdup(alias);
-
-	g_object_notify_by_pspec(G_OBJECT(chat_user), properties[PROP_ALIAS]);
-}
-
-/**************************************************************************
- * GObject Implementation
- **************************************************************************/
-G_DEFINE_FINAL_TYPE(PurpleChatUser, purple_chat_user, G_TYPE_OBJECT)
-
-static void
-purple_chat_user_set_property(GObject *obj, guint param_id, const GValue *value,
-                              GParamSpec *pspec)
-{
-	PurpleChatUser *chat_user = PURPLE_CHAT_USER(obj);
-
-	switch (param_id) {
-		case PROP_CHAT:
-			purple_chat_user_set_chat(chat_user, g_value_get_object(value));
-			break;
-		case PROP_NAME:
-			purple_chat_user_set_name(chat_user, g_value_get_string(value));
-			break;
-		case PROP_ALIAS:
-			purple_chat_user_set_alias(chat_user, g_value_get_string(value));
-			break;
-		case PROP_FLAGS:
-			purple_chat_user_set_flags(chat_user, g_value_get_flags(value));
-			break;
-		default:
-			G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
-			break;
-	}
-}
-
-static void
-purple_chat_user_get_property(GObject *obj, guint param_id, GValue *value,
-                              GParamSpec *pspec)
-{
-	PurpleChatUser *chat_user = PURPLE_CHAT_USER(obj);
-
-	switch (param_id) {
-		case PROP_CHAT:
-			g_value_set_object(value, purple_chat_user_get_chat(chat_user));
-			break;
-		case PROP_NAME:
-			g_value_set_string(value, purple_chat_user_get_name(chat_user));
-			break;
-		case PROP_ALIAS:
-			g_value_set_string(value, purple_chat_user_get_alias(chat_user));
-			break;
-		case PROP_FLAGS:
-			g_value_set_flags(value, purple_chat_user_get_flags(chat_user));
-			break;
-		default:
-			G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
-			break;
-	}
-}
-
-static void
-purple_chat_user_init(PurpleChatUser *user) {
-	user->constructed = FALSE;
-}
-
-static void
-purple_chat_user_constructed(GObject *object) {
-	PurpleChatUser *chat_user = NULL;
-	PurpleAccount *account = NULL;
-
-	G_OBJECT_CLASS(purple_chat_user_parent_class)->constructed(object);
-
-	chat_user = PURPLE_CHAT_USER(object);
-	account = purple_conversation_get_account(PURPLE_CONVERSATION(chat_user->chat));
-
-	if(purple_blist_find_buddy(account, chat_user->name) != NULL) {
-		chat_user->buddy = TRUE;
-	}
-
-	chat_user->constructed = TRUE;
-}
-
-static void
-purple_chat_user_finalize(GObject *object) {
-	PurpleChatUser *chat_user = PURPLE_CHAT_USER(object);
-
-	g_free(chat_user->alias);
-	g_free(chat_user->name);
-
-	G_OBJECT_CLASS(purple_chat_user_parent_class)->finalize(object);
-}
-
-static void
-purple_chat_user_class_init(PurpleChatUserClass *klass) {
-	GObjectClass *obj_class = G_OBJECT_CLASS(klass);
-
-	obj_class->constructed = purple_chat_user_constructed;
-	obj_class->get_property = purple_chat_user_get_property;
-	obj_class->set_property = purple_chat_user_set_property;
-	obj_class->finalize = purple_chat_user_finalize;
-
-	/**
-	 * PurpleChatUser:chat:
-	 *
-	 * The chat the user is in.
-	 *
-	 * Since: 3.0
-	 */
-	properties[PROP_CHAT] = g_param_spec_object(
-		"chat", "Chat",
-		"The chat the buddy belongs to.",
-		PURPLE_TYPE_CHAT_CONVERSATION,
-		G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
-
-	/**
-	 * PurpleChatUser:name:
-	 *
-	 * The name of the user.
-	 *
-	 * Since: 3.0
-	 */
-	properties[PROP_NAME] = g_param_spec_string(
-		"name", "Name",
-		"Name of the chat user.",
-		NULL,
-		G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
-
-	/**
-	 * PurpleChatUser:alias:
-	 *
-	 * The alias of the user.
-	 *
-	 * Since: 3.0
-	 */
-	properties[PROP_ALIAS] = g_param_spec_string(
-		"alias", "Alias",
-		"Alias of the chat user.",
-		NULL,
-		G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
-
-	/**
-	 * PurpleChatUser:flags:
-	 *
-	 * The flags for the user.
-	 *
-	 * Since: 3.0
-	 */
-	properties[PROP_FLAGS] = g_param_spec_flags(
-		"flags", "Buddy flags",
-		"The flags for the chat user.",
-		PURPLE_TYPE_CHAT_USER_FLAGS,
-		PURPLE_CHAT_USER_NONE,
-		G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
-
-	g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
-}
-
-/******************************************************************************
- * Public API
- *****************************************************************************/
-PurpleChatUser *
-purple_chat_user_new(PurpleChatConversation *chat, const gchar *name,
-                     const gchar *alias, PurpleChatUserFlags flags)
-{
-	PurpleChatUser *chat_user = NULL;
-
-	g_return_val_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat), NULL);
-	g_return_val_if_fail(name != NULL, NULL);
-
-	chat_user = g_object_new(
-		PURPLE_TYPE_CHAT_USER,
-		"chat", chat,
-		"name", name,
-		"alias", alias,
-		"flags", flags,
-		NULL);
-
-	return chat_user;
-}
-
-const gchar *
-purple_chat_user_get_alias(PurpleChatUser *chat_user) {
-	g_return_val_if_fail(PURPLE_IS_CHAT_USER(chat_user), NULL);
-
-	return chat_user->alias;
-}
-
-const gchar *
-purple_chat_user_get_name(PurpleChatUser *chat_user) {
-	g_return_val_if_fail(PURPLE_IS_CHAT_USER(chat_user), NULL);
-
-	return chat_user->name;
-}
-
-void
-purple_chat_user_set_flags(PurpleChatUser *chat_user,
-                           PurpleChatUserFlags flags)
-{
-	PurpleChatUserFlags oldflags;
-
-	g_return_if_fail(PURPLE_IS_CHAT_USER(chat_user));
-
-	if(flags == chat_user->flags) {
-		return;
-	}
-
-	oldflags = chat_user->flags;
-	chat_user->flags = flags;
-
-	g_object_notify_by_pspec(G_OBJECT(chat_user), properties[PROP_FLAGS]);
-
-	purple_signal_emit(purple_conversations_get_handle(),
-	                   "chat-user-flags", chat_user, oldflags, flags);
-}
-
-PurpleChatUserFlags
-purple_chat_user_get_flags(PurpleChatUser *chat_user) {
-	g_return_val_if_fail(PURPLE_IS_CHAT_USER(chat_user), PURPLE_CHAT_USER_NONE);
-
-	return chat_user->flags;
-}
-
-void
-purple_chat_user_set_chat(PurpleChatUser *chat_user,
-                          PurpleChatConversation *chat)
-{
-	g_return_if_fail(PURPLE_IS_CHAT_USER(chat_user));
-
-	if(g_set_object(&chat_user->chat, chat)) {
-		g_object_notify_by_pspec(G_OBJECT(chat_user), properties[PROP_CHAT]);
-	}
-}
-
-PurpleChatConversation *
-purple_chat_user_get_chat(PurpleChatUser *chat_user) {
-	g_return_val_if_fail(PURPLE_IS_CHAT_USER(chat_user), NULL);
-
-	return chat_user->chat;
-}
-
-gboolean
-purple_chat_user_is_buddy(PurpleChatUser *chat_user) {
-	g_return_val_if_fail(PURPLE_IS_CHAT_USER(chat_user), FALSE);
-
-	return chat_user->buddy;
-}
-
-gint
-purple_chat_user_compare(PurpleChatUser *a, PurpleChatUser *b) {
-	gchar *namea = NULL, *nameb = NULL;
-
-	/* NULL is equal to NULL */
-	if(a == NULL && b == NULL) {
-		return 0;
-	}
-
-	/* non-NULL sorts before NULL */
-	if(a == NULL && b != NULL) {
-		return 1;
-	} else if(a != NULL && b == NULL) {
-		return -1;
-	}
-
-	/* higher valued flags sort before lower values */
-	if(a->flags > b->flags) {
-		return -1;
-	} else if(a->flags < b->flags) {
-		return 1;
-	}
-
-	/* buddies sort before non-buddies */
-	if(a->buddy != b->buddy) {
-		return a->buddy ? -1 : 1;
-	}
-
-	/* figure out what name we need to check for user a */
-	if(a->alias) {
-		namea = a->alias;
-	} else if (a->name) {
-		namea = a->name;
-	}
-
-	/* figure out what name we need to check for user b */
-	if(b->alias) {
-		nameb = b->alias;
-	} else if(b->name) {
-		nameb = b->name;
-	}
-
-	/* finally we're just sorting names */
-	return purple_utf8_strcasecmp(namea, nameb);
-}
diff --git a/libpurple/purpleconversation.c b/libpurple/purpleconversation.c
--- a/libpurple/purpleconversation.c
+++ b/libpurple/purpleconversation.c
@@ -27,7 +27,6 @@
 #include "conversations.h"
 #include "debug.h"
 #include "notify.h"
-#include "purplechatconversation.h"
 #include "purpleconversationmanager.h"
 #include "purpleconversationmember.h"
 #include "purpleenums.h"
@@ -299,21 +298,6 @@
 		}
 
 		g_object_unref(msg);
-	} else if(PURPLE_IS_CHAT_CONVERSATION(conv)) {
-		PurpleMessage *msg;
-		gint id = purple_chat_conversation_get_id(PURPLE_CHAT_CONVERSATION(conv));
-
-		msg = purple_message_new_outgoing(me, NULL, sent, msgflags);
-
-		purple_signal_emit(handle, "sending-chat-msg", account, msg, id);
-
-		if(!purple_message_is_empty(msg)) {
-			err = purple_serv_chat_send(gc, id, msg);
-
-			purple_signal_emit(handle, "sent-chat-msg", account, msg, id);
-		}
-
-		g_object_unref(msg);
 	}
 
 	if(err < 0) {
@@ -1193,7 +1177,6 @@
 purple_conversation_autoset_title(PurpleConversation *conv) {
 	PurpleAccount *account;
 	PurpleBuddy *b;
-	PurpleChat *chat;
 	const gchar *text = NULL, *name;
 
 	g_return_if_fail(PURPLE_IS_CONVERSATION(conv));
@@ -1205,10 +1188,6 @@
 		if(account && ((b = purple_blist_find_buddy(account, name)) != NULL)) {
 			text = purple_buddy_get_contact_alias(b);
 		}
-	} else if(PURPLE_IS_CHAT_CONVERSATION(conv)) {
-		if(account && ((chat = purple_blist_find_chat(account, name)) != NULL)) {
-			text = purple_chat_get_name(chat);
-		}
 	}
 
 	if(text == NULL) {
@@ -1250,7 +1229,6 @@
                                   PurpleMessage *pmsg)
 {
 	PurpleProtocol *protocol = NULL;
-	PurpleConnection *gc = NULL;
 	PurpleConversationPrivate *priv = NULL;
 	PurpleAccount *account;
 	PurpleBuddy *b;
@@ -1264,10 +1242,6 @@
 
 	account = purple_conversation_get_account(conv);
 
-	if(account != NULL) {
-		gc = purple_account_get_connection(account);
-	}
-
 	if(PURPLE_IS_IM_CONVERSATION(conv)) {
 		PurpleConversationManager *manager = NULL;
 
@@ -1279,7 +1253,7 @@
 
 	plugin_return = GPOINTER_TO_INT(purple_signal_emit_return_1(
 		purple_conversations_get_handle(),
-		(PURPLE_IS_IM_CONVERSATION(conv) ? "writing-im-msg" : "writing-chat-msg"),
+		"writing-im-msg",
 		conv, pmsg));
 
 	if(purple_message_is_empty(pmsg)) {
@@ -1335,7 +1309,7 @@
 	g_list_store_append(priv->messages, pmsg);
 
 	purple_signal_emit(purple_conversations_get_handle(),
-		(PURPLE_IS_IM_CONVERSATION(conv) ? "wrote-im-msg" : "wrote-chat-msg"),
+		"wrote-im-msg",
 		conv, pmsg);
 }
 
diff --git a/libpurple/purpleconversationmanager.h b/libpurple/purpleconversationmanager.h
--- a/libpurple/purpleconversationmanager.h
+++ b/libpurple/purpleconversationmanager.h
@@ -152,9 +152,7 @@
  * @name: The name of the conversation.
  *
  * Looks for a registered conversation belonging to @account and named @named.
- * This function will return the first one matching the given criteria. If you
- * specifically need an im or chat see purple_conversation_manager_find_im()
- * or purple_conversation_manager_find_chat().
+ * This function will return the first one matching the given criteria.
  *
  * Returns: (transfer none): The #PurpleConversation if found, otherwise %NULL.
  *
@@ -195,40 +193,6 @@
 PurpleConversation *purple_conversation_manager_find_dm(PurpleConversationManager *manager, PurpleContact *contact);
 
 /**
- * purple_conversation_manager_find_chat:
- * @manager: The #PurpleConversationManager instance.
- * @account: The #PurpleAccount instance whose conversation to find.
- * @name: The name of the conversation.
- *
- * Looks for a registered chat conversation belonging to @account and named
- * @name.
- *
- * Returns: (transfer none): The #PurpleConversation if found, otherwise %NULL.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-PurpleConversation *purple_conversation_manager_find_chat(PurpleConversationManager *manager, PurpleAccount *account, const gchar *name);
-
-/**
- * purple_conversation_manager_find_chat_by_id:
- * @manager: The #PurpleConversationManager instance.
- * @account: The #PurpleAccount instance whose conversation to find.
- * @id: The id of the conversation.
- *
- * Looks for a registered chat conversation belonging to @account with an id of
- * @id.
- *
- * This is typically only called by protocols.
- *
- * Returns: (transfer none): The #PurpleConversation if found, otherwise %NULL.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-PurpleConversation *purple_conversation_manager_find_chat_by_id(PurpleConversationManager *manager, PurpleAccount *account, gint id);
-
-/**
  * purple_conversation_manager_find_with_id:
  * @manager: The instance.
  * @account: The account the conversation belongs to.
diff --git a/libpurple/purpleconversationmanager.c b/libpurple/purpleconversationmanager.c
--- a/libpurple/purpleconversationmanager.c
+++ b/libpurple/purpleconversationmanager.c
@@ -22,7 +22,6 @@
 
 #include "purpleconversationmanager.h"
 
-#include "purplechatconversation.h"
 #include "purplecontact.h"
 #include "purpleimconversation.h"
 #include "purpleprivate.h"
@@ -59,30 +58,6 @@
 }
 
 static gboolean
-purple_conversation_is_chat(PurpleConversation *conversation,
-                            G_GNUC_UNUSED gpointer userdata)
-{
-	return PURPLE_IS_CHAT_CONVERSATION(conversation);
-}
-
-static gboolean
-purple_conversation_chat_has_id(PurpleConversation *conversation,
-                                gpointer userdata)
-{
-	PurpleChatConversation *chat = NULL;
-	gint id = GPOINTER_TO_INT(userdata);
-
-
-	if(!PURPLE_IS_CHAT_CONVERSATION(conversation)) {
-		return FALSE;
-	}
-
-	chat = PURPLE_CHAT_CONVERSATION(conversation);
-
-	return (purple_chat_conversation_get_id(chat) == id);
-}
-
-static gboolean
 purple_conversation_has_id(PurpleConversation *conversation, gpointer data) {
 	const char *needle = data;
 	const char *haystack = NULL;
@@ -424,32 +399,6 @@
 }
 
 PurpleConversation *
-purple_conversation_manager_find_chat(PurpleConversationManager *manager,
-                                      PurpleAccount *account,
-                                      const gchar *name)
-{
-	g_return_val_if_fail(PURPLE_IS_CONVERSATION_MANAGER(manager), NULL);
-	g_return_val_if_fail(PURPLE_IS_ACCOUNT(account), NULL);
-	g_return_val_if_fail(name != NULL, NULL);
-
-	return purple_conversation_manager_find_internal(manager, account, name,
-	                                                 purple_conversation_is_chat,
-	                                                 NULL);
-}
-
-PurpleConversation *
-purple_conversation_manager_find_chat_by_id(PurpleConversationManager *manager,
-                                            PurpleAccount *account, gint id)
-{
-	g_return_val_if_fail(PURPLE_IS_CONVERSATION_MANAGER(manager), NULL);
-	g_return_val_if_fail(PURPLE_IS_ACCOUNT(account), NULL);
-
-	return purple_conversation_manager_find_internal(manager, account, NULL,
-	                                                 purple_conversation_chat_has_id,
-	                                                 GINT_TO_POINTER(id));
-}
-
-PurpleConversation *
 purple_conversation_manager_find_with_id(PurpleConversationManager *manager,
                                          PurpleAccount *account,
                                          const char *id)
diff --git a/libpurple/server.h b/libpurple/server.h
--- a/libpurple/server.h
+++ b/libpurple/server.h
@@ -85,60 +85,6 @@
 int  purple_serv_send_im(PurpleConnection *gc, PurpleMessage *msg);
 
 /******************************************************************************
- * Chat Interface
- *****************************************************************************/
-
-/**
- * purple_serv_chat_invite
- * @gc:     The connection over which to send the typing notification.
- * @id:     The id of the chat to invite the user to.
- * @message:A message displayed to the user when the invitation.
- * @name:   The name of the remote user to send the invitation to.
- *
- * Invite a user to join a chat.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-void purple_serv_chat_invite(PurpleConnection *gc, int id, const char *message, const char *name);
-
-/**
- * purple_serv_chat_leave:
- * @gc:     The connection over which to send the typing notification.
- * @id:     The id of the chat to leave.
- *
- * Called when the user requests leaving a chat.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-void purple_serv_chat_leave(PurpleConnection *gc, int id);
-
-/**
- * purple_serv_chat_send:
- * @gc:     The connection over which to send the typing notification.
- * @id:     The id of the chat to send the message to.
- * @msg:    The message to send to the chat.
- *
- * Send a message to a chat.
- *
- * This protocol function should return a positive value on
- * success. If the message is too big to be sent, return
- * <literal>-E2BIG</literal>. If the account is not connected,
- * return <literal>-ENOTCONN</literal>. If the protocol is unable
- * to send the message for another reason, return some other
- * negative value. You can use one of the valid #errno values, or
- * just big something.
- *
- * Returns:  A positive number or 0 in case of success, a
- *           negative error number in case of failure.
- *
- * Since: 3.0
- */
-PURPLE_AVAILABLE_IN_3_0
-int  purple_serv_chat_send(PurpleConnection *gc, int id, PurpleMessage *msg);
-
-/******************************************************************************
  * Server Interface
  *****************************************************************************/
 
diff --git a/libpurple/server.c b/libpurple/server.c
--- a/libpurple/server.c
+++ b/libpurple/server.c
@@ -132,76 +132,6 @@
 	}
 }
 
-void purple_serv_chat_invite(PurpleConnection *gc, int id, const char *message, const char *name)
-{
-	PurpleAccount *account;
-	PurpleConversation *chat;
-	PurpleConversationManager *manager;
-	PurpleProtocol *protocol = NULL;
-	char *buffy;
-
-	account = purple_connection_get_account(gc);
-	manager = purple_conversation_manager_get_default();
-	chat = purple_conversation_manager_find_chat_by_id(manager, account, id);
-
-	if(chat == NULL)
-		return;
-
-	if(gc)
-		protocol = purple_connection_get_protocol(gc);
-
-	buffy = message && *message ? g_strdup(message) : NULL;
-	purple_signal_emit(purple_conversations_get_handle(), "chat-inviting-user",
-					 chat, name, &buffy);
-
-	if(protocol) {
-		purple_protocol_chat_invite(PURPLE_PROTOCOL_CHAT(protocol), gc, id,
-		                            buffy, name);
-	}
-
-	purple_signal_emit(purple_conversations_get_handle(), "chat-invited-user",
-					 chat, name, buffy);
-
-	g_free(buffy);
-}
-
-/* Ya know, nothing uses this except purple_chat_conversation_finalize(),
- * I think I'll just merge it into that later...
- * Then again, something might want to use this, from outside protocol-land
- * to leave a chat without destroying the conversation.
- */
-void purple_serv_chat_leave(PurpleConnection *gc, int id)
-{
-	PurpleProtocol *protocol;
-
-	protocol = purple_connection_get_protocol(gc);
-	purple_protocol_chat_leave(PURPLE_PROTOCOL_CHAT(protocol), gc, id);
-}
-
-int
-purple_serv_chat_send(PurpleConnection *gc, int id, PurpleMessage *msg) {
-	PurpleAccount *account = NULL;
-	PurpleProtocol *protocol = NULL;
-	PurpleConversation *conversation = NULL;
-	PurpleConversationManager *manager = NULL;
-
-	g_return_val_if_fail(msg != NULL, -EINVAL);
-
-	account = purple_connection_get_account(gc);
-	protocol = purple_connection_get_protocol(gc);
-
-	manager = purple_conversation_manager_get_default();
-	conversation = purple_conversation_manager_find_chat_by_id(manager,
-	                                                           account, id);
-
-	if (PURPLE_PROTOCOL_IMPLEMENTS(protocol, CHAT, send)) {
-		return purple_protocol_chat_send(PURPLE_PROTOCOL_CHAT(protocol), gc,
-		                                 id, conversation, msg);
-	}
-
-	return -EINVAL;
-}
-
 /*
  * woo. i'm actually going to comment this function. isn't that fun. make
  * sure to follow along, kids
diff --git a/po/POTFILES.in b/po/POTFILES.in
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -43,8 +43,6 @@
 libpurple/purpleaddcontactrequest.c
 libpurple/purpleattachment.c
 libpurple/purpleavatar.c
-libpurple/purplechatconversation.c
-libpurple/purplechatuser.c
 libpurple/purplecontact.c
 libpurple/purpleconversation.c
 libpurple/purpleconversationmanager.c
